This program opens a socket and wait connection through Wi-Fi. When the socket is connected, print out received characters to LCD.

Dependencies:   TextLCD mbed

Committer:
nakata
Date:
Wed Oct 24 10:16:52 2012 +0000
Revision:
2:f5754fb90f07
Interface public version

Who changed what in which revision?

UserRevisionLine numberNew contents of line
nakata 2:f5754fb90f07 1 #include "private.h"
nakata 2:f5754fb90f07 2 #include <string.h>
nakata 2:f5754fb90f07 3
nakata 2:f5754fb90f07 4 /*
nakata 2:f5754fb90f07 5 * common constants
nakata 2:f5754fb90f07 6 */
nakata 2:f5754fb90f07 7 #define BAUD_RATE 115200
nakata 2:f5754fb90f07 8 //#define BAUD_RATE 9600
nakata 2:f5754fb90f07 9 #define CR 13
nakata 2:f5754fb90f07 10 #define LF 10
nakata 2:f5754fb90f07 11 #define READ_BUFF_LEN 4096
nakata 2:f5754fb90f07 12 #define IPADDRESS_LENGTH 16
nakata 2:f5754fb90f07 13 #define PORT_NUM "1080"
nakata 2:f5754fb90f07 14
nakata 2:f5754fb90f07 15 /*
nakata 2:f5754fb90f07 16 * mbed pin settings
nakata 2:f5754fb90f07 17 */
nakata 2:f5754fb90f07 18 Serial wifi(p13, p14);
nakata 2:f5754fb90f07 19 DigitalOut PRST(p15);
nakata 2:f5754fb90f07 20
nakata 2:f5754fb90f07 21 class WifiTerminalMode {
nakata 2:f5754fb90f07 22 private:
nakata 2:f5754fb90f07 23 unsigned char buff[READ_BUFF_LEN];
nakata 2:f5754fb90f07 24 unsigned char myIPAddress[IPADDRESS_LENGTH];
nakata 2:f5754fb90f07 25
nakata 2:f5754fb90f07 26 private:
nakata 2:f5754fb90f07 27 void putc(int c)
nakata 2:f5754fb90f07 28 {
nakata 2:f5754fb90f07 29 while (!wifi.writeable())
nakata 2:f5754fb90f07 30 ; // empty loop body
nakata 2:f5754fb90f07 31 wifi.putc(c);
nakata 2:f5754fb90f07 32 }
nakata 2:f5754fb90f07 33
nakata 2:f5754fb90f07 34 int getc()
nakata 2:f5754fb90f07 35 {
nakata 2:f5754fb90f07 36 return wifi.getc();
nakata 2:f5754fb90f07 37 }
nakata 2:f5754fb90f07 38
nakata 2:f5754fb90f07 39 void delayedPutc(unsigned char c)
nakata 2:f5754fb90f07 40 {
nakata 2:f5754fb90f07 41 wait(0.00032);
nakata 2:f5754fb90f07 42 putc(c);
nakata 2:f5754fb90f07 43 }
nakata 2:f5754fb90f07 44
nakata 2:f5754fb90f07 45 void write(const unsigned char *data)
nakata 2:f5754fb90f07 46 {
nakata 2:f5754fb90f07 47 const unsigned char *p;
nakata 2:f5754fb90f07 48 for ( p = data; *p != '\0'; p++ ) {
nakata 2:f5754fb90f07 49 delayedPutc(*p);
nakata 2:f5754fb90f07 50 }
nakata 2:f5754fb90f07 51 }
nakata 2:f5754fb90f07 52
nakata 2:f5754fb90f07 53 int readToPrompt()
nakata 2:f5754fb90f07 54 {
nakata 2:f5754fb90f07 55 int len;
nakata 2:f5754fb90f07 56 unsigned char *p = buff;
nakata 2:f5754fb90f07 57 for ( len = 0; len < READ_BUFF_LEN - 1; len++, p++ ) {
nakata 2:f5754fb90f07 58 *p = getc();
nakata 2:f5754fb90f07 59 if ( *p == '#' ) {
nakata 2:f5754fb90f07 60 break;
nakata 2:f5754fb90f07 61 }
nakata 2:f5754fb90f07 62 }
nakata 2:f5754fb90f07 63 *p = '\0';
nakata 2:f5754fb90f07 64
nakata 2:f5754fb90f07 65 return len;
nakata 2:f5754fb90f07 66 }
nakata 2:f5754fb90f07 67
nakata 2:f5754fb90f07 68 void waitPrompt()
nakata 2:f5754fb90f07 69 {
nakata 2:f5754fb90f07 70 while (getc() != '#')
nakata 2:f5754fb90f07 71 ; // empty loop body
nakata 2:f5754fb90f07 72 }
nakata 2:f5754fb90f07 73
nakata 2:f5754fb90f07 74 public:
nakata 2:f5754fb90f07 75 unsigned char *readBlock()
nakata 2:f5754fb90f07 76 {
nakata 2:f5754fb90f07 77 int len;
nakata 2:f5754fb90f07 78 unsigned char *p = buff;
nakata 2:f5754fb90f07 79 for ( len = 0; len < READ_BUFF_LEN - 1; len++ ) {
nakata 2:f5754fb90f07 80 *p++ = getc();
nakata 2:f5754fb90f07 81 if ( !wifi.readable() ) {
nakata 2:f5754fb90f07 82 break;
nakata 2:f5754fb90f07 83 }
nakata 2:f5754fb90f07 84 }
nakata 2:f5754fb90f07 85 *p = '\0';
nakata 2:f5754fb90f07 86
nakata 2:f5754fb90f07 87 return buff;
nakata 2:f5754fb90f07 88 }
nakata 2:f5754fb90f07 89
nakata 2:f5754fb90f07 90 unsigned char *readLine()
nakata 2:f5754fb90f07 91 {
nakata 2:f5754fb90f07 92 int len;
nakata 2:f5754fb90f07 93 unsigned char *p = buff;
nakata 2:f5754fb90f07 94
nakata 2:f5754fb90f07 95 for ( len = 0; len < READ_BUFF_LEN - 1; len++, p++ ) {
nakata 2:f5754fb90f07 96 *p = getc();
nakata 2:f5754fb90f07 97 if ( *p == CR || *p == LF ) {
nakata 2:f5754fb90f07 98 p++;
nakata 2:f5754fb90f07 99 break;
nakata 2:f5754fb90f07 100 }
nakata 2:f5754fb90f07 101 }
nakata 2:f5754fb90f07 102 *p = '\0';
nakata 2:f5754fb90f07 103
nakata 2:f5754fb90f07 104 return buff;
nakata 2:f5754fb90f07 105 }
nakata 2:f5754fb90f07 106 private:
nakata 2:f5754fb90f07 107 int command(const unsigned char *data)
nakata 2:f5754fb90f07 108 {
nakata 2:f5754fb90f07 109 int len = 0;
nakata 2:f5754fb90f07 110 unsigned char *p2 = buff;
nakata 2:f5754fb90f07 111 const unsigned char *p;
nakata 2:f5754fb90f07 112
nakata 2:f5754fb90f07 113 for ( p = data; *p != '\0'; p++ ) {
nakata 2:f5754fb90f07 114 while (wifi.readable()) {
nakata 2:f5754fb90f07 115 *p2++ = getc();
nakata 2:f5754fb90f07 116 len++;
nakata 2:f5754fb90f07 117 }
nakata 2:f5754fb90f07 118 delayedPutc(*p);
nakata 2:f5754fb90f07 119 }
nakata 2:f5754fb90f07 120 for (; len < READ_BUFF_LEN - 1; len++, p2++ ) {
nakata 2:f5754fb90f07 121 *p2 = getc();
nakata 2:f5754fb90f07 122 if ( *p2 == '#') {
nakata 2:f5754fb90f07 123 break;
nakata 2:f5754fb90f07 124 }
nakata 2:f5754fb90f07 125 }
nakata 2:f5754fb90f07 126 *p2 = '\0';
nakata 2:f5754fb90f07 127
nakata 2:f5754fb90f07 128 return len;
nakata 2:f5754fb90f07 129 }
nakata 2:f5754fb90f07 130
nakata 2:f5754fb90f07 131 public:
nakata 2:f5754fb90f07 132 void reset()
nakata 2:f5754fb90f07 133 {
nakata 2:f5754fb90f07 134 wifi.baud(BAUD_RATE);
nakata 2:f5754fb90f07 135 wifi.format(8, Serial::None, 1);
nakata 2:f5754fb90f07 136
nakata 2:f5754fb90f07 137 PRST = 0; // activate reset line
nakata 2:f5754fb90f07 138 wait(1.0); // perhaps needs 1 sec
nakata 2:f5754fb90f07 139 PRST = 1; // deactivate reset line
nakata 2:f5754fb90f07 140 }
nakata 2:f5754fb90f07 141
nakata 2:f5754fb90f07 142 void serialInit()
nakata 2:f5754fb90f07 143 {
nakata 2:f5754fb90f07 144 int i;
nakata 2:f5754fb90f07 145 int c = 0;
nakata 2:f5754fb90f07 146
nakata 2:f5754fb90f07 147 while (true) {
nakata 2:f5754fb90f07 148 if (wifi.writeable())
nakata 2:f5754fb90f07 149 putc('A');
nakata 2:f5754fb90f07 150 if (wifi.readable()) {
nakata 2:f5754fb90f07 151 if ( c == '*' ) {
nakata 2:f5754fb90f07 152 c = getc();
nakata 2:f5754fb90f07 153 if ( c == CR ) {
nakata 2:f5754fb90f07 154 break;
nakata 2:f5754fb90f07 155 }
nakata 2:f5754fb90f07 156 } else {
nakata 2:f5754fb90f07 157 c = getc();
nakata 2:f5754fb90f07 158 }
nakata 2:f5754fb90f07 159 }
nakata 2:f5754fb90f07 160 wait(0.00032); // this wait is important
nakata 2:f5754fb90f07 161 }
nakata 2:f5754fb90f07 162 // flush buffer
nakata 2:f5754fb90f07 163 while (wifi.readable())
nakata 2:f5754fb90f07 164 getc();
nakata 2:f5754fb90f07 165 // change to config mode
nakata 2:f5754fb90f07 166 for ( i = 0; i < 8; i++ ) {
nakata 2:f5754fb90f07 167 delayedPutc(' ');
nakata 2:f5754fb90f07 168 }
nakata 2:f5754fb90f07 169 c = 0;
nakata 2:f5754fb90f07 170 while (true) {
nakata 2:f5754fb90f07 171 if (wifi.readable()) {
nakata 2:f5754fb90f07 172 if ( c == '*' ) {
nakata 2:f5754fb90f07 173 c = getc();
nakata 2:f5754fb90f07 174 if ( c == CR ) {
nakata 2:f5754fb90f07 175 break;
nakata 2:f5754fb90f07 176 }
nakata 2:f5754fb90f07 177 } else {
nakata 2:f5754fb90f07 178 c = getc();
nakata 2:f5754fb90f07 179 }
nakata 2:f5754fb90f07 180 }
nakata 2:f5754fb90f07 181 }
nakata 2:f5754fb90f07 182 }
nakata 2:f5754fb90f07 183
nakata 2:f5754fb90f07 184 void portSetup()
nakata 2:f5754fb90f07 185 {
nakata 2:f5754fb90f07 186 command("wlan_type set infra\r");
nakata 2:f5754fb90f07 187 command("wlan_ssid set " SSID "\r");
nakata 2:f5754fb90f07 188 command("wlan_wps set stop\r");
nakata 2:f5754fb90f07 189 command("wlan_crdl set off\r");
nakata 2:f5754fb90f07 190 #ifdef WEP40_KEY
nakata 2:f5754fb90f07 191 command("wlan_sec set wep40\r");
nakata 2:f5754fb90f07 192 command("wlan_wep set " WEP40_KEY "\r");
nakata 2:f5754fb90f07 193 #endif
nakata 2:f5754fb90f07 194 #ifdef WEP104_KEY
nakata 2:f5754fb90f07 195 command("wlan_sec set wep104\r");
nakata 2:f5754fb90f07 196 command("wlan_wep set " WEP104_KEY "\r");
nakata 2:f5754fb90f07 197 #endif
nakata 2:f5754fb90f07 198 #ifdef TKIP_KEY
nakata 2:f5754fb90f07 199 command("wlan_sec set wpa-tkip\r");
nakata 2:f5754fb90f07 200 command("wlan_psk set " TKIP_KEY "\r");
nakata 2:f5754fb90f07 201 #endif
nakata 2:f5754fb90f07 202 #ifdef AES_KEY
nakata 2:f5754fb90f07 203 command("wlan_sec set wpa2-aes\r");
nakata 2:f5754fb90f07 204 command("wlan_psk set " AES_KEY "\r");
nakata 2:f5754fb90f07 205 #endif
nakata 2:f5754fb90f07 206 #ifdef MIX_KEY
nakata 2:f5754fb90f07 207 command("wlan_sec set wpa-mix\r");
nakata 2:f5754fb90f07 208 command("wlan_psk set " MIX_KEY "\r");
nakata 2:f5754fb90f07 209 #endif
nakata 2:f5754fb90f07 210 command("ip_dhcp set on\r");
nakata 2:f5754fb90f07 211 command("ip_term_prot set tcps\r");
nakata 2:f5754fb90f07 212 command("ip_term_hp set " PORT_NUM "\r");
nakata 2:f5754fb90f07 213 command("save permit\r");
nakata 2:f5754fb90f07 214 }
nakata 2:f5754fb90f07 215
nakata 2:f5754fb90f07 216 unsigned char *getAddr()
nakata 2:f5754fb90f07 217 {
nakata 2:f5754fb90f07 218 int len;
nakata 2:f5754fb90f07 219 int i = 0;
nakata 2:f5754fb90f07 220 const char *p;
nakata 2:f5754fb90f07 221
nakata 2:f5754fb90f07 222 waitPrompt();
nakata 2:f5754fb90f07 223 while (true) {
nakata 2:f5754fb90f07 224 len = command("wlan_con get\r");
nakata 2:f5754fb90f07 225 if (len > 0 && strstr((const char *)buff, (const char *)"= Connect") != 0 ) {
nakata 2:f5754fb90f07 226 break;
nakata 2:f5754fb90f07 227 }
nakata 2:f5754fb90f07 228 setLeds(4 | i);
nakata 2:f5754fb90f07 229 i ^= 1;
nakata 2:f5754fb90f07 230 wait(1.0);
nakata 2:f5754fb90f07 231 }
nakata 2:f5754fb90f07 232 do {
nakata 2:f5754fb90f07 233 setLeds(6 | i);
nakata 2:f5754fb90f07 234 i ^= 1;
nakata 2:f5754fb90f07 235 wait(1.0);
nakata 2:f5754fb90f07 236 len = command("ip_current get\r");
nakata 2:f5754fb90f07 237 if ( len <= 0 ) {
nakata 2:f5754fb90f07 238 p = (const char *)buff;
nakata 2:f5754fb90f07 239 buff[0] = '\0';
nakata 2:f5754fb90f07 240 continue;
nakata 2:f5754fb90f07 241 }
nakata 2:f5754fb90f07 242 p = strstr((const char *)buff, (const char *)"IP");
nakata 2:f5754fb90f07 243 if ( p == NULL )
nakata 2:f5754fb90f07 244 continue;
nakata 2:f5754fb90f07 245 p = strstr(p, (const char *)" = ");
nakata 2:f5754fb90f07 246 if ( p == NULL )
nakata 2:f5754fb90f07 247 continue;
nakata 2:f5754fb90f07 248 } while ( strncmp(p, " = 0.0.0.0", 10) == 0 );
nakata 2:f5754fb90f07 249 p += 3;
nakata 2:f5754fb90f07 250 for ( i = 0; i < IPADDRESS_LENGTH - 1; i++, p++ ) {
nakata 2:f5754fb90f07 251 if ( *p == '\r' )
nakata 2:f5754fb90f07 252 break;
nakata 2:f5754fb90f07 253 myIPAddress[i] = *p;
nakata 2:f5754fb90f07 254 }
nakata 2:f5754fb90f07 255 myIPAddress[i] = '\0';
nakata 2:f5754fb90f07 256 command("run permit\r");
nakata 2:f5754fb90f07 257
nakata 2:f5754fb90f07 258 return myIPAddress;
nakata 2:f5754fb90f07 259 }
nakata 2:f5754fb90f07 260 };