summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJens Arnold <amiconn@rockbox.org>2008-09-23 01:45:50 +0000
committerJens Arnold <amiconn@rockbox.org>2008-09-23 01:45:50 +0000
commit4d4555e434e7ae1b97728034ee1ce27e6bc76da1 (patch)
treeb8bdb596ec0345edeb8b90f6393d63dbdf0e4e89
parent9bc16e491dff45c4eda193895d2d042290d7f079 (diff)
downloadrockbox-4d4555e434e7ae1b97728034ee1ce27e6bc76da1.tar.gz
rockbox-4d4555e434e7ae1b97728034ee1ce27e6bc76da1.zip
Simplify controls in order to resolve impossible combos on several targets. Now uses a similar system as bounce: use left/right (or equivalent) to select the axis to adjust, and up/down (or the equivalent) to change speed/angle. * Show angle instead of speed in angle adjust mode (i.e. pause). * Better event handling when paused (button_get_w_tmo()).
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@18571 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/cube.c411
1 files changed, 157 insertions, 254 deletions
diff --git a/apps/plugins/cube.c b/apps/plugins/cube.c
index 35737a65b3..76c55353c6 100644
--- a/apps/plugins/cube.c
+++ b/apps/plugins/cube.c
@@ -34,50 +34,41 @@ PLUGIN_HEADER
34/* variable button definitions */ 34/* variable button definitions */
35#if CONFIG_KEYPAD == RECORDER_PAD 35#if CONFIG_KEYPAD == RECORDER_PAD
36#define CUBE_QUIT BUTTON_OFF 36#define CUBE_QUIT BUTTON_OFF
37#define CUBE_X_INC BUTTON_RIGHT 37#define CUBE_NEXT BUTTON_RIGHT
38#define CUBE_X_DEC BUTTON_LEFT 38#define CUBE_PREV BUTTON_LEFT
39#define CUBE_Y_INC BUTTON_UP 39#define CUBE_INC BUTTON_UP
40#define CUBE_Y_DEC BUTTON_DOWN 40#define CUBE_DEC BUTTON_DOWN
41#define CUBE_Z_INC BUTTON_F2 41#define CUBE_MODE BUTTON_F1
42#define CUBE_Z_DEC BUTTON_F1
43#define CUBE_MODE BUTTON_F3
44#define CUBE_PAUSE BUTTON_PLAY 42#define CUBE_PAUSE BUTTON_PLAY
45#define CUBE_HIGHSPEED BUTTON_ON 43#define CUBE_HIGHSPEED BUTTON_ON
46 44
47#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD 45#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
48#define CUBE_QUIT BUTTON_OFF 46#define CUBE_QUIT BUTTON_OFF
49#define CUBE_X_INC BUTTON_RIGHT 47#define CUBE_NEXT BUTTON_RIGHT
50#define CUBE_X_DEC BUTTON_LEFT 48#define CUBE_PREV BUTTON_LEFT
51#define CUBE_Y_INC BUTTON_UP 49#define CUBE_INC BUTTON_UP
52#define CUBE_Y_DEC BUTTON_DOWN 50#define CUBE_DEC BUTTON_DOWN
53#define CUBE_Z_INC BUTTON_F2 51#define CUBE_MODE BUTTON_F1
54#define CUBE_Z_DEC BUTTON_F1
55#define CUBE_MODE BUTTON_F3
56#define CUBE_PAUSE BUTTON_SELECT 52#define CUBE_PAUSE BUTTON_SELECT
57#define CUBE_HIGHSPEED BUTTON_ON 53#define CUBE_HIGHSPEED BUTTON_ON
58 54
59#elif CONFIG_KEYPAD == PLAYER_PAD 55#elif CONFIG_KEYPAD == PLAYER_PAD
60#define CUBE_QUIT BUTTON_STOP 56#define CUBE_QUIT BUTTON_STOP
61#define CUBE_X_INC BUTTON_RIGHT 57#define CUBE_INC BUTTON_RIGHT
62#define CUBE_X_DEC BUTTON_LEFT 58#define CUBE_DEC BUTTON_LEFT
63#define CUBE_Y_INC (BUTTON_ON | BUTTON_RIGHT) 59#define CUBE_NEXT (BUTTON_ON | BUTTON_RIGHT)
64#define CUBE_Y_DEC (BUTTON_ON | BUTTON_LEFT) 60#define CUBE_PREV (BUTTON_ON | BUTTON_LEFT)
65#define CUBE_Z_INC (BUTTON_MENU | BUTTON_RIGHT) 61#define CUBE_MODE BUTTON_MENU
66#define CUBE_Z_DEC (BUTTON_MENU | BUTTON_LEFT)
67#define CUBE_MODE_PRE BUTTON_MENU
68#define CUBE_MODE (BUTTON_MENU | BUTTON_REL)
69#define CUBE_PAUSE BUTTON_PLAY 62#define CUBE_PAUSE BUTTON_PLAY
70#define CUBE_HIGHSPEED_PRE BUTTON_ON 63#define CUBE_HIGHSPEED_PRE BUTTON_ON
71#define CUBE_HIGHSPEED (BUTTON_ON | BUTTON_REL) 64#define CUBE_HIGHSPEED (BUTTON_ON | BUTTON_REL)
72 65
73#elif CONFIG_KEYPAD == ONDIO_PAD 66#elif CONFIG_KEYPAD == ONDIO_PAD
74#define CUBE_QUIT BUTTON_OFF 67#define CUBE_QUIT BUTTON_OFF
75#define CUBE_X_INC BUTTON_RIGHT 68#define CUBE_NEXT BUTTON_RIGHT
76#define CUBE_X_DEC BUTTON_LEFT 69#define CUBE_PREV BUTTON_LEFT
77#define CUBE_Y_INC BUTTON_UP 70#define CUBE_INC BUTTON_UP
78#define CUBE_Y_DEC BUTTON_DOWN 71#define CUBE_DEC BUTTON_DOWN
79#define CUBE_Z_INC (BUTTON_MENU | BUTTON_UP)
80#define CUBE_Z_DEC (BUTTON_MENU | BUTTON_DOWN)
81#define CUBE_MODE_PRE BUTTON_MENU 72#define CUBE_MODE_PRE BUTTON_MENU
82#define CUBE_MODE (BUTTON_MENU | BUTTON_REL) 73#define CUBE_MODE (BUTTON_MENU | BUTTON_REL)
83#define CUBE_PAUSE (BUTTON_MENU | BUTTON_LEFT) 74#define CUBE_PAUSE (BUTTON_MENU | BUTTON_LEFT)
@@ -86,15 +77,12 @@ PLUGIN_HEADER
86#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ 77#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
87 (CONFIG_KEYPAD == IRIVER_H300_PAD) 78 (CONFIG_KEYPAD == IRIVER_H300_PAD)
88#define CUBE_QUIT BUTTON_OFF 79#define CUBE_QUIT BUTTON_OFF
89#define CUBE_X_INC BUTTON_RIGHT 80#define CUBE_NEXT BUTTON_RIGHT
90#define CUBE_X_DEC BUTTON_LEFT 81#define CUBE_PREV BUTTON_LEFT
91#define CUBE_Y_INC BUTTON_UP 82#define CUBE_INC BUTTON_UP
92#define CUBE_Y_DEC BUTTON_DOWN 83#define CUBE_DEC BUTTON_DOWN
93#define CUBE_Z_INC (BUTTON_ON | BUTTON_UP)
94#define CUBE_Z_DEC (BUTTON_ON | BUTTON_DOWN)
95#define CUBE_MODE BUTTON_MODE 84#define CUBE_MODE BUTTON_MODE
96#define CUBE_PAUSE_PRE BUTTON_ON 85#define CUBE_PAUSE BUTTON_ON
97#define CUBE_PAUSE (BUTTON_ON | BUTTON_REL)
98#define CUBE_HIGHSPEED BUTTON_SELECT 86#define CUBE_HIGHSPEED BUTTON_SELECT
99 87
100#define CUBE_RC_QUIT BUTTON_RC_STOP 88#define CUBE_RC_QUIT BUTTON_RC_STOP
@@ -102,143 +90,114 @@ PLUGIN_HEADER
102#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ 90#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
103 (CONFIG_KEYPAD == IPOD_3G_PAD) || \ 91 (CONFIG_KEYPAD == IPOD_3G_PAD) || \
104 (CONFIG_KEYPAD == IPOD_1G2G_PAD) 92 (CONFIG_KEYPAD == IPOD_1G2G_PAD)
105#define CUBE_QUIT BUTTON_MENU 93#define CUBE_QUIT (BUTTON_SELECT | BUTTON_MENU)
106#define CUBE_X_INC BUTTON_RIGHT 94#define CUBE_NEXT BUTTON_RIGHT
107#define CUBE_X_DEC BUTTON_LEFT 95#define CUBE_PREV BUTTON_LEFT
108#define CUBE_Y_INC BUTTON_SCROLL_FWD 96#define CUBE_INC BUTTON_SCROLL_FWD
109#define CUBE_Y_DEC BUTTON_SCROLL_BACK 97#define CUBE_DEC BUTTON_SCROLL_BACK
110#define CUBE_Z_INC (BUTTON_SELECT | BUTTON_RIGHT) 98#define CUBE_MODE BUTTON_MENU
111#define CUBE_Z_DEC (BUTTON_SELECT | BUTTON_LEFT) 99#define CUBE_PAUSE BUTTON_PLAY
112#define CUBE_MODE (BUTTON_SELECT | BUTTON_MENU) 100#define CUBE_HIGHSPEED_PRE BUTTON_SELECT
113#define CUBE_PAUSE_PRE BUTTON_PLAY 101#define CUBE_HIGHSPEED (BUTTON_SELECT | BUTTON_REL)
114#define CUBE_PAUSE (BUTTON_PLAY | BUTTON_REL)
115#define CUBE_HIGHSPEED (BUTTON_SELECT | BUTTON_PLAY)
116 102
117#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD 103#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
118#define CUBE_QUIT BUTTON_PLAY 104#define CUBE_QUIT BUTTON_PLAY
119#define CUBE_X_INC BUTTON_RIGHT 105#define CUBE_NEXT BUTTON_RIGHT
120#define CUBE_X_DEC BUTTON_LEFT 106#define CUBE_PREV BUTTON_LEFT
121#define CUBE_Y_INC BUTTON_UP 107#define CUBE_INC BUTTON_UP
122#define CUBE_Y_DEC BUTTON_DOWN 108#define CUBE_DEC BUTTON_DOWN
123#define CUBE_Z_INC BUTTON_MODE 109#define CUBE_MODE BUTTON_MODE
124#define CUBE_Z_DEC BUTTON_EQ 110#define CUBE_PAUSE BUTTON_SELECT
125#define CUBE_MODE (BUTTON_SELECT | BUTTON_REPEAT) 111#define CUBE_HIGHSPEED BUTTON_EQ
126#define CUBE_PAUSE (BUTTON_SELECT | BUTTON_REL)
127#define CUBE_HIGHSPEED (BUTTON_MODE | BUTTON_EQ) /* TODO: this is impossible */
128 112
129#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) 113#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
130#define CUBE_QUIT BUTTON_POWER 114#define CUBE_QUIT BUTTON_POWER
131#define CUBE_X_INC BUTTON_LEFT 115#define CUBE_NEXT BUTTON_RIGHT
132#define CUBE_X_DEC BUTTON_RIGHT 116#define CUBE_PREV BUTTON_LEFT
133#define CUBE_Y_INC BUTTON_UP 117#define CUBE_INC BUTTON_UP
134#define CUBE_Y_DEC BUTTON_DOWN 118#define CUBE_DEC BUTTON_DOWN
135#define CUBE_Z_INC (BUTTON_PLAY | BUTTON_UP) 119#define CUBE_MODE BUTTON_REC
136#define CUBE_Z_DEC (BUTTON_PLAY | BUTTON_DOWN) 120#define CUBE_PAUSE BUTTON_PLAY
137#define CUBE_MODE BUTTON_SELECT 121#define CUBE_HIGHSPEED BUTTON_SELECT
138#define CUBE_PAUSE_PRE BUTTON_PLAY
139#define CUBE_PAUSE (BUTTON_PLAY | BUTTON_REL)
140#define CUBE_HIGHSPEED (BUTTON_REC | BUTTON_REL)
141 122
142#elif (CONFIG_KEYPAD == GIGABEAT_PAD) 123#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
143#define CUBE_QUIT BUTTON_POWER 124#define CUBE_QUIT BUTTON_POWER
144#define CUBE_X_INC BUTTON_LEFT 125#define CUBE_NEXT BUTTON_RIGHT
145#define CUBE_X_DEC BUTTON_RIGHT 126#define CUBE_PREV BUTTON_LEFT
146#define CUBE_Y_INC BUTTON_UP 127#define CUBE_INC BUTTON_UP
147#define CUBE_Y_DEC BUTTON_DOWN 128#define CUBE_DEC BUTTON_DOWN
148#define CUBE_Z_INC BUTTON_VOL_UP
149#define CUBE_Z_DEC BUTTON_VOL_DOWN
150#define CUBE_MODE BUTTON_MENU 129#define CUBE_MODE BUTTON_MENU
151#define CUBE_PAUSE BUTTON_SELECT 130#define CUBE_PAUSE BUTTON_SELECT
152#define CUBE_HIGHSPEED BUTTON_A 131#define CUBE_HIGHSPEED BUTTON_A
153 132
154#elif (CONFIG_KEYPAD == SANSA_E200_PAD) 133#elif (CONFIG_KEYPAD == SANSA_E200_PAD)
155#define CUBE_QUIT BUTTON_POWER 134#define CUBE_QUIT BUTTON_POWER
156#define CUBE_X_INC BUTTON_LEFT 135#define CUBE_NEXT BUTTON_RIGHT
157#define CUBE_X_DEC BUTTON_RIGHT 136#define CUBE_PREV BUTTON_LEFT
158#define CUBE_Y_INC BUTTON_SCROLL_FWD 137#define CUBE_INC BUTTON_SCROLL_FWD
159#define CUBE_Y_DEC BUTTON_SCROLL_BACK 138#define CUBE_DEC BUTTON_SCROLL_BACK
160#define CUBE_Z_INC BUTTON_UP 139#define CUBE_MODE BUTTON_DOWN
161#define CUBE_Z_DEC BUTTON_DOWN 140#define CUBE_PAUSE BUTTON_UP
162#define CUBE_MODE_PRE BUTTON_SELECT 141#define CUBE_HIGHSPEED BUTTON_SELECT
163#define CUBE_MODE (BUTTON_SELECT|BUTTON_REPEAT)
164#define CUBE_PAUSE_PRE BUTTON_SELECT
165#define CUBE_PAUSE (BUTTON_SELECT|BUTTON_REL)
166#define CUBE_HIGHSPEED BUTTON_REC
167 142
168#elif (CONFIG_KEYPAD == SANSA_C200_PAD) 143#elif (CONFIG_KEYPAD == SANSA_C200_PAD)
169#define CUBE_QUIT BUTTON_POWER 144#define CUBE_QUIT BUTTON_POWER
170#define CUBE_X_INC BUTTON_LEFT 145#define CUBE_NEXT BUTTON_RIGHT
171#define CUBE_X_DEC BUTTON_RIGHT 146#define CUBE_PREV BUTTON_LEFT
172#define CUBE_Y_INC BUTTON_VOL_UP 147#define CUBE_INC BUTTON_VOL_UP
173#define CUBE_Y_DEC BUTTON_VOL_DOWN 148#define CUBE_DEC BUTTON_VOL_DOWN
174#define CUBE_Z_INC BUTTON_UP 149#define CUBE_MODE BUTTON_DOWN
175#define CUBE_Z_DEC BUTTON_DOWN 150#define CUBE_PAUSE BUTTON_UP
176#define CUBE_MODE_PRE BUTTON_SELECT 151#define CUBE_HIGHSPEED BUTTON_SELECT
177#define CUBE_MODE (BUTTON_SELECT|BUTTON_REPEAT)
178#define CUBE_PAUSE_PRE BUTTON_SELECT
179#define CUBE_PAUSE (BUTTON_SELECT|BUTTON_REL)
180#define CUBE_HIGHSPEED BUTTON_REC
181 152
182 153
183#elif (CONFIG_KEYPAD == IRIVER_H10_PAD) 154#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
184#define CUBE_QUIT BUTTON_POWER 155#define CUBE_QUIT BUTTON_POWER
185#define CUBE_X_INC BUTTON_LEFT 156#define CUBE_NEXT BUTTON_RIGHT
186#define CUBE_X_DEC BUTTON_RIGHT 157#define CUBE_PREV BUTTON_LEFT
187#define CUBE_Y_INC BUTTON_SCROLL_UP 158#define CUBE_INC BUTTON_SCROLL_UP
188#define CUBE_Y_DEC BUTTON_SCROLL_DOWN 159#define CUBE_DEC BUTTON_SCROLL_DOWN
189#define CUBE_Z_INC (BUTTON_PLAY | BUTTON_SCROLL_UP)
190#define CUBE_Z_DEC (BUTTON_PLAY | BUTTON_SCROLL_DOWN)
191#define CUBE_MODE BUTTON_REW 160#define CUBE_MODE BUTTON_REW
192#define CUBE_PAUSE_PRE BUTTON_PLAY 161#define CUBE_PAUSE BUTTON_PLAY
193#define CUBE_PAUSE (BUTTON_PLAY | BUTTON_REL) 162#define CUBE_HIGHSPEED BUTTON_FF
194#define CUBE_HIGHSPEED (BUTTON_FF | BUTTON_REL)
195 163
196#elif CONFIG_KEYPAD == MROBE500_PAD 164#elif CONFIG_KEYPAD == MROBE500_PAD
197#define CUBE_QUIT BUTTON_POWER 165#define CUBE_QUIT BUTTON_POWER
198#define CUBE_X_INC BUTTON_LEFT 166#define CUBE_NEXT BUTTON_RIGHT
199#define CUBE_X_DEC BUTTON_RIGHT 167#define CUBE_PREV BUTTON_LEFT
200#define CUBE_Y_INC BUTTON_RC_PLAY 168#define CUBE_INC BUTTON_RC_VOL_UP
201#define CUBE_Y_DEC BUTTON_RC_DOWN 169#define CUBE_DEC BUTTON_RC_VOL_DOWN
202#define CUBE_Z_INC BUTTON_RC_VOL_UP
203#define CUBE_Z_DEC BUTTON_RC_VOL_DOWN
204#define CUBE_MODE BUTTON_RC_MODE 170#define CUBE_MODE BUTTON_RC_MODE
205#define CUBE_PAUSE_PRE BUTTON_RC_HEART 171#define CUBE_PAUSE_PRE BUTTON_RC_HEART
206#define CUBE_PAUSE (BUTTON_RC_HEART | BUTTON_REL) 172#define CUBE_PAUSE (BUTTON_RC_HEART | BUTTON_REL)
207#define CUBE_HIGHSPEED BUTTON_RC_HEART 173#define CUBE_HIGHSPEED BUTTON_RC_HEART /* fixme: clashes with pause */
208 174
209#elif CONFIG_KEYPAD == GIGABEAT_S_PAD 175#elif CONFIG_KEYPAD == GIGABEAT_S_PAD
210#define CUBE_QUIT BUTTON_BACK 176#define CUBE_QUIT BUTTON_BACK
211#define CUBE_X_INC BUTTON_LEFT 177#define CUBE_NEXT BUTTON_RIGHT
212#define CUBE_X_DEC BUTTON_RIGHT 178#define CUBE_PREV BUTTON_LEFT
213#define CUBE_Y_INC BUTTON_UP 179#define CUBE_INC BUTTON_UP
214#define CUBE_Y_DEC BUTTON_DOWN 180#define CUBE_DEC BUTTON_DOWN
215#define CUBE_Z_INC BUTTON_VOL_UP 181#define CUBE_MODE BUTTON_MENU
216#define CUBE_Z_DEC BUTTON_VOL_DOWN 182#define CUBE_PAUSE BUTTON_PLAY
217#define CUBE_MODE BUTTON_PREV 183#define CUBE_HIGHSPEED BUTTON_SELECT
218#define CUBE_PAUSE_PRE BUTTON_PLAY
219#define CUBE_PAUSE (BUTTON_PLAY | BUTTON_REL)
220#define CUBE_HIGHSPEED (BUTTON_NEXT | BUTTON_REL)
221 184
222#elif (CONFIG_KEYPAD == MROBE100_PAD) 185#elif (CONFIG_KEYPAD == MROBE100_PAD)
223#define CUBE_QUIT BUTTON_POWER 186#define CUBE_QUIT BUTTON_POWER
224#define CUBE_X_INC BUTTON_LEFT 187#define CUBE_NEXT BUTTON_RIGHT
225#define CUBE_X_DEC BUTTON_RIGHT 188#define CUBE_PREV BUTTON_LEFT
226#define CUBE_Y_INC BUTTON_UP 189#define CUBE_INC BUTTON_UP
227#define CUBE_Y_DEC BUTTON_DOWN 190#define CUBE_DEC BUTTON_DOWN
228#define CUBE_Z_INC (BUTTON_DISPLAY | BUTTON_UP)
229#define CUBE_Z_DEC (BUTTON_DISPLAY | BUTTON_DOWN)
230#define CUBE_MODE BUTTON_MENU 191#define CUBE_MODE BUTTON_MENU
231#define CUBE_PAUSE BUTTON_PLAY 192#define CUBE_PAUSE BUTTON_PLAY
232#define CUBE_HIGHSPEED BUTTON_SELECT 193#define CUBE_HIGHSPEED BUTTON_SELECT
233 194
234#elif (CONFIG_KEYPAD == IAUDIO_M3_PAD) 195#elif (CONFIG_KEYPAD == IAUDIO_M3_PAD)
235#define CUBE_QUIT BUTTON_RC_REC 196#define CUBE_QUIT BUTTON_RC_REC
236#define CUBE_X_INC BUTTON_RC_FF 197#define CUBE_NEXT BUTTON_RC_FF
237#define CUBE_X_DEC BUTTON_RC_REW 198#define CUBE_PREV BUTTON_RC_REW
238#define CUBE_Y_INC BUTTON_RC_VOL_UP 199#define CUBE_INC BUTTON_RC_VOL_UP
239#define CUBE_Y_DEC BUTTON_RC_VOL_DOWN 200#define CUBE_DEC BUTTON_RC_VOL_DOWN
240#define CUBE_Z_INC BUTTON_VOL_UP /* FIXME: quick hack */
241#define CUBE_Z_DEC BUTTON_VOL_DOWN
242#define CUBE_MODE BUTTON_RC_MODE 201#define CUBE_MODE BUTTON_RC_MODE
243#define CUBE_PAUSE BUTTON_RC_PLAY 202#define CUBE_PAUSE BUTTON_RC_PLAY
244#define CUBE_HIGHSPEED BUTTON_RC_MENU 203#define CUBE_HIGHSPEED BUTTON_RC_MENU
@@ -420,6 +379,18 @@ enum {
420 379
421static int mode = 0; 380static int mode = 0;
422 381
382struct counter {
383 const char *label;
384 short speed;
385 short angle;
386};
387
388static struct counter axes[] = {
389 {"x-axis", 1, 0},
390 {"y-axis", 3, 0},
391 {"z-axis", 2, 0}
392};
393
423static struct point_3D point3D[8]; 394static struct point_3D point3D[8];
424static struct point_2D point2D[8]; 395static struct point_2D point2D[8];
425static long matrice[3][3]; 396static long matrice[3][3];
@@ -594,12 +565,7 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
594 565
595 int button; 566 int button;
596 int lastbutton = BUTTON_NONE; 567 int lastbutton = BUTTON_NONE;
597 int xa = 0; 568 int curr = 0;
598 int ya = 0;
599 int za = 0;
600 int xs = 1;
601 int ys = 3;
602 int zs = 1;
603 bool highspeed = false; 569 bool highspeed = false;
604 bool paused = false; 570 bool paused = false;
605 bool redraw = true; 571 bool redraw = true;
@@ -638,20 +604,15 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
638 rb->splash(HZ*2, "Old LCD :("); 604 rb->splash(HZ*2, "Old LCD :(");
639 return PLUGIN_OK; 605 return PLUGIN_OK;
640 } 606 }
641 pgfx_display(3, 0); 607 pgfx_display(0, 0);
642#endif 608#endif
643 609
644 while(!exit) 610 while(!exit)
645 { 611 {
646 if (highspeed)
647 rb->yield();
648 else
649 rb->sleep(4);
650
651 if (redraw) 612 if (redraw)
652 { 613 {
653 MYLCD(clear_display)(); 614 MYLCD(clear_display)();
654 cube_rotate(xa, ya, za); 615 cube_rotate(axes[0].angle, axes[1].angle, axes[2].angle);
655 cube_viewport(); 616 cube_viewport();
656 cube_draw(); 617 cube_draw();
657 redraw = false; 618 redraw = false;
@@ -661,8 +622,10 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
661 if (t_disp > 0) 622 if (t_disp > 0)
662 { 623 {
663 t_disp--; 624 t_disp--;
664 rb->snprintf(buffer, sizeof(buffer), "x:%d y:%d z:%d h:%d", 625 rb->snprintf(buffer, sizeof(buffer), "%s: %d %s",
665 xs, ys, zs, highspeed); 626 axes[curr].label,
627 paused ? axes[curr].angle : axes[curr].speed,
628 highspeed ? "(hs)" : "");
666 MYLCD(putsxy)(0, LCD_HEIGHT-8, buffer); 629 MYLCD(putsxy)(0, LCD_HEIGHT-8, buffer);
667 if (t_disp == 0) 630 if (t_disp == 0)
668 redraw = true; 631 redraw = true;
@@ -672,21 +635,17 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
672 { 635 {
673 if (t_disp == DISP_TIME) 636 if (t_disp == DISP_TIME)
674 { 637 {
675 rb->snprintf(buffer, sizeof(buffer), "x%d", xs); 638 rb->lcd_puts(5, 0, axes[curr].label);
676 rb->lcd_puts(0, 0, buffer); 639 rb->snprintf(buffer, sizeof(buffer), "%d %c",
677 rb->snprintf(buffer, sizeof(buffer), "y%d", ys); 640 paused ? axes[curr].angle : axes[curr].speed,
678 rb->lcd_puts(0, 1, buffer); 641 highspeed ? 'H' : ' ');
679 pgfx_display(3, 0); 642 rb->lcd_puts(5, 1, buffer);
680 rb->snprintf(buffer, sizeof(buffer), "z%d", zs);
681 rb->lcd_puts(8, 0, buffer);
682 rb->snprintf(buffer, sizeof(buffer), "h%d", highspeed);
683 rb->lcd_puts(8, 1, buffer);
684 } 643 }
685 t_disp--; 644 t_disp--;
686 if (t_disp == 0) 645 if (t_disp == 0)
687 { 646 {
688 rb->lcd_clear_display(); 647 rb->lcd_clear_display();
689 pgfx_display(3, 0); 648 pgfx_display(0, 0);
690 } 649 }
691 } 650 }
692#endif 651#endif
@@ -701,129 +660,73 @@ enum plugin_status plugin_start(const struct plugin_api* api, const void* parame
701 660
702 if (!paused) 661 if (!paused)
703 { 662 {
704 xa += xs; 663 int i;
705 if (xa > 359) 664
706 xa -= 360; 665 for (i = 0; i < 3; i++)
707 else if (xa < 0) 666 {
708 xa += 360; 667 axes[i].angle += axes[i].speed;
709 668 if (axes[i].angle > 359)
710 ya += ys; 669 axes[i].angle -= 360;
711 if (ya > 359) 670 else if (axes[i].angle < 0)
712 ya -= 360; 671 axes[i].angle += 360;
713 else if (ya < 0) 672 }
714 ya += 360;
715
716 za += zs;
717 if (za > 359)
718 za -= 360;
719 else if (za < 0)
720 za += 360;
721 redraw = true; 673 redraw = true;
674
675 if (highspeed)
676 rb->yield();
677 else
678 rb->sleep(HZ/25);
679 button = rb->button_get(false);
680 }
681 else
682 {
683 button = rb->button_get_w_tmo(HZ/25);
722 } 684 }
723 685
724 button = rb->button_get(false);
725 switch (button) 686 switch (button)
726 { 687 {
727 case CUBE_X_INC: 688 case CUBE_INC:
728 case (CUBE_X_INC|BUTTON_REPEAT): 689 case CUBE_INC|BUTTON_REPEAT:
729 if( !paused ) 690 if (!paused)
730 { 691 {
731 if( xs < 10) 692 if (axes[curr].speed < 10)
732 xs++; 693 axes[curr].speed++;
733 } 694 }
734 else 695 else
735 { 696 {
736 xa++; 697 if (++axes[curr].angle > 359)
737 if( xa > 359 ) 698 axes[curr].angle -= 360;
738 xa -= 360;
739 } 699 }
740 t_disp = DISP_TIME; 700 t_disp = DISP_TIME;
741 redraw = true; 701 redraw = true;
742 break; 702 break;
743 703
744 case CUBE_X_DEC: 704 case CUBE_DEC:
745 case (CUBE_X_DEC|BUTTON_REPEAT): 705 case CUBE_DEC|BUTTON_REPEAT:
746 if( !paused ) 706 if (!paused)
747 { 707 {
748 if (xs > -10) 708 if (axes[curr].speed > -10)
749 xs--; 709 axes[curr].speed--;
750 } 710 }
751 else 711 else
752 { 712 {
753 xa--; 713 if (--axes[curr].angle < 0)
754 if( xa < 0 ) 714 axes[curr].angle += 360;
755 xa += 360;
756 } 715 }
757 t_disp = DISP_TIME; 716 t_disp = DISP_TIME;
758 redraw = true; 717 redraw = true;
759 break; 718 break;
760 719
761 case CUBE_Y_INC: 720 case CUBE_NEXT:
762 case (CUBE_Y_INC|BUTTON_REPEAT): 721 if (++curr > 2)
763 if( !paused ) 722 curr = 0;
764 {
765 if (ys < 10)
766 ys++;
767 }
768 else
769 {
770 ya++;
771 if( ya > 359 )
772 ya -= 360;
773 }
774 t_disp = DISP_TIME; 723 t_disp = DISP_TIME;
775 redraw = true;
776 break; 724 break;
777 725
778 case CUBE_Y_DEC: 726 case CUBE_PREV:
779 case (CUBE_Y_DEC|BUTTON_REPEAT): 727 if (--curr < 0)
780 if( !paused ) 728 curr = 2;
781 {
782 if (ys > -10)
783 ys--;
784 }
785 else
786 {
787 ya--;
788 if( ya < 0 )
789 ya += 360;
790 }
791 t_disp = DISP_TIME; 729 t_disp = DISP_TIME;
792 redraw = true;
793 break;
794
795 case CUBE_Z_INC:
796 case (CUBE_Z_INC|BUTTON_REPEAT):
797 if( !paused )
798 {
799 if (zs < 10)
800 zs++;
801 }
802 else
803 {
804 za++;
805 if( za > 359 )
806 za -= 360;
807 }
808 t_disp = DISP_TIME;
809 redraw = true;
810 break;
811
812 case CUBE_Z_DEC:
813 case (CUBE_Z_DEC|BUTTON_REPEAT):
814 if( !paused )
815 {
816 if (zs > -10)
817 zs--;
818 }
819 else
820 {
821 za--;
822 if( za < 0 )
823 za += 360;
824 }
825 t_disp = DISP_TIME;
826 redraw = true;
827 break; 730 break;
828 731
829 case CUBE_MODE: 732 case CUBE_MODE: