User | Revision | Line number | New 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
|
}
|