Committer:
donatien
Date:
Thu May 31 16:10:44 2012 +0000
Revision:
0:5c1bd3cd668d

        

Who changed what in which revision?

UserRevisionLine numberNew contents of line
donatien 0:5c1bd3cd668d 1 /* net_3g_websockets_test.cpp */
donatien 0:5c1bd3cd668d 2 /*
donatien 0:5c1bd3cd668d 3 Copyright (C) 2012 ARM Limited.
donatien 0:5c1bd3cd668d 4
donatien 0:5c1bd3cd668d 5 Permission is hereby granted, free of charge, to any person obtaining a copy of
donatien 0:5c1bd3cd668d 6 this software and associated documentation files (the "Software"), to deal in
donatien 0:5c1bd3cd668d 7 the Software without restriction, including without limitation the rights to
donatien 0:5c1bd3cd668d 8 use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
donatien 0:5c1bd3cd668d 9 of the Software, and to permit persons to whom the Software is furnished to do
donatien 0:5c1bd3cd668d 10 so, subject to the following conditions:
donatien 0:5c1bd3cd668d 11
donatien 0:5c1bd3cd668d 12 The above copyright notice and this permission notice shall be included in all
donatien 0:5c1bd3cd668d 13 copies or substantial portions of the Software.
donatien 0:5c1bd3cd668d 14
donatien 0:5c1bd3cd668d 15 THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
donatien 0:5c1bd3cd668d 16 IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
donatien 0:5c1bd3cd668d 17 FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
donatien 0:5c1bd3cd668d 18 AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
donatien 0:5c1bd3cd668d 19 LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
donatien 0:5c1bd3cd668d 20 OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
donatien 0:5c1bd3cd668d 21 SOFTWARE.
donatien 0:5c1bd3cd668d 22 */
donatien 0:5c1bd3cd668d 23
donatien 0:5c1bd3cd668d 24 #define __DEBUG__ 4 //Maximum verbosity
donatien 0:5c1bd3cd668d 25 #ifndef __MODULE__
donatien 0:5c1bd3cd668d 26 #define __MODULE__ "net_3g_websockets_test.cpp"
donatien 0:5c1bd3cd668d 27 #endif
donatien 0:5c1bd3cd668d 28
donatien 0:5c1bd3cd668d 29 #include "core/fwk.h"
donatien 0:5c1bd3cd668d 30 #include "mbed.h"
donatien 0:5c1bd3cd668d 31
donatien 0:5c1bd3cd668d 32 #include "rtos.h"
donatien 0:5c1bd3cd668d 33
donatien 0:5c1bd3cd668d 34 #include "if/VodafoneK3770.h"
donatien 0:5c1bd3cd668d 35 #include "Websocket.h"
donatien 0:5c1bd3cd668d 36
donatien 0:5c1bd3cd668d 37 #include "ADXL345.h"
donatien 0:5c1bd3cd668d 38
donatien 0:5c1bd3cd668d 39 DigitalOut led1(LED1);
donatien 0:5c1bd3cd668d 40 DigitalOut led2(LED2);
donatien 0:5c1bd3cd668d 41 DigitalOut led3(LED3);
donatien 0:5c1bd3cd668d 42 DigitalOut led4(LED4);
donatien 0:5c1bd3cd668d 43 void notify(bool a, bool b, bool c)
donatien 0:5c1bd3cd668d 44 {
donatien 0:5c1bd3cd668d 45 led1 = a;
donatien 0:5c1bd3cd668d 46 led2 = b;
donatien 0:5c1bd3cd668d 47 led3 = c;
donatien 0:5c1bd3cd668d 48 }
donatien 0:5c1bd3cd668d 49
donatien 0:5c1bd3cd668d 50 extern "C" void HardFault_Handler()
donatien 0:5c1bd3cd668d 51 {
donatien 0:5c1bd3cd668d 52 error("Hard Fault!\n");
donatien 0:5c1bd3cd668d 53 }
donatien 0:5c1bd3cd668d 54
donatien 0:5c1bd3cd668d 55 void test(void const*)
donatien 0:5c1bd3cd668d 56 {
donatien 0:5c1bd3cd668d 57 VodafoneK3770 threeg;
donatien 0:5c1bd3cd668d 58 Websocket ws("ws://sockets.mbed.org:443/ws/sensors/wo");
donatien 0:5c1bd3cd668d 59 const char* ws_channel = "3g_acc";
donatien 0:5c1bd3cd668d 60
donatien 0:5c1bd3cd668d 61 ADXL345 accelerometer(p5, p6, p7, p8);
donatien 0:5c1bd3cd668d 62
donatien 0:5c1bd3cd668d 63 int readings[3] = { 0, 0, 0 };
donatien 0:5c1bd3cd668d 64 char json_str[100];
donatien 0:5c1bd3cd668d 65
donatien 0:5c1bd3cd668d 66 //Go into standby mode to configure the device.
donatien 0:5c1bd3cd668d 67 accelerometer.setPowerControl(0x00);
donatien 0:5c1bd3cd668d 68 accelerometer.setDataFormatControl(0x0B);
donatien 0:5c1bd3cd668d 69 accelerometer.setDataRate(ADXL345_3200HZ);
donatien 0:5c1bd3cd668d 70 accelerometer.setPowerControl(0x08);
donatien 0:5c1bd3cd668d 71
donatien 0:5c1bd3cd668d 72 DBG("Hello!");
donatien 0:5c1bd3cd668d 73
donatien 0:5c1bd3cd668d 74 do
donatien 0:5c1bd3cd668d 75 {
donatien 0:5c1bd3cd668d 76 notify(0, 1, 1);
donatien 0:5c1bd3cd668d 77 int ret = threeg.connect("pp.vodafone.co.uk");
donatien 0:5c1bd3cd668d 78 notify(0, 1, 0);
donatien 0:5c1bd3cd668d 79 if (ret == 0)
donatien 0:5c1bd3cd668d 80 {
donatien 0:5c1bd3cd668d 81 int ws_errors = 0;
donatien 0:5c1bd3cd668d 82 while (ws_errors < 100)
donatien 0:5c1bd3cd668d 83 {
donatien 0:5c1bd3cd668d 84 DBG("Connecting WS");
donatien 0:5c1bd3cd668d 85 if (ws.connect())
donatien 0:5c1bd3cd668d 86 {
donatien 0:5c1bd3cd668d 87 // DBG("streaming data on: \"%s\"", ws_channel);
donatien 0:5c1bd3cd668d 88 notify(0, 0, 1);
donatien 0:5c1bd3cd668d 89
donatien 0:5c1bd3cd668d 90 while (ws.connected())
donatien 0:5c1bd3cd668d 91 {
donatien 0:5c1bd3cd668d 92 //we read accelerometers values
donatien 0:5c1bd3cd668d 93 accelerometer.getOutput(readings);
donatien 0:5c1bd3cd668d 94 sprintf(json_str,
donatien 0:5c1bd3cd668d 95 "{\"id\":\"%s\",\"ax\":\"%d\",\"ay\":\"%d\",\"az\":\"%d\"}",
donatien 0:5c1bd3cd668d 96 ws_channel, (int16_t) readings[0], (int16_t) readings[1],
donatien 0:5c1bd3cd668d 97 (int16_t) readings[2]);
donatien 0:5c1bd3cd668d 98 DBG("Sending: %s", json_str);
donatien 0:5c1bd3cd668d 99 ws.send(json_str);
donatien 0:5c1bd3cd668d 100 led3 = !led3;
donatien 0:5c1bd3cd668d 101
donatien 0:5c1bd3cd668d 102 Thread::wait(300);
donatien 0:5c1bd3cd668d 103 }DBG("Disconnected");
donatien 0:5c1bd3cd668d 104 ws.close();
donatien 0:5c1bd3cd668d 105 ws_errors++;
donatien 0:5c1bd3cd668d 106 }
donatien 0:5c1bd3cd668d 107 else
donatien 0:5c1bd3cd668d 108 {
donatien 0:5c1bd3cd668d 109 WARN("Connection error, reset connection");
donatien 0:5c1bd3cd668d 110 break;
donatien 0:5c1bd3cd668d 111 }WARN("%d errors", ws_errors);
donatien 0:5c1bd3cd668d 112 Thread::wait(100); //Wait a bit before trying to reconnect
donatien 0:5c1bd3cd668d 113 }
donatien 0:5c1bd3cd668d 114 threeg.disconnect();
donatien 0:5c1bd3cd668d 115 }
donatien 0:5c1bd3cd668d 116 DBG("The mbed will reset in 1s");
donatien 0:5c1bd3cd668d 117 Thread::wait(1000);
donatien 0:5c1bd3cd668d 118 DBG("Reset");
donatien 0:5c1bd3cd668d 119 mbed_interface_reset(); //this is a major kludge because LwIP does NOT cleanup its threads when PPP is disconnected, so we need to start over
donatien 0:5c1bd3cd668d 120
donatien 0:5c1bd3cd668d 121 } while (1);
donatien 0:5c1bd3cd668d 122 while (1)
donatien 0:5c1bd3cd668d 123 {
donatien 0:5c1bd3cd668d 124 Thread::wait(100);
donatien 0:5c1bd3cd668d 125 }
donatien 0:5c1bd3cd668d 126 }
donatien 0:5c1bd3cd668d 127
donatien 0:5c1bd3cd668d 128 void keepAlive(void const*)
donatien 0:5c1bd3cd668d 129 {
donatien 0:5c1bd3cd668d 130 while (1)
donatien 0:5c1bd3cd668d 131 {
donatien 0:5c1bd3cd668d 132 led1 = !led1;
donatien 0:5c1bd3cd668d 133 Thread::wait(500);
donatien 0:5c1bd3cd668d 134 }
donatien 0:5c1bd3cd668d 135 }
donatien 0:5c1bd3cd668d 136
donatien 0:5c1bd3cd668d 137 void tick()
donatien 0:5c1bd3cd668d 138 {
donatien 0:5c1bd3cd668d 139 led4 = !led4;
donatien 0:5c1bd3cd668d 140 }
donatien 0:5c1bd3cd668d 141
donatien 0:5c1bd3cd668d 142 int main()
donatien 0:5c1bd3cd668d 143 {
donatien 0:5c1bd3cd668d 144 Ticker t;
donatien 0:5c1bd3cd668d 145 t.attach(tick, 1);
donatien 0:5c1bd3cd668d 146 DBG_INIT();
donatien 0:5c1bd3cd668d 147 notify(1, 0, 0);
donatien 0:5c1bd3cd668d 148
donatien 0:5c1bd3cd668d 149 Thread testTask(test, NULL, osPriorityNormal, 1500 * 4);
donatien 0:5c1bd3cd668d 150 keepAlive(NULL);
donatien 0:5c1bd3cd668d 151
donatien 0:5c1bd3cd668d 152 return 0;
donatien 0:5c1bd3cd668d 153 }