Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: AlohaTransceiver RingBuffer SX1276Lib SerialInterfaceProtocol mbed L3PDU
Diff: main.cpp
- Revision:
- 9:e13e02aa4a2f
- Parent:
- 8:332099ece6e9
- Child:
- 11:9590f3c9d915
--- a/main.cpp Wed Jul 27 04:37:58 2016 +0000
+++ b/main.cpp Fri Jul 29 04:00:09 2016 +0000
@@ -52,6 +52,311 @@
return 0;
}
+/*
+ * Format:
+ * < :start flag
+ * 02 :command
+ * xx :length
+ * xx: :00: get, 01: set
+ * xx :index for parameters
+ * ...
+ * ff :checksum
+ * > :end flag
+ */
+int configureRadio(uint8_t *payload, uint8_t payload_length, uint8_t *response, uint8_t *response_length)
+{
+ // read settings from radio
+#if USE_MODEM_LORA == 1
+ AlohaTransceiver::LoRaSettings_t *settings = aloha.getSettings();
+#elif USE_MODEM_FSK == 1
+ AlohaTransceiver::FskSettings_t *settings = aloha.getSettings();
+#else
+ #error "Please define a modem in the compiler options."
+#endif
+
+ if (payload_length < 2)
+ {
+ sprintf((char *) response, "Wrong Payload Length\r\n");
+ *response_length = 22;
+ return 1;
+ }
+
+ // true is set, false is get
+ bool isSet = (bool) payload[0];
+ uint8_t idx = payload[1];
+
+ switch(idx)
+ {
+ case 0x00: // Power
+ {
+ if (isSet)
+ {
+ int8_t Power = (int8_t) payload[2];
+ settings->Power = Power;
+
+ return 0;
+ }
+ else
+ {
+ response[0] = (uint8_t) settings->Power;
+ *response_length = 1;
+
+ return 0;
+ }
+ }
+
+ case 0x01: // Bandwidth
+ {
+ if (isSet)
+ {
+ uint32_t Bandwidth = (payload[5]) |
+ (payload[4] << 8) |
+ (payload[3] << 16) |
+ (payload[2] << 24);
+ settings->Bandwidth = Bandwidth;
+
+ return 0;
+ }
+ else
+ {
+ response[3] = (uint8_t) (settings->Bandwidth);
+ response[2] = (uint8_t) (settings->Bandwidth >> 8);
+ response[1] = (uint8_t) (settings->Bandwidth >> 16);
+ response[0] = (uint8_t) (settings->Bandwidth >> 24);
+ *response_length = 4;
+
+ return 0;
+ }
+
+ }
+
+ case 0x02: // Datarate, AKA Spreading Factor
+ {
+ if (isSet)
+ {
+ uint32_t Datarate = (payload[5]) |
+ (payload[4] << 8) |
+ (payload[3] << 16) |
+ (payload[2] << 24);
+ settings->Datarate = Datarate;
+
+ return 0;
+ }
+ else
+ {
+ response[3] = (uint8_t) (settings->Datarate);
+ response[2] = (uint8_t) (settings->Datarate >> 8);
+ response[1] = (uint8_t) (settings->Datarate >> 16);
+ response[0] = (uint8_t) (settings->Datarate >> 24);
+ *response_length = 4;
+
+ return 0;
+ }
+ }
+
+ case 0x03: // Coderate
+ {
+ if (isSet)
+ {
+ uint8_t Coderate = payload[2];
+ settings->Coderate = Coderate;
+
+ return 0;
+ }
+ else
+ {
+ response[0] = (uint8_t) settings->Coderate;
+ *response_length = 1;
+
+ return 0;
+ }
+ }
+
+ case 0x04: //Preamble Length
+ {
+ if (isSet)
+ {
+ uint16_t PreambleLen = payload[3] | (payload[2] << 8);
+ settings->PreambleLen = PreambleLen;
+ return 0;
+ }
+ else
+ {
+ response[1] = (uint8_t) (settings->PreambleLen);
+ response[0] = (uint8_t)(settings->PreambleLen >> 8);
+ *response_length = 2;
+
+ return 0;
+ }
+ }
+
+ case 0x05: //Symbol Timeout
+ {
+ if (isSet)
+ {
+ uint16_t SymbolTimeout = payload[3] | (payload[2] << 8);
+ settings->SymbolTimeout = SymbolTimeout;
+ return 0;
+ }
+ else
+ {
+ response[1] = (uint8_t) (settings->SymbolTimeout);
+ response[0] = (uint8_t) (settings->SymbolTimeout >> 8);
+ *response_length = 2;
+
+ return 0;
+ }
+ }
+
+ case 0x06: //FixLen
+ {
+ if (isSet)
+ {
+ bool FixLen = payload[2];
+ settings->FixLen = FixLen;
+ return 0;
+ }
+ else
+ {
+ response[0] = (bool) (settings->SymbolTimeout);
+ *response_length = 1;
+
+ return 0;
+ }
+ }
+
+ case 0x07: //PayloadLen
+ {
+ if (isSet)
+ {
+ uint8_t PayloadLen = payload[2];
+ settings->PayloadLen = PayloadLen;
+ return 0;
+ }
+ else
+ {
+ response[0] = (uint8_t) (settings->PayloadLen);
+
+ return 0;
+ }
+ }
+
+ case 0x08: //CrcOn
+ {
+ if (isSet) {
+ bool CrcOn = payload[2];
+ settings->CrcOn = CrcOn;
+ return 0;
+ }
+ else
+ {
+ response[0] = (bool) (settings->CrcOn);
+
+ return 0;
+ }
+ }
+
+ case 0x09: //FreqHopOn
+ {
+ if (isSet) {
+ bool FreqHopOn = payload[2];
+ settings->FreqHopOn = FreqHopOn;
+ return 0;
+ }
+ else
+ {
+ response[0] = (bool) (settings->FreqHopOn);
+
+ return 0;
+ }
+ }
+
+ case 0x0A: //HopPeriod
+ {
+ if (isSet) {
+ uint8_t HopPeriod = payload[2];
+ settings->HopPeriod = HopPeriod;
+ return 0;
+ }
+ else
+ {
+ response[0] = (uint8_t) (settings->HopPeriod);
+ return 0;
+ }
+ }
+
+ case 0x0B: //IqInverted
+ {
+ if (isSet) {
+ bool IqInverted = payload[2];
+ settings->IqInverted = IqInverted;
+ return 0;
+ }
+ else
+ {
+ response[0] = (bool) (settings->IqInverted);
+ return 0;
+ }
+ }
+
+ case 0x0C: //RxContinuous
+ {
+ if(isSet)
+ {
+ bool RxContinuous = payload[2];
+ settings->RxContinuous = RxContinuous;
+ return 0;
+ }
+ else
+ {
+ response[0] = (bool) (settings->RxContinuous);
+ return 0;
+ }
+ }
+
+ case 0x0D: //TxTimeout
+ {
+ if (isSet)
+ {
+ uint32_t TxTimeout = (payload[5]) |
+ (payload[4] << 8) |
+ (payload[3] << 16) |
+ (payload[2] << 24);
+ settings->TxTimeout = TxTimeout;
+ return 0;
+ }
+ else
+ {
+ response[3] = (uint8_t) (settings->TxTimeout);
+ response[2] = (uint8_t) (settings->TxTimeout >> 8);
+ response[1] = (uint8_t) (settings->TxTimeout >> 16);
+ response[0] = (uint8_t) (settings->TxTimeout >> 24);
+ *response_length = 4;
+
+ return 0;
+ }
+ }
+
+
+ default:
+ {
+ break;
+ }
+
+ //case
+ }
+
+
+ return 0;
+}
+
+int radioUpdateSettings(uint8_t *payload, uint8_t payload_length, uint8_t *response, uint8_t *response_length)
+{
+ aloha.updateSettings();
+
+ return 0;
+}
+
int sendMessage(uint8_t *payload, uint8_t payload_length, uint8_t *response, uint8_t *response_length)
{
static uint8_t seqid = 0;
@@ -131,6 +436,8 @@
// register callback functions for SIP
SIP.registerCommand(0x00, toggleChecksum);
SIP.registerCommand(0x01, sendMessage);
+ SIP.registerCommand(0x02, configureRadio);
+ SIP.registerCommand(0x03, radioUpdateSettings);
// register callback functions for aloha transceiver
aloha.registerType(AlohaFrame::Aloha_Data, AlohaDataEcho);