rssi test for 915

Dependencies:   libmDot915 mbed-rtos mbed

Fork of rssi_test by wireless sensor

Committer:
Dengjj
Date:
Tue May 09 16:16:52 2017 +0000
Revision:
19:f7e17ee700bf
Parent:
18:ee1ec5f500bf
rssi test for 915

Who changed what in which revision?

UserRevisionLine numberNew contents of line
wang1tao 16:847c028f4130 1 #include "mbed.h"
mfiore 0:09250cd371d2 2 #include "mbed.h"
mfiore 0:09250cd371d2 3 #include "mDot.h"
mfiore 4:36e214ebfa56 4 #include "MTSLog.h"
mfiore 0:09250cd371d2 5 #include <string>
mfiore 0:09250cd371d2 6 #include <vector>
mfiore 4:36e214ebfa56 7 #include <algorithm>
wang1tao 16:847c028f4130 8 #include <math.h>
Dengjj 15:04b37f329c84 9
wang1tao 16:847c028f4130 10 #define RETURN_OK 0
wang1tao 16:847c028f4130 11 #define RETURN_ERR -1
wang1tao 16:847c028f4130 12 //define baudrate
wang1tao 16:847c028f4130 13 #define PC_BAUDRATE 115200
wang1tao 16:847c028f4130 14
wang1tao 16:847c028f4130 15 /* functions prototype */
Dengjj 15:04b37f329c84 16
wang1tao 16:847c028f4130 17 int configNetwork(void);
wang1tao 16:847c028f4130 18 int joinNetwork(void);
wang1tao 16:847c028f4130 19 int send_data(char *str);
wang1tao 13:5d050b414f16 20
wang1tao 16:847c028f4130 21 /* Global variables */
wang1tao 16:847c028f4130 22 Serial pc (USBTX, USBRX); // tx, rx
wang1tao 9:cf45820af9b9 23
wang1tao 16:847c028f4130 24 mDot* dot;
wang1tao 16:847c028f4130 25
JCheng 5:6c7d2f4d7377 26 static std::string config_network_name = "chinaiot";
JCheng 5:6c7d2f4d7377 27 static std::string config_network_pass = "password";
wang1tao 10:79124c0a5952 28 static uint8_t config_frequency_sub_band = 2;
mfiore 0:09250cd371d2 29
wang1tao 16:847c028f4130 30 int main()
wang1tao 16:847c028f4130 31 {
wang1tao 18:ee1ec5f500bf 32 int32_t ret, counter;
wang1tao 18:ee1ec5f500bf 33 char dataBuf[15];
wang1tao 16:847c028f4130 34
wang1tao 16:847c028f4130 35 pc.baud(PC_BAUDRATE);
wang1tao 16:847c028f4130 36 pc.printf("\n\r\n\r\n\r");
wang1tao 16:847c028f4130 37 pc.printf("============================================\n\r");
wang1tao 16:847c028f4130 38 pc.printf("SiFOX remote card read system!\n\r");
wang1tao 16:847c028f4130 39 pc.printf("============================================\n\r");
wang1tao 16:847c028f4130 40 pc.printf("PC COM RS232 baudrate: %d \n\r", PC_BAUDRATE);
wang1tao 16:847c028f4130 41
wang1tao 16:847c028f4130 42 //*******************************************
wang1tao 16:847c028f4130 43 // Configurate Network
wang1tao 16:847c028f4130 44 //*******************************************
wang1tao 16:847c028f4130 45 ret = configNetwork();
wang1tao 16:847c028f4130 46 if(ret != RETURN_OK)
wang1tao 16:847c028f4130 47 dot->sleep(5, mDot::RTC_ALARM); //sleep a while and restart
wang1tao 16:847c028f4130 48
wang1tao 16:847c028f4130 49 //*******************************************
wang1tao 16:847c028f4130 50 // Join Network
wang1tao 16:847c028f4130 51 //*******************************************
wang1tao 16:847c028f4130 52 ret = joinNetwork();
wang1tao 16:847c028f4130 53 if(ret != RETURN_OK)
wang1tao 16:847c028f4130 54 dot->sleep(5, mDot::RTC_ALARM); //sleep a while and restart
wang1tao 16:847c028f4130 55
wang1tao 18:ee1ec5f500bf 56 counter = 0;
wang1tao 16:847c028f4130 57 while(1) {
wang1tao 18:ee1ec5f500bf 58 sprintf(dataBuf, "Send:%d", counter);
wang1tao 18:ee1ec5f500bf 59 /* Send data to gateway */
wang1tao 18:ee1ec5f500bf 60 send_data(dataBuf);
wang1tao 16:847c028f4130 61 /* wait a while */
wang1tao 18:ee1ec5f500bf 62 wait(10);
wang1tao 18:ee1ec5f500bf 63
wang1tao 18:ee1ec5f500bf 64 counter++;
wang1tao 16:847c028f4130 65 }
wang1tao 16:847c028f4130 66 }
wang1tao 16:847c028f4130 67
wang1tao 16:847c028f4130 68
wang1tao 16:847c028f4130 69 int configNetwork(void)
wang1tao 16:847c028f4130 70 {
wang1tao 10:79124c0a5952 71 int32_t ret;
wang1tao 16:847c028f4130 72
wang1tao 16:847c028f4130 73 dot = mDot::getInstance();
Dengjj 14:0616e4361f0c 74
mfiore 2:6e2c378339d9 75 // print library version information
wang1tao 16:847c028f4130 76 pc.printf("version: %s\n\r", dot->getId().c_str());
wang1tao 16:847c028f4130 77
mfiore 2:6e2c378339d9 78 //*******************************************
mfiore 2:6e2c378339d9 79 // configuration
mfiore 2:6e2c378339d9 80 //*******************************************
mfiore 0:09250cd371d2 81 // reset to default config so we know what state we're in
mfiore 0:09250cd371d2 82 dot->resetConfig();
Dengjj 19:f7e17ee700bf 83
Dengjj 19:f7e17ee700bf 84 dot->setTxPower(20);
JCheng 5:6c7d2f4d7377 85
mfiore 4:36e214ebfa56 86 dot->setLogLevel(mts::MTSLog::INFO_LEVEL);
Dengjj 15:04b37f329c84 87
mfiore 2:6e2c378339d9 88 // set up the mDot with our network information: frequency sub band, network name, and network password
mfiore 2:6e2c378339d9 89 // these can all be saved in NVM so they don't need to be set every time - see mDot::saveConfig()
JCheng 5:6c7d2f4d7377 90
mfiore 4:36e214ebfa56 91 // frequency sub band is only applicable in the 915 (US) frequency band
mfiore 4:36e214ebfa56 92 // 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 93 // if using a gateway that supports all 64 channels, use sub band 0 - the mDot will use all 64 channels
wang1tao 18:ee1ec5f500bf 94 //pc.printf("Setting TX frequency band as 868MHz\n\r");
wang1tao 18:ee1ec5f500bf 95 //if ((ret = dot->setTxFrequency(mDot::FB_868)) != mDot::MDOT_OK){
wang1tao 18:ee1ec5f500bf 96 // pc.printf("Error:failed to set TX frequency band %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 18:ee1ec5f500bf 97 // return RETURN_ERR;
wang1tao 18:ee1ec5f500bf 98 //}
wang1tao 18:ee1ec5f500bf 99 //pc.printf("Setting RX frequency band as 868MHz\n\r");
wang1tao 18:ee1ec5f500bf 100 //if ((ret = dot->setRxFrequency(mDot::FB_868)) != mDot::MDOT_OK){
wang1tao 18:ee1ec5f500bf 101 // pc.printf("Error:failed to set RX frequency band %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 18:ee1ec5f500bf 102 // return RETURN_ERR;
wang1tao 18:ee1ec5f500bf 103 //}
wang1tao 16:847c028f4130 104 pc.printf("Setting frequency sub band\n\r");
mfiore 0:09250cd371d2 105 if ((ret = dot->setFrequencySubBand(config_frequency_sub_band)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 106 pc.printf("Error:failed to set frequency sub band %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 107 return RETURN_ERR;
mfiore 2:6e2c378339d9 108 }
JCheng 5:6c7d2f4d7377 109
wang1tao 16:847c028f4130 110 pc.printf("Setting network name\n\r");
mfiore 2:6e2c378339d9 111 if ((ret = dot->setNetworkName(config_network_name)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 112 pc.printf("Error:failed to set network name %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 113 return RETURN_ERR;
mfiore 0:09250cd371d2 114 }
JCheng 5:6c7d2f4d7377 115
wang1tao 16:847c028f4130 116 pc.printf("Setting network password\n\r");
mfiore 2:6e2c378339d9 117 if ((ret = dot->setNetworkPassphrase(config_network_pass)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 118 pc.printf("Error:failed to set network password %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 119 return RETURN_ERR;
mfiore 0:09250cd371d2 120 }
wang1tao 16:847c028f4130 121
mfiore 4:36e214ebfa56 122 // a higher spreading factor allows for longer range but lower throughput
mfiore 4:36e214ebfa56 123 // in the 915 (US) frequency band, spreading factors 7 - 10 are available
mfiore 4:36e214ebfa56 124 // in the 868 (EU) frequency band, spreading factors 7 - 12 are available
wang1tao 16:847c028f4130 125 pc.printf("Setting TX spreading factor\n\r");
mfiore 4:36e214ebfa56 126 if ((ret = dot->setTxDataRate(mDot::SF_10)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 127 pc.printf("Error:failed to set TX datarate %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 128 return RETURN_ERR;
mfiore 4:36e214ebfa56 129 }
JCheng 5:6c7d2f4d7377 130
mfiore 4:36e214ebfa56 131 // request receive confirmation of packets from the gateway
wang1tao 16:847c028f4130 132 pc.printf("Enabling ACKs\n\r");
mfiore 4:36e214ebfa56 133 if ((ret = dot->setAck(1)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 134 pc.printf("Error:failed to enable ACKs %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 135 return RETURN_OK;
mfiore 4:36e214ebfa56 136 }
JCheng 5:6c7d2f4d7377 137
mfiore 4:36e214ebfa56 138 // save this configuration to the mDot's NVM
wang1tao 16:847c028f4130 139 pc.printf("Saving config\n\r");
mfiore 2:6e2c378339d9 140 if (! dot->saveConfig()) {
wang1tao 16:847c028f4130 141 pc.printf("Error:failed to save configuration\n\r");
mfiore 0:09250cd371d2 142 }
Dengjj 15:04b37f329c84 143
wang1tao 16:847c028f4130 144 return RETURN_OK;
wang1tao 16:847c028f4130 145 } // end of configuration
mfiore 0:09250cd371d2 146
Dengjj 15:04b37f329c84 147
wang1tao 16:847c028f4130 148 int joinNetwork(void)
wang1tao 16:847c028f4130 149 {
wang1tao 16:847c028f4130 150 int32_t ret,i;
wang1tao 16:847c028f4130 151 std::vector<uint8_t> sendData;
wang1tao 18:ee1ec5f500bf 152 char _header[] = "Reset!";
wang1tao 16:847c028f4130 153
wang1tao 16:847c028f4130 154 // attempt to join the network
wang1tao 16:847c028f4130 155 pc.printf("Joining network...\n\r");
wang1tao 16:847c028f4130 156
wang1tao 16:847c028f4130 157 while ((ret = dot->joinNetwork()) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 158 pc.printf("Error: failed to join network %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 159 // in the 868 (EU) frequency band, we need to wait until another channel is available before transmitting again
wang1tao 16:847c028f4130 160 return RETURN_ERR;
mfiore 0:09250cd371d2 161 }
mfiore 0:09250cd371d2 162
wang1tao 16:847c028f4130 163 sendData.clear();
wang1tao 16:847c028f4130 164 // format data for sending to the gateway
wang1tao 16:847c028f4130 165 for( i=0; i< strlen(_header); i++ )
wang1tao 16:847c028f4130 166 sendData.push_back( _header[i] );
wang1tao 16:847c028f4130 167
wang1tao 16:847c028f4130 168 // send the data to the gateway
wang1tao 16:847c028f4130 169 pc.printf("Send header to the gateway\n\r");
wang1tao 16:847c028f4130 170
wang1tao 16:847c028f4130 171 if ((ret = dot->send(sendData)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 172 pc.printf("Error: failed to send %d:%s\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 173 return RETURN_ERR;
wang1tao 16:847c028f4130 174 } else {
wang1tao 16:847c028f4130 175 pc.printf("Successfully sent data to gateway\n\r");
wang1tao 16:847c028f4130 176 }
wang1tao 16:847c028f4130 177
wang1tao 16:847c028f4130 178 return RETURN_OK;
mfiore 0:09250cd371d2 179 }
wang1tao 16:847c028f4130 180
wang1tao 16:847c028f4130 181 int send_data(char *str)
wang1tao 16:847c028f4130 182 {
wang1tao 16:847c028f4130 183 int32_t i, ret;
wang1tao 16:847c028f4130 184 std::vector<uint8_t> sendData;
wang1tao 16:847c028f4130 185
wang1tao 16:847c028f4130 186 //Send the data to Gateway
wang1tao 16:847c028f4130 187 sendData.clear();
wang1tao 16:847c028f4130 188 // probably not the most efficent way to do this
wang1tao 16:847c028f4130 189 for(i=0; i< strlen(str); i++ )
wang1tao 16:847c028f4130 190 sendData.push_back(str[i] );
wang1tao 16:847c028f4130 191
wang1tao 16:847c028f4130 192 // send the data to the gateway
wang1tao 16:847c028f4130 193 pc.printf("Send %s to Gateway \n\r", str);
wang1tao 16:847c028f4130 194
wang1tao 16:847c028f4130 195 if ((ret = dot->send(sendData)) != mDot::MDOT_OK) {
wang1tao 16:847c028f4130 196 pc.printf("Error:failed to send\n\r", ret, mDot::getReturnCodeString(ret).c_str());
wang1tao 16:847c028f4130 197 return RETURN_ERR;
wang1tao 16:847c028f4130 198 } else {
wang1tao 16:847c028f4130 199 pc.printf("Sent data to gateway successfully!\n\r");
wang1tao 16:847c028f4130 200 }
wang1tao 16:847c028f4130 201 return RETURN_OK;
wang1tao 16:847c028f4130 202 }
wang1tao 16:847c028f4130 203
wang1tao 16:847c028f4130 204