mirror of https://gerrit.osmocom.org/simtrace2
card_emu: use edge-triggered VCC ADC logic
Before this patch, we used to st ci->vcc_active depending on the instantaneous ADC reading of VCC. Is it > .5v, we claim VCC is active, and if it's below, VCC is inactive. With this patch we move to an edge triggered approach: Only change ci->vcc_active if the previous reading was different from the current reading. FIXME: why? Change-Id: I71b703162219484e43638f1f2f692e9dd554ef55
This commit is contained in:
parent
ed4ca25730
commit
07fda1e706
|
@ -74,6 +74,7 @@ struct cardem_inst {
|
|||
const Pin pin_insert;
|
||||
#ifdef DETECT_VCC_BY_ADC
|
||||
uint32_t vcc_uv;
|
||||
uint32_t vcc_uv_last;
|
||||
#endif
|
||||
bool vcc_active;
|
||||
bool vcc_active_last;
|
||||
|
@ -253,6 +254,7 @@ static uint16_t compute_next_timeout(struct cardem_inst *ci)
|
|||
* \param[in] inst_num Instance number, range 0..1 (some boards only '0' permitted) */
|
||||
static void usart_irq_rx(uint8_t inst_num)
|
||||
{
|
||||
OSMO_ASSERT(inst_num < ARRAY_SIZE(cardem_inst));
|
||||
Usart *usart = get_usart_by_chan(inst_num);
|
||||
struct cardem_inst *ci = &cardem_inst[inst_num];
|
||||
uint32_t csr;
|
||||
|
@ -461,10 +463,14 @@ static int card_vcc_adc_init(void)
|
|||
|
||||
static void process_vcc_adc(struct cardem_inst *ci)
|
||||
{
|
||||
if (ci->vcc_uv >= VCC_UV_THRESH_3V)
|
||||
if (ci->vcc_uv >= VCC_UV_THRESH_3V &&
|
||||
ci->vcc_uv_last < VCC_UV_THRESH_3V) {
|
||||
ci->vcc_active = true;
|
||||
else
|
||||
} else if (ci->vcc_uv < VCC_UV_THRESH_3V &&
|
||||
ci->vcc_uv_last >= VCC_UV_THRESH_3V) {
|
||||
ci->vcc_active = false;
|
||||
}
|
||||
ci->vcc_uv_last = ci->vcc_uv;
|
||||
}
|
||||
|
||||
void ADC_IrqHandler(void)
|
||||
|
|
Loading…
Reference in New Issue