1
0
Fork 0
forked from len0rd/rockbox

Plugin rework 2: (most) Compile-time keyboard configuration, for Ondio adaption. (all) Now using the default event handler, standard placement is now in switch() default case. (calendar, chip8) Fixed usb handling.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@5295 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2004-10-17 00:54:09 +00:00
parent 7c2496d35a
commit 79afbafa66
7 changed files with 235 additions and 91 deletions

View file

@ -104,6 +104,22 @@ F3: equal to "="
#define SIGN(x) ((x)<0?-1:1)
#define ABS(x) ((x)<0?-(x):(x))
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define CALCULATOR_QUIT BUTTON_OFF
#define CALCULATOR_INPUT BUTTON_PLAY
#define CALCULATOR_CALC BUTTON_F3
#define CALCULATOR_OPERATORS BUTTON_F2
#define CALCULATOR_CLEAR BUTTON_F1
#elif CONFIG_KEYPAD == ONDIO_PAD
#define CALCULATOR_QUIT BUTTON_OFF
#define CALCULATOR_INPUT_CALC_PRE BUTTON_MENU
#define CALCULATOR_INPUT (BUTTON_MENU | BUTTON_REL)
#define CALCULATOR_CALC (BUTTON_MENU | BUTTON_REPEAT)
#endif
static struct plugin_api* rb;
enum {
@ -187,6 +203,7 @@ int m, n, prev_m, prev_n; /* position index for button */
#define CAL_BUTTON (m*5+n)
int btn = BUTTON_NONE;
int lastbtn = BUTTON_NONE;
/* Status of calculator */
enum {cal_normal, /* 0, normal status, display result */
@ -1090,7 +1107,7 @@ Handle buttons on basic screen
----------------------------------------------------------------------- */
void basicButtonsProcess(void){
switch (btn) {
case BUTTON_PLAY:
case CALCULATOR_INPUT:
if (calStatus == cal_error && (CAL_BUTTON != btn_C) ) break;
flashButton(CAL_BUTTON);
switch( CAL_BUTTON ){
@ -1143,7 +1160,9 @@ void basicButtonsProcess(void){
case btn_add:
if(!operInputted) {twoOperands(); operInputted = true;}
oper = buttonChar[basicButtons][m][n][0];
case_BUTTON_F2: /* F2 shortkey entrance */
#ifdef CALCULATOR_OPERATORS
case_cycle_operators: /* F2 shortkey entrance */
#endif
calStatus = cal_normal;
formatResult();
operand = result;
@ -1159,7 +1178,8 @@ void basicButtonsProcess(void){
} /* switch (CAL_BUTTON) */
break;
case BUTTON_F2:
#ifdef CALCULATOR_OPERATORS
case CALCULATOR_OPERATORS:
if (calStatus == cal_error) break;
if (!operInputted) {twoOperands(); operInputted = true;}
switch (oper){
@ -1169,9 +1189,11 @@ void basicButtonsProcess(void){
case '-': oper = '*'; flashButton(btn_time); break;
case '*': oper = '/'; flashButton(btn_div); break;
}
goto case_BUTTON_F2;
goto case_cycle_operators;
break;
case BUTTON_F3:
#endif
case CALCULATOR_CALC:
if (calStatus == cal_error) break;
flashButton(btn_equal);
goto case_btn_equal;
@ -1186,7 +1208,7 @@ Handle buttons on scientific screen
----------------------------------------------------------------------- */
void sciButtonsProcess(void){
switch (btn) {
case BUTTON_PLAY:
case CALCULATOR_INPUT:
if (calStatus == cal_error && (CAL_BUTTON != sci_sci) ) break;
flashButton(CAL_BUTTON);
switch( CAL_BUTTON ){
@ -1225,7 +1247,8 @@ void sciButtonsProcess(void){
} /* switch (CAL_BUTTON) */
break;
case BUTTON_F2:
#ifdef CALCULATOR_OPERATORS
case CALCULATOR_OPERATORS:
if (calStatus == cal_error) break;
if (!operInputted) {twoOperands(); operInputted = true;}
switch (oper){
@ -1240,7 +1263,9 @@ void sciButtonsProcess(void){
operand = result;
operandPower = power;
break;
case BUTTON_F3:
#endif
case CALCULATOR_CALC:
if (calStatus == cal_error) break;
formatResult();
calStatus = cal_normal;
@ -1268,9 +1293,16 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
while (calStatus != cal_exit ) {
btn = rb->button_get_w_tmo(HZ/2);
switch (btn) {
case BUTTON_PLAY:
case BUTTON_F2:
case BUTTON_F3:
case CALCULATOR_INPUT:
case CALCULATOR_CALC:
#ifdef CALCULATOR_INPUT_CALC_PRE
if (lastbtn != CALCULATOR_INPUT_CALC_PRE)
break;
/* no unconditional break; here! */
#endif
#ifdef CALCULATOR_OPERATORS
case CALCULATOR_OPERATORS:
#endif
switch(buttonGroup){
case basicButtons:
basicButtonsProcess();
@ -1281,18 +1313,20 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
}
break;
case BUTTON_F1:
switch(calStatus){
case cal_typing:
case cal_dotted:
doDelete();
break;
default: /* cal_normal, cal_error, cal_exit */
clearMem();
break;
}
printResult();
break;
#ifdef CALCULATOR_CLEAR
case CALCULATOR_CLEAR:
switch(calStatus){
case cal_typing:
case cal_dotted:
doDelete();
break;
default: /* cal_normal, cal_error, cal_exit */
clearMem();
break;
}
printResult();
break;
#endif
case BUTTON_LEFT:
case BUTTON_LEFT | BUTTON_REPEAT:
@ -1304,7 +1338,7 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
case BUTTON_DOWN | BUTTON_REPEAT:
moveButton();
break;
case BUTTON_OFF:
case CALCULATOR_QUIT:
calStatus = cal_exit;
printResult();
break;
@ -1313,6 +1347,8 @@ enum plugin_status plugin_start(struct plugin_api* api, void* parameter)
return PLUGIN_USB_CONNECTED;
break;
} /* switch (btn) */
if (btn != BUTTON_NONE)
lastbtn = btn;
} /* while (calStatus != cal_exit ) */
/* rb->splash(HZ*2, true, "Hello world!"); */