Digi XBeeLib fixed for NonCopyable issue
Dependents: XBeeZB_Receive_Data
Fork of XBeeLib by
This lib fixes NonCopyable<T> issues of Digi XBeeLib. Also, lib has been reworked in order to make it RTOS-aware, overcoming several others issues due to stdio Mutex operations.
Diff: XBee/XBee.cpp
- Revision:
- 11:c49cf952d67d
- Parent:
- 6:06522f3a6642
- Child:
- 12:8dc9761210c1
diff -r 926dbab7a7bc -r c49cf952d67d XBee/XBee.cpp --- a/XBee/XBee.cpp Sat Mar 24 18:15:23 2018 +0000 +++ b/XBee/XBee.cpp Sat Mar 24 19:50:19 2018 +0100 @@ -223,17 +223,20 @@ RadioStatus XBee::wait_for_module_to_reset(volatile uint16_t *rst_cnt_p, uint16_t init_rst_cnt) { - Timer timer = Timer(); - timer.start(); + Timer* ptimer = new Timer(); + ptimer->start(); - while (*rst_cnt_p == init_rst_cnt && timer.read_ms() < RESET_TIMEOUT_MS) { + while (*rst_cnt_p == init_rst_cnt && ptimer->read_ms() < RESET_TIMEOUT_MS) { wait_ms(100); } if (*rst_cnt_p == init_rst_cnt) { digi_log(LogLevelWarning, "Reset Timeout\r\n"); + delete ptimer; return Failure; } + + delete ptimer; return Success; } @@ -496,10 +499,10 @@ ApiFrame * XBee::get_this_api_frame(uint8_t id, ApiFrame::ApiFrameType type, ApiFrame::ApiFrameType type2) { - Timer timer = Timer(); - timer.start(); + Timer* ptimer = new Timer(); + ptimer->start(); - while (timer.read_ms() < _timeout_ms) { + while (ptimer->read_ms() < _timeout_ms) { ApiFrame * frame = _framebuf_syncr.get_next_complete_frame(); if (frame == NULL) { wait_ms(10); @@ -520,11 +523,15 @@ } /* frame found */ + delete ptimer; + return frame; } digi_log(LogLevelWarning, "Frame type: %02x, id: %02x, timeout\r\n", (uint8_t)type, id); + delete ptimer; + return NULL; }