void RadioReceiveTask::task() {
	_clearSerialBuffer();
	_initialiseDiscoveryState();

	// Packet
	byte packetBuffer[RADIO_PACKET_WITH_RSSI_LENGTH];
	uint8_t packetBufferLength = 0;

	#ifdef RADIO_DEBUG_MODE
		uint8_t serialRingBufferHWM = 0;
	#endif

	_wakeUp();

	_currentMessageReceiver = NO_CURRENT_MESSAGE;
	while (true) {
		uint8_t availableBytes = RADIO_SERIAL.available();
		if (availableBytes > 0) {
			pinMode(PIN_LED_RXL, OUTPUT);
			digitalWrite(PIN_LED_RXL, 1);

			#ifdef RADIO_DEBUG_MODE
				if (serialRingBufferHWM < availableBytes) {
					serialRingBufferHWM = availableBytes;
					debug::log("RadioReceiveTask: serialRingBufferHWM=" + String(serialRingBufferHWM));
				}
			#endif

			while (availableBytes > 0) {
				packetBuffer[packetBufferLength] = RADIO_SERIAL.read();
				packetBufferLength++;
				availableBytes--;

				// Only handle one packet at a time
				if (packetBufferLength == RADIO_PACKET_WITH_RSSI_LENGTH) {
					break; // we have enough for one packet
				}
			}

			#ifdef RADIO_DEBUG_MODE_EXTENDED
				debug::log("RadioReceiveTask: Current buffer:");
				debug::logByteArray(packetBuffer, packetBufferLength);
			#endif

			packetBufferLength = _parsePacketBuffer(packetBuffer, packetBufferLength);

			digitalWrite(PIN_LED_RXL, 0);

			_lastMessageReceived = xTaskGetTickCount();
		} else {
			vTaskDelay(RADIO_NO_DATA_SLEEP_DURATION);
		}

		_checkForStateChange();
	}
}
Example #2
0
void RadioTask::task() {

	// Temporary: Remove me soon!
	_outgoingPacketBuffer[0] = 0x90;
	_outgoingPacketBuffer[1] = 0x03; // ping service
	for (uint8_t i=2; i<RADIO_PACKET_LENGTH; i++) {
		_outgoingPacketBuffer[i] = i - 2;
	}
	_outgoingPacketAvailable = true;

	// Setup radio communitcation
	RADIO_SERIAL.begin(RADIO_SERIAL_BAUD);

	// Setup AT Mode pin
	pinMode(RADIO_AT_MODE_PIN, OUTPUT);

	_clearSerialBuffer();
	_initialiseDiscoveryState();

	// Packet
	byte packetBuffer[RADIO_PACKET_WITH_RSSI_LENGTH];
	uint8_t packetBufferLength = 0;

	_currentMessageReceiver = NO_CURRENT_MESSAGE;
	while (true) {
		uint8_t availableBytes = RADIO_SERIAL.available();
		if (availableBytes > 0) {
			while (availableBytes > 0) {
				packetBuffer[packetBufferLength] = RADIO_SERIAL.read();
				packetBufferLength++;
				availableBytes--;

				// Only handle one packet at a time
				if (packetBufferLength == RADIO_PACKET_WITH_RSSI_LENGTH) {
					break; // we have enough for one packet
				}
			}

			packetBufferLength = _parsePacketBuffer(packetBuffer, packetBufferLength);

			_lastMessageReceived = xTaskGetTickCount();
		}

		_checkForStateChange();
	}
}