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:
Mon Aug 29 10:05:41 2016 -0500
Revision:
14:e80ace5a6834
Child:
15:36db31c18231
Update commands

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 14:e80ace5a6834 59 if (CommandTerminal::Dot()->getFrequencyBand() == mDot::FB_EU868) {
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 }