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…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user