JLC test
Dependencies: PinDetect libmDot mbed-rtos mbed
main.cpp@0:6aa743a332ae, 2016-01-22 (annotated)
- Committer:
- tmulrooney
- Date:
- Fri Jan 22 00:33:38 2016 +0000
- Revision:
- 0:6aa743a332ae
- Child:
- 1:96c429800568
test for JLC
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tmulrooney | 0:6aa743a332ae | 1 | /********************************************************************************** |
tmulrooney | 0:6aa743a332ae | 2 | * This program monitors the power on state, kill state and battery voltage on |
tmulrooney | 0:6aa743a332ae | 3 | * Woodstream mouse trap using the Multitech mDot and UDK2 development system. |
tmulrooney | 0:6aa743a332ae | 4 | * The power on state is monitored on the PA_4(UDK2 Pin D10)and the kill state is |
tmulrooney | 0:6aa743a332ae | 5 | * monitored on the PA_5 (UDK2 Pin D13) Digital Input Pins. The battery voltage |
tmulrooney | 0:6aa743a332ae | 6 | * is monitored on the PB_1 (UDK2 Pin A0) Analog Input. The status of these pins |
tmulrooney | 0:6aa743a332ae | 7 | * are transferred from the mDot LoRa to the Conduit LoRa gateway. The status is |
tmulrooney | 0:6aa743a332ae | 8 | * also shown on the USB Debug Terminal Window. |
tmulrooney | 0:6aa743a332ae | 9 | *********************************************************************************/ |
tmulrooney | 0:6aa743a332ae | 10 | |
tmulrooney | 0:6aa743a332ae | 11 | #include "mbed.h" |
tmulrooney | 0:6aa743a332ae | 12 | #include "mDot.h" |
tmulrooney | 0:6aa743a332ae | 13 | #include "MTSLog.h" |
tmulrooney | 0:6aa743a332ae | 14 | #include <string> |
tmulrooney | 0:6aa743a332ae | 15 | #include <vector> |
tmulrooney | 0:6aa743a332ae | 16 | #include <algorithm> |
tmulrooney | 0:6aa743a332ae | 17 | #include "PinDetect.h" |
tmulrooney | 0:6aa743a332ae | 18 | |
tmulrooney | 0:6aa743a332ae | 19 | #define I2C_TIME 5 |
tmulrooney | 0:6aa743a332ae | 20 | #define LED_TIME 1 |
tmulrooney | 0:6aa743a332ae | 21 | #define BATTERY_TIME 2.0 |
tmulrooney | 0:6aa743a332ae | 22 | #define KILL_STATUS_TIME 3.0 |
tmulrooney | 0:6aa743a332ae | 23 | #define POWER_ON_TIME 4.0 |
tmulrooney | 0:6aa743a332ae | 24 | |
tmulrooney | 0:6aa743a332ae | 25 | //mDot* dot; |
tmulrooney | 0:6aa743a332ae | 26 | Ticker ledTimer; |
tmulrooney | 0:6aa743a332ae | 27 | Ticker batteryTimer; |
tmulrooney | 0:6aa743a332ae | 28 | Ticker killStatusTimer; |
tmulrooney | 0:6aa743a332ae | 29 | Ticker powerOnTimer; |
tmulrooney | 0:6aa743a332ae | 30 | |
tmulrooney | 0:6aa743a332ae | 31 | AnalogIn batteryVoltage(PTB0); |
tmulrooney | 0:6aa743a332ae | 32 | DigitalIn powerOn(PTC1); /* SW2 */ |
tmulrooney | 0:6aa743a332ae | 33 | DigitalIn killStatus(PTB17); /* SW3 */ |
tmulrooney | 0:6aa743a332ae | 34 | DigitalOut led_red(PTA1); |
tmulrooney | 0:6aa743a332ae | 35 | DigitalOut led_green(PTA2); |
tmulrooney | 0:6aa743a332ae | 36 | //DigitalOut led_blue(PTD5); |
tmulrooney | 0:6aa743a332ae | 37 | DigitalOut spi_cs(PTD4); |
tmulrooney | 0:6aa743a332ae | 38 | |
tmulrooney | 0:6aa743a332ae | 39 | Serial pc(PTE0, PTE1); |
tmulrooney | 0:6aa743a332ae | 40 | |
tmulrooney | 0:6aa743a332ae | 41 | // Configuration variables |
tmulrooney | 0:6aa743a332ae | 42 | static std::string config_network_name = "LORA_NET"; |
tmulrooney | 0:6aa743a332ae | 43 | static std::string config_network_pass = "BLUE_HEN1"; |
tmulrooney | 0:6aa743a332ae | 44 | static uint8_t config_frequency_sub_band = 7; |
tmulrooney | 0:6aa743a332ae | 45 | |
tmulrooney | 0:6aa743a332ae | 46 | //Global Variables |
tmulrooney | 0:6aa743a332ae | 47 | bool readyToSendI2C; |
tmulrooney | 0:6aa743a332ae | 48 | bool readyToSendBatteryVoltage; |
tmulrooney | 0:6aa743a332ae | 49 | bool readyToSendKillStatus; |
tmulrooney | 0:6aa743a332ae | 50 | bool readyToSendPowerOn; |
tmulrooney | 0:6aa743a332ae | 51 | float lastBatteryVoltage; |
tmulrooney | 0:6aa743a332ae | 52 | uint8_t lastKillStatus; |
tmulrooney | 0:6aa743a332ae | 53 | uint8_t lastPowerOn; |
tmulrooney | 0:6aa743a332ae | 54 | |
tmulrooney | 0:6aa743a332ae | 55 | //Function prototypes |
tmulrooney | 0:6aa743a332ae | 56 | void ledWrite(); |
tmulrooney | 0:6aa743a332ae | 57 | void periodicSendTock(); |
tmulrooney | 0:6aa743a332ae | 58 | void batteryRead(); |
tmulrooney | 0:6aa743a332ae | 59 | void killStatusRead(); |
tmulrooney | 0:6aa743a332ae | 60 | void powerOnRead(); |
tmulrooney | 0:6aa743a332ae | 61 | void printError(mDot* dot, int32_t returnCode); |
tmulrooney | 0:6aa743a332ae | 62 | void printVersion(); |
tmulrooney | 0:6aa743a332ae | 63 | bool setFrequencySubBand(uint8_t subBand); |
tmulrooney | 0:6aa743a332ae | 64 | bool setNetworkName(const std::string name); |
tmulrooney | 0:6aa743a332ae | 65 | bool setNetworkPassphrase(const std::string passphrase); |
tmulrooney | 0:6aa743a332ae | 66 | bool setTxDataRate(const int dataRate); |
tmulrooney | 0:6aa743a332ae | 67 | bool setPower(uint8_t power); |
tmulrooney | 0:6aa743a332ae | 68 | bool setAck(uint8_t retries); |
tmulrooney | 0:6aa743a332ae | 69 | bool joinNetwork(); |
tmulrooney | 0:6aa743a332ae | 70 | bool send(const std::string text); |
tmulrooney | 0:6aa743a332ae | 71 | char latestData[100]; |
tmulrooney | 0:6aa743a332ae | 72 | I2C i2c_mem(PTB3,PTB2); |
tmulrooney | 0:6aa743a332ae | 73 | //SPI spi_rf(PTD6, PTD7, PTD5, PTD4); |
tmulrooney | 0:6aa743a332ae | 74 | SPI spi_rf(PTD6, PTD7, PTD5); |
tmulrooney | 0:6aa743a332ae | 75 | int myI2CWrite(int addr, char *data, int length); |
tmulrooney | 0:6aa743a332ae | 76 | int myI2CRead(int addr, char *data, int length); |
tmulrooney | 0:6aa743a332ae | 77 | int mySPIWrite(int addr, char *data, int length); |
tmulrooney | 0:6aa743a332ae | 78 | int mySPIRead(int addr, char *data, int length); |
tmulrooney | 0:6aa743a332ae | 79 | |
tmulrooney | 0:6aa743a332ae | 80 | int i2cAddr = 0xAA; |
tmulrooney | 0:6aa743a332ae | 81 | char data[0x10]; |
tmulrooney | 0:6aa743a332ae | 82 | char data1[0x10]; |
tmulrooney | 0:6aa743a332ae | 83 | |
tmulrooney | 0:6aa743a332ae | 84 | int main() |
tmulrooney | 0:6aa743a332ae | 85 | { |
tmulrooney | 0:6aa743a332ae | 86 | bool configFail = false; |
tmulrooney | 0:6aa743a332ae | 87 | int ack; |
tmulrooney | 0:6aa743a332ae | 88 | |
tmulrooney | 0:6aa743a332ae | 89 | readyToSendI2C = false; |
tmulrooney | 0:6aa743a332ae | 90 | readyToSendBatteryVoltage = false; |
tmulrooney | 0:6aa743a332ae | 91 | readyToSendKillStatus = false; |
tmulrooney | 0:6aa743a332ae | 92 | readyToSendPowerOn = false; |
tmulrooney | 0:6aa743a332ae | 93 | lastBatteryVoltage = 0.0; |
tmulrooney | 0:6aa743a332ae | 94 | lastKillStatus = killStatus; |
tmulrooney | 0:6aa743a332ae | 95 | lastPowerOn = powerOn; |
tmulrooney | 0:6aa743a332ae | 96 | |
tmulrooney | 0:6aa743a332ae | 97 | i2c_mem.frequency(100000); |
tmulrooney | 0:6aa743a332ae | 98 | |
tmulrooney | 0:6aa743a332ae | 99 | // Setup the spi for 8 bit data, high steady state clock, |
tmulrooney | 0:6aa743a332ae | 100 | // second edge capture, with a 1MHz clock rate |
tmulrooney | 0:6aa743a332ae | 101 | // spi_rf.format(16,3); |
tmulrooney | 0:6aa743a332ae | 102 | spi_rf.format(16,0); |
tmulrooney | 0:6aa743a332ae | 103 | spi_rf.frequency(1000000); |
tmulrooney | 0:6aa743a332ae | 104 | spi_cs = 1; |
tmulrooney | 0:6aa743a332ae | 105 | |
tmulrooney | 0:6aa743a332ae | 106 | //Start LED startup sequence |
tmulrooney | 0:6aa743a332ae | 107 | ledTimer.attach(&ledWrite, LED_TIME); |
tmulrooney | 0:6aa743a332ae | 108 | |
tmulrooney | 0:6aa743a332ae | 109 | pc.baud(115200); |
tmulrooney | 0:6aa743a332ae | 110 | pc.printf("\r\n\r\n"); |
tmulrooney | 0:6aa743a332ae | 111 | pc.printf("=====================================\r\n"); |
tmulrooney | 0:6aa743a332ae | 112 | pc.printf("I2C Demo \r\n"); |
tmulrooney | 0:6aa743a332ae | 113 | pc.printf("=====================================\r\n"); |
tmulrooney | 0:6aa743a332ae | 114 | |
tmulrooney | 0:6aa743a332ae | 115 | // get the mDot handle |
tmulrooney | 0:6aa743a332ae | 116 | // dot = mDot::getInstance(); |
tmulrooney | 0:6aa743a332ae | 117 | printVersion(); |
tmulrooney | 0:6aa743a332ae | 118 | /* dot->setLogLevel(mts::MTSLog::INFO_LEVEL); |
tmulrooney | 0:6aa743a332ae | 119 | |
tmulrooney | 0:6aa743a332ae | 120 | //******************************************* |
tmulrooney | 0:6aa743a332ae | 121 | // configuration |
tmulrooney | 0:6aa743a332ae | 122 | //******************************************* |
tmulrooney | 0:6aa743a332ae | 123 | // reset to default config so we know what state we're in |
tmulrooney | 0:6aa743a332ae | 124 | dot->resetNetworkSession(); |
tmulrooney | 0:6aa743a332ae | 125 | dot->resetConfig(); |
tmulrooney | 0:6aa743a332ae | 126 | |
tmulrooney | 0:6aa743a332ae | 127 | // set up the mDot with our network information: frequency sub band, network name, and network password |
tmulrooney | 0:6aa743a332ae | 128 | // these can all be saved in NVM so they don't need to be set every time - see mDot::saveConfig() |
tmulrooney | 0:6aa743a332ae | 129 | configFail = !setFrequencySubBand(config_frequency_sub_band); |
tmulrooney | 0:6aa743a332ae | 130 | configFail |= !setNetworkName(config_network_name); |
tmulrooney | 0:6aa743a332ae | 131 | configFail |= !setNetworkPassphrase(config_network_pass); |
tmulrooney | 0:6aa743a332ae | 132 | configFail |= !setTxDataRate(mDot::SF_8); |
tmulrooney | 0:6aa743a332ae | 133 | configFail |= !setPower(20); // Reduce latency for 868 units |
tmulrooney | 0:6aa743a332ae | 134 | configFail |= !setAck(0); // Disable ack for less latency |
tmulrooney | 0:6aa743a332ae | 135 | |
tmulrooney | 0:6aa743a332ae | 136 | printf("Configration %s\r\n",configFail?"Failed":"Passed"); |
tmulrooney | 0:6aa743a332ae | 137 | |
tmulrooney | 0:6aa743a332ae | 138 | // save this configuration to the mDot's NVM |
tmulrooney | 0:6aa743a332ae | 139 | printf("saving config\r\n"); |
tmulrooney | 0:6aa743a332ae | 140 | if (! dot->saveConfig()) |
tmulrooney | 0:6aa743a332ae | 141 | { |
tmulrooney | 0:6aa743a332ae | 142 | logError("failed to save configuration"); |
tmulrooney | 0:6aa743a332ae | 143 | } |
tmulrooney | 0:6aa743a332ae | 144 | //******************************************* |
tmulrooney | 0:6aa743a332ae | 145 | // end of configuration |
tmulrooney | 0:6aa743a332ae | 146 | //******************************************* |
tmulrooney | 0:6aa743a332ae | 147 | |
tmulrooney | 0:6aa743a332ae | 148 | // keep trying to join the network |
tmulrooney | 0:6aa743a332ae | 149 | while (!joinNetwork()) |
tmulrooney | 0:6aa743a332ae | 150 | { |
tmulrooney | 0:6aa743a332ae | 151 | wait(200); |
tmulrooney | 0:6aa743a332ae | 152 | dot->resetNetworkSession(); |
tmulrooney | 0:6aa743a332ae | 153 | } |
tmulrooney | 0:6aa743a332ae | 154 | */ |
tmulrooney | 0:6aa743a332ae | 155 | // Stop LED startup sequence & configure them for operation |
tmulrooney | 0:6aa743a332ae | 156 | led_red = 1; |
tmulrooney | 0:6aa743a332ae | 157 | led_green = 1; |
tmulrooney | 0:6aa743a332ae | 158 | // led_blue = 1; |
tmulrooney | 0:6aa743a332ae | 159 | // start all paramter timers to sample analog and digital inputs |
tmulrooney | 0:6aa743a332ae | 160 | // batteryTimer.attach(batteryRead, BATTERY_TIME); |
tmulrooney | 0:6aa743a332ae | 161 | // killStatusTimer.attach(killStatusRead, KILL_STATUS_TIME); |
tmulrooney | 0:6aa743a332ae | 162 | // powerOnTimer.attach(powerOnRead, POWER_ON_TIME); |
tmulrooney | 0:6aa743a332ae | 163 | |
tmulrooney | 0:6aa743a332ae | 164 | while (1) |
tmulrooney | 0:6aa743a332ae | 165 | { |
tmulrooney | 0:6aa743a332ae | 166 | // is there anything to send |
tmulrooney | 0:6aa743a332ae | 167 | if(readyToSendI2C) |
tmulrooney | 0:6aa743a332ae | 168 | { |
tmulrooney | 0:6aa743a332ae | 169 | #if 0 |
tmulrooney | 0:6aa743a332ae | 170 | data[0] = 0x12; |
tmulrooney | 0:6aa743a332ae | 171 | data[1] = 0x34; |
tmulrooney | 0:6aa743a332ae | 172 | data[2] = 0x56; |
tmulrooney | 0:6aa743a332ae | 173 | myI2CWrite(0,data,3); |
tmulrooney | 0:6aa743a332ae | 174 | myI2CRead(0,data1,3); |
tmulrooney | 0:6aa743a332ae | 175 | sprintf(latestData,"I2c %02X %02X %02X",data1[0], data1[1], data1[2]); |
tmulrooney | 0:6aa743a332ae | 176 | pc.printf("%s\r\n",latestData); |
tmulrooney | 0:6aa743a332ae | 177 | #endif |
tmulrooney | 0:6aa743a332ae | 178 | |
tmulrooney | 0:6aa743a332ae | 179 | #if 1 |
tmulrooney | 0:6aa743a332ae | 180 | // Send 0x8f, the command to read the WHOAMI register |
tmulrooney | 0:6aa743a332ae | 181 | data[0] = 0x12; |
tmulrooney | 0:6aa743a332ae | 182 | // mySPIWrite(0x0A,data,1); |
tmulrooney | 0:6aa743a332ae | 183 | // mySPIRead(0x0A,data1,1); |
tmulrooney | 0:6aa743a332ae | 184 | mySPIRead(0x42,data1,1); |
tmulrooney | 0:6aa743a332ae | 185 | // int spiData = spi_rf.write(0x0600 | 0x0000); |
tmulrooney | 0:6aa743a332ae | 186 | sprintf(latestData,"SPI %02X %02X",data1[0], data1[1]); |
tmulrooney | 0:6aa743a332ae | 187 | pc.printf("%s\r\n",latestData); |
tmulrooney | 0:6aa743a332ae | 188 | |
tmulrooney | 0:6aa743a332ae | 189 | #endif |
tmulrooney | 0:6aa743a332ae | 190 | send(latestData); |
tmulrooney | 0:6aa743a332ae | 191 | readyToSendI2C = false; |
tmulrooney | 0:6aa743a332ae | 192 | } |
tmulrooney | 0:6aa743a332ae | 193 | if(readyToSendBatteryVoltage) |
tmulrooney | 0:6aa743a332ae | 194 | { |
tmulrooney | 0:6aa743a332ae | 195 | sprintf(latestData,"Voltage %2.2f",(double)lastBatteryVoltage); |
tmulrooney | 0:6aa743a332ae | 196 | pc.printf("%s\r\n",latestData); |
tmulrooney | 0:6aa743a332ae | 197 | send(latestData); |
tmulrooney | 0:6aa743a332ae | 198 | readyToSendBatteryVoltage = false; |
tmulrooney | 0:6aa743a332ae | 199 | } |
tmulrooney | 0:6aa743a332ae | 200 | if(readyToSendKillStatus) |
tmulrooney | 0:6aa743a332ae | 201 | { |
tmulrooney | 0:6aa743a332ae | 202 | sprintf(latestData,"KillStatus %d",lastKillStatus); |
tmulrooney | 0:6aa743a332ae | 203 | pc.printf("%s\r\n",latestData); |
tmulrooney | 0:6aa743a332ae | 204 | send(latestData); |
tmulrooney | 0:6aa743a332ae | 205 | readyToSendKillStatus = false; |
tmulrooney | 0:6aa743a332ae | 206 | } |
tmulrooney | 0:6aa743a332ae | 207 | if(readyToSendPowerOn) |
tmulrooney | 0:6aa743a332ae | 208 | { |
tmulrooney | 0:6aa743a332ae | 209 | sprintf(latestData,"PowerOn %d",lastPowerOn); |
tmulrooney | 0:6aa743a332ae | 210 | pc.printf("%s\r\n",latestData); |
tmulrooney | 0:6aa743a332ae | 211 | send(latestData); |
tmulrooney | 0:6aa743a332ae | 212 | readyToSendPowerOn = false; |
tmulrooney | 0:6aa743a332ae | 213 | } |
tmulrooney | 0:6aa743a332ae | 214 | } |
tmulrooney | 0:6aa743a332ae | 215 | } |
tmulrooney | 0:6aa743a332ae | 216 | |
tmulrooney | 0:6aa743a332ae | 217 | int myI2CWrite(int addr, char *data, int length) |
tmulrooney | 0:6aa743a332ae | 218 | { |
tmulrooney | 0:6aa743a332ae | 219 | int i; |
tmulrooney | 0:6aa743a332ae | 220 | char bytes[3]; |
tmulrooney | 0:6aa743a332ae | 221 | |
tmulrooney | 0:6aa743a332ae | 222 | for(i=0; i< length; i++,addr++) |
tmulrooney | 0:6aa743a332ae | 223 | { |
tmulrooney | 0:6aa743a332ae | 224 | bytes[0] = addr << 8; |
tmulrooney | 0:6aa743a332ae | 225 | bytes[1] = addr & 0xFF; |
tmulrooney | 0:6aa743a332ae | 226 | bytes[2] = data[i]; |
tmulrooney | 0:6aa743a332ae | 227 | i2c_mem.write(i2cAddr, bytes, 3); /* write address and one byte */ |
tmulrooney | 0:6aa743a332ae | 228 | while(i2c_mem.write(i2cAddr, bytes, 0) != 0); /* wait till write complete */ |
tmulrooney | 0:6aa743a332ae | 229 | } |
tmulrooney | 0:6aa743a332ae | 230 | return 0; |
tmulrooney | 0:6aa743a332ae | 231 | } |
tmulrooney | 0:6aa743a332ae | 232 | |
tmulrooney | 0:6aa743a332ae | 233 | int myI2CRead(int addr, char *data, int length) |
tmulrooney | 0:6aa743a332ae | 234 | { |
tmulrooney | 0:6aa743a332ae | 235 | char bytes[2]; |
tmulrooney | 0:6aa743a332ae | 236 | |
tmulrooney | 0:6aa743a332ae | 237 | bytes[0] = addr << 8; |
tmulrooney | 0:6aa743a332ae | 238 | bytes[1] = addr & 0xFF; |
tmulrooney | 0:6aa743a332ae | 239 | i2c_mem.write(i2cAddr, bytes, 2,true); /* write address with repeated start */ |
tmulrooney | 0:6aa743a332ae | 240 | i2c_mem.read(i2cAddr, data, length); /* read all bytes */ |
tmulrooney | 0:6aa743a332ae | 241 | return 0; |
tmulrooney | 0:6aa743a332ae | 242 | } |
tmulrooney | 0:6aa743a332ae | 243 | |
tmulrooney | 0:6aa743a332ae | 244 | |
tmulrooney | 0:6aa743a332ae | 245 | int mySPIWrite(int addr, char *data, int length) |
tmulrooney | 0:6aa743a332ae | 246 | { |
tmulrooney | 0:6aa743a332ae | 247 | int i; |
tmulrooney | 0:6aa743a332ae | 248 | |
tmulrooney | 0:6aa743a332ae | 249 | for(i=0;i<length;i++,addr++) |
tmulrooney | 0:6aa743a332ae | 250 | { |
tmulrooney | 0:6aa743a332ae | 251 | spi_cs = 0; |
tmulrooney | 0:6aa743a332ae | 252 | data[i] = spi_rf.write( (addr << 8) | data[i] | 0x8000); |
tmulrooney | 0:6aa743a332ae | 253 | spi_cs = 1; |
tmulrooney | 0:6aa743a332ae | 254 | } |
tmulrooney | 0:6aa743a332ae | 255 | return 0; |
tmulrooney | 0:6aa743a332ae | 256 | } |
tmulrooney | 0:6aa743a332ae | 257 | |
tmulrooney | 0:6aa743a332ae | 258 | int mySPIRead(int addr, char *data, int length) |
tmulrooney | 0:6aa743a332ae | 259 | { |
tmulrooney | 0:6aa743a332ae | 260 | int i; |
tmulrooney | 0:6aa743a332ae | 261 | |
tmulrooney | 0:6aa743a332ae | 262 | for(i=0;i<length;i++,addr++) |
tmulrooney | 0:6aa743a332ae | 263 | { |
tmulrooney | 0:6aa743a332ae | 264 | spi_cs = 0; |
tmulrooney | 0:6aa743a332ae | 265 | data[i] = spi_rf.write( (addr << 8) | data[i] | 0x0000); |
tmulrooney | 0:6aa743a332ae | 266 | spi_cs = 1; |
tmulrooney | 0:6aa743a332ae | 267 | } |
tmulrooney | 0:6aa743a332ae | 268 | return 0; |
tmulrooney | 0:6aa743a332ae | 269 | } |
tmulrooney | 0:6aa743a332ae | 270 | |
tmulrooney | 0:6aa743a332ae | 271 | void ledWrite() |
tmulrooney | 0:6aa743a332ae | 272 | { |
tmulrooney | 0:6aa743a332ae | 273 | led_red = !led_red; |
tmulrooney | 0:6aa743a332ae | 274 | // led_green = !led_green; |
tmulrooney | 0:6aa743a332ae | 275 | // led_blue = !led_blue; |
tmulrooney | 0:6aa743a332ae | 276 | readyToSendI2C = true; |
tmulrooney | 0:6aa743a332ae | 277 | } |
tmulrooney | 0:6aa743a332ae | 278 | |
tmulrooney | 0:6aa743a332ae | 279 | void batteryRead() |
tmulrooney | 0:6aa743a332ae | 280 | { |
tmulrooney | 0:6aa743a332ae | 281 | lastBatteryVoltage = batteryVoltage * (float)3.3; |
tmulrooney | 0:6aa743a332ae | 282 | readyToSendBatteryVoltage = true; |
tmulrooney | 0:6aa743a332ae | 283 | } |
tmulrooney | 0:6aa743a332ae | 284 | |
tmulrooney | 0:6aa743a332ae | 285 | void killStatusRead() |
tmulrooney | 0:6aa743a332ae | 286 | { |
tmulrooney | 0:6aa743a332ae | 287 | lastKillStatus = killStatus; |
tmulrooney | 0:6aa743a332ae | 288 | readyToSendKillStatus = true; |
tmulrooney | 0:6aa743a332ae | 289 | } |
tmulrooney | 0:6aa743a332ae | 290 | |
tmulrooney | 0:6aa743a332ae | 291 | void powerOnRead() |
tmulrooney | 0:6aa743a332ae | 292 | { |
tmulrooney | 0:6aa743a332ae | 293 | lastPowerOn = powerOn; |
tmulrooney | 0:6aa743a332ae | 294 | readyToSendPowerOn = true; |
tmulrooney | 0:6aa743a332ae | 295 | } |
tmulrooney | 0:6aa743a332ae | 296 | |
tmulrooney | 0:6aa743a332ae | 297 | void printVersion() |
tmulrooney | 0:6aa743a332ae | 298 | { |
tmulrooney | 0:6aa743a332ae | 299 | // pc.printf("%s Built on: %s %s\r\n\r\n", dot->getId().c_str(),__DATE__,__TIME__); |
tmulrooney | 0:6aa743a332ae | 300 | pc.printf("Built on: %s %s\r\n\r\n", __DATE__,__TIME__); |
tmulrooney | 0:6aa743a332ae | 301 | } |
tmulrooney | 0:6aa743a332ae | 302 | |
tmulrooney | 0:6aa743a332ae | 303 | bool setFrequencySubBand(uint8_t subBand) |
tmulrooney | 0:6aa743a332ae | 304 | { |
tmulrooney | 0:6aa743a332ae | 305 | /* int32_t returnCode; |
tmulrooney | 0:6aa743a332ae | 306 | |
tmulrooney | 0:6aa743a332ae | 307 | printf("Setting frequency sub band to '%d'...\r\n", subBand); |
tmulrooney | 0:6aa743a332ae | 308 | if ((returnCode = dot->setFrequencySubBand(subBand)) != mDot::MDOT_OK) { |
tmulrooney | 0:6aa743a332ae | 309 | printError(dot, returnCode); |
tmulrooney | 0:6aa743a332ae | 310 | return false; |
tmulrooney | 0:6aa743a332ae | 311 | } |
tmulrooney | 0:6aa743a332ae | 312 | return true; |
tmulrooney | 0:6aa743a332ae | 313 | */ |
tmulrooney | 0:6aa743a332ae | 314 | } |
tmulrooney | 0:6aa743a332ae | 315 | |
tmulrooney | 0:6aa743a332ae | 316 | bool setNetworkName(const std::string name) |
tmulrooney | 0:6aa743a332ae | 317 | { |
tmulrooney | 0:6aa743a332ae | 318 | /* int32_t returnCode; |
tmulrooney | 0:6aa743a332ae | 319 | |
tmulrooney | 0:6aa743a332ae | 320 | printf("Setting network name to '%s'...\r\n", name.c_str()); |
tmulrooney | 0:6aa743a332ae | 321 | if ((returnCode = dot->setNetworkName(name)) != mDot::MDOT_OK) |
tmulrooney | 0:6aa743a332ae | 322 | { |
tmulrooney | 0:6aa743a332ae | 323 | printError(dot, returnCode); |
tmulrooney | 0:6aa743a332ae | 324 | return false; |
tmulrooney | 0:6aa743a332ae | 325 | } |
tmulrooney | 0:6aa743a332ae | 326 | return true; |
tmulrooney | 0:6aa743a332ae | 327 | */} |
tmulrooney | 0:6aa743a332ae | 328 | |
tmulrooney | 0:6aa743a332ae | 329 | bool setNetworkPassphrase(const std::string passphrase) |
tmulrooney | 0:6aa743a332ae | 330 | { |
tmulrooney | 0:6aa743a332ae | 331 | /* int32_t returnCode; |
tmulrooney | 0:6aa743a332ae | 332 | |
tmulrooney | 0:6aa743a332ae | 333 | printf("Setting passphrase to '%s'...\r\n", passphrase.c_str()); |
tmulrooney | 0:6aa743a332ae | 334 | if ((returnCode = dot->setNetworkPassphrase(passphrase)) != mDot::MDOT_OK) |
tmulrooney | 0:6aa743a332ae | 335 | { |
tmulrooney | 0:6aa743a332ae | 336 | printError(dot, returnCode); |
tmulrooney | 0:6aa743a332ae | 337 | return false; |
tmulrooney | 0:6aa743a332ae | 338 | } |
tmulrooney | 0:6aa743a332ae | 339 | return true; |
tmulrooney | 0:6aa743a332ae | 340 | */} |
tmulrooney | 0:6aa743a332ae | 341 | |
tmulrooney | 0:6aa743a332ae | 342 | bool setTxDataRate(const int dataRate) |
tmulrooney | 0:6aa743a332ae | 343 | { |
tmulrooney | 0:6aa743a332ae | 344 | /* int32_t returnCode; |
tmulrooney | 0:6aa743a332ae | 345 | |
tmulrooney | 0:6aa743a332ae | 346 | printf("Setting TX Spreading factor to %d...\r\n",dataRate); |
tmulrooney | 0:6aa743a332ae | 347 | if ((returnCode = dot->setTxDataRate(dataRate)) != mDot::MDOT_OK) |
tmulrooney | 0:6aa743a332ae | 348 | { |
tmulrooney | 0:6aa743a332ae | 349 | logError("Failed To Set Tx Datarate %d:%s", returnCode, mDot::getReturnCodeString(returnCode).c_str()); |
tmulrooney | 0:6aa743a332ae | 350 | printError(dot, returnCode); |
tmulrooney | 0:6aa743a332ae | 351 | return false; |
tmulrooney | 0:6aa743a332ae | 352 | } |
tmulrooney | 0:6aa743a332ae | 353 | return true; |
tmulrooney | 0:6aa743a332ae | 354 | */} |
tmulrooney | 0:6aa743a332ae | 355 | |
tmulrooney | 0:6aa743a332ae | 356 | bool setPower(uint8_t power) |
tmulrooney | 0:6aa743a332ae | 357 | { |
tmulrooney | 0:6aa743a332ae | 358 | /* int32_t returnCode; |
tmulrooney | 0:6aa743a332ae | 359 | printf("Setting tx power to '%d'...\r\n", power); |
tmulrooney | 0:6aa743a332ae | 360 | if ((returnCode = dot->setTxPower(power)) != mDot::MDOT_OK) |
tmulrooney | 0:6aa743a332ae | 361 | { |
tmulrooney | 0:6aa743a332ae | 362 | printError(dot, returnCode); |
tmulrooney | 0:6aa743a332ae | 363 | return false; |
tmulrooney | 0:6aa743a332ae | 364 | } |
tmulrooney | 0:6aa743a332ae | 365 | return true; |
tmulrooney | 0:6aa743a332ae | 366 | */} |
tmulrooney | 0:6aa743a332ae | 367 | |
tmulrooney | 0:6aa743a332ae | 368 | bool joinNetwork() |
tmulrooney | 0:6aa743a332ae | 369 | { |
tmulrooney | 0:6aa743a332ae | 370 | /* int32_t returnCode; |
tmulrooney | 0:6aa743a332ae | 371 | printf("\r\nJoining network...\r\n"); |
tmulrooney | 0:6aa743a332ae | 372 | if ((returnCode = dot->joinNetworkOnce()) != mDot::MDOT_OK) |
tmulrooney | 0:6aa743a332ae | 373 | { |
tmulrooney | 0:6aa743a332ae | 374 | printError(dot, returnCode); |
tmulrooney | 0:6aa743a332ae | 375 | return false; |
tmulrooney | 0:6aa743a332ae | 376 | } |
tmulrooney | 0:6aa743a332ae | 377 | printf("Network Joined!\r\n"); |
tmulrooney | 0:6aa743a332ae | 378 | return true; |
tmulrooney | 0:6aa743a332ae | 379 | */} |
tmulrooney | 0:6aa743a332ae | 380 | |
tmulrooney | 0:6aa743a332ae | 381 | bool setAck(uint8_t retries) |
tmulrooney | 0:6aa743a332ae | 382 | { |
tmulrooney | 0:6aa743a332ae | 383 | /* int32_t returnCode; |
tmulrooney | 0:6aa743a332ae | 384 | printf("Setting ack to '%d'...\r\n", retries); |
tmulrooney | 0:6aa743a332ae | 385 | if ((returnCode = dot->setAck(retries)) != mDot::MDOT_OK) |
tmulrooney | 0:6aa743a332ae | 386 | { |
tmulrooney | 0:6aa743a332ae | 387 | printError(dot, returnCode); |
tmulrooney | 0:6aa743a332ae | 388 | return false; |
tmulrooney | 0:6aa743a332ae | 389 | } |
tmulrooney | 0:6aa743a332ae | 390 | return true; |
tmulrooney | 0:6aa743a332ae | 391 | */} |
tmulrooney | 0:6aa743a332ae | 392 | |
tmulrooney | 0:6aa743a332ae | 393 | bool send(const std::string text) |
tmulrooney | 0:6aa743a332ae | 394 | { |
tmulrooney | 0:6aa743a332ae | 395 | /* int32_t returnCode; |
tmulrooney | 0:6aa743a332ae | 396 | uint32_t timeTillSend = dot->getNextTxMs(); |
tmulrooney | 0:6aa743a332ae | 397 | if (timeTillSend != 0) { |
tmulrooney | 0:6aa743a332ae | 398 | printf("waiting %lu ms to send\r\n", timeTillSend); |
tmulrooney | 0:6aa743a332ae | 399 | return false; |
tmulrooney | 0:6aa743a332ae | 400 | } |
tmulrooney | 0:6aa743a332ae | 401 | |
tmulrooney | 0:6aa743a332ae | 402 | printf("Sending data... "); |
tmulrooney | 0:6aa743a332ae | 403 | std::vector<uint8_t> data(text.begin(), text.end()); |
tmulrooney | 0:6aa743a332ae | 404 | if ((returnCode = dot->send(data, 1)) != mDot::MDOT_OK) |
tmulrooney | 0:6aa743a332ae | 405 | { |
tmulrooney | 0:6aa743a332ae | 406 | printError(dot, returnCode); |
tmulrooney | 0:6aa743a332ae | 407 | return false; |
tmulrooney | 0:6aa743a332ae | 408 | } |
tmulrooney | 0:6aa743a332ae | 409 | printf("Data sent!\r\n"); |
tmulrooney | 0:6aa743a332ae | 410 | return true; |
tmulrooney | 0:6aa743a332ae | 411 | */} |
tmulrooney | 0:6aa743a332ae | 412 | |
tmulrooney | 0:6aa743a332ae | 413 | void printError(mDot* dot, int32_t returnCode) |
tmulrooney | 0:6aa743a332ae | 414 | { |
tmulrooney | 0:6aa743a332ae | 415 | // std::string error = mDot::getReturnCodeString(returnCode) + " - " + dot->getLastError(); |
tmulrooney | 0:6aa743a332ae | 416 | // printf("%s\r\n", error.c_str()); |
tmulrooney | 0:6aa743a332ae | 417 | } |
tmulrooney | 0:6aa743a332ae | 418 |