Index: apps/keymaps/keymap-fuzeplus.c =================================================================== --- apps/keymaps/keymap-fuzeplus.c (révision 31064) +++ apps/keymaps/keymap-fuzeplus.c (copie de travail) @@ -33,45 +33,150 @@ * Insert LAST_ITEM_IN_LIST at the end of each mapping */ static const struct button_mapping button_context_standard[] = { - { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, - { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, - { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, + { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, - { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, - { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, - - { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, - { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, - { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, + { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, + { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, + { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, + { ACTION_STD_MENU, BUTTON_TWO_FINGERS|BUTTON_REL, BUTTON_TWO_FINGERS }, + { ACTION_STD_KEYLOCK, BUTTON_TWO_FINGERS|BUTTON_REL, BUTTON_TWO_FINGERS|BUTTON_REPEAT }, LAST_ITEM_IN_LIST }; /* button_context_standard */ static const struct button_mapping button_context_wps[] = { - { ACTION_WPS_PLAY, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE }, - { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, - { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, - { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, - { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, - { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, - { ACTION_WPS_STOP, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_PLAYPAUSE }, - { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, - { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT,BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, - { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_PLAY, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE }, - { ACTION_WPS_MENU, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, - { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, + { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, + { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, + { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, + { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, + { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, + { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, + { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_WPS_BROWSE, BUTTON_BOTTOMRIGHT|BUTTON_REL, BUTTON_BOTTOMRIGHT }, + { ACTION_WPS_MENU, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, + { ACTION_WPS_MENU, BUTTON_NONE, BUTTON_NONE}, + { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, + { ACTION_WPS_VIEW_PLAYLIST, BUTTON_BOTTOMLEFT|BUTTON_REL, BUTTON_BOTTOMLEFT }, + + { ACTION_STD_KEYLOCK, BUTTON_TWO_FINGERS|BUTTON_REL, BUTTON_TWO_FINGERS|BUTTON_REPEAT}, + LAST_ITEM_IN_LIST }; /* button_context_wps */ +static const struct button_mapping button_context_keyboard[] = { + { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, + { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_SELECT, BUTTON_PLAYPAUSE, BUTTON_NONE }, + { ACTION_KBD_DONE, BUTTON_TWO_FINGERS|BUTTON_REL, BUTTON_NONE }, + { ACTION_KBD_ABORT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, + { ACTION_KBD_BACKSPACE, BUTTON_BACK, BUTTON_NONE }, + { ACTION_KBD_BACKSPACE, BUTTON_BACK|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_CURSOR_LEFT, BUTTON_BOTTOMLEFT, BUTTON_NONE }, + { ACTION_KBD_CURSOR_LEFT, BUTTON_BOTTOMLEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_KBD_CURSOR_RIGHT, BUTTON_BOTTOMRIGHT, BUTTON_NONE }, + { ACTION_KBD_CURSOR_RIGHT, BUTTON_BOTTOMRIGHT|BUTTON_REPEAT, BUTTON_NONE }, + LAST_ITEM_IN_LIST +}; /* button_context_keyboard */ + +static const struct button_mapping button_context_list[] = { + { ACTION_LISTTREE_PGUP, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_LISTTREE_PGUP, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_LISTTREE_PGDOWN, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_LISTTREE_PGDOWN, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, +#ifdef HAVE_VOLUME_IN_LIST + { ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, + { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, + { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, +#endif + { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, + { ACTION_TREE_WPS, BUTTON_BOTTOMLEFT|BUTTON_REL, BUTTON_BOTTOMLEFT }, + { ACTION_TREE_WPS, BUTTON_BOTTOMRIGHT|BUTTON_REL, BUTTON_BOTTOMRIGHT }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_list */ + +static const struct button_mapping button_context_tree[] = { + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST) +}; /* button_context_tree */ + +static const struct button_mapping button_context_radio[] = { + { ACTION_FM_MENU, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_FM_PRESET, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, + { ACTION_FM_STOP, BUTTON_PLAYPAUSE, BUTTON_NONE }, + { ACTION_FM_MODE, BUTTON_BOTTOMLEFT|BUTTON_REL, BUTTON_BOTTOMLEFT }, + { ACTION_FM_EXIT, BUTTON_BACK, BUTTON_NONE }, + { ACTION_FM_PLAY, BUTTON_PLAYPAUSE, BUTTON_NONE }, + { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, + { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + + { ACTION_STD_KEYLOCK, BUTTON_TWO_FINGERS|BUTTON_REL, BUTTON_TWO_FINGERS|BUTTON_REPEAT}, + + LAST_ITEM_IN_LIST +}; /* button_context_radio */ + +static const struct button_mapping button_context_recscreen[] = { + { ACTION_REC_PAUSE, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE }, + { ACTION_STD_CANCEL, BUTTON_BACK|BUTTON_REL, BUTTON_BACK }, + { ACTION_REC_NEWFILE, BUTTON_BOTTOMRIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_MENU, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, + { ACTION_STD_PREV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_STD_NEXT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_recscreen */ + +static const struct button_mapping button_context_time[] = { + { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, + { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, + { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, + { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, + { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, + { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, + { ACTION_STD_CANCEL, BUTTON_BACK|BUTTON_REL, BUTTON_BACK }, + + LAST_ITEM_IN_LIST +}; /* button_context_time */ + +static const struct button_mapping button_context_yesno[] = { + { ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE }, + + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) +}; /* button_context_yesno */ + /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ const struct button_mapping* get_context_mapping(int context) { @@ -80,12 +185,22 @@ case CONTEXT_STD: return button_context_standard; case CONTEXT_WPS: - return button_context_wps; - + return button_context_wps; + case CONTEXT_YESNOSCREEN: + return button_context_yesno; + case CONTEXT_SETTINGS_TIME: + return button_context_time; + case CONTEXT_KEYBOARD: + return button_context_keyboard; + case CONTEXT_FM: + return button_context_radio; + case CONTEXT_LIST: + return button_context_list; case CONTEXT_TREE: - case CONTEXT_LIST: - case CONTEXT_MAINMENU: - case CONTEXT_SETTINGS: + return button_context_tree; + case CONTEXT_RECSCREEN: + return button_context_recscreen; + default: return button_context_standard; } Index: firmware/target/arm/imx233/sansa-fuzeplus/button-target.h =================================================================== --- firmware/target/arm/imx233/sansa-fuzeplus/button-target.h (révision 31064) +++ firmware/target/arm/imx233/sansa-fuzeplus/button-target.h (copie de travail) @@ -29,21 +29,26 @@ bool button_debug_screen(void); /* Main unit's buttons */ -#define BUTTON_POWER 0x00000001 -#define BUTTON_VOL_UP 0x00000002 -#define BUTTON_VOL_DOWN 0x00000004 +#define BUTTON_POWER 0x00000001 +#define BUTTON_VOL_UP 0x00000002 +#define BUTTON_VOL_DOWN 0x00000004 /* Virtual buttons */ -#define BUTTON_LEFT 0x00000008 -#define BUTTON_UP 0x00000010 -#define BUTTON_RIGHT 0x00000020 -#define BUTTON_DOWN 0x00000040 -#define BUTTON_SELECT 0x00000080 -#define BUTTON_PLAYPAUSE 0x00000100 -#define BUTTON_BACK 0x00000200 +#define BUTTON_LEFT 0x00000008 +#define BUTTON_UP 0x00000010 +#define BUTTON_RIGHT 0x00000020 +#define BUTTON_DOWN 0x00000040 +#define BUTTON_SELECT 0x00000080 +#define BUTTON_PLAYPAUSE 0x00000100 +#define BUTTON_BACK 0x00000200 +#define BUTTON_BOTTOMLEFT 0x00000208 +#define BUTTON_BOTTOMRIGHT 0x00000220 +/* Touch the thauchpad with two finger */ +#define BUTTON_TWO_FINGERS 0x00000280 #define BUTTON_MAIN (BUTTON_VOL_UP|BUTTON_VOL_DOWN|BUTTON_POWER|BUTTON_LEFT| \ BUTTON_UP|BUTTON_RIGHT|BUTTON_DOWN|BUTTON_SELECT| \ - BUTTON_PLAYPAUSE|BUTTON_BACK) + BUTTON_PLAYPAUSE|BUTTON_BACK| \ + BUTTON_TWO_FINGERS|BUTTON_BOTTOMRIGHT|BUTTON_BOTTOMLEFT) #define BUTTON_REMOTE 0 Index: firmware/target/arm/imx233/sansa-fuzeplus/button-fuzeplus.c =================================================================== --- firmware/target/arm/imx233/sansa-fuzeplus/button-fuzeplus.c (révision 31064) +++ firmware/target/arm/imx233/sansa-fuzeplus/button-fuzeplus.c (copie de travail) @@ -41,6 +41,7 @@ int sensor_resol = rmi_read_single(RMI_2D_SENSOR_RESOLUTION(0)); int min_dist = rmi_read_single(RMI_2D_MIN_DIST); int gesture_settings = rmi_read_single(RMI_2D_GESTURE_SETTINGS); + int sensibility_counter = 0; union { unsigned char data; @@ -157,10 +158,15 @@ if(btns & BUTTON_VOL_DOWN || btns & BUTTON_VOL_UP) { if(btns & BUTTON_VOL_UP) - sensitivity.value++; + sensibility_counter++; if(btns & BUTTON_VOL_DOWN) - sensitivity.value--; - rmi_write(RMI_2D_SENSITIVITY_ADJ, 1, &sensitivity.data); + sensibility_counter--; + if((sensibility_counter == -15) || (sensibility_counter == 15)) + { + sensitivity.value += (sensibility_counter / 15); + sensibility_counter = 0; + } + rmi_write(RMI_2D_SENSITIVITY_ADJ, 1, &sensitivity.data); } yield(); @@ -179,13 +185,15 @@ static struct button_area_t button_areas[] = { - {1300, 600, 1700, 1100, BUTTON_SELECT}, - {500, 600, 1100, 1100, BUTTON_LEFT}, - {1900, 600, 2500, 1100, BUTTON_RIGHT}, - {1300, 0, 1700, 400, BUTTON_DOWN}, - {1300, 1300, 1700, 1800, BUTTON_UP}, - {2500, 1600, 2900, 1800, BUTTON_PLAYPAUSE}, - {300, 1600, 500, 1800, BUTTON_BACK}, + {1003, 658, 2006, 1316, BUTTON_SELECT}, + {0, 658, 1003, 1316, BUTTON_LEFT}, + {2006, 658, 3009, 1316, BUTTON_RIGHT}, + {1003, 0 , 2006, 658, BUTTON_DOWN}, + {1003, 1316, 2006, 1974, BUTTON_UP}, + {2006, 1316, 3009, 1974, BUTTON_PLAYPAUSE}, + {0, 1316, 1003, 1974, BUTTON_BACK}, + {0, 0 , 1003, 658, BUTTON_BOTTOMLEFT}, + {2006, 0 , 3009, 658, BUTTON_BOTTOMRIGHT}, {0, 0, 0, 0, 0}, }; @@ -255,10 +263,18 @@ int absolute_y = u.s.absolute.y_msb << 8 | u.s.absolute.y_lsb; int nr_fingers = u.s.absolute.misc & 7; - if(nr_fingers == 0) - touchpad_btns = 0; - else - touchpad_btns = find_button(absolute_x, absolute_y); + switch (nr_fingers) + { + case 1: + touchpad_btns = find_button(absolute_x, absolute_y); + break; + case 2: + touchpad_btns = BUTTON_TWO_FINGERS; + break; + default: + touchpad_btns = 0; + break; + } /* enable interrupt */ imx233_setup_pin_irq(0, 27, true, true, false, &rmi_attn_cb); } @@ -301,7 +317,7 @@ rmi_read(RMI_PRODUCT_ID, RMI_PRODUCT_ID_LEN, product_id); /* adjust sensitivity based on product ID like the OF */ if(product_id[1] > 2) - rmi_write_single(RMI_2D_SENSITIVITY_ADJ, 0); + rmi_write_single(RMI_2D_SENSITIVITY_ADJ, 13); else rmi_write_single(RMI_2D_SENSITIVITY_ADJ, 13);