Rick McConney
/
StarterKit
GSMA version
Fork of AvnetATT_shape_hackathon by
main.cpp@46:733edf15f9e8, 2017-01-09 (annotated)
- Committer:
- elmkom
- Date:
- Mon Jan 09 18:23:37 2017 +0000
- Revision:
- 46:733edf15f9e8
- Parent:
- 45:fe90f1fcb4e0
tcp test code
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
JMF | 0:9d5134074d84 | 1 | #include "mbed.h" |
JMF | 0:9d5134074d84 | 2 | #include <cctype> |
JMF | 0:9d5134074d84 | 3 | #include "SerialBuffered.h" |
JMF | 2:0e2ef866af95 | 4 | #include "config_me.h" |
elmkom | 42:8500f0cb2ea5 | 5 | #include "Wnc.h" |
JMF | 0:9d5134074d84 | 6 | |
elmkom | 42:8500f0cb2ea5 | 7 | extern SerialBuffered mdm; |
elmkom | 42:8500f0cb2ea5 | 8 | Wnc wnc; |
elmkom | 46:733edf15f9e8 | 9 | int seqNum =0; |
elmkom | 46:733edf15f9e8 | 10 | int msgLen = 10; |
elmkom | 41:85a736a9b900 | 11 | |
elmkom | 36:f8d96ff1dd1b | 12 | |
JMF | 0:9d5134074d84 | 13 | // comment out the following line if color is not supported on the terminal |
JMF | 0:9d5134074d84 | 14 | #define USE_COLOR |
JMF | 0:9d5134074d84 | 15 | #ifdef USE_COLOR |
JMF | 0:9d5134074d84 | 16 | #define BLK "\033[30m" |
JMF | 0:9d5134074d84 | 17 | #define RED "\033[31m" |
JMF | 0:9d5134074d84 | 18 | #define GRN "\033[32m" |
JMF | 0:9d5134074d84 | 19 | #define YEL "\033[33m" |
JMF | 0:9d5134074d84 | 20 | #define BLU "\033[34m" |
JMF | 0:9d5134074d84 | 21 | #define MAG "\033[35m" |
JMF | 0:9d5134074d84 | 22 | #define CYN "\033[36m" |
JMF | 0:9d5134074d84 | 23 | #define WHT "\033[37m" |
JMF | 0:9d5134074d84 | 24 | #define DEF "\033[39m" |
JMF | 0:9d5134074d84 | 25 | #else |
JMF | 0:9d5134074d84 | 26 | #define BLK |
JMF | 0:9d5134074d84 | 27 | #define RED |
JMF | 0:9d5134074d84 | 28 | #define GRN |
JMF | 0:9d5134074d84 | 29 | #define YEL |
JMF | 0:9d5134074d84 | 30 | #define BLU |
JMF | 0:9d5134074d84 | 31 | #define MAG |
JMF | 0:9d5134074d84 | 32 | #define CYN |
JMF | 0:9d5134074d84 | 33 | #define WHT |
JMF | 0:9d5134074d84 | 34 | #define DEF |
JMF | 0:9d5134074d84 | 35 | #endif |
JMF | 0:9d5134074d84 | 36 | |
JMF | 0:9d5134074d84 | 37 | #define MDM_DBG_OFF 0 |
JMF | 0:9d5134074d84 | 38 | #define MDM_DBG_AT_CMDS (1 << 0) |
elmkom | 36:f8d96ff1dd1b | 39 | |
elmkom | 44:60008ebffdd4 | 40 | |
elmkom | 44:60008ebffdd4 | 41 | |
JMF | 0:9d5134074d84 | 42 | int mdm_dbgmask = MDM_DBG_OFF; |
JMF | 0:9d5134074d84 | 43 | |
JMF | 0:9d5134074d84 | 44 | Serial pc(USBTX, USBRX); |
elmkom | 42:8500f0cb2ea5 | 45 | |
stefanrousseau | 16:17c5916f2d12 | 46 | DigitalOut led_green(LED_GREEN); |
stefanrousseau | 16:17c5916f2d12 | 47 | DigitalOut led_red(LED_RED); |
stefanrousseau | 16:17c5916f2d12 | 48 | DigitalOut led_blue(LED_BLUE); |
JMF | 0:9d5134074d84 | 49 | |
JMF | 0:9d5134074d84 | 50 | |
JMF | 0:9d5134074d84 | 51 | |
elmkom | 41:85a736a9b900 | 52 | |
elmkom | 44:60008ebffdd4 | 53 | |
elmkom | 46:733edf15f9e8 | 54 | //DigitalIn slot1(PTB3,PullUp); |
elmkom | 46:733edf15f9e8 | 55 | //DigitalIn slot2(PTB10,PullUp); |
elmkom | 46:733edf15f9e8 | 56 | //DigitalIn slot3(PTB11,PullUp); |
elmkom | 42:8500f0cb2ea5 | 57 | |
elmkom | 45:fe90f1fcb4e0 | 58 | DigitalIn sw2(SW2); |
elmkom | 45:fe90f1fcb4e0 | 59 | |
elmkom | 46:733edf15f9e8 | 60 | |
JMF | 0:9d5134074d84 | 61 | #define TOUPPER(a) (a) //toupper(a) |
JMF | 0:9d5134074d84 | 62 | |
JMF | 0:9d5134074d84 | 63 | |
JMF | 0:9d5134074d84 | 64 | #define MDM_OK 0 |
JMF | 0:9d5134074d84 | 65 | #define MDM_ERR_TIMEOUT -1 |
JMF | 0:9d5134074d84 | 66 | |
JMF | 0:9d5134074d84 | 67 | #define MAX_AT_RSP_LEN 255 |
elmkom | 38:532a0d929756 | 68 | |
elmkom | 41:85a736a9b900 | 69 | bool toggleLed = false; |
elmkom | 46:733edf15f9e8 | 70 | |
elmkom | 36:f8d96ff1dd1b | 71 | |
elmkom | 38:532a0d929756 | 72 | |
elmkom | 36:f8d96ff1dd1b | 73 | //******************************************************************************************************************************************** |
elmkom | 36:f8d96ff1dd1b | 74 | //* Set the RGB LED's Color |
elmkom | 36:f8d96ff1dd1b | 75 | //* LED Color 0=Off to 7=White. 3 bits represent BGR (bit0=Red, bit1=Green, bit2=Blue) |
elmkom | 36:f8d96ff1dd1b | 76 | //******************************************************************************************************************************************** |
elmkom | 36:f8d96ff1dd1b | 77 | void SetLedColor(unsigned char ucColor) |
elmkom | 35:2e864bae3af0 | 78 | { |
elmkom | 46:733edf15f9e8 | 79 | |
elmkom | 46:733edf15f9e8 | 80 | //Note that when an LED is on, you write a 0 to it: |
elmkom | 46:733edf15f9e8 | 81 | led_red = !(ucColor & 0x1); //bit 0 |
elmkom | 46:733edf15f9e8 | 82 | led_green = !(ucColor & 0x2); //bit 1 |
elmkom | 46:733edf15f9e8 | 83 | led_blue = !(ucColor & 0x4); //bit 2 |
elmkom | 46:733edf15f9e8 | 84 | |
elmkom | 36:f8d96ff1dd1b | 85 | } //SetLedColor() |
elmkom | 35:2e864bae3af0 | 86 | |
JMF | 0:9d5134074d84 | 87 | |
elmkom | 36:f8d96ff1dd1b | 88 | void system_reset() |
elmkom | 36:f8d96ff1dd1b | 89 | { |
elmkom | 36:f8d96ff1dd1b | 90 | printf(RED "\n\rSystem resetting..." DEF "\n"); |
elmkom | 36:f8d96ff1dd1b | 91 | NVIC_SystemReset(); |
elmkom | 36:f8d96ff1dd1b | 92 | } |
elmkom | 46:733edf15f9e8 | 93 | |
elmkom | 46:733edf15f9e8 | 94 | void GenerateTestString(char * modem_string,int len) |
elmkom | 46:733edf15f9e8 | 95 | { |
elmkom | 46:733edf15f9e8 | 96 | seqNum++; |
elmkom | 46:733edf15f9e8 | 97 | char data[len+1]; |
elmkom | 46:733edf15f9e8 | 98 | for(int i = 0;i<len;i++) |
elmkom | 46:733edf15f9e8 | 99 | data[i] = 'a'; |
elmkom | 46:733edf15f9e8 | 100 | data[len] = 0; |
elmkom | 46:733edf15f9e8 | 101 | sprintf(modem_string, "%s", data); |
elmkom | 40:45e4636d20cc | 102 | } |
stefanrousseau | 16:17c5916f2d12 | 103 | |
JMF | 0:9d5134074d84 | 104 | int main() { |
elmkom | 36:f8d96ff1dd1b | 105 | |
JMF | 0:9d5134074d84 | 106 | pc.baud(115200); |
elmkom | 42:8500f0cb2ea5 | 107 | |
fkellermavnet | 20:27a4f27254d0 | 108 | // Set LED to RED until init finishes |
fkellermavnet | 20:27a4f27254d0 | 109 | SetLedColor(0x1); |
fkellermavnet | 20:27a4f27254d0 | 110 | |
elmkom | 46:733edf15f9e8 | 111 | pc.printf(BLU "Hello World\r\n\n\r"); |
stefanrousseau | 11:e6602513730f | 112 | |
JMF | 0:9d5134074d84 | 113 | // Initialize the modem |
JMF | 0:9d5134074d84 | 114 | printf(GRN "Modem initializing... will take up to 60 seconds" DEF "\r\n"); |
elmkom | 45:fe90f1fcb4e0 | 115 | if(!wnc.init()) |
elmkom | 45:fe90f1fcb4e0 | 116 | { |
elmkom | 45:fe90f1fcb4e0 | 117 | pc.printf(RED "Modem initialization failed!" DEF "\n"); |
elmkom | 45:fe90f1fcb4e0 | 118 | system_reset(); |
elmkom | 45:fe90f1fcb4e0 | 119 | } |
elmkom | 46:733edf15f9e8 | 120 | |
elmkom | 46:733edf15f9e8 | 121 | char* iccid = wnc.getIccid(); |
elmkom | 42:8500f0cb2ea5 | 122 | printf(GRN "ICCID = %s" DEF "\r\n",iccid); |
elmkom | 45:fe90f1fcb4e0 | 123 | |
elmkom | 45:fe90f1fcb4e0 | 124 | |
elmkom | 42:8500f0cb2ea5 | 125 | |
JMF | 2:0e2ef866af95 | 126 | //Software init |
elmkom | 45:fe90f1fcb4e0 | 127 | if(!wnc.startInternet()) |
elmkom | 45:fe90f1fcb4e0 | 128 | system_reset(); |
elmkom | 45:fe90f1fcb4e0 | 129 | |
elmkom | 45:fe90f1fcb4e0 | 130 | char* ip = wnc.resolveDn(MY_SERVER_URL); |
elmkom | 45:fe90f1fcb4e0 | 131 | if(strlen(ip) == 0) |
elmkom | 45:fe90f1fcb4e0 | 132 | { |
elmkom | 45:fe90f1fcb4e0 | 133 | printf(RED "Failed to resolve IP for %s" DEF "\r\n",MY_SERVER_URL); |
elmkom | 45:fe90f1fcb4e0 | 134 | } |
elmkom | 45:fe90f1fcb4e0 | 135 | else |
elmkom | 45:fe90f1fcb4e0 | 136 | printf(GRN "IP = %s" DEF "\r\n",ip); |
stefanrousseau | 3:26b3cc155f39 | 137 | |
fkellermavnet | 20:27a4f27254d0 | 138 | // Set LED BLUE for partial init |
fkellermavnet | 20:27a4f27254d0 | 139 | SetLedColor(0x4); |
elmkom | 44:60008ebffdd4 | 140 | |
elmkom | 46:733edf15f9e8 | 141 | char modem_string[512]; |
elmkom | 45:fe90f1fcb4e0 | 142 | |
elmkom | 46:733edf15f9e8 | 143 | while(true) |
elmkom | 46:733edf15f9e8 | 144 | { |
elmkom | 41:85a736a9b900 | 145 | toggleLed = !toggleLed; |
elmkom | 41:85a736a9b900 | 146 | if(toggleLed) |
elmkom | 41:85a736a9b900 | 147 | SetLedColor(0x2); //green |
elmkom | 41:85a736a9b900 | 148 | else |
elmkom | 46:733edf15f9e8 | 149 | SetLedColor(0); //off |
elmkom | 46:733edf15f9e8 | 150 | |
elmkom | 45:fe90f1fcb4e0 | 151 | if(sw2 == 0) |
elmkom | 46:733edf15f9e8 | 152 | { |
elmkom | 46:733edf15f9e8 | 153 | GenerateTestString(modem_string,msgLen); |
elmkom | 38:532a0d929756 | 154 | printf(BLU "Sending to modem : %s" DEF "\r\n", modem_string); |
elmkom | 46:733edf15f9e8 | 155 | |
elmkom | 45:fe90f1fcb4e0 | 156 | if(wnc.connect(ip,MY_PORT)) // shelf |
elmkom | 42:8500f0cb2ea5 | 157 | { |
elmkom | 45:fe90f1fcb4e0 | 158 | if(wnc.writeSocket(modem_string)) |
elmkom | 46:733edf15f9e8 | 159 | { |
elmkom | 45:fe90f1fcb4e0 | 160 | char* mydata; |
elmkom | 45:fe90f1fcb4e0 | 161 | int tries = 8; |
elmkom | 45:fe90f1fcb4e0 | 162 | while(tries > 0) // wait for reply |
elmkom | 45:fe90f1fcb4e0 | 163 | { |
elmkom | 45:fe90f1fcb4e0 | 164 | tries--; |
elmkom | 45:fe90f1fcb4e0 | 165 | mydata = wnc.readSocket(); |
elmkom | 45:fe90f1fcb4e0 | 166 | if (strlen(mydata) > 0) |
elmkom | 45:fe90f1fcb4e0 | 167 | break; |
elmkom | 42:8500f0cb2ea5 | 168 | |
elmkom | 45:fe90f1fcb4e0 | 169 | wait(0.5); |
elmkom | 45:fe90f1fcb4e0 | 170 | } |
elmkom | 42:8500f0cb2ea5 | 171 | |
elmkom | 45:fe90f1fcb4e0 | 172 | if (strlen(mydata) > 0) |
elmkom | 46:733edf15f9e8 | 173 | { |
elmkom | 45:fe90f1fcb4e0 | 174 | SetLedColor(0x2); // green |
elmkom | 45:fe90f1fcb4e0 | 175 | printf(BLU "Read back : [%s]" DEF "\r\n", mydata); |
elmkom | 46:733edf15f9e8 | 176 | sscanf(mydata,"LEN=%d",&msgLen); |
elmkom | 45:fe90f1fcb4e0 | 177 | } |
elmkom | 42:8500f0cb2ea5 | 178 | } |
elmkom | 42:8500f0cb2ea5 | 179 | wnc.disconnect(); |
elmkom | 38:532a0d929756 | 180 | } |
elmkom | 42:8500f0cb2ea5 | 181 | else // failed to connect reset |
elmkom | 38:532a0d929756 | 182 | { |
elmkom | 38:532a0d929756 | 183 | SetLedColor(0x1); //red |
elmkom | 42:8500f0cb2ea5 | 184 | system_reset(); |
elmkom | 46:733edf15f9e8 | 185 | } |
elmkom | 38:532a0d929756 | 186 | } |
elmkom | 38:532a0d929756 | 187 | wait(0.2); |
stefanrousseau | 3:26b3cc155f39 | 188 | } //forever loop |
JMF | 0:9d5134074d84 | 189 | } |