MultiTech / Mbed OS mDot_AT_firmware_CUSTOM

Dependencies:   libmDot-Custom MTS-Serial

Fork of mDot_AT_firmware_CUSTOM by Jason Reiss

To change channel plans replace AS923 with AU915, EU868, KR920 or US915 on line 15

#define CHANNEL_PLAN CP_AS923

See Supported Channel Plans

Committer:
Jason Reiss
Date:
Wed Aug 31 11:57:27 2016 -0500
Revision:
15:36db31c18231
Parent:
14:e80ace5a6834
Use DYNAMIC or FIXED channel plan instead of US915 or EU868
Add US915 and EU868 examples

Who changed what in which revision?

UserRevisionLine numberNew contents of line
Jason Reiss 14:e80ace5a6834 1 #include "CmdChannelMask.h"
Jason Reiss 14:e80ace5a6834 2
Jason Reiss 14:e80ace5a6834 3 CmdChannelMask::CmdChannelMask()
Jason Reiss 14:e80ace5a6834 4 :
Jason Reiss 14:e80ace5a6834 5 Command("Channel Mask", "AT+CHM", "Get/set channel mask (OFFSET:0-4,MASK:0000-FFFF)", "(OFFSET:0-4,MASK:0000-FFFF)")
Jason Reiss 14:e80ace5a6834 6 {
Jason Reiss 14:e80ace5a6834 7 _queryable = true;
Jason Reiss 14:e80ace5a6834 8 }
Jason Reiss 14:e80ace5a6834 9
Jason Reiss 14:e80ace5a6834 10 uint32_t CmdChannelMask::action(std::vector<std::string> args) {
Jason Reiss 14:e80ace5a6834 11
Jason Reiss 14:e80ace5a6834 12 if (args.size() == 1) {
Jason Reiss 14:e80ace5a6834 13 if (CommandTerminal::Dot()->getVerbose())
Jason Reiss 14:e80ace5a6834 14 CommandTerminal::Serial()->writef("Channel Mask: ");
Jason Reiss 14:e80ace5a6834 15
Jason Reiss 14:e80ace5a6834 16 std::vector<uint16_t> mask = CommandTerminal::Dot()->getChannelMask();
Jason Reiss 14:e80ace5a6834 17
Jason Reiss 14:e80ace5a6834 18 for (int i = int(mask.size()) - 1; i >= 0; i--) {
Jason Reiss 14:e80ace5a6834 19 CommandTerminal::Serial()->writef("%04X", mask[i]);
Jason Reiss 14:e80ace5a6834 20 }
Jason Reiss 14:e80ace5a6834 21
Jason Reiss 14:e80ace5a6834 22 CommandTerminal::Serial()->writef("\r\n");
Jason Reiss 14:e80ace5a6834 23
Jason Reiss 14:e80ace5a6834 24 } else if (args.size() == 3) {
Jason Reiss 14:e80ace5a6834 25 int code = 0;
Jason Reiss 14:e80ace5a6834 26 int temp = 0;
Jason Reiss 14:e80ace5a6834 27 int offset = 0;
Jason Reiss 14:e80ace5a6834 28 uint16_t mask = 0;
Jason Reiss 14:e80ace5a6834 29
Jason Reiss 14:e80ace5a6834 30 sscanf(args[1].c_str(), "%d", &offset);
Jason Reiss 14:e80ace5a6834 31
Jason Reiss 14:e80ace5a6834 32 // Convert the ASCII hex data to binary...
Jason Reiss 14:e80ace5a6834 33 sscanf(&args[2][0], "%02x", &temp);
Jason Reiss 14:e80ace5a6834 34 mask = uint8_t(temp) << 8;
Jason Reiss 14:e80ace5a6834 35 sscanf(&args[2][2], "%02x", &temp);
Jason Reiss 14:e80ace5a6834 36 mask |= uint8_t(temp);
Jason Reiss 14:e80ace5a6834 37
Jason Reiss 14:e80ace5a6834 38 if ((code = CommandTerminal::Dot()->setChannelMask(offset, mask)) != mDot::MDOT_OK) {
Jason Reiss 14:e80ace5a6834 39 CommandTerminal::setErrorMessage(CommandTerminal::Dot()->getLastError());
Jason Reiss 14:e80ace5a6834 40 return 1;
Jason Reiss 14:e80ace5a6834 41 }
Jason Reiss 14:e80ace5a6834 42 }
Jason Reiss 14:e80ace5a6834 43
Jason Reiss 14:e80ace5a6834 44 return 0;
Jason Reiss 14:e80ace5a6834 45 }
Jason Reiss 14:e80ace5a6834 46
Jason Reiss 14:e80ace5a6834 47 bool CmdChannelMask::verify(std::vector<std::string> args) {
Jason Reiss 14:e80ace5a6834 48 if (args.size() == 1)
Jason Reiss 14:e80ace5a6834 49 return true;
Jason Reiss 14:e80ace5a6834 50
Jason Reiss 14:e80ace5a6834 51 if (args.size() == 3) {
Jason Reiss 14:e80ace5a6834 52
Jason Reiss 14:e80ace5a6834 53 int offset;
Jason Reiss 14:e80ace5a6834 54 if (sscanf(args[1].c_str(), "%d", &offset) != 1) {
Jason Reiss 14:e80ace5a6834 55 CommandTerminal::setErrorMessage("Invalid argument");
Jason Reiss 14:e80ace5a6834 56 return false;
Jason Reiss 14:e80ace5a6834 57 }
Jason Reiss 14:e80ace5a6834 58
Jason Reiss 15:36db31c18231 59 if (CommandTerminal::Dot()->getFrequencyBand() == mDot::DYNAMIC) {
Jason Reiss 14:e80ace5a6834 60 if (offset > 0) {
Jason Reiss 14:e80ace5a6834 61 CommandTerminal::setErrorMessage("Invalid offset, expects (0)");
Jason Reiss 14:e80ace5a6834 62 return false;
Jason Reiss 14:e80ace5a6834 63 }
Jason Reiss 14:e80ace5a6834 64 } else {
Jason Reiss 14:e80ace5a6834 65 if (offset < 0 || offset > 4) {
Jason Reiss 14:e80ace5a6834 66 CommandTerminal::setErrorMessage("Invalid offset, expects (0-4)");
Jason Reiss 14:e80ace5a6834 67 return false;
Jason Reiss 14:e80ace5a6834 68 }
Jason Reiss 14:e80ace5a6834 69 }
Jason Reiss 14:e80ace5a6834 70
Jason Reiss 14:e80ace5a6834 71 if (!isHexString(args[2], 2)) {
Jason Reiss 14:e80ace5a6834 72 CommandTerminal::setErrorMessage("Invalid mask, expect (0000-FFFF)");
Jason Reiss 14:e80ace5a6834 73 return false;
Jason Reiss 14:e80ace5a6834 74 }
Jason Reiss 14:e80ace5a6834 75
Jason Reiss 14:e80ace5a6834 76 return true;
Jason Reiss 14:e80ace5a6834 77 }
Jason Reiss 14:e80ace5a6834 78
Jason Reiss 14:e80ace5a6834 79 CommandTerminal::setErrorMessage("Invalid arguments");
Jason Reiss 14:e80ace5a6834 80 return false;
Jason Reiss 14:e80ace5a6834 81 }