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 /keyboard/hhkb_rn42 | |
| parent | 21e68fbea4fa5076fb9a6d9a6592dd263d65b078 (diff) | |
| download | qmk_firmware-ae28b16fc630cc8219676f1bfb9cee41f0b36a79.tar.gz qmk_firmware-ae28b16fc630cc8219676f1bfb9cee41f0b36a79.zip | |
Add battery monitor and LED control
Diffstat (limited to 'keyboard/hhkb_rn42')
| -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 437dd46f4..fd5a814b2 100644 --- a/keyboard/hhkb_rn42/rn42/rn42_task.c +++ b/keyboard/hhkb_rn42/rn42/rn42_task.c | |||
| @@ -13,6 +13,17 @@ | |||
| 13 | static bool config_mode = false; | 13 | static bool config_mode = false; |
| 14 | static bool force_usb = false; | 14 | static bool force_usb = false; |
| 15 | 15 | ||
| 16 | static void status_led(bool on) | ||
| 17 | { | ||
| 18 | if (on) { | ||
| 19 | DDRE |= (1<<6); | ||
| 20 | PORTE &= ~(1<<6); | ||
| 21 | } else { | ||
| 22 | DDRE |= (1<<6); | ||
| 23 | PORTE |= (1<<6); | ||
| 24 | } | ||
| 25 | } | ||
| 26 | |||
| 16 | static void battery_adc_init(void) | 27 | static void battery_adc_init(void) |
| 17 | { | 28 | { |
| 18 | ADMUX = (1<<REFS1) | (1<<REFS0); // Ref:2.56V band-gap, Input:ADC0(PF0) | 29 | ADMUX = (1<<REFS1) | (1<<REFS0); // Ref:2.56V band-gap, Input:ADC0(PF0) |
| @@ -43,10 +54,35 @@ static uint16_t battery_adc(void) | |||
| 43 | return bat; | 54 | return bat; |
| 44 | } | 55 | } |
| 45 | 56 | ||
| 57 | static void battery_led(bool on) | ||
| 58 | { | ||
| 59 | if (on) { | ||
| 60 | DDRF |= (1<<5); | ||
| 61 | PORTF &= ~(1<<5); | ||
| 62 | } else { | ||
| 63 | DDRF &= ~(1<<5); | ||
| 64 | PORTF |= (1<<5); | ||
| 65 | } | ||
| 66 | } | ||
| 67 | |||
| 68 | static bool battery_charging(void) | ||
| 69 | { | ||
| 70 | // MCP73831:STAT | ||
| 71 | // Hi-Z: Shutdown/No Battery | ||
| 72 | // Low: Charging | ||
| 73 | // Hi: Charged | ||
| 74 | DDRF &= ~(1<<5); | ||
| 75 | PORTF |= (1<<5); | ||
| 76 | return PINF&(1<<5) ? false : true; | ||
| 77 | } | ||
| 46 | 78 | ||
| 47 | void rn42_task_init(void) | 79 | void rn42_task_init(void) |
| 48 | { | 80 | { |
| 49 | battery_adc_init(); | 81 | battery_adc_init(); |
| 82 | |||
| 83 | // battery charging(input with pull-up) | ||
| 84 | DDRF &= ~(1<<5); | ||
| 85 | PORTF |= (1<<5); | ||
| 50 | } | 86 | } |
| 51 | 87 | ||
| 52 | void rn42_task(void) | 88 | void rn42_task(void) |
| @@ -108,6 +144,8 @@ void rn42_task(void) | |||
| 108 | ******************************************************************************/ | 144 | ******************************************************************************/ |
| 109 | bool command_extra(uint8_t code) | 145 | bool command_extra(uint8_t code) |
| 110 | { | 146 | { |
| 147 | uint32_t t; | ||
| 148 | uint16_t b; | ||
| 111 | static host_driver_t *prev_driver = &rn42_driver; | 149 | static host_driver_t *prev_driver = &rn42_driver; |
| 112 | switch (code) { | 150 | switch (code) { |
| 113 | case KC_H: | 151 | case KC_H: |
| @@ -166,10 +204,16 @@ bool command_extra(uint8_t code) | |||
| 166 | xprintf("rn42_rts(): %X\n", rn42_rts()); | 204 | xprintf("rn42_rts(): %X\n", rn42_rts()); |
| 167 | xprintf("config_mode: %X\n", config_mode); | 205 | xprintf("config_mode: %X\n", config_mode); |
| 168 | xprintf("VBUS: %X\n", USBSTA&(1<<VBUS)); | 206 | xprintf("VBUS: %X\n", USBSTA&(1<<VBUS)); |
| 207 | xprintf("battery_charging: %X\n", battery_charging()); | ||
| 169 | return true; | 208 | return true; |
| 170 | case KC_B: | 209 | case KC_B: |
| 171 | // battery monitor | 210 | // battery monitor |
| 172 | xprintf("BAT: %04X(%08lX)\n", battery_adc(), timer_read32()); | 211 | t = timer_read32()/1000; |
| 212 | b = battery_adc(); | ||
| 213 | xprintf("BAT: %umV(%04X)\t", (b-16)*5, b); | ||
| 214 | xprintf("%02u:", t/3600); | ||
| 215 | xprintf("%02u:", t%3600/60); | ||
| 216 | xprintf("%02u\n", t%60); | ||
| 173 | return true; | 217 | return true; |
| 174 | default: | 218 | default: |
| 175 | if (config_mode) | 219 | if (config_mode) |
