Rockbox open source high quality audio player as a Music Player Daemon
mpris rockbox mpd libadwaita audio rust zig deno
2
fork

Configure Feed

Select the types of activity you want to include in your feed.

fuze+: update keymap and touchpad driver based on FS#12405 with minor modifications. Thanks to Jean-Louis Biasini.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@31098 a1c6a512-1295-4272-9138-f99709370657

+462 -72
+359 -33
apps/keymaps/keymap-fuzeplus.c
··· 33 33 * Insert LAST_ITEM_IN_LIST at the end of each mapping 34 34 */ 35 35 static const struct button_mapping button_context_standard[] = { 36 - { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, 37 - { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, 38 - { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 39 - { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 40 - 41 - { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, 42 - { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, 43 - { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 44 - { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 45 - 46 - { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, 47 - { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, 48 - { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 36 + { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, 37 + { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 38 + { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, 39 + { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 40 + 41 + { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, 42 + { ACTION_STD_CANCEL, BUTTON_BACK|BUTTON_REL, BUTTON_BACK }, 43 + { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, 44 + 45 + 46 + { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 47 + { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, 48 + 49 + #ifdef HAVE_VOLUME_IN_LIST 50 + { ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 51 + { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, 52 + { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 53 + { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 54 + #endif 55 + 56 + { ACTION_TREE_WPS, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE }, 57 + { ACTION_TREE_STOP, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_NONE }, 58 + 59 + { ACTION_STD_KEYLOCK, BUTTON_POWER, BUTTON_NONE }, 60 + { ACTION_STD_KEYLOCK, BUTTON_TWO_FINGERS|BUTTON_REL, BUTTON_TWO_FINGERS|BUTTON_REPEAT }, 49 61 50 62 LAST_ITEM_IN_LIST 51 63 }; /* button_context_standard */ 52 64 65 + 66 + static const struct button_mapping button_context_list[] = { 67 + 68 + { ACTION_LISTTREE_PGUP, BUTTON_BOTTOMLEFT, BUTTON_NONE }, 69 + { ACTION_LISTTREE_PGUP, BUTTON_BOTTOMLEFT|BUTTON_REPEAT, BUTTON_BOTTOMLEFT }, 70 + { ACTION_LISTTREE_PGDOWN, BUTTON_BOTTOMRIGHT, BUTTON_NONE }, 71 + { ACTION_LISTTREE_PGDOWN, BUTTON_BOTTOMRIGHT|BUTTON_REPEAT, BUTTON_BOTTOMRIGHT }, 72 + #ifdef HAVE_HOTKEY 73 + { ACTION_TREE_HOTKEY, BUTTON_BACK|BUTTON_REL, BUTTON_BACK|BUTTON_REPEAT }, 74 + #endif 75 + 76 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 77 + }; /* button_context_list */ 78 + 53 79 static const struct button_mapping button_context_wps[] = { 54 - { ACTION_WPS_PLAY, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE }, 55 - { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, 56 - { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, 57 - { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 58 - { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 59 - { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, 60 - { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, 61 - { ACTION_WPS_STOP, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_PLAYPAUSE }, 62 - { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 63 - { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT,BUTTON_NONE }, 64 - { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, 65 - { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 80 + { ACTION_WPS_PLAY, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE }, 81 + { ACTION_WPS_STOP, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_NONE }, 82 + 83 + { ACTION_WPS_MENU, BUTTON_BACK|BUTTON_REL, BUTTON_BACK }, 84 + 85 + { ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 86 + { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE }, 87 + 88 + { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, 89 + { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT }, 90 + { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, 91 + { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, 92 + { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, 93 + { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, 94 + 95 + { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 96 + { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 97 + { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, 98 + { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 99 + 100 + { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 101 + { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 102 + { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, 103 + { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, 66 104 67 - { ACTION_WPS_MENU, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 68 - { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, 105 + { ACTION_WPS_REC, BUTTON_BACK|BUTTON_REPEAT, BUTTON_BACK }, 106 + { ACTION_WPS_PITCHSCREEN, BUTTON_BOTTOMLEFT|BUTTON_REPEAT, BUTTON_BOTTOMLEFT }, 107 + { ACTION_WPS_QUICKSCREEN, BUTTON_BOTTOMLEFT|BUTTON_REL, BUTTON_BOTTOMLEFT }, 108 + { ACTION_WPS_ID3SCREEN, BUTTON_BOTTOMRIGHT|BUTTON_REPEAT, BUTTON_BOTTOMRIGHT }, 69 109 70 - LAST_ITEM_IN_LIST 110 + { ACTION_WPS_HOTKEY, BUTTON_BOTTOMRIGHT|BUTTON_REL, BUTTON_BOTTOMRIGHT }, 111 + 112 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 71 113 }; /* button_context_wps */ 72 114 115 + static const struct button_mapping button_context_keyboard[] = { 116 + { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, 117 + { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 118 + { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 119 + { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 120 + { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, 121 + { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 122 + { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, 123 + { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 73 124 125 + { ACTION_KBD_CURSOR_LEFT, BUTTON_BOTTOMLEFT, BUTTON_NONE }, 126 + { ACTION_KBD_CURSOR_LEFT, BUTTON_BOTTOMLEFT|BUTTON_REPEAT, BUTTON_NONE }, 127 + { ACTION_KBD_CURSOR_RIGHT, BUTTON_BOTTOMRIGHT, BUTTON_NONE }, 128 + { ACTION_KBD_CURSOR_RIGHT, BUTTON_BOTTOMRIGHT|BUTTON_REPEAT, BUTTON_NONE }, 129 + 130 + { ACTION_KBD_BACKSPACE, BUTTON_BACK, BUTTON_NONE }, 131 + { ACTION_KBD_BACKSPACE, BUTTON_BACK|BUTTON_REPEAT, BUTTON_NONE }, 132 + 133 + { ACTION_KBD_SELECT, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE }, 134 + { ACTION_KBD_DONE, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE }, 135 + { ACTION_KBD_ABORT, BUTTON_POWER, BUTTON_NONE }, 136 + 137 + LAST_ITEM_IN_LIST 138 + }; /* button_context_keyboard */ 139 + 140 + static const struct button_mapping button_context_quickscreen[] = { 141 + { ACTION_STD_CANCEL, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE }, 142 + { ACTION_STD_CANCEL, BUTTON_BACK|BUTTON_REL, BUTTON_NONE }, 143 + { ACTION_STD_CANCEL, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_NONE }, 144 + { ACTION_STD_CANCEL, BUTTON_BOTTOMRIGHT|BUTTON_REL, BUTTON_NONE }, 145 + { ACTION_STD_CANCEL, BUTTON_BOTTOMLEFT|BUTTON_REL, BUTTON_NONE }, 146 + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REL, BUTTON_NONE }, 147 + { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 148 + { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REL, BUTTON_NONE }, 149 + { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 150 + { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, 151 + { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 152 + { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, 153 + { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 154 + 155 + LAST_ITEM_IN_LIST 156 + }; /* button_context_quickscreen */ 157 + 158 + static const struct button_mapping button_context_tree[] = { 159 + 160 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST) 161 + }; /* button_context_tree */ 162 + 163 + static const struct button_mapping button_context_radio[] = { 164 + { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, 165 + { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 166 + { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, 167 + { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 168 + 169 + { ACTION_FM_MENU, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE }, 170 + { ACTION_FM_PRESET, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 171 + { ACTION_FM_PLAY, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE }, 172 + { ACTION_FM_STOP, BUTTON_BOTTOMRIGHT|BUTTON_REL, BUTTON_NONE }, 173 + { ACTION_FM_MODE, BUTTON_BOTTOMLEFT|BUTTON_REL, BUTTON_BOTTOMLEFT }, 174 + 175 + { ACTION_FM_EXIT, BUTTON_BACK|BUTTON_REL, BUTTON_NONE }, 176 + 177 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 178 + }; /* button_context_radio */ 179 + 180 + static const struct button_mapping button_context_recscreen[] = { 181 + { ACTION_REC_PAUSE, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE }, 182 + { ACTION_REC_NEWFILE, BUTTON_BOTTOMRIGHT|BUTTON_REPEAT, BUTTON_NONE }, 183 + 184 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) 185 + }; /* button_context_recscreen */ 186 + 187 + static const struct button_mapping button_context_time[] = { 188 + 189 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) 190 + }; /* button_context_time */ 191 + 192 + static const struct button_mapping button_context_settings_right_is_inc[] = { 193 + { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, 194 + { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 195 + { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, 196 + { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 197 + 198 + { ACTION_SETTINGS_RESET, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_NONE }, 199 + 200 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 201 + }; /* button_context_settingsgraphical */ 202 + 203 + static const struct button_mapping button_context_settings[] = { 204 + { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, 205 + { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 206 + { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, 207 + { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 208 + 209 + { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, 210 + { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 211 + { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, 212 + { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 213 + 214 + { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 215 + 216 + { ACTION_SETTINGS_RESET, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, 217 + 218 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 219 + }; /* button_context_settings */ 220 + 221 + static const struct button_mapping button_context_colorchooser[] = { 222 + { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 223 + { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, 224 + 225 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), 226 + }; /* button_context_colorchooser */ 227 + 228 + static const struct button_mapping button_context_eq[] = { 229 + { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 230 + 231 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), 232 + }; /* button_context_eq */ 233 + 234 + /* Bookmark Screen */ 235 + static const struct button_mapping button_context_bmark[] = { 236 + { ACTION_BMS_DELETE, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, 237 + 238 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), 239 + }; /* button_context_bmark */ 240 + 241 + static const struct button_mapping button_context_pitchscreen[] = { 242 + 243 + { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, 244 + { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 245 + { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, 246 + { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 247 + { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, 248 + { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, 249 + { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 250 + { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, 251 + { ACTION_PS_TOGGLE_MODE, BUTTON_PLAYPAUSE, BUTTON_NONE }, 252 + { ACTION_PS_TOGGLE_MODE, BUTTON_BOTTOMRIGHT, BUTTON_NONE }, 253 + { ACTION_PS_RESET, BUTTON_SELECT, BUTTON_NONE }, 254 + { ACTION_PS_EXIT, BUTTON_BACK, BUTTON_NONE }, 255 + { ACTION_PS_SLOWER, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 256 + { ACTION_PS_FASTER, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 257 + LAST_ITEM_IN_LIST 258 + }; /* button_context_pitchcreen */ 259 + 260 + static const struct button_mapping button_context_yesno[] = { 261 + { ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE }, 262 + 263 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 264 + }; /* button_context_yesno */ 265 + 266 + #ifdef USB_ENABLE_HID 267 + static const struct button_mapping button_context_usb_hid[] = { 268 + { ACTION_USB_HID_MODE_SWITCH_NEXT, BUTTON_POWER|BUTTON_REL, BUTTON_POWER }, 269 + { ACTION_USB_HID_MODE_SWITCH_PREV, BUTTON_POWER|BUTTON_REPEAT, BUTTON_POWER }, 270 + 271 + LAST_ITEM_IN_LIST 272 + }; /* button_context_usb_hid */ 273 + 274 + static const struct button_mapping button_context_usb_hid_mode_multimedia[] = { 275 + 276 + { ACTION_USB_HID_MULTIMEDIA_VOLUME_DOWN, BUTTON_DOWN, BUTTON_NONE }, 277 + { ACTION_USB_HID_MULTIMEDIA_VOLUME_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 278 + { ACTION_USB_HID_MULTIMEDIA_VOLUME_UP, BUTTON_UP, BUTTON_NONE }, 279 + { ACTION_USB_HID_MULTIMEDIA_VOLUME_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 280 + { ACTION_USB_HID_MULTIMEDIA_VOLUME_DOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 281 + { ACTION_USB_HID_MULTIMEDIA_VOLUME_DOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 282 + { ACTION_USB_HID_MULTIMEDIA_VOLUME_UP, BUTTON_VOL_UP, BUTTON_NONE }, 283 + { ACTION_USB_HID_MULTIMEDIA_VOLUME_UP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 284 + { ACTION_USB_HID_MULTIMEDIA_VOLUME_MUTE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 285 + { ACTION_USB_HID_MULTIMEDIA_VOLUME_MUTE, BUTTON_BACK|BUTTON_REL, BUTTON_BACK }, 286 + { ACTION_USB_HID_MULTIMEDIA_PLAYBACK_PLAY_PAUSE, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE }, 287 + { ACTION_USB_HID_MULTIMEDIA_PLAYBACK_STOP, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_NONE }, 288 + { ACTION_USB_HID_MULTIMEDIA_PLAYBACK_TRACK_PREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, 289 + { ACTION_USB_HID_MULTIMEDIA_PLAYBACK_TRACK_NEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, 290 + 291 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID) 292 + }; /* button_context_usb_hid_mode_multimedia */ 293 + 294 + 295 + static const struct button_mapping button_context_usb_hid_mode_presentation[] = { 296 + { ACTION_USB_HID_PRESENTATION_SLIDESHOW_START, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE }, 297 + { ACTION_USB_HID_PRESENTATION_SLIDESHOW_LEAVE, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_PLAYPAUSE }, 298 + { ACTION_USB_HID_PRESENTATION_SLIDE_PREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, 299 + { ACTION_USB_HID_PRESENTATION_SLIDE_NEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, 300 + { ACTION_USB_HID_PRESENTATION_SLIDE_FIRST, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, 301 + { ACTION_USB_HID_PRESENTATION_SLIDE_LAST, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT }, 302 + { ACTION_USB_HID_PRESENTATION_SCREEN_BLACK, BUTTON_BOTTOMRIGHT|BUTTON_REL, BUTTON_BOTTOMRIGHT }, 303 + { ACTION_USB_HID_PRESENTATION_SCREEN_WHITE, BUTTON_BOTTOMRIGHT|BUTTON_REPEAT, BUTTON_BOTTOMRIGHT }, 304 + { ACTION_USB_HID_PRESENTATION_LINK_PREV, BUTTON_UP, BUTTON_NONE }, 305 + { ACTION_USB_HID_PRESENTATION_LINK_PREV, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 306 + { ACTION_USB_HID_PRESENTATION_LINK_NEXT, BUTTON_DOWN, BUTTON_NONE }, 307 + { ACTION_USB_HID_PRESENTATION_LINK_NEXT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 308 + { ACTION_USB_HID_PRESENTATION_MOUSE_CLICK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 309 + { ACTION_USB_HID_PRESENTATION_MOUSE_OVER, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, 310 + 311 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID) 312 + }; /* button_context_usb_hid_mode_presentation */ 313 + 314 + static const struct button_mapping button_context_usb_hid_mode_browser[] = { 315 + { ACTION_USB_HID_BROWSER_SCROLL_UP, BUTTON_UP, BUTTON_NONE }, 316 + { ACTION_USB_HID_BROWSER_SCROLL_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 317 + { ACTION_USB_HID_BROWSER_SCROLL_DOWN, BUTTON_DOWN, BUTTON_NONE }, 318 + { ACTION_USB_HID_BROWSER_SCROLL_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 319 + 320 + { ACTION_USB_HID_BROWSER_ZOOM_IN, BUTTON_PLAYPAUSE|BUTTON_REPEAT, BUTTON_NONE }, 321 + { ACTION_USB_HID_BROWSER_ZOOM_OUT, BUTTON_BOTTOMRIGHT|BUTTON_REPEAT, BUTTON_NONE }, 322 + { ACTION_USB_HID_BROWSER_ZOOM_RESET, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, 323 + { ACTION_USB_HID_BROWSER_ZOOM_RESET, BUTTON_PLAYPAUSE|BUTTON_BOTTOMRIGHT|BUTTON_REPEAT, BUTTON_PLAYPAUSE|BUTTON_BOTTOMRIGHT }, 324 + { ACTION_USB_HID_BROWSER_TAB_PREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, 325 + { ACTION_USB_HID_BROWSER_TAB_NEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, 326 + { ACTION_USB_HID_BROWSER_TAB_CLOSE, BUTTON_BACK|BUTTON_REPEAT, BUTTON_BACK }, 327 + { ACTION_USB_HID_BROWSER_HISTORY_BACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, 328 + { ACTION_USB_HID_BROWSER_HISTORY_FORWARD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_RIGHT }, 329 + { ACTION_USB_HID_BROWSER_VIEW_FULL_SCREEN, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 330 + 331 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID) 332 + }; /* button_context_usb_hid_mode_browser */ 333 + 334 + #ifdef HAVE_USB_HID_MOUSE 335 + static const struct button_mapping button_context_usb_hid_mode_mouse[] = { 336 + { ACTION_USB_HID_MOUSE_UP, BUTTON_UP, BUTTON_NONE }, 337 + { ACTION_USB_HID_MOUSE_UP_REP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 338 + { ACTION_USB_HID_MOUSE_DOWN, BUTTON_DOWN, BUTTON_NONE }, 339 + { ACTION_USB_HID_MOUSE_DOWN_REP, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 340 + { ACTION_USB_HID_MOUSE_LEFT, BUTTON_LEFT, BUTTON_NONE }, 341 + { ACTION_USB_HID_MOUSE_LEFT_REP, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 342 + { ACTION_USB_HID_MOUSE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 343 + { ACTION_USB_HID_MOUSE_RIGHT_REP, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 344 + 345 + { ACTION_USB_HID_MOUSE_BUTTON_LEFT, BUTTON_SELECT, BUTTON_NONE }, 346 + { ACTION_USB_HID_MOUSE_BUTTON_LEFT_REL, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE }, 347 + 348 + { ACTION_USB_HID_MOUSE_BUTTON_RIGHT, BUTTON_PLAYPAUSE, BUTTON_NONE }, 349 + { ACTION_USB_HID_MOUSE_BUTTON_RIGHT_REL, BUTTON_PLAYPAUSE|BUTTON_REL, BUTTON_PLAYPAUSE }, 350 + 351 + { ACTION_USB_HID_MOUSE_WHEEL_SCROLL_UP, BUTTON_BACK, BUTTON_NONE }, 352 + { ACTION_USB_HID_MOUSE_WHEEL_SCROLL_UP, BUTTON_BACK|BUTTON_REPEAT, BUTTON_NONE }, 353 + { ACTION_USB_HID_MOUSE_WHEEL_SCROLL_DOWN, BUTTON_BOTTOMLEFT, BUTTON_NONE }, 354 + { ACTION_USB_HID_MOUSE_WHEEL_SCROLL_DOWN, BUTTON_BOTTOMLEFT|BUTTON_REPEAT, BUTTON_NONE }, 355 + 356 + LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_USB_HID) 357 + }; /* button_context_usb_hid_mode_mouse */ 358 + #endif 359 + #endif 74 360 75 361 /* get_context_mapping returns a pointer to one of the above defined arrays depending on the context */ 76 362 const struct button_mapping* get_context_mapping(int context) ··· 79 365 { 80 366 case CONTEXT_STD: 81 367 return button_context_standard; 368 + case CONTEXT_SETTINGS: 369 + return button_context_settings; 82 370 case CONTEXT_WPS: 83 - return button_context_wps; 84 - 371 + return button_context_wps; 372 + case CONTEXT_YESNOSCREEN: 373 + return button_context_yesno; 374 + case CONTEXT_SETTINGS_TIME: 375 + return button_context_time; 376 + case CONTEXT_KEYBOARD: 377 + case CONTEXT_MORSE_INPUT: 378 + return button_context_keyboard; 379 + case CONTEXT_FM: 380 + return button_context_radio; 381 + case CONTEXT_LIST: 382 + return button_context_list; 85 383 case CONTEXT_TREE: 86 - case CONTEXT_LIST: 87 - case CONTEXT_MAINMENU: 88 - case CONTEXT_SETTINGS: 384 + return button_context_tree; 385 + case CONTEXT_SETTINGS_EQ: 386 + return button_context_eq; 387 + case CONTEXT_RECSCREEN: 388 + return button_context_recscreen; 389 + case CONTEXT_QUICKSCREEN: 390 + return button_context_quickscreen; 391 + case CONTEXT_BOOKMARKSCREEN: 392 + return button_context_bmark; 393 + case CONTEXT_PITCHSCREEN: 394 + return button_context_pitchscreen; 395 + case CONTEXT_SETTINGS_COLOURCHOOSER: 396 + return button_context_colorchooser; 397 + case CONTEXT_SETTINGS_RECTRIGGER: 398 + return button_context_settings_right_is_inc; 399 + case CONTEXT_CUSTOM|CONTEXT_SETTINGS: 400 + return button_context_settings_right_is_inc; 401 + #ifdef USB_ENABLE_HID 402 + case CONTEXT_USB_HID: 403 + return button_context_usb_hid; 404 + case CONTEXT_USB_HID_MODE_MULTIMEDIA: 405 + return button_context_usb_hid_mode_multimedia; 406 + case CONTEXT_USB_HID_MODE_PRESENTATION: 407 + return button_context_usb_hid_mode_presentation; 408 + case CONTEXT_USB_HID_MODE_BROWSER: 409 + return button_context_usb_hid_mode_browser; 410 + #ifdef HAVE_USB_HID_MOUSE 411 + case CONTEXT_USB_HID_MODE_MOUSE: 412 + return button_context_usb_hid_mode_mouse; 413 + #endif 414 + #endif 89 415 default: 90 416 return button_context_standard; 91 417 }
+1
docs/CREDITS
··· 609 609 Desu Rozen 610 610 Olivier Kaloudoff 611 611 Kessia Pinheiro 612 + Jean-Louis Biasini 612 613 613 614 The libmad team 614 615 The wavpack team
+6
firmware/export/config/sansafuzeplus.h
··· 37 37 /* define this to enable JPEG decoding */ 38 38 #define HAVE_JPEG 39 39 40 + /* Define this if a programmable hotkey is mapped */ 41 + #define HAVE_HOTKEY 42 + 40 43 /* define this if you have access to the quickscreen */ 41 44 #define HAVE_QUICKSCREEN 42 45 ··· 45 48 46 49 /* define this if you would like tagcache to build on this target */ 47 50 #define HAVE_TAGCACHE 51 + 52 + /* define this if the target has volume keys which can be used in the lists */ 53 + #define HAVE_VOLUME_IN_LIST 48 54 49 55 /* define this if you have LCD enable function */ 50 56 #define HAVE_LCD_ENABLE
+64 -19
firmware/target/arm/imx233/sansa-fuzeplus/button-fuzeplus.c
··· 41 41 int sensor_resol = rmi_read_single(RMI_2D_SENSOR_RESOLUTION(0)); 42 42 int min_dist = rmi_read_single(RMI_2D_MIN_DIST); 43 43 int gesture_settings = rmi_read_single(RMI_2D_GESTURE_SETTINGS); 44 + int sensibility_counter = 0; 44 45 union 45 46 { 46 47 unsigned char data; ··· 157 158 if(btns & BUTTON_VOL_DOWN || btns & BUTTON_VOL_UP) 158 159 { 159 160 if(btns & BUTTON_VOL_UP) 160 - sensitivity.value++; 161 + sensibility_counter++; 161 162 if(btns & BUTTON_VOL_DOWN) 162 - sensitivity.value--; 163 - rmi_write(RMI_2D_SENSITIVITY_ADJ, 1, &sensitivity.data); 163 + sensibility_counter--; 164 + if((sensibility_counter == -15) || (sensibility_counter == 15)) 165 + { 166 + sensitivity.value += (sensibility_counter / 15); 167 + sensibility_counter = 0; 168 + } 169 + rmi_write(RMI_2D_SENSITIVITY_ADJ, 1, &sensitivity.data); 164 170 } 165 171 166 172 yield(); ··· 179 185 180 186 static struct button_area_t button_areas[] = 181 187 { 182 - {1300, 600, 1700, 1100, BUTTON_SELECT}, 183 - {500, 600, 1100, 1100, BUTTON_LEFT}, 184 - {1900, 600, 2500, 1100, BUTTON_RIGHT}, 185 - {1300, 0, 1700, 400, BUTTON_DOWN}, 186 - {1300, 1300, 1700, 1800, BUTTON_UP}, 187 - {2500, 1600, 2900, 1800, BUTTON_PLAYPAUSE}, 188 - {300, 1600, 500, 1800, BUTTON_BACK}, 188 + {1003, 658, 2006, 1316, BUTTON_SELECT}, 189 + {0, 658, 1003, 1316, BUTTON_LEFT}, 190 + {2006, 658, 3009, 1316, BUTTON_RIGHT}, 191 + {1003, 0 , 2006, 658, BUTTON_DOWN}, 192 + {1003, 1316, 2006, 1974, BUTTON_UP}, 193 + {2006, 1316, 3009, 1974, BUTTON_PLAYPAUSE}, 194 + {0, 1316, 1003, 1974, BUTTON_BACK}, 195 + {0, 0 , 1003, 658, BUTTON_BOTTOMLEFT}, 196 + {2006, 0 , 3009, 658, BUTTON_BOTTOMRIGHT}, 189 197 {0, 0, 0, 0, 0}, 190 198 }; 191 199 192 200 #define RMI_INTERRUPT 1 193 201 194 202 static int touchpad_btns = 0; 203 + static bool two_fingers_mode = 0; 204 + static int button_delay = 0; 195 205 static long rmi_stack [DEFAULT_STACK_SIZE/sizeof(long)]; 196 206 static const char rmi_thread_name[] = "rmi"; 197 207 static struct event_queue rmi_queue; ··· 255 265 int absolute_y = u.s.absolute.y_msb << 8 | u.s.absolute.y_lsb; 256 266 int nr_fingers = u.s.absolute.misc & 7; 257 267 258 - if(nr_fingers == 0) 259 - touchpad_btns = 0; 260 - else 261 - touchpad_btns = find_button(absolute_x, absolute_y); 268 + /* Handle the single vs two fingers event considering the following issues: 269 + - When they are two fingers on the touchpad the signal often 270 + switch between 1 and 2 fingers. We use the bool 271 + two_fingers_mode to "lock" the two fingers's signal 272 + as long as the user doesn't release the touchpad 273 + - User can hit the device at first with only one finger while 274 + trying to do a double fingers's touch. In order to "smooth" 275 + the signal, we set a delay on single finger so that user as 276 + time to actually touch with 2 finger if he meant to. 277 + */ 278 + 279 + switch(nr_fingers) 280 + { 281 + case 2: 282 + /* enter two fingers mode */ 283 + two_fingers_mode = 1; 284 + touchpad_btns = BUTTON_TWO_FINGERS; 285 + break; 286 + case 1: 287 + /* Ignore any touch when in two fingers mode */ 288 + if (two_fingers_mode) 289 + touchpad_btns = BUTTON_TWO_FINGERS; 290 + else 291 + { 292 + if(button_delay > 2) 293 + touchpad_btns = find_button(absolute_x, absolute_y); 294 + else 295 + button_delay++; 296 + } 297 + break; 298 + case 0: 299 + /* reset two fingers mode and delay */ 300 + two_fingers_mode = 0; 301 + button_delay = 0; 302 + touchpad_btns = 0; 303 + break; 304 + default: 305 + break; 306 + } 307 + 262 308 /* enable interrupt */ 263 309 imx233_setup_pin_irq(0, 27, true, true, false, &rmi_attn_cb); 264 310 } ··· 299 345 300 346 char product_id[RMI_PRODUCT_ID_LEN]; 301 347 rmi_read(RMI_PRODUCT_ID, RMI_PRODUCT_ID_LEN, product_id); 302 - /* adjust sensitivity based on product ID like the OF */ 303 - if(product_id[1] > 2) 304 - rmi_write_single(RMI_2D_SENSITIVITY_ADJ, 0); 305 - else 306 - rmi_write_single(RMI_2D_SENSITIVITY_ADJ, 13); 348 + /* The OF adjust the sensitivity based on product_id[1] compared to 2. 349 + * Since it doesn't to work great, just hardcode the sensitivity to 350 + * some reasonable value for now. */ 351 + rmi_write_single(RMI_2D_SENSITIVITY_ADJ, 13); 307 352 308 353 rmi_write_single(RMI_2D_GESTURE_SETTINGS, 309 354 RMI_2D_GESTURE_PRESS_TIME_300MS |
+16 -11
firmware/target/arm/imx233/sansa-fuzeplus/button-target.h
··· 29 29 bool button_debug_screen(void); 30 30 31 31 /* Main unit's buttons */ 32 - #define BUTTON_POWER 0x00000001 33 - #define BUTTON_VOL_UP 0x00000002 34 - #define BUTTON_VOL_DOWN 0x00000004 32 + #define BUTTON_POWER 0x00000001 33 + #define BUTTON_VOL_UP 0x00000002 34 + #define BUTTON_VOL_DOWN 0x00000004 35 35 /* Virtual buttons */ 36 - #define BUTTON_LEFT 0x00000008 37 - #define BUTTON_UP 0x00000010 38 - #define BUTTON_RIGHT 0x00000020 39 - #define BUTTON_DOWN 0x00000040 40 - #define BUTTON_SELECT 0x00000080 41 - #define BUTTON_PLAYPAUSE 0x00000100 42 - #define BUTTON_BACK 0x00000200 36 + #define BUTTON_LEFT 0x00000008 37 + #define BUTTON_UP 0x00000010 38 + #define BUTTON_RIGHT 0x00000020 39 + #define BUTTON_DOWN 0x00000040 40 + #define BUTTON_SELECT 0x00000080 41 + #define BUTTON_PLAYPAUSE 0x00000100 42 + #define BUTTON_BACK 0x00000200 43 + #define BUTTON_BOTTOMLEFT 0x00000400 44 + #define BUTTON_BOTTOMRIGHT 0x00000800 45 + /* Touch the touchpad with two fingers */ 46 + #define BUTTON_TWO_FINGERS 0x000001000 43 47 44 48 #define BUTTON_MAIN (BUTTON_VOL_UP|BUTTON_VOL_DOWN|BUTTON_POWER|BUTTON_LEFT| \ 45 49 BUTTON_UP|BUTTON_RIGHT|BUTTON_DOWN|BUTTON_SELECT| \ 46 - BUTTON_PLAYPAUSE|BUTTON_BACK) 50 + BUTTON_PLAYPAUSE|BUTTON_BACK| \ 51 + BUTTON_TWO_FINGERS|BUTTON_BOTTOMRIGHT|BUTTON_BOTTOMLEFT) 47 52 48 53 #define BUTTON_REMOTE 0 49 54
+16 -9
uisimulator/buttonmap/sansa-fuzeplus.c
··· 49 49 case SDLK_KP9: 50 50 new_btn = BUTTON_PLAYPAUSE; 51 51 break; 52 - case SDLK_INSERT: 52 + case SDLK_KP0: 53 + new_btn = BUTTON_TWO_FINGERS; 54 + break; 53 55 case SDLK_KP7: 54 56 new_btn = BUTTON_BACK; 55 57 break; ··· 66 68 new_btn = BUTTON_VOL_DOWN; 67 69 break; 68 70 case SDLK_HOME: 71 + new_btn = BUTTON_POWER; 72 + break; 69 73 case SDLK_KP1: 70 - new_btn = BUTTON_POWER; 74 + new_btn = BUTTON_BOTTOMLEFT; 75 + break; 76 + case SDLK_KP3: 77 + new_btn = BUTTON_BOTTOMRIGHT; 71 78 break; 72 79 } 73 80 return new_btn; 74 81 } 75 82 76 83 struct button_map bm[] = { 77 - { SDLK_KP8, 70, 265, 35, "Scroll Back" }, 78 - { SDLK_KP9, 141, 255, 31, "Play" }, 79 - { SDLK_KP_MULTIPLY, 228, 267, 18, "Home" }, 84 + { SDLK_KP8, 70, 265, 35, "Up" }, 85 + { SDLK_KP9, 141, 255, 31, "Play/Pause" }, 80 86 { SDLK_LEFT, 69, 329, 31, "Left" }, 81 87 { SDLK_SPACE, 141, 330, 20, "Select" }, 82 88 { SDLK_RIGHT, 214, 331, 23, "Right" }, 83 - { SDLK_KP3, 142, 406, 30, "Menu" }, 84 - { SDLK_DOWN, 221, 384, 24, "Scroll Fwd" }, 85 - { SDLK_KP_MINUS, 270, 299, 25, "Power" }, 86 - { SDLK_h, 269, 358, 26, "Hold" }, 89 + { SDLK_KP1, 69, 406, 30, "Bottom Left" }, 90 + { SDLK_KP3, 142, 406, 30, "Bottom Right" }, 91 + { SDLK_DOWN, 221, 384, 24, "Down" }, 92 + { SDLK_KP_MINUS, 270, 150, 25, "Volume -" }, 93 + { SDLK_KP_PLUS, 270, 180, 25, "Volume +" }, 87 94 { 0, 0, 0, 0, "None" } 88 95 };