28 |
28 |
29 #ifdef HAVE_WIRINGPI_H |
29 #ifdef HAVE_WIRINGPI_H |
30 |
30 |
31 int current_lines = 0; |
31 int current_lines = 0; |
32 int current_offset = 0; |
32 int current_offset = 0; |
33 int first_time = 1; |
|
34 int previous_key = KEY_NONE; |
|
35 lcd_rows *my_lcd_rows = NULL; |
33 lcd_rows *my_lcd_rows = NULL; |
36 |
34 |
37 extern int lcdHandle; |
35 extern int lcdHandle; |
38 extern sys_config Config; |
36 extern sys_config Config; |
39 |
37 |
88 } |
86 } |
89 } |
87 } |
90 |
88 |
91 |
89 |
92 |
90 |
93 /* |
91 void lcd_buf_step(void) |
94 * This will be called from the main thread if not in edit mode. |
|
95 */ |
|
96 void lcd_buf_show(void) |
|
97 { |
92 { |
98 int i = 0, r = 0, key, doit = FALSE; |
93 int key; |
99 lcd_rows *tmp; |
|
100 |
94 |
101 key = keycheck(); |
95 key = keycheck(); |
102 |
96 |
103 if ((key == KEY_NONE) && (previous_key == KEY_DOWN)) { |
97 if (key == KEY_DOWN) { |
104 if (current_offset < (current_lines - Config.lcd_rows)) |
98 if (current_offset < (current_lines - Config.lcd_rows)) |
105 current_offset = current_offset + Config.lcd_rows; |
99 current_offset = current_offset + Config.lcd_rows; |
106 else |
100 else |
107 current_offset = 0; |
101 current_offset = 0; |
108 doit = TRUE; |
102 lcd_buf_show(); |
109 } |
103 } |
110 if ((key == KEY_NONE) && (previous_key == KEY_UP)) { |
104 if (key == KEY_UP) { |
111 if (current_offset > Config.lcd_rows) |
105 if (current_offset > Config.lcd_rows) |
112 current_offset = current_offset - Config.lcd_rows; |
106 current_offset = current_offset - Config.lcd_rows; |
113 else |
107 else |
114 current_offset = (current_lines - Config.lcd_rows); |
108 current_offset = (current_lines - Config.lcd_rows); |
115 doit = TRUE; |
109 lcd_buf_show(); |
116 } |
110 } |
117 previous_key = key; |
111 } |
118 |
112 |
119 |
113 |
120 /* |
|
121 * Make sure the display works when the program starts. |
|
122 */ |
|
123 if (first_time) { |
|
124 first_time = 0; |
|
125 doit = TRUE; |
|
126 } |
|
127 |
114 |
128 if (! doit) |
115 /* |
129 return; |
116 * This will be called from the main thread every second. |
|
117 */ |
|
118 void lcd_buf_show(void) |
|
119 { |
|
120 int i = 0, r = 0; |
|
121 lcd_rows *tmp; |
130 |
122 |
131 for (tmp = my_lcd_rows; tmp; tmp = tmp->next) { |
123 for (tmp = my_lcd_rows; tmp; tmp = tmp->next) { |
132 if (i == current_offset) |
124 if (i == current_offset) |
133 break; |
125 break; |
134 i++; |
126 i++; |