fw: Implement charging indicator
This commit is contained in:
parent
859c898d8a
commit
82614c65d7
@ -24,6 +24,10 @@ void batmon_init()
|
|||||||
// Enable ADC
|
// Enable ADC
|
||||||
ADCSRA |= (1 << ADEN);
|
ADCSRA |= (1 << ADEN);
|
||||||
ADCSRA |= (1 << ADSC);
|
ADCSRA |= (1 << ADSC);
|
||||||
|
|
||||||
|
// Configure charging indicator pin
|
||||||
|
PORT_CHI(DDR) &= ~(1 << PIN_CHI);
|
||||||
|
PORT_CHI(PORT) &= ~(1 << PIN_CHI);
|
||||||
}
|
}
|
||||||
|
|
||||||
uint8_t batmon_proc()
|
uint8_t batmon_proc()
|
||||||
@ -74,3 +78,8 @@ inline uint8_t batmon_ok_to_boot()
|
|||||||
{
|
{
|
||||||
return (batmon_get_voltage_sync() > BAT_THRES_POWER_ON);
|
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 PORT_ADCC(t) t##C
|
||||||
#define PIN_ADCC (1 << 1)
|
#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
|
// 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_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)
|
#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_get_voltage();
|
||||||
uint8_t batmon_proc();
|
uint8_t batmon_proc();
|
||||||
uint8_t batmon_ok_to_boot();
|
uint8_t batmon_ok_to_boot();
|
||||||
|
uint8_t batmon_is_charging();
|
||||||
|
|
||||||
#endif // BATMON_H
|
#endif // BATMON_H
|
||||||
|
@ -4,7 +4,7 @@
|
|||||||
#include "input.h"
|
#include "input.h"
|
||||||
#include "systick.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;
|
static volatile uint8_t sw_event = 0;
|
||||||
|
|
||||||
void input_init()
|
void input_init()
|
||||||
@ -19,7 +19,7 @@ void input_init()
|
|||||||
PORT_SBCMON(PORT) |= PIN_SBCMON;
|
PORT_SBCMON(PORT) |= PIN_SBCMON;
|
||||||
}
|
}
|
||||||
|
|
||||||
inline int8_t get_rotary_delta()
|
inline uint8_t get_rotary_delta()
|
||||||
{
|
{
|
||||||
return rotary_delta;
|
return rotary_delta;
|
||||||
}
|
}
|
||||||
@ -42,11 +42,13 @@ static inline void input_proc_rotary()
|
|||||||
|
|
||||||
if (a == 1 && last_a == 0) {
|
if (a == 1 && last_a == 0) {
|
||||||
silly_debounce = ROTARY_DEBOUNCE;
|
silly_debounce = ROTARY_DEBOUNCE;
|
||||||
rotary_delta += !!(a ^ b);
|
if (rotary_delta < 31)
|
||||||
|
rotary_delta += !!(a ^ b);
|
||||||
}
|
}
|
||||||
if (a == 0 && last_a == 1) {
|
if (a == 0 && last_a == 1) {
|
||||||
silly_debounce = ROTARY_DEBOUNCE;
|
silly_debounce = ROTARY_DEBOUNCE;
|
||||||
rotary_delta -= !(a ^ b);
|
if (rotary_delta > 0)
|
||||||
|
rotary_delta -= !(a ^ b);
|
||||||
}
|
}
|
||||||
|
|
||||||
last_a = a;
|
last_a = a;
|
||||||
@ -96,7 +98,7 @@ inline uint8_t get_switch_event()
|
|||||||
|
|
||||||
inline void input_clear_events()
|
inline void input_clear_events()
|
||||||
{
|
{
|
||||||
rotary_delta = 0;
|
rotary_delta = 16;
|
||||||
sw_event = 0;
|
sw_event = 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -14,7 +14,7 @@
|
|||||||
|
|
||||||
void input_init();
|
void input_init();
|
||||||
void input_proc();
|
void input_proc();
|
||||||
int8_t get_rotary_delta();
|
uint8_t get_rotary_delta();
|
||||||
uint8_t get_switch_event();
|
uint8_t get_switch_event();
|
||||||
void input_clear_events();
|
void input_clear_events();
|
||||||
uint8_t get_sbc_state();
|
uint8_t get_sbc_state();
|
||||||
|
@ -65,7 +65,7 @@ uint8_t spi_proc()
|
|||||||
x = 0;
|
x = 0;
|
||||||
y = Y_MAX;
|
y = Y_MAX;
|
||||||
SPDR = get_switch_event();
|
SPDR = get_switch_event();
|
||||||
spdr_next = get_rotary_delta();
|
spdr_next = get_rotary_delta() | (batmon_is_charging() << 7);
|
||||||
}
|
}
|
||||||
|
|
||||||
return spi_cs;
|
return spi_cs;
|
||||||
@ -138,6 +138,10 @@ int main()
|
|||||||
if (batmon_proc())
|
if (batmon_proc())
|
||||||
reset();
|
reset();
|
||||||
}
|
}
|
||||||
|
if (PORT_KEYPAD(PIN) == 0b11111001) {
|
||||||
|
_delay_ms(500);
|
||||||
|
reset();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
Loading…
Reference in New Issue
Block a user