@@ -18,6 +18,7 @@ AdafruitIO_Feed::AdafruitIO_Feed(AdafruitIO *io, const char *n)
18
18
name = n;
19
19
_sub = 0 ;
20
20
_pub = 0 ;
21
+ _dataCallback = 0 ;
21
22
22
23
_init ();
23
24
}
@@ -28,6 +29,7 @@ AdafruitIO_Feed::AdafruitIO_Feed(AdafruitIO *io, const __FlashStringHelper *n)
28
29
name = (const char *)n;
29
30
_sub = 0 ;
30
31
_pub = 0 ;
32
+ _dataCallback = 0 ;
31
33
32
34
_init ();
33
35
}
@@ -40,8 +42,8 @@ AdafruitIO_Feed::~AdafruitIO_Feed()
40
42
if (_pub)
41
43
delete _pub;
42
44
43
- if (_data )
44
- delete _data ;
45
+ if (data )
46
+ delete data ;
45
47
46
48
if (_topic)
47
49
free (_topic);
@@ -50,74 +52,74 @@ AdafruitIO_Feed::~AdafruitIO_Feed()
50
52
void AdafruitIO_Feed::onMessage (AdafruitIODataCallbackType cb)
51
53
{
52
54
_dataCallback = cb;
53
- _io->_mqtt ->subscribe (_sub);
54
-
55
- _sub->setCallback (this , &AdafruitIO_Feed::subCallback);
56
55
}
57
56
58
57
bool AdafruitIO_Feed::save (char *value, double lat, double lon, double ele)
59
58
{
60
- _data ->setValue (value, lat, lon, ele);
61
- return _pub->publish (_data ->toCSV ());
59
+ data ->setValue (value, lat, lon, ele);
60
+ return _pub->publish (data ->toCSV ());
62
61
}
63
62
64
63
bool AdafruitIO_Feed::save (bool value, double lat, double lon, double ele)
65
64
{
66
- _data ->setValue (value, lat, lon, ele);
67
- return _pub->publish (_data ->toCSV ());
65
+ data ->setValue (value, lat, lon, ele);
66
+ return _pub->publish (data ->toCSV ());
68
67
}
69
68
70
69
bool AdafruitIO_Feed::save (String value, double lat, double lon, double ele)
71
70
{
72
- _data ->setValue (value, lat, lon, ele);
73
- return _pub->publish (_data ->toCSV ());
71
+ data ->setValue (value, lat, lon, ele);
72
+ return _pub->publish (data ->toCSV ());
74
73
}
75
74
76
75
bool AdafruitIO_Feed::save (int value, double lat, double lon, double ele)
77
76
{
78
- _data ->setValue (value, lat, lon, ele);
79
- return _pub->publish (_data ->toCSV ());
77
+ data ->setValue (value, lat, lon, ele);
78
+ return _pub->publish (data ->toCSV ());
80
79
}
81
80
82
81
bool AdafruitIO_Feed::save (unsigned int value, double lat, double lon, double ele)
83
82
{
84
- _data ->setValue (value, lat, lon, ele);
85
- return _pub->publish (_data ->toCSV ());
83
+ data ->setValue (value, lat, lon, ele);
84
+ return _pub->publish (data ->toCSV ());
86
85
}
87
86
88
87
bool AdafruitIO_Feed::save (long value, double lat, double lon, double ele)
89
88
{
90
- _data ->setValue (value, lat, lon, ele);
91
- return _pub->publish (_data ->toCSV ());
89
+ data ->setValue (value, lat, lon, ele);
90
+ return _pub->publish (data ->toCSV ());
92
91
}
93
92
94
93
bool AdafruitIO_Feed::save (unsigned long value, double lat, double lon, double ele)
95
94
{
96
- _data ->setValue (value, lat, lon, ele);
97
- return _pub->publish (_data ->toCSV ());
95
+ data ->setValue (value, lat, lon, ele);
96
+ return _pub->publish (data ->toCSV ());
98
97
}
99
98
100
99
bool AdafruitIO_Feed::save (float value, double lat, double lon, double ele, int precision)
101
100
{
102
- _data ->setValue (value, lat, lon, ele, precision);
103
- return _pub->publish (_data ->toCSV ());
101
+ data ->setValue (value, lat, lon, ele, precision);
102
+ return _pub->publish (data ->toCSV ());
104
103
}
105
104
106
105
bool AdafruitIO_Feed::save (double value, double lat, double lon, double ele, int precision)
107
106
{
108
- _data ->setValue (value, lat, lon, ele, precision);
109
- return _pub->publish (_data ->toCSV ());
107
+ data ->setValue (value, lat, lon, ele, precision);
108
+ return _pub->publish (data ->toCSV ());
110
109
}
111
110
112
111
void AdafruitIO_Feed::setLocation (double lat, double lon, double ele)
113
112
{
114
- _data ->setLocation (lat, lon, ele);
113
+ data ->setLocation (lat, lon, ele);
115
114
}
116
115
117
116
void AdafruitIO_Feed::subCallback (char *val, uint16_t len)
118
117
{
119
- _data->setCSV (val);
120
- _dataCallback (_data);
118
+ data->setCSV (val);
119
+
120
+ // call callback with data
121
+ if (_dataCallback)
122
+ _dataCallback (data);
121
123
}
122
124
123
125
void AdafruitIO_Feed::_init ()
@@ -127,7 +129,7 @@ void AdafruitIO_Feed::_init()
127
129
_topic = (char *) malloc (sizeof (char ) * (strlen (_io->_username ) + strlen (name) + 8 )); // 8 extra chars for /f/, /csv & null termination
128
130
129
131
// init feed data
130
- _data = new AdafruitIO_Data (this );
132
+ data = new AdafruitIO_Data (this );
131
133
132
134
if (_topic) {
133
135
@@ -140,14 +142,17 @@ void AdafruitIO_Feed::_init()
140
142
// setup subscription
141
143
_sub = new Adafruit_MQTT_Subscribe (_io->_mqtt , _topic);
142
144
_pub = new Adafruit_MQTT_Publish (_io->_mqtt , _topic);
145
+ _io->_mqtt ->subscribe (_sub);
146
+
147
+ _sub->setCallback (this , &AdafruitIO_Feed::subCallback);
143
148
144
149
} else {
145
150
146
151
// malloc failed
147
152
_topic = 0 ;
148
153
_sub = 0 ;
149
154
_pub = 0 ;
150
- _data = 0 ;
155
+ data = 0 ;
151
156
152
157
}
153
158
0 commit comments