git.ucc.asn.au
/
uccvend-snackrom.git
/ blobdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
|
commitdiff
|
tree
raw
|
inline
| side by side
Cleanups
[uccvend-snackrom.git]
/
ROM2
/
display.c
diff --git
a/ROM2/display.c
b/ROM2/display.c
index
da51973
..
7da3b10
100644
(file)
--- a/
ROM2/display.c
+++ b/
ROM2/display.c
@@
-1,6
+1,10
@@
/*
* display.c - functions for controlling the display on the vending machine.
*
/*
* display.c - functions for controlling the display on the vending machine.
*
+ *
+ * XXX obsolted - with a backend on the server machine, we don't need to
+ * handle scrolling, etc here. Replaced by display_basic.[cho]
+ *
* Use set_msg(char*) to write a new message to the screen, replacing the
* previous one. The message can be at most 255 characters long. Use
* set_wrap_mode with one of the WRAP_* options in vend.h to set the scrolling
* Use set_msg(char*) to write a new message to the screen, replacing the
* previous one. The message can be at most 255 characters long. Use
* set_wrap_mode with one of the WRAP_* options in vend.h to set the scrolling
@@
-17,17
+21,16
@@
char current_message[256]; /* message that is scrolled or switched between */
u8 msg_length; /* length of current_message */
u8 wrap_mode; /* whether to scroll or alternate between msgs */
u8 scroll_point; /* how far through the message we have scrolled */
u8 msg_length; /* length of current_message */
u8 wrap_mode; /* whether to scroll or alternate between msgs */
u8 scroll_point; /* how far through the message we have scrolled */
+bool have_scrolled; /* true after one scroll (used for scroll_msg())*/
/* private prototypes */
void display_send_byte(char c);
void display_reset();
void display_update();
/* private prototypes */
void display_send_byte(char c);
void display_reset();
void display_update();
-void
set
_msg(char* newmsg, u8 wrap) {
- char* dest = current_message;
+void
append
_msg(char* newmsg, u8 wrap) {
+ char* dest = current_message
+msg_length
;
/* equivalent of a string copy */
/* equivalent of a string copy */
- /* while (dest++ = newmsg++); */
- msg_length = 0;
while (newmsg) {
dest = newmsg;
dest++;
while (newmsg) {
dest = newmsg;
dest++;
@@
-35,24
+38,36
@@
void set_msg(char* newmsg, u8 wrap) {
msg_length++;
}
wrap_mode = wrap;
msg_length++;
}
wrap_mode = wrap;
+}
+
+void set_msg(char* newmsg, u8 wrap) {
+ msg_length = 0;
+ append_msg(newmsg, wrap);
scroll_point = 0;
display_update();
}
scroll_point = 0;
display_update();
}
+void scroll_msg(char* newmsg) {
+ /* puts a message on display and does not return until the message has
+ * scrolled across once.
+ */
+ set_msg(newmsg, WRAP_SCROLL);
+ have_scrolled = 0;
+ while (!have_scrolled);
+}
+
void display_shift() {
/* update the display for WRAP_SCROLL or WRAP_ALTERNATE modes */
switch (wrap_mode) {
case WRAP_SCROLL:
void display_shift() {
/* update the display for WRAP_SCROLL or WRAP_ALTERNATE modes */
switch (wrap_mode) {
case WRAP_SCROLL:
+ case WRAP_ALTERNATE:
scroll_point++;
scroll_point++;
- if (scroll_point >= msg_length) scroll_point = 0;
+ if (scroll_point >= msg_length) {
+ scroll_point = 0;
+ have_scrolled = 1;
+ }
display_update();
break;
display_update();
break;
- case WRAP_ALTERNATE:
- scroll_point += 10;
- if (scroll_point >= msg_length) scroll_point = 0;
- /* the above means that only sets of multiples of 10 characters
- * are shown (excess ones are not) */
- display_update();
}
}
}
}
@@
-90,7
+105,9
@@
void display_update() {
u8 i;
for (i=0; i < 10; i++) {
u8 i;
for (i=0; i < 10; i++) {
- display_buffer[i] = current_message[(i+scroll_point)%msg_length];
+ display_buffer[i] = current_message[
+ (i+(wrap_mode==WRAP_ALTERNATE?scroll_point/10:scroll_point))
+ %msg_length];
}
/* hmmm, will this cause some flickering of the display? */
}
/* hmmm, will this cause some flickering of the display? */
UCC
git Repository :: git.ucc.asn.au