A modern Music Player Daemon based on Rockbox open source high quality audio player
libadwaita audio rust zig deno mpris rockbox mpd

surfansf28: More fixes:

* Use 16-bit audio output
* More audio tweaks (mute on startup, working volume control)
* Treat the rotary input as a scroll wheel (works now)

To-dos:

* Better global keymap (incorporate touchscreen)
* Turn on plugins and define the approximately eight bajillion keymaps
* Still have some audible pops when we turn on, need to figure out why
* Default Cabbiev2 comes off as rather crappy on this device

...I don't know how much work I will do on this thing, as the limited
number of physical controls (and a lack of a line-out) mean I'd never
want to use this thing myself.

Change-Id: I37229d92766495219ee989d9ae48b5ed79bd45f5

+26 -34
+16 -27
apps/keymaps/keymap-surfansf28.c
··· 52 52 { ACTION_WPS_STOPSEEK, BUTTON_NEXT | BUTTON_REL, BUTTON_NEXT | BUTTON_REPEAT }, 53 53 { ACTION_WPS_SKIPNEXT, BUTTON_NEXT | BUTTON_REL, BUTTON_NONE }, 54 54 { ACTION_WPS_SKIPPREV, BUTTON_PREV | BUTTON_REL, BUTTON_NONE }, 55 - { ACTION_WPS_VOLUP, BUTTON_RIGHT, BUTTON_NONE }, 56 - { ACTION_WPS_VOLUP, BUTTON_RIGHT | BUTTON_REPEAT , BUTTON_NONE }, 57 - { ACTION_WPS_VOLDOWN, BUTTON_LEFT, BUTTON_NONE }, 58 - { ACTION_WPS_VOLDOWN, BUTTON_LEFT | BUTTON_REPEAT, BUTTON_NONE }, 55 + { ACTION_WPS_VOLUP, BUTTON_SCROLL_FWD, BUTTON_NONE }, 56 + { ACTION_WPS_VOLDOWN, BUTTON_SCROLL_BACK, BUTTON_NONE }, 59 57 60 58 LAST_ITEM_IN_LIST 61 59 }; ··· 63 61 64 62 static const struct button_mapping button_context_list[] = 65 63 { 66 - { ACTION_LIST_VOLUP, BUTTON_RIGHT | BUTTON_REPEAT, BUTTON_NONE }, 67 - { ACTION_LIST_VOLUP, BUTTON_RIGHT, BUTTON_NONE }, 68 - { ACTION_LIST_VOLDOWN, BUTTON_LEFT, BUTTON_NONE }, 69 - { ACTION_LIST_VOLDOWN, BUTTON_LEFT | BUTTON_REPEAT, BUTTON_NONE }, 64 + { ACTION_WPS_VOLUP, BUTTON_SCROLL_FWD, BUTTON_NONE }, 65 + { ACTION_WPS_VOLDOWN, BUTTON_SCROLL_BACK, BUTTON_NONE }, 70 66 71 67 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), 72 68 }; ··· 92 88 93 89 static const struct button_mapping button_context_settings[] = 94 90 { 95 - { ACTION_SETTINGS_INC, BUTTON_RIGHT | BUTTON_REL, BUTTON_NONE }, 96 - { ACTION_SETTINGS_INCREPEAT, BUTTON_RIGHT | BUTTON_REPEAT, BUTTON_NONE }, 97 - { ACTION_SETTINGS_DEC, BUTTON_LEFT | BUTTON_REL, BUTTON_NONE }, 98 - { ACTION_SETTINGS_DECREPEAT, BUTTON_LEFT | BUTTON_REPEAT, BUTTON_NONE }, 91 + { ACTION_SETTINGS_INC, BUTTON_SCROLL_FWD, BUTTON_NONE }, 92 + { ACTION_SETTINGS_DEC, BUTTON_SCROLL_BACK, BUTTON_NONE }, 99 93 100 94 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), 101 95 }; ··· 118 112 static const struct button_mapping button_context_yesno[] = 119 113 { 120 114 { ACTION_YESNO_ACCEPT, BUTTON_PLAY, BUTTON_NONE }, 121 - { ACTION_YESNO_ACCEPT, BUTTON_LEFT, BUTTON_NONE }, 122 115 123 116 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD), 124 117 }; ··· 138 131 139 132 static const struct button_mapping button_context_keyboard[] = 140 133 { 141 - { ACTION_KBD_LEFT, BUTTON_LEFT, BUTTON_NONE }, 142 - { ACTION_KBD_LEFT, BUTTON_LEFT | BUTTON_REPEAT, BUTTON_NONE }, 143 - { ACTION_KBD_RIGHT, BUTTON_RIGHT, BUTTON_NONE }, 144 - { ACTION_KBD_RIGHT, BUTTON_RIGHT | BUTTON_REPEAT, BUTTON_NONE }, 145 - { ACTION_KBD_CURSOR_LEFT, BUTTON_PLAY | BUTTON_LEFT, BUTTON_NONE }, 146 - { ACTION_KBD_CURSOR_LEFT, BUTTON_PLAY | BUTTON_LEFT | BUTTON_REPEAT, BUTTON_NONE }, 147 - { ACTION_KBD_CURSOR_RIGHT, BUTTON_PLAY | BUTTON_RIGHT, BUTTON_NONE }, 148 - { ACTION_KBD_CURSOR_RIGHT, BUTTON_PLAY | BUTTON_RIGHT | BUTTON_REPEAT, BUTTON_NONE }, 149 - { ACTION_KBD_SELECT, BUTTON_PLAY, BUTTON_NONE }, 134 + { ACTION_KBD_LEFT, BUTTON_SCROLL_BACK, BUTTON_NONE }, 135 + { ACTION_KBD_RIGHT, BUTTON_SCROLL_FWD, BUTTON_NONE }, 136 + { ACTION_KBD_CURSOR_LEFT, BUTTON_PLAY | BUTTON_SCROLL_BACK, BUTTON_NONE }, 137 + { ACTION_KBD_CURSOR_RIGHT, BUTTON_PLAY | BUTTON_SCROLL_FWD, BUTTON_NONE }, 138 + { ACTION_KBD_SELECT, BUTTON_PLAY, BUTTON_NONE }, 150 139 { ACTION_KBD_UP, BUTTON_PREV, BUTTON_NONE }, 151 140 { ACTION_KBD_UP, BUTTON_PREV | BUTTON_REPEAT, BUTTON_NONE }, 152 - { ACTION_KBD_DOWN, BUTTON_NEXT, BUTTON_NONE }, 153 - { ACTION_KBD_DOWN, BUTTON_NEXT | BUTTON_REPEAT, BUTTON_NONE }, 141 + { ACTION_KBD_DOWN, BUTTON_NEXT, BUTTON_NONE }, 142 + { ACTION_KBD_DOWN, BUTTON_NEXT | BUTTON_REPEAT, BUTTON_NONE }, 154 143 155 144 LAST_ITEM_IN_LIST 156 145 }; ··· 177 166 178 167 static const struct button_mapping button_context_pitchscreen[] = 179 168 { 180 - { ACTION_PS_INC_SMALL, BUTTON_RIGHT | BUTTON_REL, BUTTON_NONE }, 181 - { ACTION_PS_DEC_SMALL, BUTTON_LEFT |BUTTON_REL, BUTTON_NONE }, 182 - { ACTION_PS_EXIT, BUTTON_POWER, BUTTON_NONE }, 169 + { ACTION_PS_INC_SMALL, BUTTON_SCROLL_FWD, BUTTON_NONE }, 170 + { ACTION_PS_DEC_SMALL, BUTTON_SCROLL_BACK, BUTTON_NONE }, 171 + { ACTION_PS_EXIT, BUTTON_POWER, BUTTON_NONE }, 183 172 184 173 LAST_ITEM_IN_LIST__NEXTLIST(CONTEXT_STD) 185 174 };
+2
bootloader/hibyos_linux.c
··· 98 98 #define BUTTON_UP BUTTON_PREV 99 99 #define BUTTON_DOWN BUTTON_NEXT 100 100 #define BUTTON_SELECT BUTTON_PLAY 101 + #define BUTTON_LEFT BUTTON_SCROLL_BACK 102 + #define BUTTON_RIGHT BUTTON_SCROLL_FWD 101 103 #include "bitmaps/hibyicon.h" 102 104 #else 103 105 #error "must define ICON_WIDTH/HEIGHT"
+2 -1
firmware/export/config/surfansf28.h
··· 18 18 //#define HAVE_HOTKEY 19 19 20 20 #define HAVE_HEADPHONE_DETECTION 21 + #define HAVE_SCROLLWHEEL 22 + #define NO_BUTTON_LR 21 23 22 24 #ifndef BOOTLOADER 23 25 #define HAVE_BUTTON_DATA ··· 40 42 41 43 /* Audio codec */ 42 44 #define HAVE_SURFANS_LINUX_CODEC 43 - #define HAVE_ALSA_32BIT 44 45 45 46 /* We don't have hardware controls */ 46 47 #define HAVE_SW_TONE_CONTROLS
+2 -2
firmware/export/surfanslinux_codec.h
··· 5 5 AUDIOHW_SETTING(VOLUME, "dB", 1, 5, -102*10, 0, -30*10) 6 6 #endif 7 7 8 - // We want this, but the codec takes over a second to unmute! 9 8 //#define AUDIOHW_MUTE_ON_STOP 10 - 9 + #define AUDIOHW_MUTE_ON_SRATE_CHANGE 11 10 //#define AUDIOHW_NEEDS_INITIAL_UNMUTE 11 + 12 12 AUDIOHW_SETTING(FILTER_ROLL_OFF, "", 0, 1, 0, 4, 0) 13 13 #define AUDIOHW_HAVE_SHORT2_ROLL_OFF 14 14
+2 -2
firmware/target/hosted/surfans/button-f28.c
··· 36 36 switch(keycode) 37 37 { 38 38 case KEY_LEFT: 39 - return BUTTON_LEFT; 39 + return BUTTON_SCROLL_BACK; 40 40 case KEY_RIGHT: 41 - return BUTTON_RIGHT; 41 + return BUTTON_SCROLL_FWD; 42 42 case KEY_PLAYPAUSE: 43 43 return BUTTON_PLAY; 44 44 case KEY_NEXTSONG:
+2 -2
firmware/target/hosted/surfans/button-target.h
··· 28 28 #define BUTTON_PREV 0x00000002 29 29 #define BUTTON_NEXT 0x00000004 30 30 #define BUTTON_PLAY 0x00000008 31 - #define BUTTON_LEFT 0x00000010 32 - #define BUTTON_RIGHT 0x00000020 31 + #define BUTTON_SCROLL_BACK 0x00000010 32 + #define BUTTON_SCROLL_FWD 0x00000020 33 33 #define BUTTON_MAIN 0x0000003f 34 34 35 35 #define BUTTON_TOUCH 0x00000040