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