diff options
author | Jens Arnold <amiconn@rockbox.org> | 2004-10-16 00:07:43 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2004-10-16 00:07:43 +0000 |
commit | cc8cff2ec02caf29b7d0cf565e1f9e2ebd9b0e99 (patch) | |
tree | a5427744a2aa55546f3d5982e15bed2a8d5e5f49 /apps/plugins | |
parent | 4a5df8e8d178702d603bd7cd185525c7ff6a3064 (diff) | |
download | rockbox-cc8cff2ec02caf29b7d0cf565e1f9e2ebd9b0e99.tar.gz rockbox-cc8cff2ec02caf29b7d0cf565e1f9e2ebd9b0e99.zip |
Plugin rework 1: (most) Compile-time keyboard configuration, for Ondio adaption. (all) Now using the default event handler, standard placement is now in switch() default case. (snow) Made USB aware. (video) Added contrast setting to Ondio version.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5291 a1c6a512-1295-4272-9138-f99709370657
Diffstat (limited to 'apps/plugins')
-rw-r--r-- | apps/plugins/SOURCES | 9 | ||||
-rw-r--r-- | apps/plugins/battery_test.c | 34 | ||||
-rw-r--r-- | apps/plugins/jpeg.c | 13 | ||||
-rw-r--r-- | apps/plugins/metronome.c | 11 | ||||
-rw-r--r-- | apps/plugins/rockblox.c | 12 | ||||
-rw-r--r-- | apps/plugins/snow.c | 8 | ||||
-rw-r--r-- | apps/plugins/stopwatch.c | 71 | ||||
-rw-r--r-- | apps/plugins/video.c | 45 | ||||
-rw-r--r-- | apps/plugins/viewer.c | 273 |
9 files changed, 257 insertions, 219 deletions
diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index 494a4a631a..80a6fde2e0 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES | |||
@@ -1,4 +1,5 @@ | |||
1 | /* plugins common to both Player+Recorder model */ | 1 | /* plugins common to both Player+Recorder model */ |
2 | battery_test.c | ||
2 | favorites.c | 3 | favorites.c |
3 | firmware_flash.c | 4 | firmware_flash.c |
4 | helloworld.c | 5 | helloworld.c |
@@ -6,20 +7,16 @@ metronome.c | |||
6 | rockbox_flash.c | 7 | rockbox_flash.c |
7 | search.c | 8 | search.c |
8 | sort.c | 9 | sort.c |
9 | vbrfix.c | ||
10 | #if CONFIG_KEYPAD != ONDIO_PAD | ||
11 | /* gradually bring in the ones not working yet */ | ||
12 | battery_test.c | ||
13 | stopwatch.c | 10 | stopwatch.c |
11 | vbrfix.c | ||
14 | viewer.c | 12 | viewer.c |
15 | #endif /* #if CONFIG_KEYPAD != ONDIO_PAD */ | ||
16 | 13 | ||
17 | #ifdef HAVE_LCD_BITMAP /* recorder model only */ | 14 | #ifdef HAVE_LCD_BITMAP /* recorder model only */ |
18 | grayscale.c | 15 | grayscale.c |
19 | jpeg.c | 16 | jpeg.c |
20 | rockblox.c | 17 | rockblox.c |
21 | snow.c | 18 | snow.c |
22 | video.c | 19 | video.c |
23 | #if CONFIG_KEYPAD != ONDIO_PAD | 20 | #if CONFIG_KEYPAD != ONDIO_PAD |
24 | /* gradually bring in the ones not working yet */ | 21 | /* gradually bring in the ones not working yet */ |
25 | bounce.c | 22 | bounce.c |
diff --git a/apps/plugins/battery_test.c b/apps/plugins/battery_test.c index 04be9b0070..bc6e580dcc 100644 --- a/apps/plugins/battery_test.c +++ b/apps/plugins/battery_test.c | |||
@@ -29,6 +29,16 @@ | |||
29 | to watch. | 29 | to watch. |
30 | */ | 30 | */ |
31 | 31 | ||
32 | /* variable button definitions */ | ||
33 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
34 | #define BATTERY_TEST_QUIT BUTTON_ON | ||
35 | #define BATTERY_TEST_QUIT2 BUTTON_OFF | ||
36 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
37 | #define BATTERY_TEST_QUIT BUTTON_OFF | ||
38 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
39 | #define BATTERY_TEST_QUIT BUTTON_STOP | ||
40 | #endif | ||
41 | |||
32 | static struct plugin_api* rb; | 42 | static struct plugin_api* rb; |
33 | 43 | ||
34 | void* buffer; | 44 | void* buffer; |
@@ -94,19 +104,19 @@ enum plugin_status loop(void) | |||
94 | /* simulate 128kbit/s (16kbyte/s) playback duration */ | 104 | /* simulate 128kbit/s (16kbyte/s) playback duration */ |
95 | do { | 105 | do { |
96 | button = rb->button_get_w_tmo(HZ * (buffersize / 16384) - HZ*10); | 106 | button = rb->button_get_w_tmo(HZ * (buffersize / 16384) - HZ*10); |
97 | |||
98 | /* Check if we shall exit the plugin */ | ||
99 | if (button==BUTTON_ON || | ||
100 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
101 | button==BUTTON_OFF | ||
102 | #else | ||
103 | button==BUTTON_STOP | ||
104 | #endif | ||
105 | ) | ||
106 | return PLUGIN_OK; | ||
107 | 107 | ||
108 | if (rb->default_event_handler(button) == SYS_USB_CONNECTED) { | 108 | switch (button) { |
109 | return PLUGIN_USB_CONNECTED; | 109 | /* Check if we shall exit the plugin */ |
110 | case BATTERY_TEST_QUIT: | ||
111 | #ifdef BATTERY_TEST_QUIT2 | ||
112 | case BATTERY_TEST_QUIT2: | ||
113 | #endif | ||
114 | return PLUGIN_OK; | ||
115 | |||
116 | default: | ||
117 | if (rb->default_event_handler(button) == SYS_USB_CONNECTED) | ||
118 | return PLUGIN_USB_CONNECTED; | ||
119 | break; | ||
110 | } | 120 | } |
111 | } while (!(button&(BUTTON_REL|BUTTON_REPEAT))); | 121 | } while (!(button&(BUTTON_REL|BUTTON_REPEAT))); |
112 | 122 | ||
diff --git a/apps/plugins/jpeg.c b/apps/plugins/jpeg.c index 7d8fab7456..c601712b11 100644 --- a/apps/plugins/jpeg.c +++ b/apps/plugins/jpeg.c | |||
@@ -33,10 +33,12 @@ | |||
33 | #if CONFIG_KEYPAD == RECORDER_PAD | 33 | #if CONFIG_KEYPAD == RECORDER_PAD |
34 | #define JPEG_ZOOM_IN BUTTON_PLAY | 34 | #define JPEG_ZOOM_IN BUTTON_PLAY |
35 | #define JPEG_ZOOM_OUT BUTTON_ON | 35 | #define JPEG_ZOOM_OUT BUTTON_ON |
36 | |||
36 | #elif CONFIG_KEYPAD == ONDIO_PAD | 37 | #elif CONFIG_KEYPAD == ONDIO_PAD |
37 | #define JPEG_ZOOM_PRE BUTTON_MENU | 38 | #define JPEG_ZOOM_PRE BUTTON_MENU |
38 | #define JPEG_ZOOM_IN (BUTTON_MENU | BUTTON_REL) | 39 | #define JPEG_ZOOM_IN (BUTTON_MENU | BUTTON_REL) |
39 | #define JPEG_ZOOM_OUT (BUTTON_MENU | BUTTON_REPEAT) | 40 | #define JPEG_ZOOM_OUT (BUTTON_MENU | BUTTON_REPEAT) |
41 | |||
40 | #endif | 42 | #endif |
41 | 43 | ||
42 | /******************************* Globals ***********************************/ | 44 | /******************************* Globals ***********************************/ |
@@ -1527,10 +1529,6 @@ int scroll_bmp(struct t_disp* pdisp) | |||
1527 | 1529 | ||
1528 | button = rb->button_get(true); | 1530 | button = rb->button_get(true); |
1529 | 1531 | ||
1530 | if (rb->default_event_handler_ex(button, cleanup, NULL) | ||
1531 | == SYS_USB_CONNECTED) | ||
1532 | return PLUGIN_USB_CONNECTED; | ||
1533 | |||
1534 | switch(button) | 1532 | switch(button) |
1535 | { | 1533 | { |
1536 | case BUTTON_LEFT: | 1534 | case BUTTON_LEFT: |
@@ -1617,6 +1615,13 @@ int scroll_bmp(struct t_disp* pdisp) | |||
1617 | 1615 | ||
1618 | case BUTTON_OFF: | 1616 | case BUTTON_OFF: |
1619 | return PLUGIN_OK; | 1617 | return PLUGIN_OK; |
1618 | |||
1619 | default: | ||
1620 | if (rb->default_event_handler_ex(button, cleanup, NULL) | ||
1621 | == SYS_USB_CONNECTED) | ||
1622 | return PLUGIN_USB_CONNECTED; | ||
1623 | break; | ||
1624 | |||
1620 | } /* switch */ | 1625 | } /* switch */ |
1621 | 1626 | ||
1622 | if (button != BUTTON_NONE) | 1627 | if (button != BUTTON_NONE) |
diff --git a/apps/plugins/metronome.c b/apps/plugins/metronome.c index 2dd7c8950c..cf5113cadf 100644 --- a/apps/plugins/metronome.c +++ b/apps/plugins/metronome.c | |||
@@ -235,10 +235,6 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){ | |||
235 | 235 | ||
236 | button = rb->button_get(true); | 236 | button = rb->button_get(true); |
237 | 237 | ||
238 | if (rb->default_event_handler_ex(button, cleanup, NULL) | ||
239 | == SYS_USB_CONNECTED) | ||
240 | return PLUGIN_USB_CONNECTED; | ||
241 | |||
242 | switch (button) { | 238 | switch (button) { |
243 | 239 | ||
244 | case METRONOME_QUIT: | 240 | case METRONOME_QUIT: |
@@ -294,6 +290,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter){ | |||
294 | calc_period(); | 290 | calc_period(); |
295 | draw_display(); | 291 | draw_display(); |
296 | break; | 292 | break; |
293 | |||
294 | default: | ||
295 | if (rb->default_event_handler_ex(button, cleanup, NULL) | ||
296 | == SYS_USB_CONNECTED) | ||
297 | return PLUGIN_USB_CONNECTED; | ||
298 | break; | ||
299 | |||
297 | } | 300 | } |
298 | } | 301 | } |
299 | } | 302 | } |
diff --git a/apps/plugins/rockblox.c b/apps/plugins/rockblox.c index f90ced2450..eac6563601 100644 --- a/apps/plugins/rockblox.c +++ b/apps/plugins/rockblox.c | |||
@@ -318,12 +318,15 @@ static void move_down(void) | |||
318 | 318 | ||
319 | static int game_loop(void) | 319 | static int game_loop(void) |
320 | { | 320 | { |
321 | int button; | ||
322 | |||
321 | while(1) | 323 | while(1) |
322 | { | 324 | { |
323 | int count = 0; | 325 | int count = 0; |
324 | while(count * 300 < level_speeds[level]) | 326 | while(count * 300 < level_speeds[level]) |
325 | { | 327 | { |
326 | switch(rb->button_get_w_tmo(HZ/10)) | 328 | button = rb->button_get_w_tmo(HZ/10); |
329 | switch(button) | ||
327 | { | 330 | { |
328 | case BUTTON_OFF: | 331 | case BUTTON_OFF: |
329 | return PLUGIN_OK; | 332 | return PLUGIN_OK; |
@@ -348,9 +351,10 @@ static int game_loop(void) | |||
348 | move_down(); | 351 | move_down(); |
349 | break; | 352 | break; |
350 | 353 | ||
351 | case SYS_USB_CONNECTED: | 354 | default: |
352 | rb->usb_screen(); | 355 | if (rb->default_event_handler(button) == SYS_USB_CONNECTED) |
353 | return PLUGIN_USB_CONNECTED; | 356 | return PLUGIN_USB_CONNECTED; |
357 | break; | ||
354 | } | 358 | } |
355 | 359 | ||
356 | count++; | 360 | count++; |
diff --git a/apps/plugins/snow.c b/apps/plugins/snow.c index df9966eb38..77ec350654 100644 --- a/apps/plugins/snow.c +++ b/apps/plugins/snow.c | |||
@@ -93,6 +93,7 @@ static void snow_init(void) | |||
93 | 93 | ||
94 | enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | 94 | enum plugin_status plugin_start(struct plugin_api* api, void* parameter) |
95 | { | 95 | { |
96 | int button; | ||
96 | TEST_PLUGIN_API(api); | 97 | TEST_PLUGIN_API(api); |
97 | (void)(parameter); | 98 | (void)(parameter); |
98 | rb = api; | 99 | rb = api; |
@@ -103,8 +104,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
103 | rb->lcd_update(); | 104 | rb->lcd_update(); |
104 | rb->sleep(HZ/20); | 105 | rb->sleep(HZ/20); |
105 | 106 | ||
106 | if (rb->button_get(false) == BUTTON_OFF) | 107 | button = rb->button_get(false); |
108 | |||
109 | if (button == BUTTON_OFF) | ||
107 | return false; | 110 | return false; |
111 | else | ||
112 | if (rb->default_event_handler(button) == SYS_USB_CONNECTED) | ||
113 | return PLUGIN_USB_CONNECTED; | ||
108 | } | 114 | } |
109 | } | 115 | } |
110 | 116 | ||
diff --git a/apps/plugins/stopwatch.c b/apps/plugins/stopwatch.c index 370a1b51a6..6157dda038 100644 --- a/apps/plugins/stopwatch.c +++ b/apps/plugins/stopwatch.c | |||
@@ -31,6 +31,30 @@ | |||
31 | #define MAX_LAPS 10 | 31 | #define MAX_LAPS 10 |
32 | #define MAX_SCROLL (MAX_LAPS - LAP_LINES) | 32 | #define MAX_SCROLL (MAX_LAPS - LAP_LINES) |
33 | 33 | ||
34 | /* variable button definitions */ | ||
35 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
36 | #define STOPWATCH_QUIT BUTTON_OFF | ||
37 | #define STOPWATCH_START_STOP BUTTON_PLAY | ||
38 | #define STOPWATCH_RESET_TIMER BUTTON_LEFT | ||
39 | #define STOPWATCH_LAP_TIMER BUTTON_ON | ||
40 | #define STOPWATCH_SCROLL_UP BUTTON_UP | ||
41 | #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN | ||
42 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
43 | #define STOPWATCH_QUIT BUTTON_OFF | ||
44 | #define STOPWATCH_START_STOP BUTTON_RIGHT | ||
45 | #define STOPWATCH_RESET_TIMER BUTTON_LEFT | ||
46 | #define STOPWATCH_LAP_TIMER BUTTON_MENU | ||
47 | #define STOPWATCH_SCROLL_UP BUTTON_UP | ||
48 | #define STOPWATCH_SCROLL_DOWN BUTTON_DOWN | ||
49 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
50 | #define STOPWATCH_QUIT BUTTON_MENU | ||
51 | #define STOPWATCH_START_STOP BUTTON_PLAY | ||
52 | #define STOPWATCH_RESET_TIMER BUTTON_STOP | ||
53 | #define STOPWATCH_LAP_TIMER BUTTON_ON | ||
54 | #define STOPWATCH_SCROLL_UP BUTTON_RIGHT | ||
55 | #define STOPWATCH_SCROLL_DOWN BUTTON_LEFT | ||
56 | #endif | ||
57 | |||
34 | static struct plugin_api* rb; | 58 | static struct plugin_api* rb; |
35 | 59 | ||
36 | static int stopwatch = 0; | 60 | static int stopwatch = 0; |
@@ -102,17 +126,13 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
102 | switch (button) | 126 | switch (button) |
103 | { | 127 | { |
104 | 128 | ||
105 | /* OFF/MENU key to exit */ | 129 | /* exit */ |
106 | #if CONFIG_KEYPAD == RECORDER_PAD | 130 | case STOPWATCH_QUIT: |
107 | case BUTTON_OFF: | ||
108 | #else | ||
109 | case BUTTON_MENU: | ||
110 | #endif | ||
111 | done = true; | 131 | done = true; |
112 | break; | 132 | break; |
113 | 133 | ||
114 | /* PLAY = Stop/Start toggle */ | 134 | /* Stop/Start toggle */ |
115 | case BUTTON_PLAY: | 135 | case STOPWATCH_START_STOP: |
116 | counting = ! counting; | 136 | counting = ! counting; |
117 | if (counting) | 137 | if (counting) |
118 | { | 138 | { |
@@ -126,12 +146,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
126 | } | 146 | } |
127 | break; | 147 | break; |
128 | 148 | ||
129 | /* LEFT = Reset timer */ | 149 | /* Reset timer */ |
130 | #if CONFIG_KEYPAD == RECORDER_PAD | 150 | case STOPWATCH_RESET_TIMER: |
131 | case BUTTON_LEFT: | ||
132 | #else | ||
133 | case BUTTON_STOP: | ||
134 | #endif | ||
135 | if (!counting) | 151 | if (!counting) |
136 | { | 152 | { |
137 | prev_total = 0; | 153 | prev_total = 0; |
@@ -140,19 +156,15 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
140 | } | 156 | } |
141 | break; | 157 | break; |
142 | 158 | ||
143 | /* ON = Lap timer */ | 159 | /* Lap timer */ |
144 | case BUTTON_ON: | 160 | case STOPWATCH_LAP_TIMER: |
145 | lap_times[curr_lap%MAX_LAPS] = stopwatch; | 161 | lap_times[curr_lap%MAX_LAPS] = stopwatch; |
146 | curr_lap++; | 162 | curr_lap++; |
147 | update_lap = true; | 163 | update_lap = true; |
148 | break; | 164 | break; |
149 | 165 | ||
150 | /* UP (RIGHT/+) = Scroll Lap timer up */ | 166 | /* Scroll Lap timer up */ |
151 | #if CONFIG_KEYPAD == RECORDER_PAD | 167 | case STOPWATCH_SCROLL_UP: |
152 | case BUTTON_UP: | ||
153 | #else | ||
154 | case BUTTON_RIGHT: | ||
155 | #endif | ||
156 | if (lap_scroll > 0) | 168 | if (lap_scroll > 0) |
157 | { | 169 | { |
158 | lap_scroll --; | 170 | lap_scroll --; |
@@ -160,12 +172,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
160 | } | 172 | } |
161 | break; | 173 | break; |
162 | 174 | ||
163 | /* DOWN (LEFT/-) = Scroll Lap timer down */ | 175 | /* Scroll Lap timer down */ |
164 | #if CONFIG_KEYPAD == RECORDER_PAD | 176 | case STOPWATCH_SCROLL_DOWN: |
165 | case BUTTON_DOWN: | ||
166 | #else | ||
167 | case BUTTON_LEFT: | ||
168 | #endif | ||
169 | if ((lap_scroll < curr_lap - LAP_LINES) && | 177 | if ((lap_scroll < curr_lap - LAP_LINES) && |
170 | (lap_scroll < MAX_SCROLL) ) | 178 | (lap_scroll < MAX_SCROLL) ) |
171 | { | 179 | { |
@@ -174,9 +182,10 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter) | |||
174 | } | 182 | } |
175 | break; | 183 | break; |
176 | 184 | ||
177 | case SYS_USB_CONNECTED: | 185 | default: |
178 | rb->usb_screen(); | 186 | if (rb->default_event_handler(button) == SYS_USB_CONNECTED) |
179 | return PLUGIN_USB_CONNECTED; | 187 | return PLUGIN_USB_CONNECTED; |
188 | break; | ||
180 | } | 189 | } |
181 | 190 | ||
182 | if (counting) | 191 | if (counting) |
diff --git a/apps/plugins/video.c b/apps/plugins/video.c index e63ef1c373..de05ba4af4 100644 --- a/apps/plugins/video.c +++ b/apps/plugins/video.c | |||
@@ -36,9 +36,17 @@ | |||
36 | #if CONFIG_KEYPAD == RECORDER_PAD | 36 | #if CONFIG_KEYPAD == RECORDER_PAD |
37 | #define VIDEO_STOP_SEEK BUTTON_PLAY | 37 | #define VIDEO_STOP_SEEK BUTTON_PLAY |
38 | #define VIDEO_RESUME BUTTON_PLAY | 38 | #define VIDEO_RESUME BUTTON_PLAY |
39 | #define VIDEO_DEBUG BUTTON_F1 | ||
40 | #define VIDEO_CONTRAST_DOWN BUTTON_F2 | ||
41 | #define VIDEO_CONTRAST_UP BUTTON_F3 | ||
42 | |||
39 | #elif CONFIG_KEYPAD == ONDIO_PAD | 43 | #elif CONFIG_KEYPAD == ONDIO_PAD |
40 | #define VIDEO_STOP_SEEK BUTTON_MENU | 44 | #define VIDEO_STOP_SEEK_PRE BUTTON_MENU |
45 | #define VIDEO_STOP_SEEK (BUTTON_MENU | BUTTON_REL) | ||
41 | #define VIDEO_RESUME BUTTON_RIGHT | 46 | #define VIDEO_RESUME BUTTON_RIGHT |
47 | #define VIDEO_CONTRAST_DOWN (BUTTON_MENU | BUTTON_DOWN) | ||
48 | #define VIDEO_CONTRAST_UP (BUTTON_MENU | BUTTON_UP) | ||
49 | |||
42 | #endif | 50 | #endif |
43 | /****************** constants ******************/ | 51 | /****************** constants ******************/ |
44 | 52 | ||
@@ -285,7 +293,6 @@ void ChangeVolume(int delta) | |||
285 | } | 293 | } |
286 | 294 | ||
287 | 295 | ||
288 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
289 | // helper function to change the LCD contrast by a certain amount, +/- | 296 | // helper function to change the LCD contrast by a certain amount, +/- |
290 | void ChangeContrast(int delta) | 297 | void ChangeContrast(int delta) |
291 | { | 298 | { |
@@ -313,7 +320,6 @@ void ChangeContrast(int delta) | |||
313 | } | 320 | } |
314 | } | 321 | } |
315 | } | 322 | } |
316 | #endif | ||
317 | 323 | ||
318 | 324 | ||
319 | // sync the video to the current audio | 325 | // sync the video to the current audio |
@@ -563,6 +569,7 @@ void Cleanup(void *fd) | |||
563 | int PlayTick(int fd) | 569 | int PlayTick(int fd) |
564 | { | 570 | { |
565 | int button; | 571 | int button; |
572 | static int lastbutton = 0; | ||
566 | int avail_audio = -1, avail_video = -1; | 573 | int avail_audio = -1, avail_video = -1; |
567 | int retval = 1; | 574 | int retval = 1; |
568 | int filepos; | 575 | int filepos; |
@@ -667,11 +674,6 @@ int PlayTick(int fd) | |||
667 | else | 674 | else |
668 | filepos -= Available(gBuf.pReadAudio); // else audio | 675 | filepos -= Available(gBuf.pReadAudio); // else audio |
669 | 676 | ||
670 | if (rb->default_event_handler_ex(button, Cleanup, &fd) | ||
671 | == SYS_USB_CONNECTED) | ||
672 | retval = -1; // signal "aborted" to caller | ||
673 | // SYS_USB_CONNECTED won't be catched again by the switch() | ||
674 | |||
675 | switch (button) | 677 | switch (button) |
676 | { // set exit conditions | 678 | { // set exit conditions |
677 | case BUTTON_OFF: | 679 | case BUTTON_OFF: |
@@ -686,6 +688,10 @@ int PlayTick(int fd) | |||
686 | retval = 0; // signal "stopped" to caller | 688 | retval = 0; // signal "stopped" to caller |
687 | break; | 689 | break; |
688 | case VIDEO_STOP_SEEK: | 690 | case VIDEO_STOP_SEEK: |
691 | #ifdef VIDEO_STOP_SEEK_PRE | ||
692 | if (lastbutton != VIDEO_STOP_SEEK_PRE) | ||
693 | break; | ||
694 | #endif | ||
689 | if (gPlay.bSeeking) | 695 | if (gPlay.bSeeking) |
690 | { | 696 | { |
691 | gPlay.bSeeking = false; | 697 | gPlay.bSeeking = false; |
@@ -757,25 +763,32 @@ int PlayTick(int fd) | |||
757 | else | 763 | else |
758 | gPlay.nSeekAcc++; | 764 | gPlay.nSeekAcc++; |
759 | break; | 765 | break; |
760 | #if CONFIG_KEYPAD == RECORDER_PAD | 766 | #ifdef VIDEO_DEBUG |
761 | case BUTTON_F1: // debug key | 767 | case VIDEO_DEBUG: // debug key |
762 | case BUTTON_F1 | BUTTON_REPEAT: | 768 | case VIDEO_DEBUG | BUTTON_REPEAT: |
763 | DrawBuf(); // show buffer status | 769 | DrawBuf(); // show buffer status |
764 | gPlay.nTimeOSD = 30; | 770 | gPlay.nTimeOSD = 30; |
765 | gPlay.bDirtyOSD = true; | 771 | gPlay.bDirtyOSD = true; |
766 | break; | 772 | break; |
767 | case BUTTON_F2: // contrast down | 773 | #endif |
768 | case BUTTON_F2 | BUTTON_REPEAT: | 774 | case VIDEO_CONTRAST_DOWN: // contrast down |
775 | case VIDEO_CONTRAST_DOWN | BUTTON_REPEAT: | ||
769 | if (gPlay.bHasVideo) | 776 | if (gPlay.bHasVideo) |
770 | ChangeContrast(-1); | 777 | ChangeContrast(-1); |
771 | break; | 778 | break; |
772 | case BUTTON_F3: // contrast up | 779 | case VIDEO_CONTRAST_UP: // contrast up |
773 | case BUTTON_F3 | BUTTON_REPEAT: | 780 | case VIDEO_CONTRAST_UP | BUTTON_REPEAT: |
774 | if (gPlay.bHasVideo) | 781 | if (gPlay.bHasVideo) |
775 | ChangeContrast(1); | 782 | ChangeContrast(1); |
776 | break; | 783 | break; |
777 | #endif | 784 | default: |
785 | if (rb->default_event_handler_ex(button, Cleanup, &fd) | ||
786 | == SYS_USB_CONNECTED) | ||
787 | retval = -1; // signal "aborted" to caller | ||
788 | break; | ||
778 | } | 789 | } |
790 | |||
791 | lastbutton = button; | ||
779 | } /* if (button != BUTTON_NONE) */ | 792 | } /* if (button != BUTTON_NONE) */ |
780 | 793 | ||
781 | 794 | ||
diff --git a/apps/plugins/viewer.c b/apps/plugins/viewer.c index eb15127704..4628f8e7b3 100644 --- a/apps/plugins/viewer.c +++ b/apps/plugins/viewer.c | |||
@@ -56,6 +56,50 @@ | |||
56 | #define NEED_SCROLLBAR() ((!(ONE_SCREEN_FITS_ALL())) && \ | 56 | #define NEED_SCROLLBAR() ((!(ONE_SCREEN_FITS_ALL())) && \ |
57 | (view_mode==WIDE? scrollbar_mode[WIDE]==SB_ON: scrollbar_mode[NARROW]==SB_ON)) | 57 | (view_mode==WIDE? scrollbar_mode[WIDE]==SB_ON: scrollbar_mode[NARROW]==SB_ON)) |
58 | 58 | ||
59 | /* variable button definitions */ | ||
60 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
61 | #define VIEWER_QUIT BUTTON_OFF | ||
62 | #define VIEWER_PAGE_UP BUTTON_UP | ||
63 | #define VIEWER_PAGE_DOWN BUTTON_DOWN | ||
64 | #define VIEWER_SCREEN_LEFT BUTTON_LEFT | ||
65 | #define VIEWER_SCREEN_RIGHT BUTTON_RIGHT | ||
66 | #define VIEWER_MODE_WRAP BUTTON_F1 | ||
67 | #define VIEWER_MODE_LINE BUTTON_F2 | ||
68 | #define VIEWER_MODE_WIDTH BUTTON_F3 | ||
69 | /* Recorder/ Ondio only */ | ||
70 | #define VIEWER_MODE_PAGE (BUTTON_ON | BUTTON_F1) | ||
71 | #define VIEWER_MODE_SCROLLBAR (BUTTON_ON | BUTTON_F3) | ||
72 | /* Recorder only */ | ||
73 | #define VIEWER_LINE_UP (BUTTON_ON | BUTTON_UP) | ||
74 | #define VIEWER_LINE_DOWN (BUTTON_ON | BUTTON_DOWN) | ||
75 | #define VIEWER_COLUMN_LEFT (BUTTON_ON | BUTTON_LEFT) | ||
76 | #define VIEWER_COLUMN_RIGHT (BUTTON_ON | BUTTON_RIGHT) | ||
77 | |||
78 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
79 | #define VIEWER_QUIT BUTTON_OFF | ||
80 | #define VIEWER_PAGE_UP BUTTON_UP | ||
81 | #define VIEWER_PAGE_DOWN BUTTON_DOWN | ||
82 | #define VIEWER_SCREEN_LEFT BUTTON_LEFT | ||
83 | #define VIEWER_SCREEN_RIGHT BUTTON_RIGHT | ||
84 | #define VIEWER_MODE_WRAP (BUTTON_MENU | BUTTON_LEFT) | ||
85 | #define VIEWER_MODE_LINE (BUTTON_MENU | BUTTON_UP) | ||
86 | #define VIEWER_MODE_WIDTH (BUTTON_MENU | BUTTON_RIGHT) | ||
87 | /* Recorder/ Ondio only */ | ||
88 | #define VIEWER_MODE_PAGE (BUTTON_MENU | BUTTON_DOWN) | ||
89 | #define VIEWER_MODE_SCROLLBAR (BUTTON_MENU | BUTTON_OFF) | ||
90 | |||
91 | #elif CONFIG_KEYPAD == PLAYER_PAD | ||
92 | #define VIEWER_QUIT BUTTON_STOP | ||
93 | #define VIEWER_PAGE_UP BUTTON_LEFT | ||
94 | #define VIEWER_PAGE_DOWN BUTTON_RIGHT | ||
95 | #define VIEWER_SCREEN_LEFT (BUTTON_MENU | BUTTON_LEFT) | ||
96 | #define VIEWER_SCREEN_RIGHT (BUTTON_MENU | BUTTON_RIGHT) | ||
97 | #define VIEWER_MODE_WRAP (BUTTON_ON | BUTTON_LEFT) | ||
98 | #define VIEWER_MODE_LINE (BUTTON_ON | BUTTON_MENU | BUTTON_RIGHT) | ||
99 | #define VIEWER_MODE_WIDTH (BUTTON_ON | BUTTON_RIGHT) | ||
100 | |||
101 | #endif | ||
102 | |||
59 | enum { | 103 | enum { |
60 | WRAP=0, | 104 | WRAP=0, |
61 | CHOP, | 105 | CHOP, |
@@ -625,8 +669,10 @@ static bool viewer_init(char* file) | |||
625 | return true; | 669 | return true; |
626 | } | 670 | } |
627 | 671 | ||
628 | static void viewer_exit(void) | 672 | static void viewer_exit(void *parameter) |
629 | { | 673 | { |
674 | (void)parameter; | ||
675 | |||
630 | rb->close(fd); | 676 | rb->close(fd); |
631 | } | 677 | } |
632 | 678 | ||
@@ -641,90 +687,10 @@ static int col_limit(int col) | |||
641 | return col; | 687 | return col; |
642 | } | 688 | } |
643 | 689 | ||
644 | #ifdef HAVE_LCD_BITMAP | ||
645 | static int viewer_recorder_on_button(int col) | ||
646 | { | ||
647 | bool exit = false; | ||
648 | |||
649 | while (!exit) { | ||
650 | switch (rb->button_get(true)) { | ||
651 | case BUTTON_ON | BUTTON_F1: | ||
652 | /* Page-overlap mode */ | ||
653 | if (++page_mode == PAGE_MODES) | ||
654 | page_mode = 0; | ||
655 | |||
656 | rb->splash(HZ, true, "%s %s", | ||
657 | page_mode_str[page_mode], | ||
658 | page_mode_str[PAGE_MODES]); | ||
659 | |||
660 | viewer_draw(col); | ||
661 | break; | ||
662 | |||
663 | case BUTTON_ON | BUTTON_F3: | ||
664 | /* Show-scrollbar mode for current view-width mode */ | ||
665 | if (!(ONE_SCREEN_FITS_ALL())) { | ||
666 | if (++scrollbar_mode[view_mode] == SCROLLBAR_MODES) | ||
667 | scrollbar_mode[view_mode] = 0; | ||
668 | |||
669 | init_need_scrollbar(); | ||
670 | viewer_draw(col); | ||
671 | |||
672 | rb->splash(HZ, true, "%s %s (%s %s)", | ||
673 | scrollbar_mode_str[SCROLLBAR_MODES], | ||
674 | scrollbar_mode_str[scrollbar_mode[view_mode]], | ||
675 | view_mode_str[view_mode], | ||
676 | view_mode_str[VIEW_MODES]); | ||
677 | } | ||
678 | viewer_draw(col); | ||
679 | break; | ||
680 | |||
681 | case BUTTON_ON | BUTTON_UP: | ||
682 | case BUTTON_ON | BUTTON_UP | BUTTON_REPEAT: | ||
683 | /* Scroll up one line */ | ||
684 | viewer_scroll_up(); | ||
685 | viewer_draw(col); | ||
686 | break; | ||
687 | |||
688 | case BUTTON_ON | BUTTON_DOWN: | ||
689 | case BUTTON_ON | BUTTON_DOWN | BUTTON_REPEAT: | ||
690 | /* Scroll down one line */ | ||
691 | if (next_screen_ptr != NULL) | ||
692 | screen_top_ptr = next_line_ptr; | ||
693 | |||
694 | viewer_draw(col); | ||
695 | break; | ||
696 | |||
697 | case BUTTON_ON | BUTTON_LEFT: | ||
698 | case BUTTON_ON | BUTTON_LEFT | BUTTON_REPEAT: | ||
699 | /* Scroll left one column */ | ||
700 | col--; | ||
701 | col = col_limit(col); | ||
702 | viewer_draw(col); | ||
703 | break; | ||
704 | |||
705 | case BUTTON_ON | BUTTON_RIGHT: | ||
706 | case BUTTON_ON | BUTTON_RIGHT | BUTTON_REPEAT: | ||
707 | /* Scroll right one column */ | ||
708 | col++; | ||
709 | col = col_limit(col); | ||
710 | viewer_draw(col); | ||
711 | break; | ||
712 | |||
713 | case BUTTON_ON | BUTTON_REL: | ||
714 | case BUTTON_ON | BUTTON_DOWN | BUTTON_REL: | ||
715 | case BUTTON_ON | BUTTON_UP | BUTTON_REL: | ||
716 | /* Drop out of this loop (when ON btn released) */ | ||
717 | exit = true; | ||
718 | break; | ||
719 | } | ||
720 | } | ||
721 | return col; | ||
722 | } | ||
723 | #endif | ||
724 | |||
725 | enum plugin_status plugin_start(struct plugin_api* api, void* file) | 690 | enum plugin_status plugin_start(struct plugin_api* api, void* file) |
726 | { | 691 | { |
727 | bool exit=false; | 692 | bool exit=false; |
693 | int button; | ||
728 | int col = 0; | 694 | int col = 0; |
729 | int i; | 695 | int i; |
730 | int ok; | 696 | int ok; |
@@ -738,28 +704,22 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file) | |||
738 | ok = viewer_init(file); | 704 | ok = viewer_init(file); |
739 | if (!ok) { | 705 | if (!ok) { |
740 | rb->splash(HZ, false, "Error"); | 706 | rb->splash(HZ, false, "Error"); |
741 | viewer_exit(); | 707 | viewer_exit(NULL); |
742 | return PLUGIN_OK; | 708 | return PLUGIN_OK; |
743 | } | 709 | } |
744 | 710 | ||
745 | viewer_draw(col); | 711 | viewer_draw(col); |
746 | 712 | ||
747 | while (!exit) { | 713 | while (!exit) { |
748 | switch (rb->button_get(true)) { | 714 | button = rb->button_get(true); |
749 | #if CONFIG_KEYPAD == RECORDER_PAD | 715 | switch (button) { |
750 | case BUTTON_OFF: | 716 | |
751 | #else | 717 | case VIEWER_QUIT: |
752 | case BUTTON_STOP: | 718 | viewer_exit(NULL); |
753 | #endif | ||
754 | viewer_exit(); | ||
755 | exit = true; | 719 | exit = true; |
756 | break; | 720 | break; |
757 | 721 | ||
758 | #if CONFIG_KEYPAD == RECORDER_PAD | 722 | case VIEWER_MODE_WRAP: |
759 | case BUTTON_F1: | ||
760 | #else | ||
761 | case BUTTON_ON | BUTTON_LEFT: | ||
762 | #endif | ||
763 | /* Word-wrap mode: WRAP or CHOP */ | 723 | /* Word-wrap mode: WRAP or CHOP */ |
764 | if (++word_mode == WORD_MODES) | 724 | if (++word_mode == WORD_MODES) |
765 | word_mode = 0; | 725 | word_mode = 0; |
@@ -776,11 +736,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file) | |||
776 | viewer_draw(col); | 736 | viewer_draw(col); |
777 | break; | 737 | break; |
778 | 738 | ||
779 | #if CONFIG_KEYPAD == RECORDER_PAD | 739 | case VIEWER_MODE_LINE: |
780 | case BUTTON_F2: | ||
781 | #else | ||
782 | case BUTTON_ON | BUTTON_MENU | BUTTON_RIGHT: | ||
783 | #endif | ||
784 | /* Line-paragraph mode: NORMAL, JOIN or EXPAND */ | 740 | /* Line-paragraph mode: NORMAL, JOIN or EXPAND */ |
785 | if (++line_mode == LINE_MODES) | 741 | if (++line_mode == LINE_MODES) |
786 | line_mode = 0; | 742 | line_mode = 0; |
@@ -802,11 +758,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file) | |||
802 | viewer_draw(col); | 758 | viewer_draw(col); |
803 | break; | 759 | break; |
804 | 760 | ||
805 | #if CONFIG_KEYPAD == RECORDER_PAD | 761 | case VIEWER_MODE_WIDTH: |
806 | case BUTTON_F3: | ||
807 | #else | ||
808 | case BUTTON_ON | BUTTON_RIGHT: | ||
809 | #endif | ||
810 | /* View-width mode: NARROW or WIDE */ | 762 | /* View-width mode: NARROW or WIDE */ |
811 | if (line_mode == JOIN) | 763 | if (line_mode == JOIN) |
812 | rb->splash(HZ, true, "(no %s %s)", | 764 | rb->splash(HZ, true, "(no %s %s)", |
@@ -843,13 +795,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file) | |||
843 | viewer_draw(col); | 795 | viewer_draw(col); |
844 | break; | 796 | break; |
845 | 797 | ||
846 | #if CONFIG_KEYPAD == RECORDER_PAD | 798 | case VIEWER_PAGE_UP: |
847 | case BUTTON_UP: | 799 | case VIEWER_PAGE_UP | BUTTON_REPEAT: |
848 | case BUTTON_UP | BUTTON_REPEAT: | ||
849 | #else | ||
850 | case BUTTON_LEFT: | ||
851 | case BUTTON_LEFT | BUTTON_REPEAT: | ||
852 | #endif | ||
853 | /* Page up */ | 800 | /* Page up */ |
854 | #ifdef HAVE_LCD_BITMAP | 801 | #ifdef HAVE_LCD_BITMAP |
855 | for (i = page_mode==OVERLAP? 1:0; i < display_lines; i++) | 802 | for (i = page_mode==OVERLAP? 1:0; i < display_lines; i++) |
@@ -861,13 +808,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file) | |||
861 | viewer_draw(col); | 808 | viewer_draw(col); |
862 | break; | 809 | break; |
863 | 810 | ||
864 | #if CONFIG_KEYPAD == RECORDER_PAD | 811 | case VIEWER_PAGE_DOWN: |
865 | case BUTTON_DOWN: | 812 | case VIEWER_PAGE_DOWN | BUTTON_REPEAT: |
866 | case BUTTON_DOWN | BUTTON_REPEAT: | ||
867 | #else | ||
868 | case BUTTON_RIGHT: | ||
869 | case BUTTON_RIGHT | BUTTON_REPEAT: | ||
870 | #endif | ||
871 | /* Page down */ | 813 | /* Page down */ |
872 | if (next_screen_ptr != NULL) | 814 | if (next_screen_ptr != NULL) |
873 | screen_top_ptr = next_screen_to_draw_ptr; | 815 | screen_top_ptr = next_screen_to_draw_ptr; |
@@ -875,13 +817,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file) | |||
875 | viewer_draw(col); | 817 | viewer_draw(col); |
876 | break; | 818 | break; |
877 | 819 | ||
878 | #if CONFIG_KEYPAD == RECORDER_PAD | 820 | case VIEWER_SCREEN_LEFT: |
879 | case BUTTON_LEFT: | 821 | case VIEWER_SCREEN_LEFT | BUTTON_REPEAT: |
880 | case BUTTON_LEFT | BUTTON_REPEAT: | ||
881 | #else | ||
882 | case BUTTON_MENU | BUTTON_LEFT: | ||
883 | case BUTTON_MENU | BUTTON_LEFT | BUTTON_REPEAT: | ||
884 | #endif | ||
885 | if (view_mode == WIDE) { | 822 | if (view_mode == WIDE) { |
886 | /* Screen left */ | 823 | /* Screen left */ |
887 | col -= display_columns; | 824 | col -= display_columns; |
@@ -895,13 +832,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file) | |||
895 | viewer_draw(col); | 832 | viewer_draw(col); |
896 | break; | 833 | break; |
897 | 834 | ||
898 | #if CONFIG_KEYPAD == RECORDER_PAD | 835 | case VIEWER_SCREEN_RIGHT: |
899 | case BUTTON_RIGHT: | 836 | case VIEWER_SCREEN_RIGHT | BUTTON_REPEAT: |
900 | case BUTTON_RIGHT | BUTTON_REPEAT: | ||
901 | #else | ||
902 | case BUTTON_MENU | BUTTON_RIGHT: | ||
903 | case BUTTON_MENU | BUTTON_RIGHT | BUTTON_REPEAT: | ||
904 | #endif | ||
905 | if (view_mode == WIDE) { | 837 | if (view_mode == WIDE) { |
906 | /* Screen right */ | 838 | /* Screen right */ |
907 | col += display_columns; | 839 | col += display_columns; |
@@ -915,18 +847,77 @@ enum plugin_status plugin_start(struct plugin_api* api, void* file) | |||
915 | viewer_draw(col); | 847 | viewer_draw(col); |
916 | break; | 848 | break; |
917 | 849 | ||
850 | #if (CONFIG_KEYPAD == RECORDER_PAD) || (CONFIG_KEYPAD == ONDIO_PAD) | ||
851 | case VIEWER_MODE_PAGE: | ||
852 | /* Page-overlap mode */ | ||
853 | if (++page_mode == PAGE_MODES) | ||
854 | page_mode = 0; | ||
855 | |||
856 | rb->splash(HZ, true, "%s %s", | ||
857 | page_mode_str[page_mode], | ||
858 | page_mode_str[PAGE_MODES]); | ||
859 | |||
860 | viewer_draw(col); | ||
861 | break; | ||
862 | |||
863 | case VIEWER_MODE_SCROLLBAR: | ||
864 | /* Show-scrollbar mode for current view-width mode */ | ||
865 | if (!(ONE_SCREEN_FITS_ALL())) { | ||
866 | if (++scrollbar_mode[view_mode] == SCROLLBAR_MODES) | ||
867 | scrollbar_mode[view_mode] = 0; | ||
868 | |||
869 | init_need_scrollbar(); | ||
870 | viewer_draw(col); | ||
871 | |||
872 | rb->splash(HZ, true, "%s %s (%s %s)", | ||
873 | scrollbar_mode_str[SCROLLBAR_MODES], | ||
874 | scrollbar_mode_str[scrollbar_mode[view_mode]], | ||
875 | view_mode_str[view_mode], | ||
876 | view_mode_str[VIEW_MODES]); | ||
877 | } | ||
878 | viewer_draw(col); | ||
879 | break; | ||
880 | #endif | ||
881 | |||
918 | #if CONFIG_KEYPAD == RECORDER_PAD | 882 | #if CONFIG_KEYPAD == RECORDER_PAD |
919 | case BUTTON_ON: | 883 | case VIEWER_LINE_UP: |
920 | /*Go to On-btn combinations */ | 884 | case VIEWER_LINE_UP | BUTTON_REPEAT: |
921 | col = viewer_recorder_on_button(col); | 885 | /* Scroll up one line */ |
886 | viewer_scroll_up(); | ||
887 | viewer_draw(col); | ||
888 | break; | ||
889 | |||
890 | case VIEWER_LINE_DOWN: | ||
891 | case VIEWER_LINE_DOWN | BUTTON_REPEAT: | ||
892 | /* Scroll down one line */ | ||
893 | if (next_screen_ptr != NULL) | ||
894 | screen_top_ptr = next_line_ptr; | ||
895 | |||
896 | viewer_draw(col); | ||
897 | break; | ||
898 | |||
899 | case VIEWER_COLUMN_LEFT: | ||
900 | case VIEWER_COLUMN_LEFT | BUTTON_REPEAT: | ||
901 | /* Scroll left one column */ | ||
902 | col--; | ||
903 | col = col_limit(col); | ||
904 | viewer_draw(col); | ||
905 | break; | ||
906 | |||
907 | case VIEWER_COLUMN_RIGHT: | ||
908 | case VIEWER_COLUMN_RIGHT | BUTTON_REPEAT: | ||
909 | /* Scroll right one column */ | ||
910 | col++; | ||
911 | col = col_limit(col); | ||
912 | viewer_draw(col); | ||
922 | break; | 913 | break; |
923 | #endif | 914 | #endif |
924 | 915 | ||
925 | case SYS_USB_CONNECTED: | 916 | default: |
926 | /* Release control to USB functions */ | 917 | if (rb->default_event_handler_ex(button, viewer_exit, NULL) |
927 | rb->usb_screen(); | 918 | == SYS_USB_CONNECTED) |
928 | viewer_exit(); | 919 | return PLUGIN_USB_CONNECTED; |
929 | return PLUGIN_USB_CONNECTED; | 920 | break; |
930 | } | 921 | } |
931 | } | 922 | } |
932 | return PLUGIN_OK; | 923 | return PLUGIN_OK; |