stm32-sx1280: cache conn sync hop ticks

This commit is contained in:
Matthias Ringwald 2020-09-24 22:47:20 +02:00
parent eed650bfeb
commit c3c2769224

View File

@ -255,6 +255,7 @@ static struct {
volatile uint16_t conn_interval_1250us; volatile uint16_t conn_interval_1250us;
volatile uint32_t conn_interval_us; volatile uint32_t conn_interval_us;
volatile uint16_t conn_interval_ticks;
volatile uint16_t conn_latency; volatile uint16_t conn_latency;
@ -270,6 +271,9 @@ static struct {
// start of current connection event // start of current connection event
volatile uint16_t anchor_ticks; volatile uint16_t anchor_ticks;
// timeout for sync relative to anchor
volatile uint16_t conn_sync_hop_ticks;
// current channel // current channel
volatile uint8_t channel; volatile uint8_t channel;
@ -526,7 +530,9 @@ static void radio_set_timer_ticks(uint32_t anchor_offset_ticks){
static void ctx_set_conn_interval(uint16_t conn_interval_1250us){ static void ctx_set_conn_interval(uint16_t conn_interval_1250us){
ctx.conn_interval_1250us = conn_interval_1250us; ctx.conn_interval_1250us = conn_interval_1250us;
ctx.conn_interval_us = conn_interval_1250us * 1250; ctx.conn_interval_us = ctx.conn_interval_1250us * 1250;
ctx.conn_interval_ticks = US_TO_TICKS(ctx.conn_interval_us);
ctx.conn_sync_hop_ticks = US_TO_TICKS(ctx.conn_interval_us - SYNC_HOP_DELAY_US);
} }
static void ll_terminate(void){ static void ll_terminate(void){
@ -571,7 +577,7 @@ static void radio_timer_handler(void){
// prepare next connection event // prepare next connection event
ctx.connection_event++; ctx.connection_event++;
ctx.anchor_ticks += US_TO_TICKS(ctx.conn_interval_us); ctx.anchor_ticks += ctx.conn_interval_ticks;
ctx.packet_nr_in_connection_event = 0; ctx.packet_nr_in_connection_event = 0;
next_channel(); next_channel();
@ -595,8 +601,7 @@ static void radio_timer_handler(void){
if (ctx.synced){ if (ctx.synced){
// restart radio timer (might get overwritten by first packet) // restart radio timer (might get overwritten by first packet)
uint32_t conn_interval_ticks = US_TO_TICKS(ctx.conn_interval_us - SYNC_HOP_DELAY_US); radio_set_timer_ticks(ctx.conn_sync_hop_ticks);
radio_set_timer_ticks(conn_interval_ticks);
receive_master(); receive_master();
} else { } else {
@ -758,8 +763,7 @@ static void radio_on_rx_done(void ){
ctx.anchor_ticks = packet_start_ticks; ctx.anchor_ticks = packet_start_ticks;
ctx.synced = true; ctx.synced = true;
uint32_t sync_hop_timeout_ticks = US_TO_TICKS(ctx.conn_interval_us - SYNC_HOP_DELAY_US); radio_set_timer_ticks(ctx.conn_sync_hop_ticks);
radio_set_timer_ticks(sync_hop_timeout_ticks);
} }
ctx.packet_nr_in_connection_event++; ctx.packet_nr_in_connection_event++;