fw: Implement charging indicator
This commit is contained in:
parent
859c898d8a
commit
82614c65d7
@ -24,6 +24,10 @@ void batmon_init()
|
||||
// Enable ADC
|
||||
ADCSRA |= (1 << ADEN);
|
||||
ADCSRA |= (1 << ADSC);
|
||||
|
||||
// Configure charging indicator pin
|
||||
PORT_CHI(DDR) &= ~(1 << PIN_CHI);
|
||||
PORT_CHI(PORT) &= ~(1 << PIN_CHI);
|
||||
}
|
||||
|
||||
uint8_t batmon_proc()
|
||||
@ -74,3 +78,8 @@ inline uint8_t batmon_ok_to_boot()
|
||||
{
|
||||
return (batmon_get_voltage_sync() > BAT_THRES_POWER_ON);
|
||||
}
|
||||
|
||||
inline uint8_t batmon_is_charging()
|
||||
{
|
||||
return !(PORT_CHI(PIN) & PIN_CHI);
|
||||
}
|
||||
|
@ -6,6 +6,9 @@
|
||||
#define PORT_ADCC(t) t##C
|
||||
#define PIN_ADCC (1 << 1)
|
||||
|
||||
#define PORT_CHI(t) t##B /* Charging indicator */
|
||||
#define PIN_CHI (1 << 7)
|
||||
|
||||
// Nominal 3.7V: 195; Full 4.2V: 220
|
||||
#define BAT_THRES_POWER_ON 175 // TODO: Minimum ADC value to allow turning the device on (3.3V)
|
||||
#define BAT_THRES_POWER_OFF 165 // TODO: ADC value to (hard) power off the device. (3.1V)
|
||||
@ -14,5 +17,6 @@ void batmon_init();
|
||||
uint8_t batmon_get_voltage();
|
||||
uint8_t batmon_proc();
|
||||
uint8_t batmon_ok_to_boot();
|
||||
uint8_t batmon_is_charging();
|
||||
|
||||
#endif // BATMON_H
|
||||
|
@ -4,7 +4,7 @@
|
||||
#include "input.h"
|
||||
#include "systick.h"
|
||||
|
||||
static volatile int8_t rotary_delta = 0;
|
||||
static volatile uint8_t rotary_delta = 0;
|
||||
static volatile uint8_t sw_event = 0;
|
||||
|
||||
void input_init()
|
||||
@ -19,7 +19,7 @@ void input_init()
|
||||
PORT_SBCMON(PORT) |= PIN_SBCMON;
|
||||
}
|
||||
|
||||
inline int8_t get_rotary_delta()
|
||||
inline uint8_t get_rotary_delta()
|
||||
{
|
||||
return rotary_delta;
|
||||
}
|
||||
@ -42,11 +42,13 @@ static inline void input_proc_rotary()
|
||||
|
||||
if (a == 1 && last_a == 0) {
|
||||
silly_debounce = ROTARY_DEBOUNCE;
|
||||
rotary_delta += !!(a ^ b);
|
||||
if (rotary_delta < 31)
|
||||
rotary_delta += !!(a ^ b);
|
||||
}
|
||||
if (a == 0 && last_a == 1) {
|
||||
silly_debounce = ROTARY_DEBOUNCE;
|
||||
rotary_delta -= !(a ^ b);
|
||||
if (rotary_delta > 0)
|
||||
rotary_delta -= !(a ^ b);
|
||||
}
|
||||
|
||||
last_a = a;
|
||||
@ -96,7 +98,7 @@ inline uint8_t get_switch_event()
|
||||
|
||||
inline void input_clear_events()
|
||||
{
|
||||
rotary_delta = 0;
|
||||
rotary_delta = 16;
|
||||
sw_event = 0;
|
||||
}
|
||||
|
||||
|
@ -14,7 +14,7 @@
|
||||
|
||||
void input_init();
|
||||
void input_proc();
|
||||
int8_t get_rotary_delta();
|
||||
uint8_t get_rotary_delta();
|
||||
uint8_t get_switch_event();
|
||||
void input_clear_events();
|
||||
uint8_t get_sbc_state();
|
||||
|
@ -65,7 +65,7 @@ uint8_t spi_proc()
|
||||
x = 0;
|
||||
y = Y_MAX;
|
||||
SPDR = get_switch_event();
|
||||
spdr_next = get_rotary_delta();
|
||||
spdr_next = get_rotary_delta() | (batmon_is_charging() << 7);
|
||||
}
|
||||
|
||||
return spi_cs;
|
||||
@ -138,6 +138,10 @@ int main()
|
||||
if (batmon_proc())
|
||||
reset();
|
||||
}
|
||||
if (PORT_KEYPAD(PIN) == 0b11111001) {
|
||||
_delay_ms(500);
|
||||
reset();
|
||||
}
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user