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.

Sansa Connect: Indicate charging status

Consider battery level down to 0 as safe as OF continues to operate
normally even when at level 0.

Change-Id: Ie3889e5662b9fa6588e20ad02d8953f29e28800c

+41 -28
+1 -1
firmware/export/config/sansaconnect.h
··· 180 180 #define FIRMWARE_OFFSET_FILE_DATA 8 181 181 182 182 /* Hardware controlled charging */ 183 - #define CONFIG_CHARGING CHARGING_SIMPLE 183 + #define CONFIG_CHARGING CHARGING_MONITOR 184 184 185 185 #define CONFIG_USBOTG USBOTG_TNETV105 186 186
+40 -13
firmware/target/arm/tms320dm320/sansa-connect/avr-sansaconnect.c
··· 22 22 #include <stdio.h> 23 23 #include "config.h" 24 24 #include "system.h" 25 + #include "power.h" 25 26 #include "kernel.h" 26 27 #include "logf.h" 27 28 #include "avr-sansaconnect.h" ··· 80 81 static struct semaphore avr_thread_trigger; 81 82 #endif 82 83 83 - static int current_battery_level = 100; 84 + /* OF bootloader will refuse to start software if low power is set 85 + * Bits 3, 4, 5, 6 and 7 are unknown. 86 + */ 87 + #define BATTERY_STATUS_LOW_POWER (1 << 2) 88 + #define BATTERY_STATUS_CHARGER_CONNECTED (1 << 1) 89 + #define BATTERY_STATUS_CHARGING (1 << 0) 90 + static uint8_t avr_battery_status; 91 + 92 + #define BATTERY_LEVEL_NOT_DETECTED (1 << 7) 93 + #define BATTERY_LEVEL_PERCENTAGE_MASK 0x7F 94 + static uint8_t avr_battery_level = 100; 84 95 85 96 static inline unsigned short be2short(unsigned char* buf) 86 97 { ··· 289 300 290 301 int _battery_level(void) 291 302 { 292 - /* Force shutoff when level read by AVR is 4 or lower */ 293 - return (current_battery_level > 4) ? current_battery_level : 0; 303 + /* OF still plays music when level is at 0 */ 304 + if (avr_battery_level & BATTERY_LEVEL_NOT_DETECTED) 305 + { 306 + return 0; 307 + } 308 + return avr_battery_level & BATTERY_LEVEL_PERCENTAGE_MASK; 309 + } 310 + 311 + unsigned int power_input_status(void) 312 + { 313 + if (avr_battery_status & BATTERY_STATUS_CHARGER_CONNECTED) 314 + { 315 + return POWER_INPUT_USB_CHARGER; 316 + } 317 + return POWER_INPUT_NONE; 318 + } 319 + 320 + bool charging_state(void) 321 + { 322 + return (avr_battery_status & BATTERY_STATUS_CHARGING) != 0; 294 323 } 295 324 296 325 static void avr_hid_get_state(void) ··· 300 329 CMD_CLOSE}; 301 330 302 331 static unsigned char buf[11]; 303 - static unsigned char cmd_empty[1] = {0xCC}; 304 - 305 - spi_txrx(cmd, buf, sizeof(cmd)); 306 332 307 - /* 308 - * buf[8] contains some battery/charger related information (unknown) 309 - * buf[9] contains battery level in percents (0-100) 310 - */ 311 - current_battery_level = (int)buf[9]; 312 - 313 - spi_txrx(cmd_empty, NULL, 1); /* request interrupt on button press */ 333 + /* In very unlikely case the command has to be repeated */ 334 + do 335 + { 336 + spi_txrx(cmd, buf, sizeof(cmd)); 337 + } 338 + while ((buf[1] != CMD_SYNC) || (buf[10] != CMD_CLOSE)); 314 339 340 + avr_battery_status = buf[8]; 341 + avr_battery_level = buf[9]; 315 342 parse_button_state(buf); 316 343 } 317 344
-14
firmware/target/arm/tms320dm320/sansa-connect/power-sansaconnect.c
··· 74 74 avr_hid_power_off(); 75 75 } 76 76 77 - #if CONFIG_CHARGING 78 - unsigned int power_input_status(void) 79 - { 80 - return POWER_INPUT_NONE; 81 - } 82 - 83 - /* Returns true if the unit is charging the batteries. */ 84 - bool charging_state(void) 85 - { 86 - return false; 87 - } 88 - #endif 89 - 90 77 void ide_power_enable(bool on) 91 78 { 92 79 (void)on; 93 80 } 94 -