@@ -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
0 commit comments