From 8a41a694f317083966df706db964d2de51e489dc Mon Sep 17 00:00:00 2001 From: "matthias.ringwald@gmail.com" Date: Tue, 12 Mar 2013 14:57:25 +0000 Subject: [PATCH] extracted tryToSend function --- MSP-EXP430F5438-CC256x/example/spp_counter.c | 48 ++++++++++++++------ 1 file changed, 34 insertions(+), 14 deletions(-) diff --git a/MSP-EXP430F5438-CC256x/example/spp_counter.c b/MSP-EXP430F5438-CC256x/example/spp_counter.c index 504659389..a860969c3 100644 --- a/MSP-EXP430F5438-CC256x/example/spp_counter.c +++ b/MSP-EXP430F5438-CC256x/example/spp_counter.c @@ -35,6 +35,31 @@ static uint8_t rfcomm_channel_nr = 1; static uint16_t rfcomm_channel_id; static uint8_t spp_service_buffer[150]; +static timer_source_t heartbeat; + +static int real_counter = 0; +static int counter_to_send = 0; + +static void tryToSend(void){ + if (!rfcomm_channel_id) return; + if (real_counter <= counter_to_send) return; + + char lineBuffer[30]; + sprintf(lineBuffer, "BTstack counter %04u\n\r", counter_to_send); + printf(lineBuffer); + int err = rfcomm_send_internal(rfcomm_channel_id, (uint8_t*) lineBuffer, strlen(lineBuffer)); + + switch (err){ + case 0: + counter_to_send++; + break; + case BTSTACK_ACL_BUFFERS_FULL: + break; + default: + printf("rfcomm_send_internal() -> err %d\n\r", err); + break; + } +} // Bluetooth logic static void packet_handler (void * connection, uint8_t packet_type, uint16_t channel, uint8_t *packet, uint16_t size){ @@ -98,7 +123,11 @@ static void packet_handler (void * connection, uint8_t packet_type, uint16_t cha printf("\n\rRFCOMM channel open succeeded. New RFCOMM Channel ID %u, max frame size %u\n\r", rfcomm_channel_id, mtu); } break; - + case DAEMON_EVENT_HCI_PACKET_SENT: + case RFCOMM_EVENT_CREDITS: + tryToSend(); + break; + case RFCOMM_EVENT_CHANNEL_CLOSED: rfcomm_channel_id = 0; break; @@ -118,31 +147,22 @@ static void run_loop_register_timer(timer_source_t *timer, uint16_t period){ run_loop_add_timer(timer); } -static void timer_handler(timer_source_t *ts){ - - if (rfcomm_channel_id){ - static int counter = 0; - char lineBuffer[30]; - sprintf(lineBuffer, "BTstack counter %04u\n\r", ++counter); - printf(lineBuffer); - int err = rfcomm_send_internal(rfcomm_channel_id, (uint8_t*) lineBuffer, strlen(lineBuffer)); - if (err) { - printf("rfcomm_send_internal -> error %d", err); - } - } +static void timer_handler(timer_source_t *ts){ + real_counter++; // re-register timer run_loop_register_timer(ts, HEARTBEAT_PERIOD_MS); + tryToSend(); } static void timer_setup(){ // set one-shot timer - timer_source_t heartbeat; heartbeat.process = &timer_handler; run_loop_register_timer(&heartbeat, HEARTBEAT_PERIOD_MS); } + static void hw_setup(){ // stop watchdog timer WDTCTL = WDTPW + WDTHOLD;