Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: libmDot mbed-rtos mbed
Fork of power_meter by
main.cpp@5:cd2d6ed47421, 2017-02-15 (annotated)
- Committer:
- wang1tao
- Date:
- Wed Feb 15 10:10:11 2017 +0000
- Revision:
- 5:cd2d6ed47421
- Parent:
- 4:0341c0004919
Send data through LoRa added
Who changed what in which revision?
| User | Revision | Line number | New contents of line |
|---|---|---|---|
| terrytamyh | 0:87fb6735eb09 | 1 | #include "mbed.h" |
| terrytamyh | 0:87fb6735eb09 | 2 | #include "DataLoggerRS232.h" |
| wang1tao | 4:0341c0004919 | 3 | #include "mbed.h" |
| wang1tao | 4:0341c0004919 | 4 | #include "mDot.h" |
| wang1tao | 4:0341c0004919 | 5 | #include "MTSLog.h" |
| wang1tao | 4:0341c0004919 | 6 | #include <string> |
| wang1tao | 4:0341c0004919 | 7 | #include <vector> |
| wang1tao | 4:0341c0004919 | 8 | #include <algorithm> |
| wang1tao | 4:0341c0004919 | 9 | #include <math.h> |
| wang1tao | 4:0341c0004919 | 10 | |
| wang1tao | 5:cd2d6ed47421 | 11 | #define RETURN_OK 0 |
| wang1tao | 5:cd2d6ed47421 | 12 | #define RETURN_ERR -1 |
| wang1tao | 4:0341c0004919 | 13 | //define baudrate |
| wang1tao | 4:0341c0004919 | 14 | #define PC_BAUDRATE 115200 |
| wang1tao | 4:0341c0004919 | 15 | #define CARD_MACHINE_BAUDRATE 19200 |
| wang1tao | 4:0341c0004919 | 16 | |
| wang1tao | 4:0341c0004919 | 17 | #define COMMAND_LENGTH 7 |
| wang1tao | 4:0341c0004919 | 18 | #define RESPONSE_LENGTH 16 |
| wang1tao | 4:0341c0004919 | 19 | #define RINGBUFFER_SIZE 100 |
| wang1tao | 4:0341c0004919 | 20 | |
| wang1tao | 4:0341c0004919 | 21 | #define READ_PERIOD 2 |
| wang1tao | 4:0341c0004919 | 22 | #define SEND_PERIOD 5 |
| terrytamyh | 0:87fb6735eb09 | 23 | |
| wang1tao | 4:0341c0004919 | 24 | const char readCmd[COMMAND_LENGTH] = {0x09,0x41,0x31,0x46,0x33,0x46,0x0d}; |
| wang1tao | 4:0341c0004919 | 25 | |
| wang1tao | 4:0341c0004919 | 26 | char readBuf[RESPONSE_LENGTH] = {0}; |
| wang1tao | 4:0341c0004919 | 27 | char ringBuffer[RINGBUFFER_SIZE][RESPONSE_LENGTH] = {0}; |
| wang1tao | 4:0341c0004919 | 28 | |
| wang1tao | 4:0341c0004919 | 29 | unsigned int inIndex = 0; |
| wang1tao | 4:0341c0004919 | 30 | unsigned int outIndex = 0; |
| wang1tao | 4:0341c0004919 | 31 | |
| wang1tao | 4:0341c0004919 | 32 | /* functions prototype */ |
| wang1tao | 4:0341c0004919 | 33 | void readCardID(void); |
| wang1tao | 4:0341c0004919 | 34 | void sendCardID(void); |
| wang1tao | 4:0341c0004919 | 35 | |
| wang1tao | 4:0341c0004919 | 36 | void my_strcpy(char *dst, char *src); |
| wang1tao | 4:0341c0004919 | 37 | void my_strclear(char *str, unsigned int len); |
| wang1tao | 4:0341c0004919 | 38 | |
| wang1tao | 5:cd2d6ed47421 | 39 | int configNetwork(void); |
| wang1tao | 5:cd2d6ed47421 | 40 | int joinNetwork(void); |
| wang1tao | 5:cd2d6ed47421 | 41 | int send_data(char *str); |
| wang1tao | 5:cd2d6ed47421 | 42 | |
| wang1tao | 4:0341c0004919 | 43 | /* Global variables */ |
| wang1tao | 4:0341c0004919 | 44 | Serial pc (USBTX, USBRX); // tx, rx |
| wang1tao | 4:0341c0004919 | 45 | Serial cm_rs485 (PA_2,PA_3); // tx, rx |
| wang1tao | 4:0341c0004919 | 46 | |
| wang1tao | 4:0341c0004919 | 47 | mDot* dot; |
| Dengjj | 2:6ebf09171de9 | 48 | |
| wang1tao | 4:0341c0004919 | 49 | Ticker readTick; |
| wang1tao | 4:0341c0004919 | 50 | Ticker sendTick; |
| wang1tao | 4:0341c0004919 | 51 | |
| wang1tao | 4:0341c0004919 | 52 | int main() |
| wang1tao | 4:0341c0004919 | 53 | { |
| wang1tao | 5:cd2d6ed47421 | 54 | int32_t ret; |
| wang1tao | 4:0341c0004919 | 55 | |
| wang1tao | 4:0341c0004919 | 56 | // get a mDot handle |
| wang1tao | 5:cd2d6ed47421 | 57 | dot = mDot::getInstance(); |
| wang1tao | 4:0341c0004919 | 58 | |
| wang1tao | 4:0341c0004919 | 59 | pc.baud(PC_BAUDRATE); |
| wang1tao | 4:0341c0004919 | 60 | pc.printf("PC COM RS232 baudrate: %d \n\r", PC_BAUDRATE); |
| wang1tao | 4:0341c0004919 | 61 | cm_rs485.baud(CARD_MACHINE_BAUDRATE); |
| wang1tao | 4:0341c0004919 | 62 | cm_rs485.format(9,SerialBase::Even,1); |
| wang1tao | 4:0341c0004919 | 63 | pc.printf("Card Machine RS485 baudrate: %d!\n\r", CARD_MACHINE_BAUDRATE); |
| wang1tao | 4:0341c0004919 | 64 | |
| wang1tao | 5:cd2d6ed47421 | 65 | //******************************************* |
| wang1tao | 5:cd2d6ed47421 | 66 | // Configurate Network |
| wang1tao | 5:cd2d6ed47421 | 67 | //******************************************* |
| wang1tao | 5:cd2d6ed47421 | 68 | ret = configNetwork(); |
| wang1tao | 5:cd2d6ed47421 | 69 | if(ret != RETURN_OK) |
| wang1tao | 5:cd2d6ed47421 | 70 | dot->sleep(5, mDot::RTC_ALARM); //sleep a while and restart |
| wang1tao | 5:cd2d6ed47421 | 71 | |
| wang1tao | 5:cd2d6ed47421 | 72 | //******************************************* |
| wang1tao | 5:cd2d6ed47421 | 73 | // Join Network |
| wang1tao | 5:cd2d6ed47421 | 74 | //******************************************* |
| wang1tao | 5:cd2d6ed47421 | 75 | ret = joinNetwork(); |
| wang1tao | 5:cd2d6ed47421 | 76 | if(ret != RETURN_OK) |
| wang1tao | 5:cd2d6ed47421 | 77 | dot->sleep(5, mDot::RTC_ALARM); //sleep a while and restart |
| wang1tao | 5:cd2d6ed47421 | 78 | |
| wang1tao | 4:0341c0004919 | 79 | //Start readTick |
| wang1tao | 4:0341c0004919 | 80 | readTick.attach(&readCardID, READ_PERIOD); |
| wang1tao | 4:0341c0004919 | 81 | sendTick.attach(&sendCardID, SEND_PERIOD); |
| wang1tao | 4:0341c0004919 | 82 | |
| terrytamyh | 0:87fb6735eb09 | 83 | while(1) { |
| wang1tao | 4:0341c0004919 | 84 | /* Nothing to be done here */ |
| wang1tao | 4:0341c0004919 | 85 | wait(2); |
| wang1tao | 4:0341c0004919 | 86 | } |
| wang1tao | 4:0341c0004919 | 87 | } |
| wang1tao | 4:0341c0004919 | 88 | |
| wang1tao | 5:cd2d6ed47421 | 89 | static std::string config_network_name = "chinaiot"; |
| wang1tao | 5:cd2d6ed47421 | 90 | static std::string config_network_pass = "password"; |
| wang1tao | 5:cd2d6ed47421 | 91 | static uint8_t config_frequency_sub_band = 2; |
| wang1tao | 5:cd2d6ed47421 | 92 | |
| wang1tao | 5:cd2d6ed47421 | 93 | |
| wang1tao | 5:cd2d6ed47421 | 94 | int configNetwork(void) |
| wang1tao | 5:cd2d6ed47421 | 95 | { |
| wang1tao | 5:cd2d6ed47421 | 96 | int32_t ret; |
| wang1tao | 5:cd2d6ed47421 | 97 | |
| wang1tao | 5:cd2d6ed47421 | 98 | // print library version information |
| wang1tao | 5:cd2d6ed47421 | 99 | pc.printf("version: %s\n\r", dot->getId().c_str()); |
| wang1tao | 5:cd2d6ed47421 | 100 | |
| wang1tao | 5:cd2d6ed47421 | 101 | //******************************************* |
| wang1tao | 5:cd2d6ed47421 | 102 | // configuration |
| wang1tao | 5:cd2d6ed47421 | 103 | //******************************************* |
| wang1tao | 5:cd2d6ed47421 | 104 | // reset to default config so we know what state we're in |
| wang1tao | 5:cd2d6ed47421 | 105 | dot->resetConfig(); |
| wang1tao | 5:cd2d6ed47421 | 106 | |
| wang1tao | 5:cd2d6ed47421 | 107 | //dot->setLogLevel(mts::MTSLog::INFO_LEVEL); |
| wang1tao | 5:cd2d6ed47421 | 108 | |
| wang1tao | 5:cd2d6ed47421 | 109 | // set up the mDot with our network information: frequency sub band, network name, and network password |
| wang1tao | 5:cd2d6ed47421 | 110 | // these can all be saved in NVM so they don't need to be set every time - see mDot::saveConfig() |
| wang1tao | 5:cd2d6ed47421 | 111 | |
| wang1tao | 5:cd2d6ed47421 | 112 | // frequency sub band is only applicable in the 915 (US) frequency band |
| wang1tao | 5:cd2d6ed47421 | 113 | // 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 |
| wang1tao | 5:cd2d6ed47421 | 114 | // if using a gateway that supports all 64 channels, use sub band 0 - the mDot will use all 64 channels |
| wang1tao | 5:cd2d6ed47421 | 115 | pc.printf("Setting frequency sub band\n\r"); |
| wang1tao | 5:cd2d6ed47421 | 116 | if ((ret = dot->setFrequencySubBand(config_frequency_sub_band)) != mDot::MDOT_OK) { |
| wang1tao | 5:cd2d6ed47421 | 117 | pc.printf("Error:failed to set frequency sub band %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str()); |
| wang1tao | 5:cd2d6ed47421 | 118 | return RETURN_ERR; |
| wang1tao | 5:cd2d6ed47421 | 119 | } |
| wang1tao | 5:cd2d6ed47421 | 120 | |
| wang1tao | 5:cd2d6ed47421 | 121 | pc.printf("Setting network name\n\r"); |
| wang1tao | 5:cd2d6ed47421 | 122 | if ((ret = dot->setNetworkName(config_network_name)) != mDot::MDOT_OK) { |
| wang1tao | 5:cd2d6ed47421 | 123 | pc.printf("Error:failed to set network name %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str()); |
| wang1tao | 5:cd2d6ed47421 | 124 | return RETURN_ERR; |
| wang1tao | 5:cd2d6ed47421 | 125 | } |
| wang1tao | 5:cd2d6ed47421 | 126 | |
| wang1tao | 5:cd2d6ed47421 | 127 | pc.printf("Setting network password\n\r"); |
| wang1tao | 5:cd2d6ed47421 | 128 | if ((ret = dot->setNetworkPassphrase(config_network_pass)) != mDot::MDOT_OK) { |
| wang1tao | 5:cd2d6ed47421 | 129 | pc.printf("Error:failed to set network password %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str()); |
| wang1tao | 5:cd2d6ed47421 | 130 | return RETURN_ERR; |
| wang1tao | 5:cd2d6ed47421 | 131 | } |
| wang1tao | 5:cd2d6ed47421 | 132 | |
| wang1tao | 5:cd2d6ed47421 | 133 | // a higher spreading factor allows for longer range but lower throughput |
| wang1tao | 5:cd2d6ed47421 | 134 | // in the 915 (US) frequency band, spreading factors 7 - 10 are available |
| wang1tao | 5:cd2d6ed47421 | 135 | // in the 868 (EU) frequency band, spreading factors 7 - 12 are available |
| wang1tao | 5:cd2d6ed47421 | 136 | pc.printf("Setting TX spreading factor\n\r"); |
| wang1tao | 5:cd2d6ed47421 | 137 | if ((ret = dot->setTxDataRate(mDot::SF_10)) != mDot::MDOT_OK) { |
| wang1tao | 5:cd2d6ed47421 | 138 | pc.printf("Error:failed to set TX datarate %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str()); |
| wang1tao | 5:cd2d6ed47421 | 139 | return RETURN_ERR; |
| wang1tao | 5:cd2d6ed47421 | 140 | } |
| wang1tao | 5:cd2d6ed47421 | 141 | |
| wang1tao | 5:cd2d6ed47421 | 142 | // request receive confirmation of packets from the gateway |
| wang1tao | 5:cd2d6ed47421 | 143 | pc.printf("Enabling ACKs"); |
| wang1tao | 5:cd2d6ed47421 | 144 | if ((ret = dot->setAck(1)) != mDot::MDOT_OK) { |
| wang1tao | 5:cd2d6ed47421 | 145 | pc.printf("Error:failed to enable ACKs %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str()); |
| wang1tao | 5:cd2d6ed47421 | 146 | return RETURN_OK; |
| wang1tao | 5:cd2d6ed47421 | 147 | } |
| wang1tao | 5:cd2d6ed47421 | 148 | |
| wang1tao | 5:cd2d6ed47421 | 149 | // save this configuration to the mDot's NVM |
| wang1tao | 5:cd2d6ed47421 | 150 | pc.printf("Saving config"); |
| wang1tao | 5:cd2d6ed47421 | 151 | if (! dot->saveConfig()) { |
| wang1tao | 5:cd2d6ed47421 | 152 | pc.printf("Error:failed to save configuration\n\r"); |
| wang1tao | 5:cd2d6ed47421 | 153 | } |
| wang1tao | 5:cd2d6ed47421 | 154 | |
| wang1tao | 5:cd2d6ed47421 | 155 | return RETURN_OK; |
| wang1tao | 5:cd2d6ed47421 | 156 | } // end of configuration |
| wang1tao | 5:cd2d6ed47421 | 157 | |
| wang1tao | 5:cd2d6ed47421 | 158 | |
| wang1tao | 5:cd2d6ed47421 | 159 | int joinNetwork(void) |
| wang1tao | 5:cd2d6ed47421 | 160 | { |
| wang1tao | 5:cd2d6ed47421 | 161 | int32_t ret,i; |
| wang1tao | 5:cd2d6ed47421 | 162 | std::vector<uint8_t> sendData; |
| wang1tao | 5:cd2d6ed47421 | 163 | char _header[] = "Card Reader"; |
| wang1tao | 5:cd2d6ed47421 | 164 | |
| wang1tao | 5:cd2d6ed47421 | 165 | // attempt to join the network |
| wang1tao | 5:cd2d6ed47421 | 166 | pc.printf("Joining network...\n\r"); |
| wang1tao | 5:cd2d6ed47421 | 167 | |
| wang1tao | 5:cd2d6ed47421 | 168 | while ((ret = dot->joinNetwork()) != mDot::MDOT_OK) { |
| wang1tao | 5:cd2d6ed47421 | 169 | pc.printf("Error: failed to join network %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str()); |
| wang1tao | 5:cd2d6ed47421 | 170 | // in the 868 (EU) frequency band, we need to wait until another channel is available before transmitting again |
| wang1tao | 5:cd2d6ed47421 | 171 | return RETURN_ERR; |
| wang1tao | 5:cd2d6ed47421 | 172 | } |
| wang1tao | 5:cd2d6ed47421 | 173 | |
| wang1tao | 5:cd2d6ed47421 | 174 | sendData.clear(); |
| wang1tao | 5:cd2d6ed47421 | 175 | // format data for sending to the gateway |
| wang1tao | 5:cd2d6ed47421 | 176 | for( i=0; i< strlen(_header); i++ ) |
| wang1tao | 5:cd2d6ed47421 | 177 | sendData.push_back( _header[i] ); |
| wang1tao | 5:cd2d6ed47421 | 178 | |
| wang1tao | 5:cd2d6ed47421 | 179 | // send the data to the gateway |
| wang1tao | 5:cd2d6ed47421 | 180 | pc.printf("Send header to the gateway\n\r"); |
| wang1tao | 5:cd2d6ed47421 | 181 | |
| wang1tao | 5:cd2d6ed47421 | 182 | if ((ret = dot->send(sendData)) != mDot::MDOT_OK) { |
| wang1tao | 5:cd2d6ed47421 | 183 | pc.printf("Error: failed to send %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str()); |
| wang1tao | 5:cd2d6ed47421 | 184 | return RETURN_ERR; |
| wang1tao | 5:cd2d6ed47421 | 185 | } else { |
| wang1tao | 5:cd2d6ed47421 | 186 | pc.printf("Successfully sent data to gateway\n\r"); |
| wang1tao | 5:cd2d6ed47421 | 187 | } |
| wang1tao | 5:cd2d6ed47421 | 188 | |
| wang1tao | 5:cd2d6ed47421 | 189 | return RETURN_OK; |
| wang1tao | 5:cd2d6ed47421 | 190 | } |
| wang1tao | 5:cd2d6ed47421 | 191 | |
| wang1tao | 5:cd2d6ed47421 | 192 | int send_data(char *str) |
| wang1tao | 5:cd2d6ed47421 | 193 | { |
| wang1tao | 5:cd2d6ed47421 | 194 | int32_t i, ret; |
| wang1tao | 5:cd2d6ed47421 | 195 | std::vector<uint8_t> sendData; |
| wang1tao | 5:cd2d6ed47421 | 196 | |
| wang1tao | 5:cd2d6ed47421 | 197 | //Send the data to Gateway |
| wang1tao | 5:cd2d6ed47421 | 198 | sendData.clear(); |
| wang1tao | 5:cd2d6ed47421 | 199 | // probably not the most efficent way to do this |
| wang1tao | 5:cd2d6ed47421 | 200 | for(i=0; i< strlen(str); i++ ) |
| wang1tao | 5:cd2d6ed47421 | 201 | sendData.push_back(str[i] ); |
| wang1tao | 5:cd2d6ed47421 | 202 | |
| wang1tao | 5:cd2d6ed47421 | 203 | // send the data to the gateway |
| wang1tao | 5:cd2d6ed47421 | 204 | pc.printf("Send %s to Gateway \n\r", str); |
| wang1tao | 5:cd2d6ed47421 | 205 | |
| wang1tao | 5:cd2d6ed47421 | 206 | if ((ret = dot->send(sendData)) != mDot::MDOT_OK) { |
| wang1tao | 5:cd2d6ed47421 | 207 | pc.printf("Error:failed to send\n\r", ret, mDot::getReturnCodeString(ret).c_str()); |
| wang1tao | 5:cd2d6ed47421 | 208 | return RETURN_ERR; |
| wang1tao | 5:cd2d6ed47421 | 209 | } else { |
| wang1tao | 5:cd2d6ed47421 | 210 | pc.printf("Sent data to gateway successfully!\n\r"); |
| wang1tao | 5:cd2d6ed47421 | 211 | } |
| wang1tao | 5:cd2d6ed47421 | 212 | return RETURN_OK; |
| wang1tao | 5:cd2d6ed47421 | 213 | } |
| wang1tao | 5:cd2d6ed47421 | 214 | |
| wang1tao | 4:0341c0004919 | 215 | |
| wang1tao | 4:0341c0004919 | 216 | void my_strcpy(char *dst, char *src) |
| wang1tao | 4:0341c0004919 | 217 | { |
| wang1tao | 4:0341c0004919 | 218 | int j; |
| wang1tao | 4:0341c0004919 | 219 | while(src[j] != 0) |
| wang1tao | 4:0341c0004919 | 220 | { |
| wang1tao | 4:0341c0004919 | 221 | dst[j] = src[j]; |
| wang1tao | 4:0341c0004919 | 222 | j++; |
| wang1tao | 4:0341c0004919 | 223 | } |
| wang1tao | 4:0341c0004919 | 224 | } |
| wang1tao | 4:0341c0004919 | 225 | |
| wang1tao | 4:0341c0004919 | 226 | |
| wang1tao | 4:0341c0004919 | 227 | void my_strclear(char *str, unsigned int len) |
| wang1tao | 4:0341c0004919 | 228 | { |
| wang1tao | 4:0341c0004919 | 229 | unsigned int j; |
| wang1tao | 4:0341c0004919 | 230 | for(j=0; j<len; j++)str[j]=0; |
| wang1tao | 4:0341c0004919 | 231 | } |
| wang1tao | 4:0341c0004919 | 232 | |
| wang1tao | 4:0341c0004919 | 233 | |
| wang1tao | 4:0341c0004919 | 234 | void readCardID(void) |
| wang1tao | 4:0341c0004919 | 235 | { |
| wang1tao | 4:0341c0004919 | 236 | unsigned int i; |
| wang1tao | 4:0341c0004919 | 237 | char chr; |
| wang1tao | 4:0341c0004919 | 238 | |
| wang1tao | 4:0341c0004919 | 239 | pc.printf("Read Tick!\n\r"); |
| wang1tao | 4:0341c0004919 | 240 | |
| wang1tao | 4:0341c0004919 | 241 | /* clear the read buffer */ |
| wang1tao | 4:0341c0004919 | 242 | my_strclear(readBuf, RESPONSE_LENGTH); |
| wang1tao | 4:0341c0004919 | 243 | |
| wang1tao | 4:0341c0004919 | 244 | pc.printf("Send the READ command:%s\n\r", &readCmd[1]); |
| wang1tao | 4:0341c0004919 | 245 | if(cm_rs485.writeable()){ |
| wang1tao | 4:0341c0004919 | 246 | for(i=0; i<COMMAND_LENGTH; i++){ |
| wang1tao | 4:0341c0004919 | 247 | cm_rs485.putc(readCmd[i]); |
| wang1tao | 4:0341c0004919 | 248 | } |
| wang1tao | 4:0341c0004919 | 249 | } |
| wang1tao | 4:0341c0004919 | 250 | |
| wang1tao | 4:0341c0004919 | 251 | /* read the response */ |
| wang1tao | 4:0341c0004919 | 252 | chr = cm_rs485.getc(); |
| wang1tao | 4:0341c0004919 | 253 | i = 0; |
| wang1tao | 4:0341c0004919 | 254 | while(chr != 0x0d) |
| wang1tao | 4:0341c0004919 | 255 | { |
| wang1tao | 4:0341c0004919 | 256 | readBuf[i] = chr; |
| wang1tao | 4:0341c0004919 | 257 | i++; |
| wang1tao | 4:0341c0004919 | 258 | chr = cm_rs485.getc(); |
| wang1tao | 4:0341c0004919 | 259 | } |
| wang1tao | 4:0341c0004919 | 260 | |
| wang1tao | 4:0341c0004919 | 261 | /* print the response for debug */ |
| wang1tao | 4:0341c0004919 | 262 | pc.printf("Response[ASCII]:"); |
| wang1tao | 4:0341c0004919 | 263 | |
| wang1tao | 4:0341c0004919 | 264 | for(i=0; i< RESPONSE_LENGTH; i++){ |
| wang1tao | 4:0341c0004919 | 265 | pc.printf("%0X ", readBuf[i]); |
| wang1tao | 4:0341c0004919 | 266 | if (readBuf[i] == 0) break; |
| wang1tao | 4:0341c0004919 | 267 | } |
| wang1tao | 4:0341c0004919 | 268 | pc.printf("Response[Text]:%s", readBuf); |
| wang1tao | 4:0341c0004919 | 269 | |
| wang1tao | 4:0341c0004919 | 270 | /* add to ringBuffer if valid */ |
| wang1tao | 4:0341c0004919 | 271 | if((readBuf[3]!= '3') && (readBuf[4] !='C')) //valid response |
| wang1tao | 4:0341c0004919 | 272 | { |
| wang1tao | 4:0341c0004919 | 273 | my_strcpy(ringBuffer[inIndex], &readBuf[3]); //strim the 3 bytes prehead |
| wang1tao | 4:0341c0004919 | 274 | inIndex++; |
| wang1tao | 4:0341c0004919 | 275 | if(inIndex >= RINGBUFFER_SIZE) inIndex = 0; |
| wang1tao | 4:0341c0004919 | 276 | if(ringBuffer[inIndex][0] != 0) //is not empty |
| wang1tao | 4:0341c0004919 | 277 | { |
| wang1tao | 4:0341c0004919 | 278 | pc.printf("Warning! Ringbuffer overflow!\n\r"); |
| wang1tao | 4:0341c0004919 | 279 | pc.printf("Please have a check of the network!\n\r"); |
| wang1tao | 4:0341c0004919 | 280 | wait(30); //in seconds |
| wang1tao | 4:0341c0004919 | 281 | } |
| wang1tao | 4:0341c0004919 | 282 | } |
| wang1tao | 4:0341c0004919 | 283 | } |
| wang1tao | 4:0341c0004919 | 284 | |
| wang1tao | 4:0341c0004919 | 285 | void sendCardID(void) |
| wang1tao | 4:0341c0004919 | 286 | { |
| wang1tao | 5:cd2d6ed47421 | 287 | int32_t ret; |
| wang1tao | 5:cd2d6ed47421 | 288 | |
| wang1tao | 4:0341c0004919 | 289 | pc.printf("Send Tick!\n\r"); |
| wang1tao | 4:0341c0004919 | 290 | /*send the data */ |
| wang1tao | 4:0341c0004919 | 291 | if(ringBuffer[outIndex] != 0) //not empty |
| wang1tao | 4:0341c0004919 | 292 | { |
| wang1tao | 4:0341c0004919 | 293 | pc.printf("Send dada[%s] to Gateway!\n\r", ringBuffer[outIndex]); |
| wang1tao | 4:0341c0004919 | 294 | |
| wang1tao | 4:0341c0004919 | 295 | /* t.b.d : send data though LoRA */ |
| wang1tao | 5:cd2d6ed47421 | 296 | if(send_data(ringBuffer[outIndex]) != RETURN_OK) |
| wang1tao | 5:cd2d6ed47421 | 297 | { |
| wang1tao | 5:cd2d6ed47421 | 298 | pc.printf("Failed to send data to netwotk!\n\r"); |
| wang1tao | 5:cd2d6ed47421 | 299 | pc.printf("Rejoin network and try one more time!\n\r"); |
| wang1tao | 5:cd2d6ed47421 | 300 | // attempt to rejoin the network |
| wang1tao | 5:cd2d6ed47421 | 301 | pc.printf("Attemp to rejoin network....\n\r"); |
| wang1tao | 5:cd2d6ed47421 | 302 | if ((ret = dot->joinNetworkOnce()) != mDot::MDOT_OK) { |
| wang1tao | 5:cd2d6ed47421 | 303 | pc.printf("Failed to rejoin network! %d:%s \n\r", ret, mDot::getReturnCodeString(ret).c_str()); |
| wang1tao | 5:cd2d6ed47421 | 304 | return; |
| wang1tao | 5:cd2d6ed47421 | 305 | }else{ |
| wang1tao | 5:cd2d6ed47421 | 306 | pc.printf("Rejoin network successfully!"); |
| wang1tao | 5:cd2d6ed47421 | 307 | if(send_data(ringBuffer[outIndex]) != RETURN_OK) return; //abort to send |
| wang1tao | 5:cd2d6ed47421 | 308 | } |
| wang1tao | 5:cd2d6ed47421 | 309 | } |
| wang1tao | 4:0341c0004919 | 310 | |
| wang1tao | 4:0341c0004919 | 311 | //clear the buffer |
| wang1tao | 4:0341c0004919 | 312 | my_strclear(ringBuffer[outIndex], RESPONSE_LENGTH); |
| wang1tao | 4:0341c0004919 | 313 | outIndex++; |
| wang1tao | 4:0341c0004919 | 314 | if(outIndex >= RINGBUFFER_SIZE)outIndex = 0; |
| wang1tao | 4:0341c0004919 | 315 | }else{ //empty |
| wang1tao | 4:0341c0004919 | 316 | pc.printf("Nothing to send!\n\r"); |
| wang1tao | 4:0341c0004919 | 317 | wait(10); |
| wang1tao | 4:0341c0004919 | 318 | } |
| Dengjj | 2:6ebf09171de9 | 319 | |
| wang1tao | 4:0341c0004919 | 320 | } |
