summaryrefslogtreecommitdiff
path: root/apps/recorder/keyboard.c
diff options
context:
space:
mode:
Diffstat (limited to 'apps/recorder/keyboard.c')
-rw-r--r--apps/recorder/keyboard.c249
1 files changed, 28 insertions, 221 deletions
diff --git a/apps/recorder/keyboard.c b/apps/recorder/keyboard.c
index 8f35b12d4b..8e82ab58f9 100644
--- a/apps/recorder/keyboard.c
+++ b/apps/recorder/keyboard.c
@@ -36,6 +36,7 @@
36#include "icons.h" 36#include "icons.h"
37#include "file.h" 37#include "file.h"
38#include "hangul.h" 38#include "hangul.h"
39#include "action.h"
39 40
40#ifndef O_BINARY 41#ifndef O_BINARY
41#define O_BINARY 0 42#define O_BINARY 0
@@ -52,143 +53,22 @@
52 53
53#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ 54#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
54 (CONFIG_KEYPAD == IRIVER_H300_PAD) 55 (CONFIG_KEYPAD == IRIVER_H300_PAD)
55#define KBD_CURSOR_RIGHT (BUTTON_ON | BUTTON_RIGHT) 56#define KBD_MORSE_INPUT /* I-Rivers have a Morse input mode */
56#define KBD_CURSOR_LEFT (BUTTON_ON | BUTTON_LEFT)
57#define KBD_SELECT BUTTON_SELECT
58#define KBD_PAGE_FLIP BUTTON_MODE /* unused */
59#define KBD_DONE_PRE BUTTON_ON
60#define KBD_DONE (BUTTON_ON | BUTTON_REL)
61#define KBD_ABORT BUTTON_OFF
62#define KBD_BACKSPACE BUTTON_REC
63#define KBD_LEFT BUTTON_LEFT
64#define KBD_RIGHT BUTTON_RIGHT
65#define KBD_UP BUTTON_UP
66#define KBD_DOWN BUTTON_DOWN
67#define KBD_MORSE_INPUT (BUTTON_ON | BUTTON_MODE)
68#define KBD_RC_CURSOR_RIGHT (BUTTON_RC_ON | BUTTON_RC_FF)
69#define KBD_RC_CURSOR_LEFT (BUTTON_RC_ON | BUTTON_RC_REW)
70#define KBD_RC_SELECT BUTTON_RC_MENU
71#define KBD_RC_PAGE_FLIP BUTTON_RC_MODE
72#define KBD_RC_DONE_PRE BUTTON_RC_ON
73#define KBD_RC_DONE (BUTTON_RC_ON | BUTTON_REL)
74#define KBD_RC_ABORT BUTTON_RC_STOP
75#define KBD_RC_BACKSPACE BUTTON_RC_REC
76#define KBD_RC_LEFT BUTTON_RC_REW
77#define KBD_RC_RIGHT BUTTON_RC_FF
78#define KBD_RC_UP BUTTON_RC_SOURCE
79#define KBD_RC_DOWN BUTTON_RC_BITRATE
80#define KBD_RC_MORSE_INPUT (BUTTON_RC_ON | BUTTON_RC_MODE)
81
82#elif CONFIG_KEYPAD == RECORDER_PAD
83#define KBD_CURSOR_RIGHT (BUTTON_ON | BUTTON_RIGHT)
84#define KBD_CURSOR_LEFT (BUTTON_ON | BUTTON_LEFT)
85#define KBD_SELECT BUTTON_PLAY
86#define KBD_PAGE_FLIP BUTTON_F1
87#define KBD_DONE BUTTON_F2
88#define KBD_ABORT BUTTON_OFF
89#define KBD_BACKSPACE BUTTON_F3
90#define KBD_LEFT BUTTON_LEFT
91#define KBD_RIGHT BUTTON_RIGHT
92#define KBD_UP BUTTON_UP
93#define KBD_DOWN BUTTON_DOWN
94 57
95#elif CONFIG_KEYPAD == ONDIO_PAD /* restricted Ondio keypad */ 58#elif CONFIG_KEYPAD == ONDIO_PAD /* restricted Ondio keypad */
96#define KBD_MODES /* Ondio uses 2 modes, picker and line edit */ 59#define KBD_MODES /* Ondio uses 2 modes, picker and line edit */
97#define KBD_SELECT (BUTTON_MENU | BUTTON_REL) /* backspace in line edit */
98#define KBD_SELECT_PRE BUTTON_MENU
99#define KBD_DONE_PRE BUTTON_MENU
100#define KBD_DONE (BUTTON_MENU | BUTTON_REPEAT)
101#define KBD_ABORT BUTTON_OFF
102#define KBD_LEFT BUTTON_LEFT
103#define KBD_RIGHT BUTTON_RIGHT
104#define KBD_UP BUTTON_UP
105#define KBD_DOWN BUTTON_DOWN
106
107#elif CONFIG_KEYPAD == GMINI100_PAD
108#define KBD_CURSOR_RIGHT (BUTTON_MENU | BUTTON_RIGHT)
109#define KBD_CURSOR_LEFT (BUTTON_MENU | BUTTON_LEFT)
110#define KBD_SELECT (BUTTON_PLAY | BUTTON_REL)
111#define KBD_SELECT_PRE BUTTON_PLAY
112#define KBD_PAGE_FLIP BUTTON_ON
113#define KBD_DONE_PRE BUTTON_PLAY
114#define KBD_DONE (BUTTON_PLAY | BUTTON_REPEAT)
115#define KBD_ABORT BUTTON_OFF
116#define KBD_BACKSPACE (BUTTON_MENU | BUTTON_PLAY)
117#define KBD_LEFT BUTTON_LEFT
118#define KBD_RIGHT BUTTON_RIGHT
119#define KBD_UP BUTTON_UP
120#define KBD_DOWN BUTTON_DOWN
121 60
122#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD) 61#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD)
123
124#define KBD_MODES /* iPod uses 2 modes, picker and line edit */ 62#define KBD_MODES /* iPod uses 2 modes, picker and line edit */
125#define KBD_SELECT (BUTTON_SELECT | BUTTON_REL) /* backspace in line edit */
126#define KBD_SELECT_PRE BUTTON_SELECT
127#define KBD_DONE_PRE BUTTON_SELECT
128#define KBD_DONE (BUTTON_SELECT | BUTTON_REPEAT)
129#define KBD_ABORT BUTTON_MENU
130#define KBD_LEFT BUTTON_LEFT
131#define KBD_RIGHT BUTTON_RIGHT
132#define KBD_UP BUTTON_SCROLL_BACK
133#define KBD_DOWN BUTTON_SCROLL_FWD
134 63
135#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD 64#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
136
137/* TODO: Check keyboard mappings */
138
139#define KBD_MODES /* iFP7xx uses 2 modes, picker and line edit */ 65#define KBD_MODES /* iFP7xx uses 2 modes, picker and line edit */
140#define KBD_SELECT (BUTTON_SELECT | BUTTON_REL) /* backspace in line edit */
141#define KBD_SELECT_PRE BUTTON_SELECT
142#define KBD_DONE BUTTON_MODE
143#define KBD_ABORT BUTTON_PLAY
144#define KBD_LEFT BUTTON_LEFT
145#define KBD_RIGHT BUTTON_RIGHT
146#define KBD_UP BUTTON_UP
147#define KBD_DOWN BUTTON_DOWN
148 66
149#elif CONFIG_KEYPAD == IAUDIO_X5_PAD 67#elif CONFIG_KEYPAD == IAUDIO_X5_PAD
150
151/* TODO: Check keyboard mappings */
152
153#define KBD_MODES /* iAudio X5 uses 2 modes, picker and line edit */ 68#define KBD_MODES /* iAudio X5 uses 2 modes, picker and line edit */
154#define KBD_SELECT (BUTTON_SELECT | BUTTON_REL) /* backspace in line edit */
155#define KBD_SELECT_PRE BUTTON_SELECT
156#define KBD_DONE BUTTON_PLAY
157#define KBD_ABORT BUTTON_REC
158#define KBD_LEFT BUTTON_LEFT
159#define KBD_RIGHT BUTTON_RIGHT
160#define KBD_UP BUTTON_UP
161#define KBD_DOWN BUTTON_DOWN
162
163#elif CONFIG_KEYPAD == GIGABEAT_PAD
164
165#define KBD_CURSOR_RIGHT (BUTTON_POWER | BUTTON_RIGHT)
166#define KBD_CURSOR_LEFT (BUTTON_POWER | BUTTON_LEFT)
167#define KBD_SELECT BUTTON_SELECT
168#define KBD_PAGE_FLIP (BUTTON_POWER | BUTTON_MENU)
169#define KBD_DONE_PRE BUTTON_POWER
170#define KBD_DONE (BUTTON_POWER | BUTTON_REL)
171#define KBD_ABORT BUTTON_A
172#define KBD_BACKSPACE BUTTON_MENU
173#define KBD_LEFT BUTTON_LEFT
174#define KBD_RIGHT BUTTON_RIGHT
175#define KBD_UP BUTTON_UP
176#define KBD_DOWN BUTTON_DOWN
177 69
178#elif CONFIG_KEYPAD == IRIVER_H10_PAD 70#elif CONFIG_KEYPAD == IRIVER_H10_PAD
179
180/* TODO: Check keyboard mappings */
181
182#define KBD_MODES /* iriver H10 uses 2 modes, picker and line edit */ 71#define KBD_MODES /* iriver H10 uses 2 modes, picker and line edit */
183#define KBD_SELECT (BUTTON_REW | BUTTON_REL) /* backspace in line edit */
184#define KBD_SELECT_PRE BUTTON_REW
185#define KBD_DONE BUTTON_PLAY
186#define KBD_ABORT BUTTON_FF
187#define KBD_LEFT BUTTON_LEFT
188#define KBD_RIGHT BUTTON_RIGHT
189#define KBD_UP BUTTON_SCROLL_UP
190#define KBD_DOWN BUTTON_SCROLL_DOWN
191
192#endif 72#endif
193 73
194struct keyboard_parameters { 74struct keyboard_parameters {
@@ -694,30 +574,21 @@ int kbd_input(char* text, int buflen)
694 FOR_NB_SCREENS(l) 574 FOR_NB_SCREENS(l)
695 screens[l].update(); 575 screens[l].update();
696 576
697 button = button_get_w_tmo(HZ/2); 577 button = get_action(CONTEXT_KEYBOARD,HZ/2);
698#ifdef KBD_MORSE_INPUT 578#ifdef KBD_MORSE_INPUT
699 if (morse_mode) 579 if (morse_mode)
700 { 580 {
701 /* Remap some buttons for morse mode. */ 581 /* Remap some buttons for morse mode. */
702 if (button == KBD_LEFT || button == (KBD_LEFT | BUTTON_REPEAT)) 582 if (button == ACTION_KBD_LEFT)
703 button = KBD_CURSOR_LEFT; 583 button = ACTION_KBD_CURSOR_LEFT;
704 if (button == KBD_RIGHT || button == (KBD_RIGHT | BUTTON_REPEAT)) 584 if (button == ACTION_KBD_RIGHT)
705 button = KBD_CURSOR_RIGHT; 585 button = ACTION_KBD_CURSOR_RIGHT;
706#ifdef KBD_RC_LEFT
707 if (button == KBD_RC_LEFT || button == (KBD_RC_LEFT | BUTTON_REPEAT))
708 button = KBD_RC_CURSOR_LEFT;
709 if (button == KBD_RC_RIGHT || button == (KBD_RC_RIGHT | BUTTON_REPEAT))
710 button = KBD_RC_CURSOR_RIGHT;
711 } 586 }
712#endif 587#endif
713#endif
714 588
715 switch ( button ) { 589 switch ( button ) {
716 590
717#ifdef KBD_RC_ABORT 591 case ACTION_KBD_ABORT:
718 case KBD_RC_ABORT:
719#endif
720 case KBD_ABORT:
721 FOR_NB_SCREENS(l) 592 FOR_NB_SCREENS(l)
722 screens[l].setfont(FONT_UI); 593 screens[l].setfont(FONT_UI);
723 594
@@ -727,11 +598,7 @@ int kbd_input(char* text, int buflen)
727 return -1; 598 return -1;
728 break; 599 break;
729 600
730#if defined(KBD_PAGE_FLIP) 601 case ACTION_KBD_PAGE_FLIP:
731 case KBD_PAGE_FLIP:
732#ifdef KBD_RC_PAGE_FLIP
733 case KBD_RC_PAGE_FLIP:
734#endif
735#ifdef KBD_MORSE_INPUT 602#ifdef KBD_MORSE_INPUT
736 if (morse_mode) 603 if (morse_mode)
737 break; 604 break;
@@ -745,13 +612,10 @@ int kbd_input(char* text, int buflen)
745 kbd_spellchar(param[l].kbd_buf[k]); 612 kbd_spellchar(param[l].kbd_buf[k]);
746 } 613 }
747 break; 614 break;
748#endif
749 615
750#ifdef KBD_MORSE_INPUT 616#ifdef KBD_MORSE_INPUT
751 case KBD_MORSE_INPUT: 617 case ACTION_KBD_MORSE_INPUT:
752#ifdef KBD_RC_MORSE_INPUT 618
753 case KBD_RC_MORSE_INPUT:
754#endif
755 morse_mode = !morse_mode; 619 morse_mode = !morse_mode;
756 FOR_NB_SCREENS(l) 620 FOR_NB_SCREENS(l)
757 { 621 {
@@ -765,12 +629,8 @@ int kbd_input(char* text, int buflen)
765 /* FIXME: We should talk something like Morse mode.. */ 629 /* FIXME: We should talk something like Morse mode.. */
766 break; 630 break;
767#endif 631#endif
768#ifdef KBD_RC_RIGHT 632
769 case KBD_RC_RIGHT: 633 case ACTION_KBD_RIGHT:
770 case KBD_RC_RIGHT | BUTTON_REPEAT:
771#endif
772 case KBD_RIGHT:
773 case KBD_RIGHT | BUTTON_REPEAT:
774#ifdef KBD_MORSE_INPUT 634#ifdef KBD_MORSE_INPUT
775 if (morse_mode) 635 if (morse_mode)
776 break; 636 break;
@@ -806,12 +666,8 @@ int kbd_input(char* text, int buflen)
806 } 666 }
807 } 667 }
808 break; 668 break;
809#ifdef KBD_RC_LEFT 669
810 case KBD_RC_LEFT: 670 case ACTION_KBD_LEFT:
811 case KBD_RC_LEFT | BUTTON_REPEAT:
812#endif
813 case KBD_LEFT:
814 case KBD_LEFT | BUTTON_REPEAT:
815#ifdef KBD_MORSE_INPUT 671#ifdef KBD_MORSE_INPUT
816 if (morse_mode) 672 if (morse_mode)
817 break; 673 break;
@@ -852,12 +708,7 @@ int kbd_input(char* text, int buflen)
852 } 708 }
853 break; 709 break;
854 710
855#ifdef KBD_RC_DOWN 711 case ACTION_KBD_DOWN:
856 case KBD_RC_DOWN:
857 case KBD_RC_DOWN | BUTTON_REPEAT:
858#endif
859 case KBD_DOWN:
860 case KBD_DOWN | BUTTON_REPEAT:
861#ifdef KBD_MORSE_INPUT 712#ifdef KBD_MORSE_INPUT
862 if (morse_mode) 713 if (morse_mode)
863 break; 714 break;
@@ -895,12 +746,7 @@ int kbd_input(char* text, int buflen)
895 } 746 }
896 break; 747 break;
897 748
898#ifdef KBD_RC_UP 749 case ACTION_KBD_UP:
899 case KBD_RC_UP:
900 case KBD_RC_UP | BUTTON_REPEAT:
901#endif
902 case KBD_UP:
903 case KBD_UP | BUTTON_REPEAT:
904#ifdef KBD_MORSE_INPUT 750#ifdef KBD_MORSE_INPUT
905 if (morse_mode) 751 if (morse_mode)
906 break; 752 break;
@@ -938,27 +784,13 @@ int kbd_input(char* text, int buflen)
938 } 784 }
939 break; 785 break;
940 786
941#ifdef KBD_RC_DONE 787 case ACTION_KBD_DONE:
942 case KBD_RC_DONE:
943#endif
944 case KBD_DONE:
945 /* accepts what was entered and continues */ 788 /* accepts what was entered and continues */
946#ifdef KBD_DONE_PRE
947 if ((lastbutton != KBD_DONE_PRE)
948#ifdef KBD_RC_DONE_PRE
949 && (lastbutton != KBD_RC_DONE_PRE)
950#endif
951 )
952 break;
953#endif
954 done = true; 789 done = true;
955 break; 790 break;
956 791
957#ifdef KBD_MORSE_INPUT 792#ifdef KBD_MORSE_INPUT
958#ifdef KBD_RC_SELECT 793 case ACTION_KBD_MORSE_SELECT:
959 case KBD_RC_SELECT | BUTTON_REL:
960#endif
961 case KBD_SELECT | BUTTON_REL:
962 if (morse_mode && morse_reading) 794 if (morse_mode && morse_reading)
963 { 795 {
964 morse_code <<= 1; 796 morse_code <<= 1;
@@ -969,15 +801,11 @@ int kbd_input(char* text, int buflen)
969 break; 801 break;
970#endif 802#endif
971 803
972#ifdef KBD_RC_SELECT 804 case ACTION_KBD_SELECT:
973 case KBD_RC_SELECT: 805 case ACTION_KBD_SELECT_REM:
974 806 if (button == ACTION_KBD_SELECT_REM)
975 if (button == KBD_RC_SELECT)
976 char_screen = 1; 807 char_screen = 1;
977#endif 808 else
978 case KBD_SELECT:
979
980 if (button == KBD_SELECT)
981 char_screen = 0; 809 char_screen = 0;
982#ifdef KBD_MORSE_INPUT 810#ifdef KBD_MORSE_INPUT
983 if (morse_mode) 811 if (morse_mode)
@@ -993,14 +821,6 @@ int kbd_input(char* text, int buflen)
993#endif 821#endif
994 822
995 /* inserts the selected char */ 823 /* inserts the selected char */
996#ifdef KBD_SELECT_PRE
997 if ((lastbutton != KBD_SELECT_PRE)
998#ifdef KBD_RC_SELECT_PRE
999 && (lastbutton != KBD_RC_SELECT_PRE)
1000#endif
1001 )
1002 break;
1003#endif
1004#ifdef KBD_MODES 824#ifdef KBD_MODES
1005 if (line_edit) { /* select doubles as backspace in line_edit */ 825 if (line_edit) { /* select doubles as backspace in line_edit */
1006 if (hangul) { 826 if (hangul) {
@@ -1088,12 +908,7 @@ int kbd_input(char* text, int buflen)
1088 break; 908 break;
1089 909
1090#ifndef KBD_MODES 910#ifndef KBD_MODES
1091#ifdef KBD_RC_BACKSPACE 911 case ACTION_KBD_BACKSPACE:
1092 case KBD_RC_BACKSPACE:
1093 case KBD_RC_BACKSPACE | BUTTON_REPEAT:
1094#endif
1095 case KBD_BACKSPACE:
1096 case KBD_BACKSPACE | BUTTON_REPEAT:
1097 if (hangul) 912 if (hangul)
1098 { 913 {
1099 if (htail) 914 if (htail)
@@ -1116,12 +931,8 @@ int kbd_input(char* text, int buflen)
1116 talk_spell(text, false); /* speak revised text */ 931 talk_spell(text, false); /* speak revised text */
1117 break; 932 break;
1118 933
1119#ifdef KBD_RC_CURSOR_RIGHT 934 case ACTION_KBD_CURSOR_RIGHT:
1120 case KBD_RC_CURSOR_RIGHT: 935
1121 case KBD_RC_CURSOR_RIGHT | BUTTON_REPEAT:
1122#endif
1123 case KBD_CURSOR_RIGHT:
1124 case KBD_CURSOR_RIGHT | BUTTON_REPEAT:
1125 if (hangul) 936 if (hangul)
1126 hangul = false; 937 hangul = false;
1127 938
@@ -1133,12 +944,8 @@ int kbd_input(char* text, int buflen)
1133 } 944 }
1134 break; 945 break;
1135 946
1136#ifdef KBD_RC_CURSOR_LEFT 947 case ACTION_KBD_CURSOR_LEFT:
1137 case KBD_RC_CURSOR_LEFT: 948
1138 case KBD_RC_CURSOR_LEFT | BUTTON_REPEAT:
1139#endif
1140 case KBD_CURSOR_LEFT:
1141 case KBD_CURSOR_LEFT | BUTTON_REPEAT:
1142 if (hangul) 949 if (hangul)
1143 hangul = false; 950 hangul = false;
1144 if (editpos) 951 if (editpos)