with 36errors
Dependencies: MTS-Serial libxDot-dev-mbed5-deprecated
Fork of Dot-AT-Firmware by
CmdTxChannel.cpp
00001 #include "CmdTxChannel.h" 00002 #include "ChannelPlan.h" 00003 00004 CmdTxChannel::CmdTxChannel() 00005 : Command("Tx Channels", "AT+TXCH", "List Tx channel frequencies for sub-band", "<INDEX>,<FREQUENCY>,<DR_RANGE>") { 00006 _queryable = true; 00007 } 00008 00009 uint32_t CmdTxChannel::action(std::vector<std::string> args) { 00010 if (args.size() == 1) { 00011 00012 std::vector<uint32_t> channels = CommandTerminal::Dot()->getChannels(); 00013 std::vector<uint8_t> ranges = CommandTerminal::Dot()->getChannelRanges(); 00014 std::vector<uint16_t> mask = CommandTerminal::Dot()->getChannelMask(); 00015 00016 CommandTerminal::Serial()->writef("Index\tFrequency DR Max Min On\r\n"); 00017 00018 if (lora::ChannelPlan::IsPlanDynamic(CommandTerminal::Dot()->getFrequencyBand())) { 00019 for (int8_t i = 0; i < 16; i++) { 00020 if (channels[i] != 0) 00021 CommandTerminal::Serial()->writef(" %d\t%d %X %X %d\r\n", i, channels[i], ranges[i] >> 4, ranges[i] & 0xF, (mask[0] & (0x1 << i)) ? 1 : 0); 00022 else 00023 CommandTerminal::Serial()->writef(" %d\t %d %X %X 0\r\n", i, channels[i], ranges[i] >> 4, ranges[i] & 0xF); 00024 } 00025 00026 if (channels[16] != 0) 00027 CommandTerminal::Serial()->writef(" R2\t%d %X %X\r\n", channels[16], ranges[16] >> 4, ranges[16] & 0xF); 00028 else 00029 CommandTerminal::Serial()->writef(" R2\t %d %X %X\r\n", channels[16], ranges[16], ranges[168]); 00030 00031 } else { 00032 if (CommandTerminal::Dot()->getFrequencySubBand() > 0) { 00033 uint8_t offset = (CommandTerminal::Dot()->getFrequencySubBand() - 1) * 8; 00034 00035 for (int i = 0; i < 8; i++) { 00036 if ((CommandTerminal::Dot()->getFrequencySubBand() % 2) == 1) { 00037 CommandTerminal::Serial()->writef(" %d\t%d %X %X %d\r\n", i, channels[i], ranges[i] >> 4, ranges[i] & 0xF, (mask[(offset + i)/16] & (0x0001 << i)) ? 1 : 0); 00038 } else { 00039 CommandTerminal::Serial()->writef(" %d\t%d %X %X %d\r\n", i, channels[i], ranges[i] >> 4, ranges[i] & 0xF, (mask[(offset + i)/16] & (0x0001 << (i + 8))) ? 1 : 0); 00040 } 00041 } 00042 00043 CommandTerminal::Serial()->writef(" U\t%d %X %X %d\r\n", channels[8], ranges[8] >> 4, ranges[8] & 0xF, (mask[4] & (0x0001 << (CommandTerminal::Dot()->getFrequencySubBand() - 1))) ? 1 : 0); 00044 CommandTerminal::Serial()->writef(" R2\t%d %X %X\r\n", channels[9], ranges[9], ranges[9]); 00045 } else { 00046 for (size_t i = 0; i < channels.size() - 1; i++) { 00047 CommandTerminal::Serial()->writef(" %d\t%d %X %X %d\r\n", i, channels[i], ranges[i] >> 4, ranges[i] & 0xF, (mask[i/16] & (0x0001 << (i%16))) ? 1 : 0); 00048 } 00049 uint8_t last = channels.size() - 1; 00050 CommandTerminal::Serial()->writef(" R2\t%d %X %X\r\n", channels[last], ranges[last], ranges[last]); 00051 } 00052 } 00053 } 00054 00055 if (args.size() == 4) { 00056 int index; 00057 int frequency; 00058 int datarateRange; 00059 00060 sscanf(args[1].c_str(), "%d", &index); 00061 sscanf(args[2].c_str(), "%d", &frequency); 00062 sscanf(args[3].c_str(), "%02x", &datarateRange); 00063 00064 if (CommandTerminal::Dot()->addChannel(index, frequency, datarateRange) != mDot::MDOT_OK) { 00065 CommandTerminal::setErrorMessage("Failed to add channel"); 00066 return 1; 00067 } 00068 } 00069 00070 return 0; 00071 } 00072 00073 bool CmdTxChannel::verify(std::vector<std::string> args) { 00074 if (args.size() == 1) 00075 return true; 00076 00077 if (args.size() == 4) { 00078 00079 int index; 00080 int frequency; 00081 int datarateRange; 00082 00083 sscanf(args[1].c_str(), "%d", &index); 00084 sscanf(args[2].c_str(), "%d", &frequency); 00085 sscanf(args[3].c_str(), "%02x", &datarateRange); 00086 00087 if (lora::ChannelPlan::IsPlanDynamic(CommandTerminal::Dot()->getFrequencyBand())) { 00088 if (frequency != 0 && (frequency < int(CommandTerminal::Dot()->getMinFrequency()) || frequency > int(CommandTerminal::Dot()->getMaxFrequency()))) { 00089 char tmp[256]; 00090 sprintf(tmp, "Invalid frequency, expects (0,%lu-%lu)", CommandTerminal::Dot()->getMinFrequency(), CommandTerminal::Dot()->getMaxFrequency()); 00091 CommandTerminal::setErrorMessage(tmp); 00092 return false; 00093 } 00094 } else { 00095 CommandTerminal::setErrorMessage("Fixed channel plans cannot be changed, use AT+FSB or AT+CHM to limit"); 00096 return false; 00097 } 00098 00099 return true; 00100 } else { 00101 CommandTerminal::setErrorMessage("Invalid arguments"); 00102 return false; 00103 } 00104 00105 }
Generated on Wed Jul 13 2022 06:20:59 by 1.7.2