http://mbed.org/users/okini3939/notebook/gainspan-wifi

Dependencies:   mbed

Committer:
okini3939
Date:
Tue Jun 26 16:04:31 2012 +0000
Revision:
0:aca4c7e7ed69

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
okini3939 0:aca4c7e7ed69 1 #include "mbed.h"
okini3939 0:aca4c7e7ed69 2 #include "GSwifi.h"
okini3939 0:aca4c7e7ed69 3
okini3939 0:aca4c7e7ed69 4 //#define USE_SLEEP
okini3939 0:aca4c7e7ed69 5 #define USE_STANDBY
okini3939 0:aca4c7e7ed69 6
okini3939 0:aca4c7e7ed69 7 #if defined(TARGET_LPC11U24)
okini3939 0:aca4c7e7ed69 8 Serial pc(USBTX, USBRX);
okini3939 0:aca4c7e7ed69 9 #endif
okini3939 0:aca4c7e7ed69 10 DigitalOut led1(LED1), led2(LED2), led3(LED3), led4(LED4);
okini3939 0:aca4c7e7ed69 11 //InterruptIn sw1(p23), sw2(p24), sw3(p25), sw4(p26);
okini3939 0:aca4c7e7ed69 12 DigitalIn sw1(p23), sw2(p24), sw3(p25), sw4(p26);
okini3939 0:aca4c7e7ed69 13
okini3939 0:aca4c7e7ed69 14 #if defined(TARGET_LPC1768) || defined(TARGET_LPC2368)
okini3939 0:aca4c7e7ed69 15 GSwifi gs(p13, p14, p12, P0_22); // TX, RX, CTS, RTS
okini3939 0:aca4c7e7ed69 16 DigitalOut gs_reset(p9), gs_wakeup(p10);
okini3939 0:aca4c7e7ed69 17 #elif defined(TARGET_LPC11U24)
okini3939 0:aca4c7e7ed69 18 GSwifi gs(p9, p10, p21, p22); // TX, RX, CTS, RTS
okini3939 0:aca4c7e7ed69 19 DigitalOut gs_reset(p27), gs_wakeup(p28);
okini3939 0:aca4c7e7ed69 20 #endif
okini3939 0:aca4c7e7ed69 21
okini3939 0:aca4c7e7ed69 22 Host server;
okini3939 0:aca4c7e7ed69 23 volatile int gsconnect = 0, button = 0;
okini3939 0:aca4c7e7ed69 24
okini3939 0:aca4c7e7ed69 25 void isr_sw1 () {
okini3939 0:aca4c7e7ed69 26 if (gsconnect == 0) gsconnect = 1;
okini3939 0:aca4c7e7ed69 27 }
okini3939 0:aca4c7e7ed69 28
okini3939 0:aca4c7e7ed69 29 void isr_sw2 () {
okini3939 0:aca4c7e7ed69 30 button = 1;
okini3939 0:aca4c7e7ed69 31 }
okini3939 0:aca4c7e7ed69 32
okini3939 0:aca4c7e7ed69 33 void isr_sw3 () {
okini3939 0:aca4c7e7ed69 34 button = 2;
okini3939 0:aca4c7e7ed69 35 }
okini3939 0:aca4c7e7ed69 36
okini3939 0:aca4c7e7ed69 37 void isr_sw4 () {
okini3939 0:aca4c7e7ed69 38 button = 3;
okini3939 0:aca4c7e7ed69 39 }
okini3939 0:aca4c7e7ed69 40
okini3939 0:aca4c7e7ed69 41 void isr_udp (int cid, int acid, int len) {
okini3939 0:aca4c7e7ed69 42 int i;
okini3939 0:aca4c7e7ed69 43 char buf[20];
okini3939 0:aca4c7e7ed69 44 Host host;
okini3939 0:aca4c7e7ed69 45
okini3939 0:aca4c7e7ed69 46 i = gs.recv(cid, buf, sizeof(buf), host);
okini3939 0:aca4c7e7ed69 47 buf[i] = 0;
okini3939 0:aca4c7e7ed69 48 if (i > 0 && strncmp("Welcome", buf, 7) == 0) {
okini3939 0:aca4c7e7ed69 49 server.setIp(host.getIp());
okini3939 0:aca4c7e7ed69 50 }
okini3939 0:aca4c7e7ed69 51 }
okini3939 0:aca4c7e7ed69 52
okini3939 0:aca4c7e7ed69 53 void find () {
okini3939 0:aca4c7e7ed69 54 int i;
okini3939 0:aca4c7e7ed69 55 int cid;
okini3939 0:aca4c7e7ed69 56 Host bloadcast;
okini3939 0:aca4c7e7ed69 57
okini3939 0:aca4c7e7ed69 58 bloadcast.setPort(10123);
okini3939 0:aca4c7e7ed69 59 bloadcast.setIp(IpAddr(255,255,255,255));
okini3939 0:aca4c7e7ed69 60
okini3939 0:aca4c7e7ed69 61 cid = gs.open(bloadcast, GSPROT_UDP, &isr_udp);
okini3939 0:aca4c7e7ed69 62 if (cid >= 0) {
okini3939 0:aca4c7e7ed69 63 gs.send(cid, "Hello", 5);
okini3939 0:aca4c7e7ed69 64 for (i = 0; i < 15; i ++) {
okini3939 0:aca4c7e7ed69 65 gs.poll();
okini3939 0:aca4c7e7ed69 66 wait_ms(100);
okini3939 0:aca4c7e7ed69 67 }
okini3939 0:aca4c7e7ed69 68 gs.close(cid);
okini3939 0:aca4c7e7ed69 69 }
okini3939 0:aca4c7e7ed69 70 }
okini3939 0:aca4c7e7ed69 71
okini3939 0:aca4c7e7ed69 72 void key () {
okini3939 0:aca4c7e7ed69 73 if (sw1 == 0 && gsconnect == 0) gsconnect = 1;
okini3939 0:aca4c7e7ed69 74 if (sw2 == 0 && button == 0) button = 1;
okini3939 0:aca4c7e7ed69 75 if (sw3 == 0 && button == 0) button = 2;
okini3939 0:aca4c7e7ed69 76 if (sw4 == 0 && button == 0) button = 3;
okini3939 0:aca4c7e7ed69 77 }
okini3939 0:aca4c7e7ed69 78
okini3939 0:aca4c7e7ed69 79 int main() {
okini3939 0:aca4c7e7ed69 80 int i;
okini3939 0:aca4c7e7ed69 81
okini3939 0:aca4c7e7ed69 82 #if defined(TARGET_LPC11U24)
okini3939 0:aca4c7e7ed69 83 pc.baud(115200);
okini3939 0:aca4c7e7ed69 84 #endif
okini3939 0:aca4c7e7ed69 85 gs_reset = 0;
okini3939 0:aca4c7e7ed69 86 gs_wakeup = 1;
okini3939 0:aca4c7e7ed69 87 sw1.mode(PullUp);
okini3939 0:aca4c7e7ed69 88 sw2.mode(PullUp);
okini3939 0:aca4c7e7ed69 89 sw3.mode(PullUp);
okini3939 0:aca4c7e7ed69 90 sw4.mode(PullUp);
okini3939 0:aca4c7e7ed69 91 wait_ms(100);
okini3939 0:aca4c7e7ed69 92 /*
okini3939 0:aca4c7e7ed69 93 sw1.fall(&isr_sw1);
okini3939 0:aca4c7e7ed69 94 sw2.fall(&isr_sw2);
okini3939 0:aca4c7e7ed69 95 sw3.fall(&isr_sw3);
okini3939 0:aca4c7e7ed69 96 sw4.fall(&isr_sw4);
okini3939 0:aca4c7e7ed69 97 */
okini3939 0:aca4c7e7ed69 98 server.setPort(10123);
okini3939 0:aca4c7e7ed69 99 server.setIp(IpAddr(192,168,111,20));
okini3939 0:aca4c7e7ed69 100 gs_reset = 1;
okini3939 0:aca4c7e7ed69 101 wait_ms(500);
okini3939 0:aca4c7e7ed69 102 led1 = 1;
okini3939 0:aca4c7e7ed69 103
okini3939 0:aca4c7e7ed69 104 for (;;) {
okini3939 0:aca4c7e7ed69 105 key();
okini3939 0:aca4c7e7ed69 106 gs.poll();
okini3939 0:aca4c7e7ed69 107 /*
okini3939 0:aca4c7e7ed69 108 switch (gs.getStatus()) {
okini3939 0:aca4c7e7ed69 109 case GSSTAT_READY:
okini3939 0:aca4c7e7ed69 110 sleep();
okini3939 0:aca4c7e7ed69 111 break;
okini3939 0:aca4c7e7ed69 112 case GSSTAT_WAKEUP:
okini3939 0:aca4c7e7ed69 113 gs.standby(600000);
okini3939 0:aca4c7e7ed69 114 break;
okini3939 0:aca4c7e7ed69 115 }
okini3939 0:aca4c7e7ed69 116 */
okini3939 0:aca4c7e7ed69 117 if (gs.getStatus() == GSSTAT_WAKEUP) {
okini3939 0:aca4c7e7ed69 118 gs.standby(600000);
okini3939 0:aca4c7e7ed69 119 }
okini3939 0:aca4c7e7ed69 120
okini3939 0:aca4c7e7ed69 121 if (gsconnect == 1) {
okini3939 0:aca4c7e7ed69 122 // WPS
okini3939 0:aca4c7e7ed69 123 led1 = 0;
okini3939 0:aca4c7e7ed69 124 led3 = 1;
okini3939 0:aca4c7e7ed69 125 if (gs.connect(GSSEC_WPS_BUTTON, NULL, NULL, 1)) {
okini3939 0:aca4c7e7ed69 126 // if (gs.connect(GSSEC_WPA2_PSK, "GSTEST", "testpass12345", 1)) {
okini3939 0:aca4c7e7ed69 127 led1 = 1;
okini3939 0:aca4c7e7ed69 128 led2 = 0;
okini3939 0:aca4c7e7ed69 129 gsconnect = 0;
okini3939 0:aca4c7e7ed69 130 } else {
okini3939 0:aca4c7e7ed69 131 led1 = 0;
okini3939 0:aca4c7e7ed69 132 led2 = 1;
okini3939 0:aca4c7e7ed69 133 gsconnect = 2;
okini3939 0:aca4c7e7ed69 134
okini3939 0:aca4c7e7ed69 135 find();
okini3939 0:aca4c7e7ed69 136 #ifdef USE_SLEEP
okini3939 0:aca4c7e7ed69 137 gs.deepSleep();
okini3939 0:aca4c7e7ed69 138 #endif
okini3939 0:aca4c7e7ed69 139 #ifdef USE_STANDBY
okini3939 0:aca4c7e7ed69 140 gs.standby(600000);
okini3939 0:aca4c7e7ed69 141 #endif
okini3939 0:aca4c7e7ed69 142 }
okini3939 0:aca4c7e7ed69 143 led3 = 0;
okini3939 0:aca4c7e7ed69 144 }
okini3939 0:aca4c7e7ed69 145
okini3939 0:aca4c7e7ed69 146 if (button) {
okini3939 0:aca4c7e7ed69 147 led4 = 1;
okini3939 0:aca4c7e7ed69 148 if (gsconnect == 2) {
okini3939 0:aca4c7e7ed69 149 int cid;
okini3939 0:aca4c7e7ed69 150 char buf[10];
okini3939 0:aca4c7e7ed69 151
okini3939 0:aca4c7e7ed69 152 #ifdef USE_SLEEP
okini3939 0:aca4c7e7ed69 153 gs.wakeup();
okini3939 0:aca4c7e7ed69 154 #endif
okini3939 0:aca4c7e7ed69 155 #ifdef USE_STANDBY
okini3939 0:aca4c7e7ed69 156 gs_wakeup = 0;
okini3939 0:aca4c7e7ed69 157 while (gs.getStatus() != GSSTAT_WAKEUP) {
okini3939 0:aca4c7e7ed69 158 gs.poll();
okini3939 0:aca4c7e7ed69 159 }
okini3939 0:aca4c7e7ed69 160 gs_wakeup = 1;
okini3939 0:aca4c7e7ed69 161 gs.wakeup();
okini3939 0:aca4c7e7ed69 162 #endif
okini3939 0:aca4c7e7ed69 163 led3 = 1;
okini3939 0:aca4c7e7ed69 164 cid = gs.open(server, GSPROT_UDP);
okini3939 0:aca4c7e7ed69 165 if (cid >= 0) {
okini3939 0:aca4c7e7ed69 166 buf[0] = '0' + button;
okini3939 0:aca4c7e7ed69 167 gs.send(cid, buf, 1);
okini3939 0:aca4c7e7ed69 168 gs.close(cid);
okini3939 0:aca4c7e7ed69 169 }
okini3939 0:aca4c7e7ed69 170 led3 = 0;
okini3939 0:aca4c7e7ed69 171 #ifdef USE_SLEEP
okini3939 0:aca4c7e7ed69 172 gs.deepSleep();
okini3939 0:aca4c7e7ed69 173 #endif
okini3939 0:aca4c7e7ed69 174 #ifdef USE_STANDBY
okini3939 0:aca4c7e7ed69 175 gs.standby(600000);
okini3939 0:aca4c7e7ed69 176 #endif
okini3939 0:aca4c7e7ed69 177 }
okini3939 0:aca4c7e7ed69 178 button = 0;
okini3939 0:aca4c7e7ed69 179 led4 = 0;
okini3939 0:aca4c7e7ed69 180 }
okini3939 0:aca4c7e7ed69 181
okini3939 0:aca4c7e7ed69 182 }
okini3939 0:aca4c7e7ed69 183 }