@@ -215,67 +215,70 @@ void Wippersnapper::set_user_key() {
215
215
}
216
216
217
217
// Decoders //
218
+
218
219
/* ***************************************************************************/
219
220
/* !
220
- @brief Configures a pin according to a
221
+ @brief Configures an analog input pin according to a
221
222
wippersnapper_pin_v1_ConfigurePinRequest message.
222
223
@param pinMsg
223
224
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.
225
226
*/
226
227
/* ***************************************************************************/
227
- bool Wippersnapper::configurePinRequest (
228
+ bool Wippersnapper::configAnalogInPinReq (
228
229
wippersnapper_pin_v1_ConfigurePinRequest *pinMsg) {
229
- WS_DEBUG_PRINTLN (" configurePinRequest" );
230
-
231
230
bool is_success = true ;
231
+
232
+ #if defined(ARDUINO_ARCH_RP2040)
232
233
char *pinName = pinMsg->pin_name + 1 ;
233
234
int pin = atoi (pinName);
235
+ #else
236
+ char *pinName = pinMsg->pin_name + 1 ;
237
+ int pin = atoi (pinName);
238
+ #endif
234
239
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 ;
250
251
}
252
+ return is_success;
253
+ }
251
254
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);
276
280
} 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" );
279
282
}
280
283
281
284
return is_success;
@@ -307,9 +310,13 @@ bool cbDecodePinConfigMsg(pb_istream_t *stream, const pb_field_t *field,
307
310
is_success = false ;
308
311
}
309
312
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!" );
313
320
is_success = false ;
314
321
}
315
322
@@ -2390,7 +2397,7 @@ ws_status_t Wippersnapper::run() {
2390
2397
WS.feedWDT ();
2391
2398
2392
2399
// Process analog inputs
2393
- WS._analogIO ->processAnalogInputs ();
2400
+ WS._analogIO ->update ();
2394
2401
WS.feedWDT ();
2395
2402
2396
2403
// Process I2C sensor events
0 commit comments