diff options
author | tmk <nobody@nowhere> | 2014-07-28 11:56:02 +0900 |
---|---|---|
committer | tmk <nobody@nowhere> | 2014-07-30 14:38:27 +0900 |
commit | ae28b16fc630cc8219676f1bfb9cee41f0b36a79 (patch) | |
tree | 89c5856cd1396c1d5cb6aa124ad3af2981e165d5 | |
parent | 21e68fbea4fa5076fb9a6d9a6592dd263d65b078 (diff) |
Add battery monitor and LED control
-rw-r--r-- | keyboard/hhkb_rn42/rn42/rn42_task.c | 46 |
1 files changed, 45 insertions, 1 deletions
diff --git a/keyboard/hhkb_rn42/rn42/rn42_task.c b/keyboard/hhkb_rn42/rn42/rn42_task.c index 437dd46f49..fd5a814b29 100644 --- a/keyboard/hhkb_rn42/rn42/rn42_task.c +++ b/keyboard/hhkb_rn42/rn42/rn42_task.c @@ -13,6 +13,17 @@ static bool config_mode = false; static bool force_usb = false; +static void status_led(bool on) +{ + if (on) { + DDRE |= (1<<6); + PORTE &= ~(1<<6); + } else { + DDRE |= (1<<6); + PORTE |= (1<<6); + } +} + static void battery_adc_init(void) { ADMUX = (1<<REFS1) | (1<<REFS0); // Ref:2.56V band-gap, Input:ADC0(PF0) @@ -43,10 +54,35 @@ static uint16_t battery_adc(void) return bat; } +static void battery_led(bool on) +{ + if (on) { + DDRF |= (1<<5); + PORTF &= ~(1<<5); + } else { + DDRF &= ~(1<<5); + PORTF |= (1<<5); + } +} + +static bool battery_charging(void) +{ + // MCP73831:STAT + // Hi-Z: Shutdown/No Battery + // Low: Charging + // Hi: Charged + DDRF &= ~(1<<5); + PORTF |= (1<<5); + return PINF&(1<<5) ? false : true; +} void rn42_task_init(void) { battery_adc_init(); + + // battery charging(input with pull-up) + DDRF &= ~(1<<5); + PORTF |= (1<<5); } void rn42_task(void) @@ -108,6 +144,8 @@ void rn42_task(void) ******************************************************************************/ bool command_extra(uint8_t code) { + uint32_t t; + uint16_t b; static host_driver_t *prev_driver = &rn42_driver; switch (code) { case KC_H: @@ -166,10 +204,16 @@ bool command_extra(uint8_t code) xprintf("rn42_rts(): %X\n", rn42_rts()); xprintf("config_mode: %X\n", config_mode); xprintf("VBUS: %X\n", USBSTA&(1<<VBUS)); + xprintf("battery_charging: %X\n", battery_charging()); return true; case KC_B: // battery monitor - xprintf("BAT: %04X(%08lX)\n", battery_adc(), timer_read32()); + t = timer_read32()/1000; + b = battery_adc(); + xprintf("BAT: %umV(%04X)\t", (b-16)*5, b); + xprintf("%02u:", t/3600); + xprintf("%02u:", t%3600/60); + xprintf("%02u\n", t%60); return true; default: if (config_mode) |