A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 529 lines 26 kB view raw
1/*************************************************************************** 2 * __________ __ ___. 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7 * \/ \/ \/ \/ \/ 8 * $Id$ 9 * 10 * Copyright (C) 2006 Jonathan Gordon 11 * 12 * This program is free software; you can redistribute it and/or 13 * modify it under the terms of the GNU General Public License 14 * as published by the Free Software Foundation; either version 2 15 * of the License, or (at your option) any later version. 16 * 17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 18 * KIND, either express or implied. 19 * 20 ****************************************************************************/ 21 22/* * 23 * Button Code Definitions for iaudio m5/x5 targets 24 * 25 * Note that button combos are incompatible on this targets, except for those 26 * with the power button. But these are discouraged because the the power button 27 * also does the hardware poweroff 28 * 29 * \TODO test! 30 */ 31 32#include "config.h" 33#include "action.h" 34#include "button.h" 35#include "settings.h" 36 37/* CONTEXT_CUSTOM's used in this file... 38 39CONTEXT_CUSTOM|CONTEXT_TREE = the standard list/tree defines (without directions) 40 41 42*/ 43 44/** Keep things alphabetized for easy reference but standard contexts can 45 ** be first and sub-alphebetized. 46 **/ 47 48/** Standard Button Contexts **/ 49static const struct button_mapping button_context_standard[] = { 50 { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, 51 { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 52 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, 53 { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 54 55 { ACTION_STD_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, 56 { ACTION_STD_CANCEL, BUTTON_LEFT, BUTTON_NONE }, 57 { ACTION_STD_OK, BUTTON_RIGHT, BUTTON_NONE }, 58 { ACTION_STD_OK, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 59 { ACTION_STD_OK, BUTTON_PLAY, BUTTON_NONE }, 60 { ACTION_STD_MENU, BUTTON_REC|BUTTON_REL, BUTTON_REC }, 61 { ACTION_STD_QUICKSCREEN,BUTTON_REC|BUTTON_REPEAT, BUTTON_REC }, 62 { ACTION_STD_CANCEL, BUTTON_POWER, BUTTON_NONE }, 63 64 LAST_ITEM_IN_LIST 65}; /* button_context_standard */ 66 67static const struct button_mapping remote_button_context_standard[] = { 68 { ACTION_STD_PREV, BUTTON_RC_VOL_UP, BUTTON_NONE }, 69 { ACTION_STD_PREVREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 70 { ACTION_STD_NEXT, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, 71 { ACTION_STD_NEXTREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 72 73 { ACTION_STD_CONTEXT, BUTTON_RC_MODE|BUTTON_REPEAT, BUTTON_RC_MODE }, 74 { ACTION_STD_CANCEL, BUTTON_RC_REW, BUTTON_NONE }, 75 { ACTION_STD_OK, BUTTON_RC_FF, BUTTON_NONE }, 76 { ACTION_STD_OK, BUTTON_RC_PLAY, BUTTON_NONE }, 77 { ACTION_STD_MENU, BUTTON_RC_MENU|BUTTON_REL, BUTTON_RC_MENU }, 78 { ACTION_STD_QUICKSCREEN, BUTTON_RC_MENU|BUTTON_REPEAT, BUTTON_RC_MENU }, 79 80 LAST_ITEM_IN_LIST 81}; /* remote_button_context_standard */ 82 83/** Bookmark Screen **/ 84static const struct button_mapping button_context_bmark[] = { 85 { ACTION_BMS_DELETE, BUTTON_REC|BUTTON_REPEAT, BUTTON_REC }, 86 87 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), 88}; /* button_context_settings_bmark */ 89 90static const struct button_mapping remote_button_context_bmark[] = { 91 { ACTION_BMS_DELETE, BUTTON_RC_REC|BUTTON_REPEAT, BUTTON_RC_REC }, 92 93 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), 94}; /* button_context_settings_bmark */ 95 96/** FM Radio Screen **/ 97static const struct button_mapping button_context_radio[] = { 98 { ACTION_FM_MENU, BUTTON_SELECT | BUTTON_REPEAT, BUTTON_NONE }, 99 { ACTION_FM_PRESET, BUTTON_SELECT | BUTTON_REL, BUTTON_SELECT }, 100 { ACTION_FM_STOP, BUTTON_POWER, BUTTON_NONE }, 101 { ACTION_FM_MODE, BUTTON_PLAY | BUTTON_REPEAT, BUTTON_PLAY }, 102 { ACTION_FM_EXIT, BUTTON_REC | BUTTON_REL, BUTTON_REC }, 103 { ACTION_FM_PLAY, BUTTON_PLAY | BUTTON_REL, BUTTON_PLAY }, 104 { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 105 { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, 106 { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 107 108 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) 109}; /* button_context_radio */ 110 111static const struct button_mapping remote_button_context_radio[] = { 112 { ACTION_FM_MENU, BUTTON_RC_MODE|BUTTON_REPEAT, BUTTON_RC_MODE }, 113 { ACTION_FM_PRESET, BUTTON_RC_MODE|BUTTON_REL, BUTTON_RC_MODE }, 114 { ACTION_FM_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY }, 115 { ACTION_FM_PLAY, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, 116 { ACTION_FM_MODE, BUTTON_RC_REC|BUTTON_REPEAT, BUTTON_RC_REC }, 117 { ACTION_FM_EXIT, BUTTON_RC_MENU|BUTTON_REL, BUTTON_RC_MENU }, 118 { ACTION_STD_PREVREPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, 119 { ACTION_STD_NEXT, BUTTON_RC_FF, BUTTON_NONE }, 120 { ACTION_STD_NEXTREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, 121 122 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) 123}; /* remote_button_context_radio */ 124 125/** Keyboard **/ 126static const struct button_mapping button_context_keyboard[] = { 127 { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, 128 { ACTION_KBD_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 129 { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 130 { ACTION_KBD_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 131 { ACTION_KBD_UP, BUTTON_UP, BUTTON_NONE }, 132 { ACTION_KBD_UP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 133 { ACTION_KBD_DOWN, BUTTON_DOWN, BUTTON_NONE }, 134 { ACTION_KBD_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 135 { ACTION_KBD_SELECT, BUTTON_SELECT, BUTTON_NONE }, 136 { ACTION_KBD_DONE, BUTTON_PLAY, BUTTON_NONE }, 137 { ACTION_KBD_ABORT, BUTTON_REC, BUTTON_NONE }, 138 { ACTION_KBD_MORSE_SELECT, BUTTON_SELECT|BUTTON_REL, BUTTON_NONE }, 139 140 LAST_ITEM_IN_LIST 141}; /* button_context_keyboard */ 142 143static const struct button_mapping remote_button_context_keyboard[] = { 144 { ACTION_KBD_LEFT, BUTTON_RC_REW, BUTTON_NONE }, 145 { ACTION_KBD_LEFT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, 146 { ACTION_KBD_RIGHT, BUTTON_RC_FF, BUTTON_NONE }, 147 { ACTION_KBD_RIGHT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, 148 { ACTION_KBD_UP, BUTTON_RC_VOL_UP, BUTTON_NONE }, 149 { ACTION_KBD_UP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 150 { ACTION_KBD_DOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, 151 { ACTION_KBD_DOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 152 { ACTION_KBD_PAGE_FLIP, BUTTON_RC_MODE, BUTTON_NONE }, 153 { ACTION_KBD_SELECT, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, 154 { ACTION_KBD_DONE, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY }, 155 { ACTION_KBD_ABORT, BUTTON_RC_REC, BUTTON_NONE }, 156 157 LAST_ITEM_IN_LIST 158}; /* remote_button_context_keyboard */ 159 160/** Pitchscreen **/ 161static const struct button_mapping button_context_pitchscreen[] = { 162 { ACTION_PS_INC_SMALL, BUTTON_UP, BUTTON_NONE }, 163 { ACTION_PS_INC_BIG, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 164 { ACTION_PS_DEC_SMALL, BUTTON_DOWN, BUTTON_NONE }, 165 { ACTION_PS_DEC_BIG, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 166 { ACTION_PS_NUDGE_LEFT, BUTTON_LEFT, BUTTON_NONE }, 167 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_LEFT|BUTTON_REL, BUTTON_NONE }, 168 { ACTION_PS_NUDGE_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 169 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RIGHT|BUTTON_REL, BUTTON_NONE }, 170 { ACTION_PS_TOGGLE_MODE, BUTTON_SELECT, BUTTON_NONE }, 171 { ACTION_PS_RESET, BUTTON_POWER, BUTTON_NONE }, 172 { ACTION_PS_EXIT, BUTTON_PLAY, BUTTON_NONE }, 173 { ACTION_PS_SLOWER, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 174 { ACTION_PS_FASTER, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 175 176 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 177}; /* button_context_pitchscreen */ 178 179static const struct button_mapping remote_button_context_pitchscreen[] = { 180 { ACTION_PS_INC_SMALL, BUTTON_RC_VOL_UP, BUTTON_NONE }, 181 { ACTION_PS_INC_BIG, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 182 { ACTION_PS_DEC_SMALL, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, 183 { ACTION_PS_DEC_BIG, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 184 { ACTION_PS_NUDGE_LEFT, BUTTON_RC_REW, BUTTON_NONE }, 185 { ACTION_PS_NUDGE_LEFTOFF, BUTTON_RC_REW|BUTTON_REL, BUTTON_NONE }, 186 { ACTION_PS_NUDGE_RIGHT, BUTTON_RC_FF, BUTTON_NONE }, 187 { ACTION_PS_NUDGE_RIGHTOFF, BUTTON_RC_FF|BUTTON_REL, BUTTON_NONE }, 188 { ACTION_PS_TOGGLE_MODE, BUTTON_RC_MODE, BUTTON_NONE }, 189 { ACTION_PS_RESET, BUTTON_RC_REC, BUTTON_NONE }, 190 { ACTION_PS_EXIT, BUTTON_RC_PLAY, BUTTON_NONE }, 191 { ACTION_PS_SLOWER, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, 192 { ACTION_PS_FASTER, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, 193 194 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 195}; /* remote_button_context_pitchscreen */ 196 197/** Quickscreen **/ 198static const struct button_mapping button_context_quickscreen[] = { 199 { ACTION_QS_TOP, BUTTON_UP, BUTTON_NONE }, 200 { ACTION_QS_TOP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 201 { ACTION_QS_DOWN, BUTTON_DOWN, BUTTON_NONE }, 202 { ACTION_QS_DOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 203 { ACTION_QS_LEFT, BUTTON_LEFT, BUTTON_NONE }, 204 { ACTION_QS_LEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 205 { ACTION_QS_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 206 { ACTION_QS_RIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 207 { ACTION_STD_CANCEL, BUTTON_REC, BUTTON_NONE }, 208 209 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 210}; /* button_context_quickscreen */ 211 212static const struct button_mapping remote_button_context_quickscreen[] = { 213 { ACTION_QS_TOP, BUTTON_RC_VOL_UP, BUTTON_NONE }, 214 { ACTION_QS_TOP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 215 { ACTION_QS_DOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, 216 { ACTION_QS_DOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 217 { ACTION_QS_LEFT, BUTTON_RC_REW, BUTTON_NONE }, 218 { ACTION_QS_LEFT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, 219 { ACTION_QS_RIGHT, BUTTON_RC_FF, BUTTON_NONE }, 220 { ACTION_QS_RIGHT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, 221 { ACTION_STD_CANCEL, BUTTON_RC_REC, BUTTON_NONE }, 222 223 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 224}; /* remote_button_context_quickscreen */ 225 226/** Recording Screen **/ 227static const struct button_mapping button_context_recscreen[] = { 228 { ACTION_REC_PAUSE, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, 229 { ACTION_STD_CANCEL, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, 230 { ACTION_REC_NEWFILE, BUTTON_REC|BUTTON_REL, BUTTON_REC }, 231 { ACTION_STD_MENU, BUTTON_REC|BUTTON_REPEAT, BUTTON_REC }, 232 { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, 233 { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 234 { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, 235 { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 236 237 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 238}; /* button_context_recscreen */ 239 240static const struct button_mapping remote_button_context_recscreen[] = { 241 { ACTION_REC_PAUSE, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, 242 { ACTION_STD_CANCEL, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY }, 243 { ACTION_REC_NEWFILE, BUTTON_RC_REC, BUTTON_NONE }, 244 { ACTION_STD_MENU, BUTTON_RC_MENU, BUTTON_NONE }, 245 { ACTION_SETTINGS_INC, BUTTON_RC_FF, BUTTON_NONE }, 246 { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, 247 { ACTION_SETTINGS_DEC, BUTTON_RC_REW, BUTTON_NONE }, 248 { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, 249 250 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 251}; /* remote_button_context_recscreen */ 252 253/** Settings - General Mappings **/ 254static const struct button_mapping button_context_settings[] = { 255 { ACTION_SETTINGS_INC, BUTTON_UP, BUTTON_NONE }, 256 { ACTION_SETTINGS_INCREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 257 { ACTION_SETTINGS_DEC, BUTTON_DOWN, BUTTON_NONE }, 258 { ACTION_SETTINGS_DECREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 259 { ACTION_STD_PREV, BUTTON_LEFT, BUTTON_NONE }, 260 { ACTION_STD_CANCEL, BUTTON_REC, BUTTON_NONE }, 261 262 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 263}; /* button_context_settings */ 264 265static const struct button_mapping remote_button_context_settings[] = { 266 { ACTION_SETTINGS_INC, BUTTON_RC_VOL_UP, BUTTON_NONE }, 267 { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 268 { ACTION_SETTINGS_DEC, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, 269 { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 270 { ACTION_STD_PREV, BUTTON_RC_REW, BUTTON_NONE }, 271 { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 272 { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, 273 { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 274 { ACTION_STD_CANCEL, BUTTON_RC_REC, BUTTON_NONE }, 275 276 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 277}; /* remote_button_context_settings */ 278 279/** Settings - Using Sliders **/ 280static const struct button_mapping button_context_settings_r_is_inc[] = { 281 { ACTION_SETTINGS_INC, BUTTON_RIGHT, BUTTON_NONE }, 282 { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 283 { ACTION_SETTINGS_DEC, BUTTON_LEFT, BUTTON_NONE }, 284 { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 285 { ACTION_STD_PREV, BUTTON_UP, BUTTON_NONE }, 286 { ACTION_STD_PREVREPEAT, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 287 { ACTION_STD_NEXT, BUTTON_DOWN, BUTTON_NONE }, 288 { ACTION_STD_NEXTREPEAT, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 289 { ACTION_STD_CANCEL, BUTTON_REC, BUTTON_NONE }, 290 291 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 292}; /* button_context_settings_r_is_inc */ 293 294static const struct button_mapping remote_button_context_settings_r_is_inc[] = { 295 { ACTION_SETTINGS_INC, BUTTON_RC_FF, BUTTON_NONE }, 296 { ACTION_SETTINGS_INCREPEAT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, 297 { ACTION_SETTINGS_DEC, BUTTON_RC_REW, BUTTON_NONE }, 298 { ACTION_SETTINGS_DECREPEAT, BUTTON_RC_REW|BUTTON_REPEAT,BUTTON_NONE }, 299 { ACTION_STD_CANCEL, BUTTON_RC_REC, BUTTON_NONE }, 300 301 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 302}; /* remote_button_context_settings_r_is_inc */ 303 304/** Settings - Time/Date **/ 305static const struct button_mapping button_context_settings_time[] = { 306 { ACTION_STD_PREVREPEAT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 307 { ACTION_STD_NEXT, BUTTON_RIGHT, BUTTON_NONE }, 308 { ACTION_STD_NEXTREPEAT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 309 310 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) 311}; /* button_context_settings */ 312 313/** Tree **/ 314static const struct button_mapping button_context_tree[] = { 315 { ACTION_NONE, BUTTON_PLAY, BUTTON_NONE }, 316 { ACTION_TREE_WPS, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, 317 { ACTION_TREE_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, 318 319 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 320}; /* button_context_tree */ 321 322static const struct button_mapping remote_button_context_tree[] = { 323 { ACTION_NONE, BUTTON_RC_PLAY, BUTTON_NONE }, 324 { ACTION_TREE_WPS, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, 325 { ACTION_TREE_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY }, 326 327 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 328}; /* remote_button_context_tree */ 329 330static const struct button_mapping button_context_tree_scroll_lr[] = { 331 { ACTION_NONE, BUTTON_LEFT, BUTTON_NONE }, 332 { ACTION_STD_CANCEL, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, 333 { ACTION_TREE_ROOT_INIT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_LEFT }, 334 { ACTION_TREE_PGLEFT, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 335 { ACTION_NONE, BUTTON_RIGHT, BUTTON_NONE }, 336 { ACTION_STD_OK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, 337 { ACTION_TREE_PGRIGHT, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 338 339 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), 340}; /* button_context_tree_scroll_lr */ 341 342static const struct button_mapping remote_button_context_tree_scroll_lr[] = { 343 { ACTION_NONE, BUTTON_RC_REW, BUTTON_NONE }, 344 { ACTION_STD_CANCEL, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW }, 345 { ACTION_TREE_ROOT_INIT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_RC_REW }, 346 { ACTION_TREE_PGLEFT, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, 347 { ACTION_NONE, BUTTON_RC_FF, BUTTON_NONE }, 348 { ACTION_STD_OK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, 349 { ACTION_TREE_PGRIGHT, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, 350 351 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), 352}; /* remote_button_context_tree_scroll_lr */ 353 354/** While-Playing Screen (WPS) **/ 355static const struct button_mapping button_context_wps[] = { 356 { ACTION_WPS_PLAY, BUTTON_PLAY|BUTTON_REL, BUTTON_PLAY }, 357 { ACTION_WPS_STOP, BUTTON_PLAY|BUTTON_REPEAT, BUTTON_PLAY }, 358 { ACTION_WPS_SKIPPREV, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT }, 359 { ACTION_WPS_SEEKBACK, BUTTON_LEFT|BUTTON_REPEAT, BUTTON_NONE }, 360 { ACTION_WPS_STOPSEEK, BUTTON_LEFT|BUTTON_REL, BUTTON_LEFT|BUTTON_REPEAT }, 361 { ACTION_WPS_SKIPNEXT, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT }, 362 { ACTION_WPS_SEEKFWD, BUTTON_RIGHT|BUTTON_REPEAT, BUTTON_NONE }, 363 { ACTION_WPS_STOPSEEK, BUTTON_RIGHT|BUTTON_REL, BUTTON_RIGHT|BUTTON_REPEAT }, 364 365 { ACTION_WPS_VOLDOWN, BUTTON_DOWN, BUTTON_NONE }, 366 { ACTION_WPS_VOLDOWN, BUTTON_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 367 { ACTION_WPS_VOLUP, BUTTON_UP, BUTTON_NONE }, 368 { ACTION_WPS_VOLUP, BUTTON_UP|BUTTON_REPEAT, BUTTON_NONE }, 369 370 { ACTION_WPS_BROWSE, BUTTON_SELECT|BUTTON_REL, BUTTON_SELECT }, 371 { ACTION_WPS_CONTEXT, BUTTON_SELECT|BUTTON_REPEAT, BUTTON_SELECT }, 372 { ACTION_WPS_MENU, BUTTON_REC|BUTTON_REL, BUTTON_REC }, 373 { ACTION_WPS_QUICKSCREEN, BUTTON_REC|BUTTON_REPEAT, BUTTON_REC }, 374 /* 375 * Can't really do combos on M5 376 * { ACTION_WPS_VIEW_PLAYLIST, BUTTON_REC|BUTTON_SELECT, BUTTON_NONE }, 377 */ 378 379 LAST_ITEM_IN_LIST 380}; /* button_context_wps */ 381 382static const struct button_mapping remote_button_context_wps[] = { 383 { ACTION_WPS_PLAY, BUTTON_RC_PLAY|BUTTON_REL, BUTTON_RC_PLAY }, 384 { ACTION_WPS_STOP, BUTTON_RC_PLAY|BUTTON_REPEAT, BUTTON_RC_PLAY }, 385 { ACTION_WPS_SKIPPREV, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW }, 386 { ACTION_WPS_SEEKBACK, BUTTON_RC_REW|BUTTON_REPEAT, BUTTON_NONE }, 387 { ACTION_WPS_STOPSEEK, BUTTON_RC_REW|BUTTON_REL, BUTTON_RC_REW|BUTTON_REPEAT }, 388 { ACTION_WPS_SKIPNEXT, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF }, 389 { ACTION_WPS_SEEKFWD, BUTTON_RC_FF|BUTTON_REPEAT, BUTTON_NONE }, 390 { ACTION_WPS_STOPSEEK, BUTTON_RC_FF|BUTTON_REL, BUTTON_RC_FF|BUTTON_REPEAT }, 391 392 { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN, BUTTON_NONE }, 393 { ACTION_WPS_VOLDOWN, BUTTON_RC_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 394 { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP, BUTTON_NONE }, 395 { ACTION_WPS_VOLUP, BUTTON_RC_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 396 397 { ACTION_WPS_BROWSE, BUTTON_RC_MODE|BUTTON_REL, BUTTON_RC_MODE }, 398 { ACTION_WPS_CONTEXT, BUTTON_RC_MODE|BUTTON_REPEAT, BUTTON_RC_MODE }, 399 { ACTION_WPS_MENU, BUTTON_RC_MENU|BUTTON_REL, BUTTON_RC_MENU }, 400 { ACTION_WPS_QUICKSCREEN, BUTTON_RC_MENU|BUTTON_REPEAT, BUTTON_RC_MENU }, 401 402 LAST_ITEM_IN_LIST 403}; /* remote_button_context_wps */ 404 405/** Yes/No Screen **/ 406static const struct button_mapping button_context_yesnoscreen[] = { 407 { ACTION_YESNO_ACCEPT, BUTTON_SELECT, BUTTON_NONE }, 408 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 409}; /* button_context_settings_yesnoscreen */ 410 411static const struct button_mapping remote_button_context_yesnoscreen[] = { 412 { ACTION_YESNO_ACCEPT, BUTTON_RC_PLAY, BUTTON_NONE }, 413 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 414}; /* remote_button_context_settings_yesnoscreen */ 415 416 417static const struct button_mapping* get_context_mapping_remote( int context ) 418{ 419 context ^= CONTEXT_REMOTE; 420 421 switch (context) 422 { 423 /* anything that uses remote_button_context_standard */ 424 default: 425 return remote_button_context_standard; 426 427 /* remote contexts with special mapping */ 428 case CONTEXT_BOOKMARKSCREEN: 429 return remote_button_context_bmark; 430 431 case CONTEXT_FM: 432 return remote_button_context_radio; 433 434 case CONTEXT_KEYBOARD: 435 case CONTEXT_MORSE_INPUT: 436 return remote_button_context_keyboard; 437 438 case CONTEXT_PITCHSCREEN: 439 return remote_button_context_pitchscreen; 440 441 case CONTEXT_QUICKSCREEN: 442 return remote_button_context_quickscreen; 443 444 case CONTEXT_RECSCREEN: 445 return remote_button_context_recscreen; 446 447 case CONTEXT_SETTINGS: 448 return remote_button_context_settings; 449 450 case CONTEXT_SETTINGS_COLOURCHOOSER: 451 case CONTEXT_SETTINGS_EQ: 452 case CONTEXT_SETTINGS_TIME: 453 return remote_button_context_settings_r_is_inc; 454 455 case CONTEXT_TREE: 456 case CONTEXT_MAINMENU: 457 if (global_settings.hold_lr_for_scroll_in_list) 458 return remote_button_context_tree_scroll_lr; 459 /* else fall through to CONTEXT_TREE|CONTEXT_CUSTOM */ 460 case CONTEXT_TREE|CONTEXT_CUSTOM: 461 return remote_button_context_tree; 462 463 case CONTEXT_WPS: 464 return remote_button_context_wps; 465 466 case CONTEXT_YESNOSCREEN: 467 return remote_button_context_yesnoscreen; 468 } 469} 470 471const struct button_mapping* get_context_mapping( int context ) 472{ 473 if (context & CONTEXT_REMOTE) 474 return get_context_mapping_remote(context); 475 476 switch( context ) 477 { 478 /* anything that uses button_context_standard */ 479 case CONTEXT_LIST: 480 case CONTEXT_STD: 481 default: 482 return button_context_standard; 483 484 /* contexts with special mapping */ 485 case CONTEXT_BOOKMARKSCREEN: 486 return button_context_bmark; 487 488 case CONTEXT_FM: 489 return button_context_radio; 490 491 case CONTEXT_KEYBOARD: 492 case CONTEXT_MORSE_INPUT: 493 return button_context_keyboard; 494 495 case CONTEXT_PITCHSCREEN: 496 return button_context_pitchscreen; 497 498 case CONTEXT_QUICKSCREEN: 499 return button_context_quickscreen; 500 501 case CONTEXT_RECSCREEN: 502 return button_context_recscreen; 503 504 case CONTEXT_SETTINGS: 505 return button_context_settings; 506 507 case CONTEXT_SETTINGS_COLOURCHOOSER: 508 case CONTEXT_SETTINGS_EQ: 509 case CONTEXT_SETTINGS_RECTRIGGER: 510 return button_context_settings_r_is_inc; 511 512 case CONTEXT_SETTINGS_TIME: 513 return button_context_settings_time; 514 515 case CONTEXT_TREE: 516 case CONTEXT_MAINMENU: 517 if (global_settings.hold_lr_for_scroll_in_list) 518 return button_context_tree_scroll_lr; 519 /* else fall through to CONTEXT_TREE|CONTEXT_CUSTOM */ 520 case CONTEXT_TREE|CONTEXT_CUSTOM: 521 return button_context_tree; 522 523 case CONTEXT_WPS: 524 return button_context_wps; 525 526 case CONTEXT_YESNOSCREEN: 527 return button_context_yesnoscreen; 528 } 529}