A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd
at master 191 lines 7.5 kB view raw
1/*************************************************************************** 2 * __________ __ ___. 3 * Open \______ \ ____ ____ | | _\_ |__ _______ ___ 4 * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / 5 * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < 6 * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ 7 * \/ \/ \/ \/ \/ 8 * $Id$ 9 * 10 * Copyright (C) 2010 Maurus Cuelenaere 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/* Button Code Definitions for Android targets */ 23 24#include <stdio.h> 25#include <string.h> 26#include <stdlib.h> 27 28#include "config.h" 29#include "action.h" 30#include "button.h" 31#include "settings.h" 32 33/* 34 * The format of the list is as follows 35 * { Action Code, Button code, Prereq button code } 36 * if there's no need to check the previous button's value, use BUTTON_NONE 37 * Insert LAST_ITEM_IN_LIST at the end of each mapping 38 */ 39 40static const struct button_mapping button_context_standard[] = { 41 { ACTION_STD_PREV, BUTTON_DPAD_UP|BUTTON_REL, BUTTON_NONE }, 42 { ACTION_STD_NEXT, BUTTON_DPAD_DOWN|BUTTON_REL, BUTTON_NONE }, 43 44 { ACTION_STD_OK, BUTTON_DPAD_CENTER, BUTTON_NONE }, 45 { ACTION_STD_OK, BUTTON_DPAD_RIGHT|BUTTON_REL, BUTTON_NONE }, 46 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, 47 { ACTION_STD_CANCEL, BUTTON_BACK|BUTTON_REPEAT, BUTTON_BACK }, 48 { ACTION_STD_CANCEL, BUTTON_DPAD_LEFT|BUTTON_REL, BUTTON_NONE }, 49 50 { ACTION_STD_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, 51 { ACTION_STD_CONTEXT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, 52 53 LAST_ITEM_IN_LIST 54}; /* button_context_standard */ 55 56static const struct button_mapping button_context_wps[] = { 57 { ACTION_WPS_BROWSE, BUTTON_BACK, BUTTON_NONE }, 58 { ACTION_WPS_MENU, BUTTON_MENU|BUTTON_REL, BUTTON_MENU }, 59 { ACTION_WPS_CONTEXT, BUTTON_MENU|BUTTON_REPEAT, BUTTON_MENU }, 60 { ACTION_WPS_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, 61 { ACTION_WPS_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 62 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 63 { ACTION_WPS_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 64 65 LAST_ITEM_IN_LIST 66}; /* button_context_wps */ 67 68static const struct button_mapping button_context_list[] = { 69#ifdef HAVE_VOLUME_IN_LIST 70 { ACTION_LIST_VOLUP, BUTTON_VOL_UP|BUTTON_REPEAT, BUTTON_NONE }, 71 { ACTION_LIST_VOLUP, BUTTON_VOL_UP, BUTTON_NONE }, 72 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN, BUTTON_NONE }, 73 { ACTION_LIST_VOLDOWN, BUTTON_VOL_DOWN|BUTTON_REPEAT, BUTTON_NONE }, 74#endif 75 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 76}; /* button_context_list */ 77 78static const struct button_mapping button_context_tree[] = { 79 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST) 80}; /* button_context_tree */ 81 82static const struct button_mapping button_context_listtree_scroll_with_combo[] = { 83 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), 84}; 85 86static const struct button_mapping button_context_listtree_scroll_without_combo[] = { 87 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_TREE), 88}; 89 90static const struct button_mapping button_context_settings[] = { 91 { ACTION_SETTINGS_INC, BUTTON_DPAD_RIGHT|BUTTON_REL, BUTTON_NONE }, 92 { ACTION_SETTINGS_DEC, BUTTON_DPAD_LEFT|BUTTON_REL, BUTTON_NONE }, 93 { ACTION_STD_OK, BUTTON_DPAD_CENTER, BUTTON_NONE }, 94 { ACTION_STD_CANCEL, BUTTON_BACK, BUTTON_NONE }, 95 96 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 97}; /* button_context_settings */ 98 99static const struct button_mapping button_context_settings_right_is_inc[] = { 100 101 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 102}; /* button_context_settingsgraphical */ 103 104static const struct button_mapping button_context_yesno[] = { 105 { ACTION_YESNO_ACCEPT, BUTTON_DPAD_CENTER, BUTTON_NONE }, 106 107 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 108}; /* button_context_settings_yesno */ 109 110static const struct button_mapping button_context_colorchooser[] = { 111 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), 112}; /* button_context_colorchooser */ 113 114static const struct button_mapping button_context_eq[] = { 115 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_CUSTOM|CONTEXT_SETTINGS), 116}; /* button_context_eq */ 117 118/** Bookmark Screen **/ 119static const struct button_mapping button_context_bmark[] = { 120 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_LIST), 121}; /* button_context_bmark */ 122 123static const struct button_mapping button_context_time[] = { 124 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS), 125}; /* button_context_time */ 126 127static const struct button_mapping button_context_quickscreen[] = { 128 { ACTION_STD_CANCEL, BUTTON_BACK|BUTTON_REL, BUTTON_NONE }, 129 130 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 131}; /* button_context_quickscreen */ 132 133static const struct button_mapping button_context_pitchscreen[] = { 134 135 { ACTION_PS_INC_SMALL, BUTTON_DPAD_RIGHT|BUTTON_REL, BUTTON_NONE }, 136 { ACTION_PS_DEC_SMALL, BUTTON_DPAD_LEFT|BUTTON_REL, BUTTON_NONE }, 137 { ACTION_PS_EXIT, BUTTON_BACK, BUTTON_NONE }, 138 139 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 140}; /* button_context_pitchcreen */ 141 142 143static const struct button_mapping button_context_radio[] = { 144 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_SETTINGS) 145}; /* button_context_radio */ 146 147const struct button_mapping* target_get_context_mapping(int context) 148{ 149 switch (context) 150 { 151 case CONTEXT_STD: 152 return button_context_standard; 153 case CONTEXT_WPS: 154 return button_context_wps; 155 156 case CONTEXT_LIST: 157 return button_context_list; 158 case CONTEXT_MAINMENU: 159 case CONTEXT_TREE: 160 if (global_settings.hold_lr_for_scroll_in_list) 161 return button_context_listtree_scroll_without_combo; 162 else 163 return button_context_listtree_scroll_with_combo; 164 case CONTEXT_CUSTOM|CONTEXT_TREE: 165 return button_context_tree; 166 167 case CONTEXT_SETTINGS: 168 return button_context_settings; 169 case CONTEXT_CUSTOM|CONTEXT_SETTINGS: 170 case CONTEXT_SETTINGS_RECTRIGGER: 171 return button_context_settings_right_is_inc; 172 173 case CONTEXT_SETTINGS_COLOURCHOOSER: 174 return button_context_colorchooser; 175 case CONTEXT_SETTINGS_EQ: 176 return button_context_eq; 177 178 case CONTEXT_SETTINGS_TIME: 179 return button_context_time; 180 181 case CONTEXT_FM: 182 return button_context_radio; 183 case CONTEXT_BOOKMARKSCREEN: 184 return button_context_bmark; 185 case CONTEXT_QUICKSCREEN: 186 return button_context_quickscreen; 187 case CONTEXT_PITCHSCREEN: 188 return button_context_pitchscreen; 189 } 190 return button_context_standard; 191}