Jjun Deng / Mbed 2 deprecated WDR_additional_counter

Dependencies:   libmDot mbed-rtos mbed

Fork of CardRead_20170613 by wireless sensor

Committer:
Dengjj
Date:
Mon Jun 12 17:01:42 2017 +0000
Revision:
18:12be4d4c8fc2
Parent:
17:b60549bc8626
Child:
19:a0e9128dec64
pwr detection demo

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wang1tao 16:847c028f4130 1 #include "mbed.h"
wang1tao 16:847c028f4130 2 //#include "DataLoggerRS232.h"
mfiore 0:09250cd371d2 3 #include "mbed.h"
mfiore 0:09250cd371d2 4 #include "mDot.h"
mfiore 4:36e214ebfa56 5 #include "MTSLog.h"
mfiore 0:09250cd371d2 6 #include <string>
mfiore 0:09250cd371d2 7 #include <vector>
mfiore 4:36e214ebfa56 8 #include <algorithm>
wang1tao 16:847c028f4130 9 #include <math.h>
Dengjj 15:04b37f329c84 10
wang1tao 16:847c028f4130 11 #define RETURN_OK 0
wang1tao 16:847c028f4130 12 #define RETURN_ERR -1
wang1tao 16:847c028f4130 13 //define baudrate
wang1tao 16:847c028f4130 14 #define PC_BAUDRATE 115200
wang1tao 16:847c028f4130 15 #define CARD_MACHINE_BAUDRATE 19200
wang1tao 9:cf45820af9b9 16
wang1tao 16:847c028f4130 17 #define COMMAND_LENGTH 7
wang1tao 16:847c028f4130 18 #define RESPONSE_LENGTH 16
wang1tao 16:847c028f4130 19 #define RINGBUFFER_SIZE 100
wang1tao 16:847c028f4130 20
wang1tao 16:847c028f4130 21 #define READ_PERIOD 1
wang1tao 16:847c028f4130 22 #define SEND_PERIOD 5
wang1tao 16:847c028f4130 23
wang1tao 16:847c028f4130 24 const char readCmd[COMMAND_LENGTH] = {0x09,0x41,0x31,0x46,0x33,0x46,0x0d};
wang1tao 16:847c028f4130 25
wang1tao 16:847c028f4130 26 char readBuf[RESPONSE_LENGTH] = {0};
wang1tao 16:847c028f4130 27 char ringBuffer[RINGBUFFER_SIZE][RESPONSE_LENGTH] = {0};
wang1tao 13:5d050b414f16 28
wang1tao 16:847c028f4130 29 unsigned int inIndex = 0;
wang1tao 16:847c028f4130 30 unsigned int outIndex = 0;
Dengjj 18:12be4d4c8fc2 31 unsigned int pwr_cnt = 0;
Dengjj 18:12be4d4c8fc2 32
wang1tao 16:847c028f4130 33
wang1tao 16:847c028f4130 34 /* functions prototype */
wang1tao 16:847c028f4130 35 void readCardID(void);
wang1tao 16:847c028f4130 36 void sendCardID(void);
Dengjj 18:12be4d4c8fc2 37 void sendPwrStat(void);
wang1tao 16:847c028f4130 38
wang1tao 16:847c028f4130 39 void my_strcpy(char *dst, char *src);
wang1tao 16:847c028f4130 40 void my_strclear(char *str, unsigned int len);
Dengjj 15:04b37f329c84 41
wang1tao 16:847c028f4130 42 int configNetwork(void);
wang1tao 16:847c028f4130 43 int joinNetwork(void);
wang1tao 16:847c028f4130 44 int send_data(char *str);
wang1tao 13:5d050b414f16 45
wang1tao 16:847c028f4130 46 /* Global variables */
wang1tao 16:847c028f4130 47 Serial pc (USBTX, USBRX); // tx, rx
wang1tao 16:847c028f4130 48 Serial cm_rs485 (PA_2,PA_3); // tx, rx
Dengjj 18:12be4d4c8fc2 49 DigitalIn pwr_stat (PA_6); //pwr_status pin on/off
Dengjj 18:12be4d4c8fc2 50 string pwr_stat_str;
Dengjj 18:12be4d4c8fc2 51 std::string pwr_on_str = "ON";
Dengjj 18:12be4d4c8fc2 52 std::string pwr_off_str = "OFF";
wang1tao 9:cf45820af9b9 53
wang1tao 16:847c028f4130 54 mDot* dot;
wang1tao 16:847c028f4130 55
JCheng 5:6c7d2f4d7377 56 static std::string config_network_name = "chinaiot";
JCheng 5:6c7d2f4d7377 57 static std::string config_network_pass = "password";
Dengjj 18:12be4d4c8fc2 58 static uint8_t config_frequency_sub_band = 8;
mfiore 0:09250cd371d2 59
wang1tao 16:847c028f4130 60 int main()
wang1tao 16:847c028f4130 61 {
wang1tao 16:847c028f4130 62 int32_t ret;
wang1tao 16:847c028f4130 63
wang1tao 16:847c028f4130 64 pc.baud(PC_BAUDRATE);
wang1tao 16:847c028f4130 65 pc.printf("\n\r\n\r\n\r");
wang1tao 16:847c028f4130 66 pc.printf("============================================\n\r");
wang1tao 16:847c028f4130 67 pc.printf("SiFOX remote card read system!\n\r");
wang1tao 16:847c028f4130 68 pc.printf("============================================\n\r");
wang1tao 16:847c028f4130 69 pc.printf("PC COM RS232 baudrate: %d \n\r", PC_BAUDRATE);
wang1tao 16:847c028f4130 70 cm_rs485.baud(CARD_MACHINE_BAUDRATE);
wang1tao 16:847c028f4130 71 cm_rs485.format(9,SerialBase::Even,1);
wang1tao 16:847c028f4130 72 pc.printf("Card Machine RS485 baudrate: %d!\n\r", CARD_MACHINE_BAUDRATE);
wang1tao 16:847c028f4130 73
wang1tao 16:847c028f4130 74 //*******************************************
wang1tao 16:847c028f4130 75 // Configurate Network
wang1tao 16:847c028f4130 76 //*******************************************
wang1tao 16:847c028f4130 77 ret = configNetwork();
wang1tao 16:847c028f4130 78 if(ret != RETURN_OK)
wang1tao 16:847c028f4130 79 dot->sleep(5, mDot::RTC_ALARM); //sleep a while and restart
wang1tao 16:847c028f4130 80
wang1tao 16:847c028f4130 81 //*******************************************
wang1tao 16:847c028f4130 82 // Join Network
wang1tao 16:847c028f4130 83 //*******************************************
wang1tao 16:847c028f4130 84 ret = joinNetwork();
wang1tao 16:847c028f4130 85 if(ret != RETURN_OK)
wang1tao 16:847c028f4130 86 dot->sleep(5, mDot::RTC_ALARM); //sleep a while and restart
wang1tao 16:847c028f4130 87
wang1tao 16:847c028f4130 88 pc.printf("Wait 15S or card machine booting...\n\r");
wang1tao 16:847c028f4130 89 wait(15);
wang1tao 16:847c028f4130 90
wang1tao 16:847c028f4130 91 while(1) {
wang1tao 16:847c028f4130 92 /* Read Card ID */
wang1tao 16:847c028f4130 93 readCardID();
wang1tao 16:847c028f4130 94
wang1tao 16:847c028f4130 95 /* Send Card ID to gateway */
wang1tao 16:847c028f4130 96 sendCardID();
wang1tao 16:847c028f4130 97
wang1tao 16:847c028f4130 98 /* wait a while */
Dengjj 18:12be4d4c8fc2 99 wait(1);
Dengjj 18:12be4d4c8fc2 100 if (pwr_cnt == 31){
Dengjj 18:12be4d4c8fc2 101 pwr_cnt = 0;
Dengjj 18:12be4d4c8fc2 102 if(pwr_stat == 1){
Dengjj 18:12be4d4c8fc2 103 send_data("ON");
Dengjj 18:12be4d4c8fc2 104 }else{
Dengjj 18:12be4d4c8fc2 105 send_data("OFF");
Dengjj 18:12be4d4c8fc2 106 }
Dengjj 18:12be4d4c8fc2 107 }
Dengjj 18:12be4d4c8fc2 108 else {
Dengjj 18:12be4d4c8fc2 109 pwr_cnt++;
Dengjj 18:12be4d4c8fc2 110 }
wang1tao 16:847c028f4130 111 }
wang1tao 16:847c028f4130 112 }
wang1tao 16:847c028f4130 113
wang1tao 16:847c028f4130 114
wang1tao 16:847c028f4130 115 int configNetwork(void)
wang1tao 16:847c028f4130 116 {
wang1tao 10:79124c0a5952 117 int32_t ret;
wang1tao 16:847c028f4130 118
wang1tao 16:847c028f4130 119 dot = mDot::getInstance();
Dengjj 14:0616e4361f0c 120
mfiore 2:6e2c378339d9 121 // print library version information
wang1tao 16:847c028f4130 122 pc.printf("version: %s\n\r", dot->getId().c_str());
wang1tao 16:847c028f4130 123
mfiore 2:6e2c378339d9 124 //*******************************************
mfiore 2:6e2c378339d9 125 // configuration
mfiore 2:6e2c378339d9 126 //*******************************************
mfiore 0:09250cd371d2 127 // reset to default config so we know what state we're in
mfiore 0:09250cd371d2 128 dot->resetConfig();
JCheng 5:6c7d2f4d7377 129
mfiore 4:36e214ebfa56 130 dot->setLogLevel(mts::MTSLog::INFO_LEVEL);
Dengjj 15:04b37f329c84 131
mfiore 2:6e2c378339d9 132 // set up the mDot with our network information: frequency sub band, network name, and network password
mfiore 2:6e2c378339d9 133 // these can all be saved in NVM so they don't need to be set every time - see mDot::saveConfig()
JCheng 5:6c7d2f4d7377 134
mfiore 4:36e214ebfa56 135 // frequency sub band is only applicable in the 915 (US) frequency band
mfiore 4:36e214ebfa56 136 // if using a MultiTech Conduit gateway, use the same sub band as your Conduit (1-8) - the mDot will use the 8 channels in that sub band
mfiore 4:36e214ebfa56 137 // if using a gateway that supports all 64 channels, use sub band 0 - the mDot will use all 64 channels
Dengjj 18:12be4d4c8fc2 138 int32_t setTxFrequency(const uint32_t& FB_868);
Dengjj 18:12be4d4c8fc2 139
Dengjj 18:12be4d4c8fc2 140
Dengjj 18:12be4d4c8fc2 141 //pc.printf("Setting frequency sub band\n\r");
Dengjj 18:12be4d4c8fc2 142 //if ((ret = dot->setFrequencySubBand(config_frequency_sub_band)) != mDot::MDOT_OK) {
Dengjj 18:12be4d4c8fc2 143 // pc.printf("Error:failed to set frequency sub band %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
Dengjj 18:12be4d4c8fc2 144 // return RETURN_ERR;
Dengjj 18:12be4d4c8fc2 145 //}
JCheng 5:6c7d2f4d7377 146
wang1tao 16:847c028f4130 147 pc.printf("Setting network name\n\r");
mfiore 2:6e2c378339d9 148 if ((ret = dot->setNetworkName(config_network_name)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 149 pc.printf("Error:failed to set network name %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 150 return RETURN_ERR;
mfiore 0:09250cd371d2 151 }
JCheng 5:6c7d2f4d7377 152
wang1tao 16:847c028f4130 153 pc.printf("Setting network password\n\r");
mfiore 2:6e2c378339d9 154 if ((ret = dot->setNetworkPassphrase(config_network_pass)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 155 pc.printf("Error:failed to set network password %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 156 return RETURN_ERR;
mfiore 0:09250cd371d2 157 }
wang1tao 16:847c028f4130 158
mfiore 4:36e214ebfa56 159 // a higher spreading factor allows for longer range but lower throughput
mfiore 4:36e214ebfa56 160 // in the 915 (US) frequency band, spreading factors 7 - 10 are available
mfiore 4:36e214ebfa56 161 // in the 868 (EU) frequency band, spreading factors 7 - 12 are available
wang1tao 16:847c028f4130 162 pc.printf("Setting TX spreading factor\n\r");
mfiore 4:36e214ebfa56 163 if ((ret = dot->setTxDataRate(mDot::SF_10)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 164 pc.printf("Error:failed to set TX datarate %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
Dengjj 18:12be4d4c8fc2 165 return RETURN_ERR;//
mfiore 4:36e214ebfa56 166 }
JCheng 5:6c7d2f4d7377 167
mfiore 4:36e214ebfa56 168 // request receive confirmation of packets from the gateway
wang1tao 16:847c028f4130 169 pc.printf("Enabling ACKs\n\r");
mfiore 4:36e214ebfa56 170 if ((ret = dot->setAck(1)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 171 pc.printf("Error:failed to enable ACKs %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 172 return RETURN_OK;
mfiore 4:36e214ebfa56 173 }
JCheng 5:6c7d2f4d7377 174
mfiore 4:36e214ebfa56 175 // save this configuration to the mDot's NVM
wang1tao 16:847c028f4130 176 pc.printf("Saving config\n\r");
mfiore 2:6e2c378339d9 177 if (! dot->saveConfig()) {
wang1tao 16:847c028f4130 178 pc.printf("Error:failed to save configuration\n\r");
mfiore 0:09250cd371d2 179 }
Dengjj 15:04b37f329c84 180
wang1tao 16:847c028f4130 181 return RETURN_OK;
wang1tao 16:847c028f4130 182 } // end of configuration
mfiore 0:09250cd371d2 183
Dengjj 15:04b37f329c84 184
wang1tao 16:847c028f4130 185 int joinNetwork(void)
wang1tao 16:847c028f4130 186 {
wang1tao 16:847c028f4130 187 int32_t ret,i;
wang1tao 16:847c028f4130 188 std::vector<uint8_t> sendData;
wang1tao 16:847c028f4130 189 char _header[] = "ChongQi!";
wang1tao 16:847c028f4130 190
wang1tao 16:847c028f4130 191 // attempt to join the network
wang1tao 16:847c028f4130 192 pc.printf("Joining network...\n\r");
wang1tao 16:847c028f4130 193
wang1tao 16:847c028f4130 194 while ((ret = dot->joinNetwork()) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 195 pc.printf("Error: failed to join network %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 196 // in the 868 (EU) frequency band, we need to wait until another channel is available before transmitting again
wang1tao 16:847c028f4130 197 return RETURN_ERR;
mfiore 0:09250cd371d2 198 }
mfiore 0:09250cd371d2 199
wang1tao 16:847c028f4130 200 sendData.clear();
wang1tao 16:847c028f4130 201 // format data for sending to the gateway
wang1tao 16:847c028f4130 202 for( i=0; i< strlen(_header); i++ )
wang1tao 16:847c028f4130 203 sendData.push_back( _header[i] );
wang1tao 16:847c028f4130 204
wang1tao 16:847c028f4130 205 // send the data to the gateway
wang1tao 16:847c028f4130 206 pc.printf("Send header to the gateway\n\r");
wang1tao 16:847c028f4130 207
wang1tao 16:847c028f4130 208 if ((ret = dot->send(sendData)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 209 pc.printf("Error: failed to send %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 210 return RETURN_ERR;
wang1tao 16:847c028f4130 211 } else {
wang1tao 16:847c028f4130 212 pc.printf("Successfully sent data to gateway\n\r");
wang1tao 16:847c028f4130 213 }
wang1tao 16:847c028f4130 214
wang1tao 16:847c028f4130 215 return RETURN_OK;
mfiore 0:09250cd371d2 216 }
wang1tao 16:847c028f4130 217
wang1tao 16:847c028f4130 218 int send_data(char *str)
wang1tao 16:847c028f4130 219 {
wang1tao 16:847c028f4130 220 int32_t i, ret;
wang1tao 16:847c028f4130 221 std::vector<uint8_t> sendData;
wang1tao 16:847c028f4130 222
wang1tao 16:847c028f4130 223 //Send the data to Gateway
wang1tao 16:847c028f4130 224 sendData.clear();
wang1tao 16:847c028f4130 225 // probably not the most efficent way to do this
wang1tao 16:847c028f4130 226 for(i=0; i< strlen(str); i++ )
wang1tao 16:847c028f4130 227 sendData.push_back(str[i] );
wang1tao 16:847c028f4130 228
wang1tao 16:847c028f4130 229 // send the data to the gateway
wang1tao 16:847c028f4130 230 pc.printf("Send %s to Gateway \n\r", str);
wang1tao 16:847c028f4130 231
wang1tao 16:847c028f4130 232 if ((ret = dot->send(sendData)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 233 pc.printf("Error:failed to send\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 234 return RETURN_ERR;
wang1tao 16:847c028f4130 235 } else {
wang1tao 16:847c028f4130 236 pc.printf("Sent data to gateway successfully!\n\r");
wang1tao 16:847c028f4130 237 }
wang1tao 16:847c028f4130 238 return RETURN_OK;
wang1tao 16:847c028f4130 239 }
wang1tao 16:847c028f4130 240
wang1tao 16:847c028f4130 241
wang1tao 16:847c028f4130 242 void my_strcpy(char *dst, char *src)
wang1tao 16:847c028f4130 243 {
wang1tao 16:847c028f4130 244 int j=0;
wang1tao 16:847c028f4130 245
wang1tao 16:847c028f4130 246 while(src[j] != 0)
wang1tao 16:847c028f4130 247 {
wang1tao 16:847c028f4130 248 dst[j] = src[j];
wang1tao 16:847c028f4130 249 j++;
wang1tao 16:847c028f4130 250 }
wang1tao 16:847c028f4130 251 }
wang1tao 16:847c028f4130 252
wang1tao 16:847c028f4130 253
wang1tao 16:847c028f4130 254 void my_strclear(char *str, unsigned int len)
wang1tao 16:847c028f4130 255 {
wang1tao 16:847c028f4130 256 unsigned int j;
wang1tao 16:847c028f4130 257 for(j=0; j<len; j++)str[j]=0;
wang1tao 16:847c028f4130 258 }
wang1tao 16:847c028f4130 259
wang1tao 17:b60549bc8626 260 unsigned int get_F_position(char *str)
wang1tao 17:b60549bc8626 261 {
wang1tao 17:b60549bc8626 262 unsigned int i=0;
wang1tao 17:b60549bc8626 263 while(str[i] != 'F')
wang1tao 17:b60549bc8626 264 {
wang1tao 17:b60549bc8626 265 i++;
wang1tao 17:b60549bc8626 266 if( i >6)break;
wang1tao 17:b60549bc8626 267 }
wang1tao 17:b60549bc8626 268 return i;
wang1tao 17:b60549bc8626 269 }
wang1tao 17:b60549bc8626 270
wang1tao 16:847c028f4130 271
wang1tao 16:847c028f4130 272 void readCardID(void)
wang1tao 16:847c028f4130 273 {
wang1tao 17:b60549bc8626 274 unsigned int i, p;
wang1tao 16:847c028f4130 275 char chr;
wang1tao 16:847c028f4130 276
wang1tao 16:847c028f4130 277 /* clear the read buffer */
wang1tao 16:847c028f4130 278 my_strclear(readBuf, RESPONSE_LENGTH);
wang1tao 16:847c028f4130 279
wang1tao 16:847c028f4130 280 pc.printf("Send the READ command!\n\r");//, &readCmd[1]);
wang1tao 16:847c028f4130 281 if(cm_rs485.writeable()){
wang1tao 16:847c028f4130 282 for(i=0; i<COMMAND_LENGTH; i++){
wang1tao 16:847c028f4130 283 cm_rs485.putc(readCmd[i]);
wang1tao 16:847c028f4130 284 }
wang1tao 16:847c028f4130 285 }
wang1tao 16:847c028f4130 286
wang1tao 16:847c028f4130 287 /* read the response */
wang1tao 16:847c028f4130 288 chr = cm_rs485.getc();
wang1tao 16:847c028f4130 289 i = 0;
wang1tao 16:847c028f4130 290 while(chr != 0x0d)
wang1tao 16:847c028f4130 291 {
wang1tao 16:847c028f4130 292 readBuf[i] = chr;
wang1tao 16:847c028f4130 293 i++;
wang1tao 16:847c028f4130 294 chr = cm_rs485.getc();
wang1tao 16:847c028f4130 295 }
wang1tao 16:847c028f4130 296
wang1tao 16:847c028f4130 297 /* print the response for debug */
wang1tao 16:847c028f4130 298 pc.printf("Response[ASCII]:");
wang1tao 16:847c028f4130 299
wang1tao 16:847c028f4130 300 for(i=0; i< RESPONSE_LENGTH; i++){
wang1tao 16:847c028f4130 301 pc.printf("%0X ", readBuf[i]);
wang1tao 16:847c028f4130 302 if (readBuf[i] == 0) break;
wang1tao 16:847c028f4130 303 }
wang1tao 17:b60549bc8626 304
wang1tao 17:b60549bc8626 305 p = get_F_position(readBuf);
wang1tao 17:b60549bc8626 306 pc.printf("P=%d\n\r", p);
wang1tao 17:b60549bc8626 307 pc.printf("Response[Text]:%s\n\r", &readBuf[p+1]);
wang1tao 17:b60549bc8626 308 /* add to ringBuffer if valid */
wang1tao 17:b60549bc8626 309 if((p != 0) && (readBuf[p+1] != '3') && (readBuf[p+2] !='C')) //valid response
wang1tao 16:847c028f4130 310 {
wang1tao 17:b60549bc8626 311 my_strcpy(ringBuffer[inIndex], &readBuf[p+1]); //strim the 3 bytes prehead
wang1tao 16:847c028f4130 312 //pc.printf("addr = 0x%0X, inIndex = %d\n\r", &ringBuffer[inIndex],inIndex);
wang1tao 16:847c028f4130 313 inIndex++;
wang1tao 16:847c028f4130 314 if(inIndex >= RINGBUFFER_SIZE) inIndex = 0;
wang1tao 16:847c028f4130 315 if(ringBuffer[inIndex][0] != 0) //is not empty
wang1tao 16:847c028f4130 316 {
wang1tao 16:847c028f4130 317 pc.printf("Warning! Ringbuffer overflow at [%d]!\n\r", inIndex);
wang1tao 16:847c028f4130 318 pc.printf("Please have a check of the network!\n\r");
wang1tao 16:847c028f4130 319 pc.printf("Data in ring buffer:\n\r");
wang1tao 16:847c028f4130 320 for(i=0; i<RINGBUFFER_SIZE; i++)
wang1tao 16:847c028f4130 321 {
wang1tao 16:847c028f4130 322 pc.printf("Data[%d]: %s \n\r", i, ringBuffer[i]);
wang1tao 16:847c028f4130 323 }
wang1tao 16:847c028f4130 324
wang1tao 16:847c028f4130 325 wait(10); //in seconds
wang1tao 16:847c028f4130 326 }
wang1tao 17:b60549bc8626 327 }
wang1tao 16:847c028f4130 328 }
wang1tao 16:847c028f4130 329
wang1tao 16:847c028f4130 330 void sendCardID(void)
wang1tao 16:847c028f4130 331 {
wang1tao 16:847c028f4130 332 int32_t ret;
wang1tao 16:847c028f4130 333
wang1tao 16:847c028f4130 334 //pc.printf("Send Tick!\n\r");
wang1tao 16:847c028f4130 335 /*send the data */
wang1tao 16:847c028f4130 336 if(ringBuffer[outIndex][0] != 0) //not empty
wang1tao 16:847c028f4130 337 {
wang1tao 16:847c028f4130 338 pc.printf("Send dada[%s] to Gateway!\n\r", ringBuffer[outIndex]);
wang1tao 16:847c028f4130 339 #ifndef NO_MULTITECH_GATEWAY
wang1tao 16:847c028f4130 340 /* t.b.d : send data though LoRA */
wang1tao 16:847c028f4130 341 if(send_data(ringBuffer[outIndex]) != RETURN_OK)
wang1tao 16:847c028f4130 342 {
wang1tao 16:847c028f4130 343 pc.printf("Failed to send data to netwotk!\n\r");
wang1tao 16:847c028f4130 344 pc.printf("Rejoin network and try one more time!\n\r");
wang1tao 16:847c028f4130 345 // attempt to rejoin the network
wang1tao 16:847c028f4130 346 pc.printf("Attemp to rejoin network....\n\r");
wang1tao 16:847c028f4130 347 if ((ret = dot->joinNetworkOnce()) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 348 pc.printf("Failed to rejoin network! %d:%s \n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 349 return;
wang1tao 16:847c028f4130 350 }else{
wang1tao 16:847c028f4130 351 pc.printf("Rejoin network successfully!");
wang1tao 16:847c028f4130 352 if(send_data(ringBuffer[outIndex]) != RETURN_OK) return; //abort to send
wang1tao 16:847c028f4130 353 }
wang1tao 16:847c028f4130 354 }
wang1tao 16:847c028f4130 355 #endif
wang1tao 16:847c028f4130 356 //clear the buffer
wang1tao 16:847c028f4130 357 my_strclear(ringBuffer[outIndex], RESPONSE_LENGTH);
wang1tao 16:847c028f4130 358 outIndex++;
wang1tao 16:847c028f4130 359 if(outIndex >= RINGBUFFER_SIZE)outIndex = 0;
wang1tao 16:847c028f4130 360 }else{ //empty
wang1tao 16:847c028f4130 361 pc.printf("Nothing to send!\n\r");
wang1tao 16:847c028f4130 362 //wait(10);
wang1tao 16:847c028f4130 363 }
wang1tao 16:847c028f4130 364
Dengjj 18:12be4d4c8fc2 365 }
Dengjj 18:12be4d4c8fc2 366
Dengjj 18:12be4d4c8fc2 367
Dengjj 18:12be4d4c8fc2 368 void sendPwrStat(void)
Dengjj 18:12be4d4c8fc2 369 {
Dengjj 18:12be4d4c8fc2 370 int32_t ret;
Dengjj 18:12be4d4c8fc2 371
Dengjj 18:12be4d4c8fc2 372 //pc.printf("Send Tick!\n\r");
Dengjj 18:12be4d4c8fc2 373 /*send the data */
Dengjj 18:12be4d4c8fc2 374 if(ringBuffer[outIndex][0] != 0) //not empty
Dengjj 18:12be4d4c8fc2 375 {
Dengjj 18:12be4d4c8fc2 376 pc.printf("Send dada[%s] to Gateway!\n\r", ringBuffer[outIndex]);
Dengjj 18:12be4d4c8fc2 377 #ifndef NO_MULTITECH_GATEWAY
Dengjj 18:12be4d4c8fc2 378 /* t.b.d : send data though LoRA */
Dengjj 18:12be4d4c8fc2 379 if(send_data(ringBuffer[outIndex]) != RETURN_OK)
Dengjj 18:12be4d4c8fc2 380 {
Dengjj 18:12be4d4c8fc2 381 pc.printf("Failed to send data to netwotk!\n\r");
Dengjj 18:12be4d4c8fc2 382 pc.printf("Rejoin network and try one more time!\n\r");
Dengjj 18:12be4d4c8fc2 383 // attempt to rejoin the network
Dengjj 18:12be4d4c8fc2 384 pc.printf("Attemp to rejoin network....\n\r");
Dengjj 18:12be4d4c8fc2 385 if ((ret = dot->joinNetworkOnce()) != mDot::MDOT_OK) {
Dengjj 18:12be4d4c8fc2 386 pc.printf("Failed to rejoin network! %d:%s \n\r", ret, mDot::getReturnCodeString(ret).c_str());
Dengjj 18:12be4d4c8fc2 387 return;
Dengjj 18:12be4d4c8fc2 388 }else{
Dengjj 18:12be4d4c8fc2 389 pc.printf("Rejoin network successfully!");
Dengjj 18:12be4d4c8fc2 390 if(send_data(ringBuffer[outIndex]) != RETURN_OK) return; //abort to send
Dengjj 18:12be4d4c8fc2 391 }
Dengjj 18:12be4d4c8fc2 392 }
Dengjj 18:12be4d4c8fc2 393 #endif
Dengjj 18:12be4d4c8fc2 394 //clear the buffer
Dengjj 18:12be4d4c8fc2 395 my_strclear(ringBuffer[outIndex], RESPONSE_LENGTH);
Dengjj 18:12be4d4c8fc2 396 outIndex++;
Dengjj 18:12be4d4c8fc2 397 if(outIndex >= RINGBUFFER_SIZE)outIndex = 0;
Dengjj 18:12be4d4c8fc2 398 }else{ //empty
Dengjj 18:12be4d4c8fc2 399 pc.printf("Nothing to send!\n\r");
Dengjj 18:12be4d4c8fc2 400 //wait(10);
Dengjj 18:12be4d4c8fc2 401 }
Dengjj 18:12be4d4c8fc2 402
Dengjj 18:12be4d4c8fc2 403 }
Dengjj 18:12be4d4c8fc2 404