Skip to content

Commit 480a034

Browse files
authored
Merge pull request #407 from brentru/fix-analog-in
Fix and refactor analog input class
2 parents 2001af0 + d7b47ac commit 480a034

File tree

5 files changed

+210
-268
lines changed

5 files changed

+210
-268
lines changed

library.properties

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
name=Adafruit WipperSnapper
2-
version=1.0.0-beta.59
2+
version=1.0.0-beta.60
33
author=Adafruit
44
maintainer=Adafruit <adafruitio@adafruit.com>
55
sentence=Arduino client for Adafruit.io WipperSnapper

src/Wippersnapper.cpp

Lines changed: 57 additions & 50 deletions
Original file line numberDiff line numberDiff line change
@@ -215,67 +215,70 @@ void Wippersnapper::set_user_key() {
215215
}
216216

217217
// Decoders //
218+
218219
/****************************************************************************/
219220
/*!
220-
@brief Configures a pin according to a
221+
@brief Configures an analog input pin according to a
221222
wippersnapper_pin_v1_ConfigurePinRequest message.
222223
@param pinMsg
223224
Pointer to a wippersnapper_pin_v1_ConfigurePinRequest message.
224-
@returns True if pin configured successfully, False otherwise.
225+
@returns True if analog pin configured successfully, False otherwise.
225226
*/
226227
/****************************************************************************/
227-
bool Wippersnapper::configurePinRequest(
228+
bool Wippersnapper::configAnalogInPinReq(
228229
wippersnapper_pin_v1_ConfigurePinRequest *pinMsg) {
229-
WS_DEBUG_PRINTLN("configurePinRequest");
230-
231230
bool is_success = true;
231+
232+
#if defined(ARDUINO_ARCH_RP2040)
232233
char *pinName = pinMsg->pin_name + 1;
233234
int pin = atoi(pinName);
235+
#else
236+
char *pinName = pinMsg->pin_name + 1;
237+
int pin = atoi(pinName);
238+
#endif
234239

235-
// Decode pin mode
236-
if (pinMsg->mode == wippersnapper_pin_v1_Mode_MODE_DIGITAL) {
237-
if (pinMsg->request_type ==
238-
wippersnapper_pin_v1_ConfigurePinRequest_RequestType_REQUEST_TYPE_CREATE) {
239-
// Initialize GPIO pin
240-
WS._digitalGPIO->initDigitalPin(pinMsg->direction, pin, pinMsg->period,
241-
pinMsg->pull);
242-
} else if (
243-
pinMsg->request_type ==
244-
wippersnapper_pin_v1_ConfigurePinRequest_RequestType_REQUEST_TYPE_DELETE) {
245-
// Delete digital GPIO pin
246-
WS._digitalGPIO->deinitDigitalPin(pinMsg->direction, pin);
247-
} else {
248-
WS_DEBUG_PRINTLN("ERROR: Could not decode digital pin request type");
249-
}
240+
if (pinMsg->request_type ==
241+
wippersnapper_pin_v1_ConfigurePinRequest_RequestType_REQUEST_TYPE_CREATE) {
242+
WS._analogIO->initAnalogInputPin(pin, pinMsg->period, pinMsg->pull,
243+
pinMsg->analog_read_mode);
244+
} else if (
245+
pinMsg->request_type ==
246+
wippersnapper_pin_v1_ConfigurePinRequest_RequestType_REQUEST_TYPE_DELETE) {
247+
WS._analogIO->deinitAnalogPin(pinMsg->direction, pin);
248+
} else {
249+
WS_DEBUG_PRINTLN("ERROR: Could not decode analog pin request!");
250+
is_success = false;
250251
}
252+
return is_success;
253+
}
251254

252-
else if (pinMsg->mode == wippersnapper_pin_v1_Mode_MODE_ANALOG) {
253-
if (pinMsg->request_type ==
254-
wippersnapper_pin_v1_ConfigurePinRequest_RequestType_REQUEST_TYPE_CREATE) {
255-
// Initialize analog io pin
256-
if (pinMsg->direction ==
257-
wippersnapper_pin_v1_ConfigurePinRequest_Direction_DIRECTION_INPUT) {
258-
WS._analogIO->initAnalogInputPin(pin, pinMsg->period, pinMsg->pull,
259-
pinMsg->analog_read_mode);
260-
} else if (
261-
pinMsg->direction ==
262-
wippersnapper_pin_v1_ConfigurePinRequest_Direction_DIRECTION_OUTPUT) {
263-
WS._analogIO->initAnalogOutputPin(pin);
264-
} else {
265-
WS_DEBUG_PRINTLN("ERROR: Unable to decode analog pin direction.")
266-
is_success = false;
267-
}
268-
} else if (
269-
pinMsg->request_type ==
270-
wippersnapper_pin_v1_ConfigurePinRequest_RequestType_REQUEST_TYPE_DELETE) {
271-
// Delete analog io pin
272-
WS._analogIO->deinitAnalogPin(pinMsg->direction, pin);
273-
} else {
274-
WS_DEBUG_PRINTLN("ERROR: Could not decode digital pin request type");
275-
}
255+
/****************************************************************************/
256+
/*!
257+
@brief Configures a pin according to a
258+
wippersnapper_pin_v1_ConfigurePinRequest message.
259+
@param pinMsg
260+
Pointer to a wippersnapper_pin_v1_ConfigurePinRequest message.
261+
@returns True if pin configured successfully, False otherwise.
262+
*/
263+
/****************************************************************************/
264+
bool Wippersnapper::configureDigitalPinReq(
265+
wippersnapper_pin_v1_ConfigurePinRequest *pinMsg) {
266+
bool is_success = true;
267+
char *pinName = pinMsg->pin_name + 1;
268+
int pin = atoi(pinName);
269+
270+
if (pinMsg->request_type ==
271+
wippersnapper_pin_v1_ConfigurePinRequest_RequestType_REQUEST_TYPE_CREATE) {
272+
// Initialize GPIO pin
273+
WS._digitalGPIO->initDigitalPin(pinMsg->direction, pin, pinMsg->period,
274+
pinMsg->pull);
275+
} else if (
276+
pinMsg->request_type ==
277+
wippersnapper_pin_v1_ConfigurePinRequest_RequestType_REQUEST_TYPE_DELETE) {
278+
// Delete digital GPIO pin
279+
WS._digitalGPIO->deinitDigitalPin(pinMsg->direction, pin);
276280
} else {
277-
WS_DEBUG_PRINTLN("ERROR: Could not decode pin mode")
278-
is_success = false;
281+
WS_DEBUG_PRINTLN("ERROR: Could not decode digital pin request type");
279282
}
280283

281284
return is_success;
@@ -307,9 +310,13 @@ bool cbDecodePinConfigMsg(pb_istream_t *stream, const pb_field_t *field,
307310
is_success = false;
308311
}
309312

310-
// Pass ConfigurePinRequest message
311-
if (!WS.configurePinRequest(&pinReqMsg)) {
312-
WS_DEBUG_PRINTLN("Unable to configure pin");
313+
// Decode pin configuration request msg
314+
if (pinReqMsg.mode == wippersnapper_pin_v1_Mode_MODE_DIGITAL) {
315+
is_success = WS.configureDigitalPinReq(&pinReqMsg);
316+
} else if (pinReqMsg.mode == wippersnapper_pin_v1_Mode_MODE_ANALOG) {
317+
is_success = WS.configAnalogInPinReq(&pinReqMsg);
318+
} else {
319+
WS_DEBUG_PRINTLN("ERROR: Pin mode invalid!");
313320
is_success = false;
314321
}
315322

@@ -2390,7 +2397,7 @@ ws_status_t Wippersnapper::run() {
23902397
WS.feedWDT();
23912398

23922399
// Process analog inputs
2393-
WS._analogIO->processAnalogInputs();
2400+
WS._analogIO->update();
23942401
WS.feedWDT();
23952402

23962403
// Process I2C sensor events

src/Wippersnapper.h

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -90,7 +90,7 @@
9090
#endif
9191

9292
#define WS_VERSION \
93-
"1.0.0-beta.59" ///< WipperSnapper app. version (semver-formatted)
93+
"1.0.0-beta.60" ///< WipperSnapper app. version (semver-formatted)
9494

9595
// Reserved Adafruit IO MQTT topics
9696
#define TOPIC_IO_THROTTLE "/throttle" ///< Adafruit IO Throttle MQTT Topic
@@ -279,7 +279,8 @@ class Wippersnapper {
279279
uint8_t pinName, int pinVal);
280280

281281
// Pin configure message
282-
bool configurePinRequest(wippersnapper_pin_v1_ConfigurePinRequest *pinMsg);
282+
bool configureDigitalPinReq(wippersnapper_pin_v1_ConfigurePinRequest *pinMsg);
283+
bool configAnalogInPinReq(wippersnapper_pin_v1_ConfigurePinRequest *pinMsg);
283284

284285
// I2C
285286
std::vector<WipperSnapper_Component_I2C *>

0 commit comments

Comments
 (0)