Skip to content

Commit 3445bdf

Browse files
committed
Moved PDP Action URC out of base class
Resolves #3
1 parent a044964 commit 3445bdf

File tree

4 files changed

+50
-41
lines changed

4 files changed

+50
-41
lines changed

src/sfe_sara_r5.cpp

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,10 @@
11
#include "sfe_sara_r5.h"
22

3+
SARA_R5::SARA_R5()
4+
{
5+
addURCHandler(UBX_CELL_MESSAGE_PDP_ACTION_URC, [this](const char* event){return this->urcHandlerPDPAction(event);});
6+
}
7+
38
UBX_CELL_error_t SARA_R5::setUtimeMode(UBX_CELL_utime_mode_t mode, UBX_CELL_utime_sensor_t sensor)
49
{
510
UBX_CELL_error_t err;
@@ -358,3 +363,41 @@ UBX_CELL_error_t SARA_R5::getNetworkAssignedIPAddress(int profile, IPAddress *ad
358363

359364
return err;
360365
}
366+
367+
bool SARA_R5::urcHandlerPDPAction(const char* event)
368+
{
369+
// URC: +UUPSDA (Packet Switched Data Action)
370+
int result;
371+
IPAddress remoteIP = {0, 0, 0, 0};
372+
int scanNum;
373+
int remoteIPstore[4];
374+
375+
char *searchPtr = strstr(event, UBX_CELL_MESSAGE_PDP_ACTION_URC);
376+
if (searchPtr != nullptr)
377+
{
378+
searchPtr += strlen(UBX_CELL_MESSAGE_PDP_ACTION_URC); // Move searchPtr to first character - probably a space
379+
while (*searchPtr == ' ') searchPtr++; // skip spaces
380+
scanNum = sscanf(searchPtr, "%d,\"%d.%d.%d.%d\"",
381+
&result, &remoteIPstore[0], &remoteIPstore[1], &remoteIPstore[2], &remoteIPstore[3]);
382+
383+
if (scanNum == 5)
384+
{
385+
if (_printDebug == true)
386+
_debugPort->println(F("processReadEvent: packet switched data action"));
387+
388+
for (int i = 0; i <= 3; i++)
389+
{
390+
remoteIP[i] = (uint8_t)remoteIPstore[i];
391+
}
392+
393+
if (_psdActionRequestCallback != nullptr)
394+
{
395+
_psdActionRequestCallback(result, remoteIP);
396+
}
397+
398+
return true;
399+
}
400+
}
401+
402+
return false;
403+
}

src/sfe_sara_r5.h

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,14 @@ const char* const UBX_CELL_GNSS_REQUEST_TIME = "+UTIME"; // Ask for tim
1010
const char* const UBX_CELL_GNSS_TIME_INDICATION = "+UTIMEIND"; // Time information request status unsolicited indication
1111
const char* const UBX_CELL_GNSS_TIME_CONFIGURATION = "+UTIMECFG"; // Sets time configuration
1212

13+
const char* const UBX_CELL_MESSAGE_PDP_ACTION_URC = "+UUPSDA:";
14+
1315
// Base SARA-R5 class
1416
class SARA_R5: public UBX_CELL
1517
{
1618
public:
19+
SARA_R5();
20+
1721
UBX_CELL_error_t setUtimeMode(UBX_CELL_utime_mode_t mode = UBX_CELL_UTIME_MODE_PPS, UBX_CELL_utime_sensor_t sensor = UBX_CELL_UTIME_SENSOR_GNSS_LTE); // Time mode, source etc. (+UTIME)
1822
UBX_CELL_error_t getUtimeMode(UBX_CELL_utime_mode_t *mode, UBX_CELL_utime_sensor_t *sensor);
1923
UBX_CELL_error_t setUtimeIndication(UBX_CELL_utime_urc_configuration_t config = UBX_CELL_UTIME_URC_CONFIGURATION_ENABLED); // +UTIMEIND
@@ -29,6 +33,9 @@ class SARA_R5: public UBX_CELL
2933
UBX_CELL_error_t setPDPconfiguration(int profile, UBX_CELL_pdp_configuration_parameter_t parameter, IPAddress value); // Set parameters in the chosen PSD profile
3034
UBX_CELL_error_t performPDPaction(int profile, UBX_CELL_pdp_actions_t action); // Performs the requested action for the specified PSD profile: reset, store, load, activate, deactivate
3135
UBX_CELL_error_t getNetworkAssignedIPAddress(int profile, IPAddress *address); // Get the dynamic IP address assigned during PDP context activation
36+
37+
protected:
38+
bool urcHandlerPDPAction(const char* event);
3239
};
3340

3441
class SARA_R500S: public SARA_R5

src/sfe_ublox_cellular.cpp

Lines changed: 0 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,6 @@ UBX_CELL::UBX_CELL(int powerPin, int resetPin, uint8_t maxInitTries)
6161
addURCHandler(UBX_CELL_CLOSE_SOCKET_URC, [this](const char* event){return this->urcHandlerCloseSocket(event);});
6262
addURCHandler(UBX_CELL_GNSS_REQUEST_LOCATION_URC, [this](const char* event){return this->urcHandlerGNSSRequestLocation(event);});
6363
addURCHandler(UBX_CELL_SIM_STATE_URC, [this](const char* event){return this->urcHandlerSIMState(event);});
64-
addURCHandler(UBX_CELL_MESSAGE_PDP_ACTION_URC, [this](const char* event){return this->urcHandlerPDPAction(event);});
6564
addURCHandler(UBX_CELL_HTTP_COMMAND_URC, [this](const char* event){return this->urcHandlerHTTPCommand(event);});
6665
addURCHandler(UBX_CELL_MQTT_COMMAND_URC, [this](const char* event){return this->urcHandlerMQTTCommand(event);});
6766
addURCHandler(UBX_CELL_PING_COMMAND_URC, [this](const char* event){return this->urcHandlerPingCommand(event);});
@@ -572,44 +571,6 @@ bool UBX_CELL::urcHandlerSIMState(const char* event)
572571
return false;
573572
}
574573

575-
bool UBX_CELL::urcHandlerPDPAction(const char* event)
576-
{
577-
// URC: +UUPSDA (Packet Switched Data Action)
578-
int result;
579-
IPAddress remoteIP = {0, 0, 0, 0};
580-
int scanNum;
581-
int remoteIPstore[4];
582-
583-
char *searchPtr = strstr(event, UBX_CELL_MESSAGE_PDP_ACTION_URC);
584-
if (searchPtr != nullptr)
585-
{
586-
searchPtr += strlen(UBX_CELL_MESSAGE_PDP_ACTION_URC); // Move searchPtr to first character - probably a space
587-
while (*searchPtr == ' ') searchPtr++; // skip spaces
588-
scanNum = sscanf(searchPtr, "%d,\"%d.%d.%d.%d\"",
589-
&result, &remoteIPstore[0], &remoteIPstore[1], &remoteIPstore[2], &remoteIPstore[3]);
590-
591-
if (scanNum == 5)
592-
{
593-
if (_printDebug == true)
594-
_debugPort->println(F("processReadEvent: packet switched data action"));
595-
596-
for (int i = 0; i <= 3; i++)
597-
{
598-
remoteIP[i] = (uint8_t)remoteIPstore[i];
599-
}
600-
601-
if (_psdActionRequestCallback != nullptr)
602-
{
603-
_psdActionRequestCallback(result, remoteIP);
604-
}
605-
606-
return true;
607-
}
608-
}
609-
610-
return false;
611-
}
612-
613574
bool UBX_CELL::urcHandlerHTTPCommand(const char* event)
614575
{
615576
// URC: +UUHTTPCR (HTTP Command Result)

src/sfe_ublox_cellular.h

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -193,7 +193,6 @@ const char* const UBX_CELL_LISTEN_SOCKET_URC = "+UUSOLI:";
193193
const char* const UBX_CELL_CLOSE_SOCKET_URC = "+UUSOCL:";
194194
const char* const UBX_CELL_GNSS_REQUEST_LOCATION_URC = "+UULOC:";
195195
const char* const UBX_CELL_SIM_STATE_URC = "+UUSIMSTAT:";
196-
const char* const UBX_CELL_MESSAGE_PDP_ACTION_URC = "+UUPSDA:";
197196
const char* const UBX_CELL_HTTP_COMMAND_URC = "+UUHTTPCR:";
198197
const char* const UBX_CELL_MQTT_COMMAND_URC = "+UUMQTTC:";
199198
const char* const UBX_CELL_PING_COMMAND_URC = "+UUPING:";
@@ -1116,7 +1115,6 @@ class UBX_CELL : public Print
11161115
bool urcHandlerCloseSocket(const char* event);
11171116
bool urcHandlerGNSSRequestLocation(const char* event);
11181117
bool urcHandlerSIMState(const char* event);
1119-
bool urcHandlerPDPAction(const char* event);
11201118
bool urcHandlerHTTPCommand(const char* event);
11211119
bool urcHandlerMQTTCommand(const char* event);
11221120
bool urcHandlerPingCommand(const char* event);

0 commit comments

Comments
 (0)