few changes for RTS/CTS control
Dependencies: MTS-Serial libmDot mbed-rtos mbed
Fork of mDot_AT_firmware by
Diff: CommandTerminal/CommandTerminal.cpp
- Revision:
- 6:e27eaad36a0c
- Parent:
- 4:666017851052
- Child:
- 9:ff62b20f7000
diff -r 59f60bedc6df -r e27eaad36a0c CommandTerminal/CommandTerminal.cpp --- a/CommandTerminal/CommandTerminal.cpp Tue Aug 18 16:31:53 2015 +0000 +++ b/CommandTerminal/CommandTerminal.cpp Fri Jan 29 14:01:05 2016 -0600 @@ -207,7 +207,7 @@ else max_send_size = mDot::MaxLengths_868[_dot->getTxDataRate()]; - DEBUG_PRINTF("Awake\r\n"); + logDebug("Awake\r\n"); wakeup(_sleep_standby); char ch; @@ -226,7 +226,7 @@ if (escape_buffer.length() == 3 && escape_buffer.find(escape_sequence) == 0) { _mode = mDot::COMMAND_MODE; - DEBUG_PRINTF("Exit serial mode\r\n"); + logDebug("Exit serial mode\r\n"); escape_timer.stop(); escape_buffer.clear(); write(done); @@ -235,10 +235,16 @@ } if (_serial_up) { - osDelay(_dot->getWakeDelay()); + serial_read_timer.start(); + uint32_t timeout = _dot->getWakeDelay(); - serial_read_timer.start(); - uint16_t timeout = _dot->getWakeTimeout(); + // wait for timeout or start of serial data + while (!readable() && serial_read_timer.read_ms() < timeout) { + osDelay(10); + } + + serial_read_timer.reset(); + timeout = _dot->getWakeTimeout(); while (_serial_up && serial_read_timer.read_ms() < timeout) { while (readable() && serial_buffer.size() < max_send_size) { serial_buffer.push_back(read()); @@ -252,19 +258,19 @@ _xbee_on_sleep = GPIO_PIN_RESET; if (!_dot->getIsTransmitting()) { std::vector<uint8_t> recv_buffer; - DEBUG_PRINTF("Received serial data, sending out radio.\r\n"); + logDebug("Received serial data, sending out radio.\r\n"); if (_dot->send(serial_buffer) != mDot::MDOT_OK) - DEBUG_PRINTF("Send failed.\r\n"); + logDebug("Send failed.\r\n"); if (_dot->recv(recv_buffer)) _serial.writef("%s\r\n", formatPacketData(recv_buffer, _dot->getRxOutput()).c_str()); } else { - DEBUG_PRINTF("Radio is busy, cannot send.\r\n"); + logDebug("Radio is busy, cannot send.\r\n"); } serial_buffer.clear(); } else { - DEBUG_PRINTF("No data received from serial to send.\r\n"); + logDebug("No data received from serial to send.\r\n"); } _serial_up = false; } @@ -321,7 +327,7 @@ if (_dot->getFrequencyBand() == mDot::FB_915) { uint8_t band = ((_dot->getFrequencySubBand()) % 8) + 1; - DEBUG_PRINTF("Join retries exhausted, switching to sub band %u\r\n", band); + logDebug("Join retries exhausted, switching to sub band %u\r\n", band); _dot->setFrequencySubBand(band); } @@ -546,7 +552,7 @@ _dot->setVerbose(true); write(done); } else if (args[0] == "AT+SD") { - DEBUG_PRINTF("Enter Serial Mode\r\n"); + logDebug("Enter Serial Mode\r\n"); _mode = mDot::SERIAL_MODE; } else if (args[0] == "AT+SLEEP") { if (args.size() > 1 && (args[1] != "?")) {