Skip to content

Commit 10c22bb

Browse files
committed
added Sensuino open.sen.se library
1 parent 99c11c3 commit 10c22bb

File tree

12 files changed

+1231
-0
lines changed

12 files changed

+1231
-0
lines changed

extra-libraries/Sensuino/Sensuino.cpp

+117
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,117 @@
1+
/*Copyright (c) 2011, o-labs (o-labs.net)
2+
All rights reserved.
3+
4+
Redistribution and use in source and binary forms, with or without
5+
modification, are permitted provided that the following conditions are met:
6+
* Redistributions of source code must retain the above copyright
7+
notice, this list of conditions and the following disclaimer.
8+
* Redistributions in binary form must reproduce the above copyright
9+
notice, this list of conditions and the following disclaimer in the
10+
documentation and/or other materials provided with the distribution.
11+
* Neither the name of the company nor the
12+
names of its contributors may be used to endorse or promote products
13+
derived from this software without specific prior written permission.
14+
15+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18+
DISCLAIMED. IN NO EVENT SHALL o-labs BE LIABLE FOR ANY
19+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/
25+
26+
#include "Sensuino.h"
27+
28+
char _event_id[16] = "-2";
29+
30+
boolean Sensuino::parseResponse(char* feed_id, char* value) {
31+
return true;
32+
}
33+
34+
boolean Sensuino::parseLongPollResponse(NetworkHAL *client, boolean saveEventId) {
35+
char readChar;
36+
byte i = 0;
37+
38+
client->find("HTTP/1.1 ");
39+
40+
char c = client->read();
41+
42+
//parse http code: 200
43+
if(c != '2') {
44+
while(c != 0) {
45+
c = client->read();
46+
}
47+
48+
client->disconnect();
49+
return false;
50+
}
51+
52+
//strip headers
53+
client->find("\r\n\r\n");
54+
client->find("\"");
55+
56+
i = 0;
57+
58+
if(saveEventId)
59+
memset(_event_id, '\0', 16);
60+
while((readChar = client->read()) != '"') {
61+
if(saveEventId)
62+
_event_id[i] = readChar;
63+
i++;
64+
}
65+
66+
client->find("\"");
67+
68+
memset(rxBuffer, '\0', RX_BUFFER_SIZE);
69+
i=0;
70+
while((readChar = client->read()) != '"') {
71+
rxBuffer[i] = readChar;
72+
i++;
73+
}
74+
75+
client->find("\"");
76+
client->find("\"");
77+
client->skipChar(2);
78+
79+
char buf[16];
80+
memset(buf, '\0', 16);
81+
i=0;
82+
while((readChar = client->read()) != ',') {
83+
buf[i] = readChar;
84+
i++;
85+
}
86+
87+
rxFeedId = atoi(buf);
88+
89+
client->disconnect();
90+
return true;
91+
92+
}
93+
94+
boolean Sensuino::longPollSense(unsigned long feed_id) {
95+
return longPollSenseImpl(feed_id, _event_id);
96+
}
97+
98+
void Sensuino::setSenseKey(char* senseKey) {
99+
for (byte b=0; b<min(strlen(senseKey),SENSE_KEY_SIZE); b++) {
100+
this->senseKey[b] = senseKey[b];
101+
}
102+
this->senseKey[min(strlen(senseKey),SENSE_KEY_SIZE)] = 0;
103+
}
104+
105+
char* Sensuino::getLastValue() {
106+
return rxBuffer;
107+
}
108+
109+
unsigned long Sensuino::getLastFeedId() {
110+
return rxFeedId;
111+
}
112+
113+
void NetworkHAL::skipChar(int count) {
114+
int i=0;
115+
for(i=0;i<count;i++)
116+
read();
117+
}

extra-libraries/Sensuino/Sensuino.h

+83
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
/*Copyright (c) 2011, o-labs (o-labs.net)
2+
All rights reserved.
3+
4+
Redistribution and use in source and binary forms, with or without
5+
modification, are permitted provided that the following conditions are met:
6+
* Redistributions of source code must retain the above copyright
7+
notice, this list of conditions and the following disclaimer.
8+
* Redistributions in binary form must reproduce the above copyright
9+
notice, this list of conditions and the following disclaimer in the
10+
documentation and/or other materials provided with the distribution.
11+
* Neither the name of the company nor the
12+
names of its contributors may be used to endorse or promote products
13+
derived from this software without specific prior written permission.
14+
15+
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND
16+
ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
17+
WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
18+
DISCLAIMED. IN NO EVENT SHALL o-labs BE LIABLE FOR ANY
19+
DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
20+
(INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
21+
LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
22+
ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23+
(INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
24+
SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.*/
25+
26+
#ifndef __SENSUINO_H__
27+
#define __SENSUINO_H__
28+
29+
#include "Arduino.h"
30+
31+
#define RX_BUFFER_SIZE 255
32+
#define SENSE_KEY_SIZE 25
33+
34+
#define SENSE_PROD {46,4,10,208}
35+
#define SENSE_DEV {46,4,52,140}
36+
#define SENSE_IP SENSE_PROD
37+
38+
#define PORT_TO_REACH 80
39+
40+
class SenseData {
41+
public:
42+
unsigned long feed_id;
43+
char* value;
44+
};
45+
46+
class NetworkHAL : public Stream {
47+
public:
48+
virtual boolean connect() = 0;
49+
virtual boolean connected() = 0;
50+
virtual uint8_t status() = 0;
51+
virtual void disconnect() = 0;
52+
void skipChar(int);
53+
};
54+
55+
class Sensuino {
56+
public:
57+
virtual boolean init(byte *err, ...);
58+
virtual boolean postSense(unsigned long feed_id, char* txData) = 0;
59+
virtual boolean getSense(unsigned long feed_id) = 0;
60+
virtual byte longPollCheck();
61+
62+
virtual boolean longPollSenseImpl(unsigned long feed_id, char event_id[16])=0;
63+
boolean longPollSense(unsigned long feed_id);
64+
65+
void setSenseKey(char* senseKey);
66+
char* getLastValue();
67+
unsigned long getLastFeedId();
68+
69+
private:
70+
71+
protected:
72+
char rxBuffer[RX_BUFFER_SIZE];
73+
char senseKey[SENSE_KEY_SIZE];
74+
unsigned long rxFeedId;
75+
76+
77+
78+
boolean parseResponse(char* feed_id, char* value);
79+
boolean parseLongPollResponse(NetworkHAL *, boolean saveEventId=true);
80+
};
81+
82+
#endif
83+

extra-libraries/Sensuino/Sensuino.o

3.2 KB
Binary file not shown.

0 commit comments

Comments
 (0)