diff --git a/latest/Firmware/Transponder/Inc/Configuration.hpp b/latest/Firmware/Transponder/Inc/Configuration.hpp index f861b01..6f3956f 100644 --- a/latest/Firmware/Transponder/Inc/Configuration.hpp +++ b/latest/Firmware/Transponder/Inc/Configuration.hpp @@ -53,6 +53,8 @@ private: bool erasePage(); bool writePage(); uint32_t nextAvailableOTPSlot(); + const char *hwRev(); + const char *serNum(); }; #endif /* CONFIGURATION_HPP_ */ diff --git a/latest/Firmware/Transponder/Inc/config.h b/latest/Firmware/Transponder/Inc/config.h index f8a7c77..79287c3 100644 --- a/latest/Firmware/Transponder/Inc/config.h +++ b/latest/Firmware/Transponder/Inc/config.h @@ -87,7 +87,7 @@ #define CLI_FLAG_MAGIC 0x209a388d #define CONFIGURATION_ADDRESS 0x0800F800 -#define OTP_DATA 0 +#define OTP_DATA 1 #define FW_REV "3.1.0" diff --git a/latest/Firmware/Transponder/Src/CommandProcessor.cpp b/latest/Firmware/Transponder/Src/CommandProcessor.cpp index 48b7a7f..c814377 100644 --- a/latest/Firmware/Transponder/Src/CommandProcessor.cpp +++ b/latest/Firmware/Transponder/Src/CommandProcessor.cpp @@ -124,6 +124,10 @@ void CommandProcessor::processCommand(const char *buff) { Configuration::instance().reportStationData(); } + else if ( s.find("sys?") == 0 ) + { + Configuration::instance().reportSystemData(); + } else if ( s.find("dfu") == 0 ) { jumpToBootloader(); @@ -137,6 +141,18 @@ void CommandProcessor::processCommand(const char *buff) { fireTestPacket(); } + else if ( s.find("tx on") == 0 ) + { + // TODO + } + else if ( s.find("tx off") == 0 ) + { + // TODO + } + else if ( s.find("tx?") == 0 ) + { + // TODO + } else if (s.find("reboot") == 0 ) { bsp_reboot(); @@ -194,14 +210,17 @@ void CommandProcessor::writeOTPData(const std::string &s) vector tokens; Utils::tokenize(params, ' ', tokens); - if ( tokens.size() < 2 ) + if ( tokens.size() < 1 ) return; OTPData data; + memset(&data, 0, sizeof data); + data.magic = OTP_MAGIC; data.rev = OTP_REV; - strlcpy(data.serialnum, tokens[0].c_str(), sizeof data.serialnum); - strlcpy(data.hwrev, tokens[1].c_str(), sizeof data.hwrev); + strlcpy(data.hwrev, tokens[0].c_str(), sizeof data.hwrev); + if ( tokens.size() > 1 ) + strlcpy(data.serialnum, tokens[1].c_str(), sizeof data.serialnum); bool result = Configuration::instance().writeOTP(data); if ( result ) diff --git a/latest/Firmware/Transponder/Src/Configuration.cpp b/latest/Firmware/Transponder/Src/Configuration.cpp index 426cd7a..90569b6 100644 --- a/latest/Firmware/Transponder/Src/Configuration.cpp +++ b/latest/Firmware/Transponder/Src/Configuration.cpp @@ -68,13 +68,31 @@ void Configuration::init() } } +const char *Configuration::hwRev() +{ + const OTPData *otp = readOTP(); + if ( otp ) + return otp->hwrev; + else + return BSP_HW_REV; +} + +const char *Configuration::serNum() +{ + const OTPData *otp = readOTP(); + if ( otp ) + return otp->serialnum; + else + return ""; +} + void Configuration::reportSystemData() { Event *e = EventPool::instance().newEvent(PROPR_NMEA_SENTENCE); if ( !e ) return; - sprintf(e->nmeaBuffer.sentence, "$PAISYS,%s,%s,%s*", BSP_HW_REV, FW_REV, ""); + sprintf(e->nmeaBuffer.sentence, "$PAISYS,%s,%s,%s*", hwRev(), FW_REV, serNum()); Utils::completeNMEA(e->nmeaBuffer.sentence); EventQueue::instance().push(e); @@ -123,9 +141,13 @@ void Configuration::reportOTPData() { sprintf(e->nmeaBuffer.sentence, "$PAIOTP,%s,%s*", data->serialnum, data->hwrev); } - + else + { + strcpy(e->nmeaBuffer.sentence, "$PAIOTP,,*"); + } Utils::completeNMEA(e->nmeaBuffer.sentence); EventQueue::instance().push(e); + } #endif