diff --git a/.gitmodules b/.gitmodules
index e0495ceb1..5435915c3 100644
--- a/.gitmodules
+++ b/.gitmodules
@@ -60,11 +60,19 @@
url = https://github.com/aws/SigV4-for-AWS-IoT-embedded-sdk.git
[submodule "FreeRTOS-Plus/Source/FreeRTOS-Cellular-Interface"]
path = FreeRTOS-Plus/Source/FreeRTOS-Cellular-Interface
- url = https://github.com/ActoryOu/FreeRTOS-Cellular-Interface.git
- branch = split
+ url = https://github.com/FreeRTOS/FreeRTOS-Cellular-Interface
[submodule "FreeRTOS-Plus/ThirdParty/tinycbor"]
path = FreeRTOS-Plus/ThirdParty/tinycbor
url = https://github.com/intel/tinycbor.git
[submodule "FreeRTOS-Plus/Source/AWS/fleet-provisioning"]
path = FreeRTOS-Plus/Source/AWS/fleet-provisioning
url = https://github.com/aws/Fleet-Provisioning-for-AWS-IoT-embedded-sdk.git
+[submodule "FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96"]
+ path = FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96
+ url = https://github.com/FreeRTOS/Lab-FreeRTOS-Cellular-Interface-Reference-Quectel-BG96
+[submodule "FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802"]
+ path = FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802
+ url = https://github.com/FreeRTOS/Lab-FreeRTOS-Cellular-Interface-Reference-Sierra-Wireless-HL7802
+[submodule "FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4"]
+ path = FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4
+ url = https://github.com/FreeRTOS/Lab-FreeRTOS-Cellular-Interface-Reference-ublox-SARA-R4
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj
index f4893caa7..0ef29628c 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj
@@ -92,10 +92,10 @@
-
-
-
-
+
+
+
+
@@ -431,7 +431,7 @@
-
+
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj.filters b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj.filters
index 4dc138ee9..5cd08eb43 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj.filters
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_BG96/WIN32.vcxproj.filters
@@ -456,16 +456,16 @@
FreeRTOS+\FreeRTOS IoT Libraries\platform\cellular
-
+
Module
-
+
Module
-
+
Module
-
+
Module
@@ -871,7 +871,7 @@
FreeRTOS+\FreeRTOS IoT Libraries\platform\cellular\include\private
-
+
Module
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_HL7802/WIN32.vcxproj b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_HL7802/WIN32.vcxproj
index b75cf87a3..9102312d9 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_HL7802/WIN32.vcxproj
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_HL7802/WIN32.vcxproj
@@ -92,10 +92,10 @@
-
-
-
-
+
+
+
+
@@ -431,7 +431,7 @@
-
+
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_HL7802/WIN32.vcxproj.filters b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_HL7802/WIN32.vcxproj.filters
index 7604a5fe4..ecd954717 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_HL7802/WIN32.vcxproj.filters
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_HL7802/WIN32.vcxproj.filters
@@ -496,16 +496,16 @@
FreeRTOS+\FreeRTOS+TCP
-
+
Module
-
+
Module
-
+
Module
-
+
Module
@@ -926,7 +926,7 @@
FreeRTOS+\FreeRTOS+TCP\include
-
+
Module
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_SARA_R4/WIN32.vcxproj b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_SARA_R4/WIN32.vcxproj
index caae2fde1..25634cd0d 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_SARA_R4/WIN32.vcxproj
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_SARA_R4/WIN32.vcxproj
@@ -92,10 +92,10 @@
-
-
-
-
+
+
+
+
@@ -431,7 +431,7 @@
-
+
diff --git a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_SARA_R4/WIN32.vcxproj.filters b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_SARA_R4/WIN32.vcxproj.filters
index 25b90cd6b..2dd46fa3c 100644
--- a/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_SARA_R4/WIN32.vcxproj.filters
+++ b/FreeRTOS-Plus/Demo/FreeRTOS_Cellular_Interface_Windows_Simulator/MQTT_Mutual_Auth_Demo_with_SARA_R4/WIN32.vcxproj.filters
@@ -496,16 +496,16 @@
FreeRTOS+\FreeRTOS+TCP
-
+
Module
-
+
Module
-
+
Module
-
+
Module
@@ -926,7 +926,7 @@
FreeRTOS+\FreeRTOS+TCP\include
-
+
Module
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Interface b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Interface
index 582cc8f47..a07c8c718 160000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Interface
+++ b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Interface
@@ -1 +1 @@
-Subproject commit 582cc8f478b9fe7d37615de33e87f7ac3d396c2b
+Subproject commit a07c8c718c705cff4c420bbea6a89bcca2964159
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96 b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96
new file mode 160000
index 000000000..3be550007
--- /dev/null
+++ b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96
@@ -0,0 +1 @@
+Subproject commit 3be55000798aed415d2f39542b8f1536541a6b7a
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96.c b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96.c
deleted file mode 100644
index 87fe2a4eb..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96.c
+++ /dev/null
@@ -1,358 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-/* The config header is always included first. */
-
-
-#include
-#include "cellular_platform.h"
-#include "cellular_config.h"
-#include "cellular_config_defaults.h"
-#include "cellular_common.h"
-#include "cellular_common_portable.h"
-#include "cellular_bg96.h"
-
-/*-----------------------------------------------------------*/
-
-#define ENBABLE_MODULE_UE_RETRY_COUNT ( 3U )
-#define ENBABLE_MODULE_UE_RETRY_TIMEOUT ( 5000U )
-#define BG96_NWSCANSEQ_CMD_MAX_SIZE ( 29U ) /* The length of AT+QCFG="nwscanseq",020301,1\0. */
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t sendAtCommandWithRetryTimeout( CellularContext_t * pContext,
- const CellularAtReq_t * pAtReq );
-
-/*-----------------------------------------------------------*/
-
-static cellularModuleContext_t cellularBg96Context = { 0 };
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-const char * CellularSrcTokenErrorTable[] =
-{ "ERROR", "BUSY", "NO CARRIER", "NO ANSWER", "NO DIALTONE", "ABORTED", "+CMS ERROR", "+CME ERROR", "SEND FAIL" };
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-uint32_t CellularSrcTokenErrorTableSize = sizeof( CellularSrcTokenErrorTable ) / sizeof( char * );
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-const char * CellularSrcTokenSuccessTable[] =
-{ "OK", "CONNECT", "SEND OK", ">" };
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-uint32_t CellularSrcTokenSuccessTableSize = sizeof( CellularSrcTokenSuccessTable ) / sizeof( char * );
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-const char * CellularUrcTokenWoPrefixTable[] =
-{ "NORMAL POWER DOWN", "PSM POWER DOWN", "RDY" };
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-uint32_t CellularUrcTokenWoPrefixTableSize = sizeof( CellularUrcTokenWoPrefixTable ) / sizeof( char * );
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t sendAtCommandWithRetryTimeout( CellularContext_t * pContext,
- const CellularAtReq_t * pAtReq )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- uint8_t tryCount = 0;
-
- if( pAtReq == NULL )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- for( ; tryCount < ENBABLE_MODULE_UE_RETRY_COUNT; tryCount++ )
- {
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, *pAtReq, ENBABLE_MODULE_UE_RETRY_TIMEOUT );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- break;
- }
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static bool appendRatList( char * pRatList,
- CellularRat_t cellularRat )
-{
- bool retValue = true;
-
- /* Configure RAT Searching Sequence to default radio access technology. */
- switch( cellularRat )
- {
- case CELLULAR_RAT_CATM1:
- strcat( pRatList, "02" );
- break;
-
- case CELLULAR_RAT_NBIOT:
- strcat( pRatList, "03" );
- break;
-
- case CELLULAR_RAT_GSM:
- strcat( pRatList, "01" );
- break;
-
- default:
- /* Configure RAT Searching Sequence to automatic. */
- retValue = false;
- break;
- }
-
- return retValue;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ModuleInit( const CellularContext_t * pContext,
- void ** ppModuleContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- bool status = false;
-
- if( pContext == NULL )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ppModuleContext == NULL )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- /* Initialize the module context. */
- ( void ) memset( &cellularBg96Context, 0, sizeof( cellularModuleContext_t ) );
-
- /* Create the mutex for DNS. */
- status = PlatformMutex_Create( &cellularBg96Context.dnsQueryMutex, false );
-
- if( status == false )
- {
- cellularStatus = CELLULAR_NO_MEMORY;
- }
- else
- {
- /* Create the queue for DNS. */
- cellularBg96Context.pktDnsQueue = xQueueCreate( 1, sizeof( cellularDnsQueryResult_t ) );
-
- if( cellularBg96Context.pktDnsQueue == NULL )
- {
- PlatformMutex_Destroy( &cellularBg96Context.dnsQueryMutex );
- cellularStatus = CELLULAR_NO_MEMORY;
- }
- else
- {
- *ppModuleContext = ( void * ) &cellularBg96Context;
- }
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ModuleCleanUp( const CellularContext_t * pContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- if( pContext == NULL )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else
- {
- /* Delete DNS queue. */
- vQueueDelete( cellularBg96Context.pktDnsQueue );
-
- /* Delete the mutex for DNS. */
- PlatformMutex_Destroy( &cellularBg96Context.dnsQueryMutex );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ModuleEnableUE( CellularContext_t * pContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularAtReq_t atReqGetNoResult =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0
- };
- CellularAtReq_t atReqGetWithResult =
- {
- NULL,
- CELLULAR_AT_MULTI_WO_PREFIX,
- NULL,
- NULL,
- NULL,
- 0
- };
- char ratSelectCmd[ BG96_NWSCANSEQ_CMD_MAX_SIZE ] = "AT+QCFG=\"nwscanseq\",";
- bool retAppendRat = true;
-
- if( pContext != NULL )
- {
- /* Disable echo. */
- atReqGetWithResult.pAtCmd = "ATE0";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetWithResult );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Disable DTR function. */
- atReqGetNoResult.pAtCmd = "AT&D0";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
-
- #ifndef CELLULAR_CONFIG_DISABLE_FLOW_CONTROL
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Enable RTS/CTS hardware flow control. */
- atReqGetNoResult.pAtCmd = "AT+IFC=2,2";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
- #endif
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Setting URC output port. */
- #if defined( CELLULAR_BG96_URC_PORT_USBAT ) || defined( BG96_URC_PORT_USBAT )
- atReqGetNoResult.pAtCmd = "AT+QURCCFG=\"urcport\",\"usbat\"";
- #else
- atReqGetNoResult.pAtCmd = "AT+QURCCFG=\"urcport\",\"uart1\"";
- #endif
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Configure Band configuration to all bands. */
- atReqGetNoResult.pAtCmd = "AT+QCFG=\"band\",f,400a0e189f,a0e189f";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Configure RAT(s) to be Searched to Automatic. */
- atReqGetNoResult.pAtCmd = "AT+QCFG=\"nwscanmode\",0,1";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Configure Network Category to be Searched under LTE RAT to LTE Cat M1 and Cat NB1. */
- atReqGetNoResult.pAtCmd = "AT+QCFG=\"iotopmode\",2,1";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- retAppendRat = appendRatList( ratSelectCmd, CELLULAR_CONFIG_DEFAULT_RAT );
- configASSERT( retAppendRat == true );
-
- #ifdef CELLULAR_CONFIG_DEFAULT_RAT_2
- retAppendRat = appendRatList( ratSelectCmd, CELLULAR_CONFIG_DEFAULT_RAT_2 );
- configASSERT( retAppendRat == true );
- #endif
-
- #ifdef CELLULAR_CONFIG_DEFAULT_RAT_3
- retAppendRat = appendRatList( ratSelectCmd, CELLULAR_CONFIG_DEFAULT_RAT_3 );
- configASSERT( retAppendRat == true );
- #endif
-
- strcat( ratSelectCmd, ",1" ); /* Take effect immediately. */
- atReqGetNoResult.pAtCmd = ratSelectCmd;
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- atReqGetNoResult.pAtCmd = "AT+CFUN=1";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ModuleEnableUrc( CellularContext_t * pContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularAtReq_t atReqGetNoResult =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0
- };
-
- atReqGetNoResult.pAtCmd = "AT+COPS=3,2";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- atReqGetNoResult.pAtCmd = "AT+CREG=2";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- atReqGetNoResult.pAtCmd = "AT+CGREG=2";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- atReqGetNoResult.pAtCmd = "AT+CEREG=2";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- atReqGetNoResult.pAtCmd = "AT+CTZR=1";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96.h b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96.h
deleted file mode 100644
index bd4917ba3..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96.h
+++ /dev/null
@@ -1,106 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-#ifndef __CELLULAR_BG96_H__
-#define __CELLULAR_BG96_H__
-
-/* *INDENT-OFF* */
-#ifdef __cplusplus
- extern "C" {
-#endif
-/* *INDENT-ON* */
-
-/* AT Command timeout for PDN activation */
-#define PDN_ACTIVATION_PACKET_REQ_TIMEOUT_MS ( 150000UL )
-
-/* AT Command timeout for PDN deactivation. */
-#define PDN_DEACTIVATION_PACKET_REQ_TIMEOUT_MS ( 40000UL )
-
-/* AT Command timeout for Socket connection */
-#define SOCKET_CONNECT_PACKET_REQ_TIMEOUT_MS ( 150000UL )
-
-#define PACKET_REQ_TIMEOUT_MS ( 5000UL )
-
-/* AT Command timeout for Socket disconnection */
-#define SOCKET_DISCONNECT_PACKET_REQ_TIMEOUT_MS ( 12000UL )
-
-#define DATA_SEND_TIMEOUT_MS ( 50000UL )
-#define DATA_READ_TIMEOUT_MS ( 50000UL )
-
-/**
- * @brief DNS query result.
- */
-typedef enum cellularDnsQueryResult
-{
- CELLULAR_DNS_QUERY_SUCCESS,
- CELLULAR_DNS_QUERY_FAILED,
- CELLULAR_DNS_QUERY_MAX,
- CELLULAR_DNS_QUERY_UNKNOWN
-} cellularDnsQueryResult_t;
-
-typedef struct cellularModuleContext cellularModuleContext_t;
-
-/**
- * @brief DNS query URC callback fucntion.
- */
-typedef void ( * CellularDnsResultEventCallback_t )( cellularModuleContext_t * pModuleContext,
- char * pDnsResult,
- char * pDnsUsrData );
-
-typedef struct cellularModuleContext
-{
- /* DNS related variables. */
- PlatformMutex_t dnsQueryMutex; /* DNS query mutex to protect the following data. */
- QueueHandle_t pktDnsQueue; /* DNS queue to receive the DNS query result. */
- uint8_t dnsResultNumber; /* DNS query result number. */
- uint8_t dnsIndex; /* DNS query current index. */
- char * pDnsUsrData; /* DNS user data to store the result. */
- CellularDnsResultEventCallback_t dnsEventCallback;
- /* Forward declaration to declar the callback function prototype. */
- /* coverity[misra_c_2012_rule_1_1_violation]. */
-} cellularModuleContext_t;
-
-CellularPktStatus_t _Cellular_ParseSimstat( char * pInputStr,
- CellularSimCardState_t * pSimState );
-
-extern CellularAtParseTokenMap_t CellularUrcHandlerTable[];
-extern uint32_t CellularUrcHandlerTableSize;
-
-extern const char * CellularSrcTokenErrorTable[];
-extern uint32_t CellularSrcTokenErrorTableSize;
-
-extern const char * CellularSrcTokenSuccessTable[];
-extern uint32_t CellularSrcTokenSuccessTableSize;
-
-extern const char * CellularUrcTokenWoPrefixTable[];
-extern uint32_t CellularUrcTokenWoPrefixTableSize;
-
-/* *INDENT-OFF* */
-#ifdef __cplusplus
- }
-#endif
-/* *INDENT-ON* */
-
-#endif /* ifndef __CELLULAR_BG96_H__ */
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96_api.c b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96_api.c
deleted file mode 100644
index 57b641d8a..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96_api.c
+++ /dev/null
@@ -1,3206 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-/* Standard includes. */
-#include
-#include
-#include
-#include
-
-#include "cellular_platform.h"
-#include "cellular_config.h"
-#include "cellular_config_defaults.h"
-
-#include "cellular_types.h"
-#include "cellular_api.h"
-#include "cellular_common_api.h"
-#include "cellular_common.h"
-#include "cellular_at_core.h"
-#include "cellular_bg96.h"
-
-/*-----------------------------------------------------------*/
-
-#define CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ( 32U )
-#define CELLULAR_AT_CMD_QUERY_DNS_MAX_SIZE ( 280U )
-
-#define SIGNAL_QUALITY_POS_SYSMODE ( 1U )
-#define SIGNAL_QUALITY_POS_GSM_LTE_RSSI ( 2U )
-#define SIGNAL_QUALITY_POS_LTE_RSRP ( 3U )
-#define SIGNAL_QUALITY_POS_LTE_SINR ( 4U )
-#define SIGNAL_QUALITY_POS_LTE_RSRQ ( 5U )
-#define SIGNAL_QUALITY_SINR_MIN_VALUE ( -20 )
-#define SIGNAL_QUALITY_SINR_DIVISIBILITY_FACTOR ( 5 )
-
-#define COPS_POS_MODE ( 1U )
-#define COPS_POS_FORMAT ( 2U )
-#define COPS_POS_MCC_MNC_OPER_NAME ( 3U )
-#define COPS_POS_RAT ( 4U )
-
-/* AT command timeout for Get IP Address by Domain Name. */
-#define DNS_QUERY_TIMEOUT_MS ( 60000UL )
-
-/* Length of HPLMN including RAT. */
-#define CRSM_HPLMN_RAT_LENGTH ( 9U )
-
-/* Windows simulator implementation. */
-#if defined( _WIN32 ) || defined( _WIN64 )
- #define strtok_r strtok_s
-#endif
-
-#define PRINTF_BINARY_PATTERN_INT4 "%c%c%c%c"
-#define PRINTF_BYTE_TO_BINARY_INT4( i ) \
- ( ( ( ( i ) & 0x08UL ) != 0UL ) ? '1' : '0' ), \
- ( ( ( ( i ) & 0x04UL ) != 0UL ) ? '1' : '0' ), \
- ( ( ( ( i ) & 0x02UL ) != 0UL ) ? '1' : '0' ), \
- ( ( ( ( i ) & 0x01UL ) != 0UL ) ? '1' : '0' )
-
-#define PRINTF_BINARY_PATTERN_INT8 \
- PRINTF_BINARY_PATTERN_INT4 PRINTF_BINARY_PATTERN_INT4
-#define PRINTF_BYTE_TO_BINARY_INT8( i ) \
- PRINTF_BYTE_TO_BINARY_INT4( ( i ) >> 4 ), PRINTF_BYTE_TO_BINARY_INT4( i )
-
-#define QPSMS_POS_MODE ( 0U )
-#define QPSMS_POS_RAU ( 1U )
-#define QPSMS_POS_RDY_TIMER ( 2U )
-#define QPSMS_POS_TAU ( 3U )
-#define QPSMS_POS_ACTIVE_TIME ( 4U )
-
-#define CELLULAR_PDN_STATUS_POS_CONTEXT_ID ( 0U )
-#define CELLULAR_PDN_STATUS_POS_CONTEXT_STATE ( 1U )
-#define CELLULAR_PDN_STATUS_POS_CONTEXT_TYPE ( 2U )
-#define CELLULAR_PDN_STATUS_POS_IP_ADDRESS ( 3U )
-
-#define RAT_PRIOIRTY_STRING_LENGTH ( 2U )
-#define RAT_PRIOIRTY_LIST_LENGTH ( 3U )
-
-#define INVALID_PDN_INDEX ( 0xFFU )
-
-#define DATA_PREFIX_STRING "+QIRD:"
-#define DATA_PREFIX_STRING_LENGTH ( 6U )
-#define DATA_PREFIX_STRING_CHANGELINE_LENGTH ( 2U ) /* The length of the change line "\r\n". */
-
-#define MAX_QIRD_STRING_PREFIX_STRING ( 14U ) /* The max data prefix string is "+QIRD: 1460\r\n" */
-
-/*-----------------------------------------------------------*/
-
-/**
- * @brief Parameters involved in receiving data through sockets
- */
-typedef struct _socketDataRecv
-{
- uint32_t * pDataLen;
- uint8_t * pData;
- CellularSocketAddress_t * pRemoteSocketAddress;
-} _socketDataRecv_t;
-
-/*-----------------------------------------------------------*/
-
-static bool _parseSignalQuality( char * pQcsqPayload,
- CellularSignalInfo_t * pSignalInfo );
-static CellularPktStatus_t _Cellular_RecvFuncGetSignalInfo( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularError_t controlSignalStrengthIndication( CellularContext_t * pContext,
- bool enable );
-static CellularPktStatus_t _Cellular_RecvFuncGetIccid( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularPktStatus_t _Cellular_RecvFuncGetImsi( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static bool _checkCrsmMemoryStatus( const char * pToken );
-static bool _checkCrsmReadStatus( const char * pToken );
-static bool _parseHplmn( char * pToken,
- void * pData );
-static CellularPktStatus_t _Cellular_RecvFuncGetHplmn( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularPktStatus_t _Cellular_RecvFuncGetSimCardStatus( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularSimCardLockState_t _getSimLockState( char * pToken );
-static CellularPktStatus_t _Cellular_RecvFuncGetSimLockStatus( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularATError_t parsePdnStatusContextId( char * pToken,
- CellularPdnStatus_t * pPdnStatusBuffers );
-static CellularATError_t parsePdnStatusContextState( char * pToken,
- CellularPdnStatus_t * pPdnStatusBuffers );
-static CellularATError_t parsePdnStatusContextType( char * pToken,
- CellularPdnStatus_t * pPdnStatusBuffers );
-static CellularATError_t getPdnStatusParseToken( char * pToken,
- uint8_t tokenIndex,
- CellularPdnStatus_t * pPdnStatusBuffers );
-static CellularATError_t getPdnStatusParseLine( char * pRespLine,
- CellularPdnStatus_t * pPdnStatusBuffers );
-static CellularPktStatus_t _Cellular_RecvFuncGetPdnStatus( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularError_t buildSocketConnect( CellularSocketHandle_t socketHandle,
- char * pCmdBuf );
-static CellularATError_t getDataFromResp( const CellularATCommandResponse_t * pAtResp,
- const _socketDataRecv_t * pDataRecv,
- uint32_t outBufSize );
-static CellularPktStatus_t _Cellular_RecvFuncData( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularATError_t parseQpsmsMode( char * pToken,
- CellularPsmSettings_t * pPsmSettings );
-static CellularATError_t parseQpsmsRau( char * pToken,
- CellularPsmSettings_t * pPsmSettings );
-static CellularATError_t parseQpsmsRdyTimer( char * pToken,
- CellularPsmSettings_t * pPsmSettings );
-static CellularATError_t parseQpsmsTau( char * pToken,
- CellularPsmSettings_t * pPsmSettings );
-static CellularATError_t parseQpsmsActiveTime( char * pToken,
- CellularPsmSettings_t * pPsmSettings );
-static CellularATError_t parseGetPsmToken( char * pToken,
- uint8_t tokenIndex,
- CellularPsmSettings_t * pPsmSettings );
-static CellularRat_t convertRatPriority( char * pRatString );
-static CellularPktStatus_t _Cellular_RecvFuncGetRatPriority( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularPktStatus_t _Cellular_RecvFuncGetPsmSettings( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularPktStatus_t socketRecvDataPrefix( void * pCallbackContext,
- char * pLine,
- uint32_t lineLength,
- char ** ppDataStart,
- uint32_t * pDataLength );
-static CellularError_t storeAccessModeAndAddress( CellularContext_t * pContext,
- CellularSocketHandle_t socketHandle,
- CellularSocketAccessMode_t dataAccessMode,
- const CellularSocketAddress_t * pRemoteSocketAddress );
-static CellularError_t registerDnsEventCallback( cellularModuleContext_t * pModuleContext,
- CellularDnsResultEventCallback_t dnsEventCallback,
- char * pDnsUsrData );
-static void _dnsResultCallback( cellularModuleContext_t * pModuleContext,
- char * pDnsResult,
- char * pDnsUsrData );
-static uint32_t appendBinaryPattern( char * cmdBuf,
- uint32_t cmdLen,
- uint32_t value,
- bool endOfString );
-static CellularPktStatus_t socketSendDataPrefix( void * pCallbackContext,
- char * pLine,
- uint32_t * pBytesRead );
-
-/*-----------------------------------------------------------*/
-
-static bool _parseSignalQuality( char * pQcsqPayload,
- CellularSignalInfo_t * pSignalInfo )
-{
- char * pToken = NULL, * pTmpQcsqPayload = pQcsqPayload;
- int32_t tempValue = 0;
- bool parseStatus = true;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- if( ( pSignalInfo == NULL ) || ( pQcsqPayload == NULL ) )
- {
- LogError( ( "_parseSignalQuality: Invalid Input Parameters" ) );
- parseStatus = false;
- }
-
- if( ( parseStatus == true ) && ( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) == CELLULAR_AT_SUCCESS ) )
- {
- if( ( strcmp( pToken, "GSM" ) != 0 ) &&
- ( strcmp( pToken, "CAT-M1" ) != 0 ) &&
- ( strcmp( pToken, "CAT-NB1" ) != 0 ) )
- {
- parseStatus = false;
- }
- }
- else
- {
- LogDebug( ( "_parseSignalQuality: No Valid RAT in QCSQ Response" ) );
- parseStatus = false;
- }
-
- if( ( parseStatus == true ) && ( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) == CELLULAR_AT_SUCCESS ) )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- pSignalInfo->rssi = ( int16_t ) tempValue;
- }
- else
- {
- LogError( ( "_parseSignalQuality: Error in processing RSSI. Token %s", pToken ) );
- parseStatus = false;
- }
- }
- else
- {
- parseStatus = false;
- }
-
- if( ( parseStatus == true ) && ( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) == CELLULAR_AT_SUCCESS ) )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- pSignalInfo->rsrp = ( int16_t ) tempValue;
- }
- else
- {
- LogError( ( "_parseSignalQuality: Error in processing RSRP. Token %s", pToken ) );
- parseStatus = false;
- }
- }
- else
- {
- parseStatus = false;
- }
-
- if( ( parseStatus == true ) && ( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) == CELLULAR_AT_SUCCESS ) )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- /* SINR is reported as an integer value ranging from 0 to 250 representing 1/5 of a dB.
- * Value 0 correspond to -20 dBm and 250 corresponds to +30 dBm. */
- pSignalInfo->sinr = ( int16_t ) ( SIGNAL_QUALITY_SINR_MIN_VALUE + ( ( tempValue ) / ( SIGNAL_QUALITY_SINR_DIVISIBILITY_FACTOR ) ) );
- }
- else
- {
- LogError( ( "_parseSignalQuality: Error in processing SINR. pToken %s", pToken ) );
- parseStatus = false;
- }
- }
- else
- {
- parseStatus = false;
- }
-
- if( ( parseStatus == true ) && ( Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken ) == CELLULAR_AT_SUCCESS ) )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- pSignalInfo->rsrq = ( int16_t ) tempValue;
- }
- else
- {
- LogError( ( "_parseSignalQuality: Error in processing RSRQ. Token %s", pToken ) );
- parseStatus = false;
- }
- }
- else
- {
- parseStatus = false;
- }
-
- return parseStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetSignalInfo( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL;
- CellularSignalInfo_t * pSignalInfo = ( CellularSignalInfo_t * ) pData;
- bool parseStatus = true;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- if( pContext == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pSignalInfo == NULL ) || ( dataLen != sizeof( CellularSignalInfo_t ) ) )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "GetSignalInfo: Input Line passed is NULL" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllDoubleQuote( pInputLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pInputLine );
- }
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
- }
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- parseStatus = _parseSignalQuality( pInputLine, pSignalInfo );
-
- if( parseStatus != true )
- {
- pSignalInfo->rssi = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->rsrp = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->rsrq = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->ber = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->bars = CELLULAR_INVALID_SIGNAL_BAR_VALUE;
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t controlSignalStrengthIndication( CellularContext_t * pContext,
- bool enable )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- uint8_t enable_value = 0;
- CellularAtReq_t atReqControlSignalStrengthIndication =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- if( enable == true )
- {
- enable_value = 1;
- }
- else
- {
- enable_value = 0;
- }
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "AT+QINDCFG=\"csq\",%u", enable_value );
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqControlSignalStrengthIndication );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetIccid( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- char * pRespLine = NULL;
-
- if( pContext == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) ||
- ( pAtResp->pItm->pLine == NULL ) || ( pData == NULL ) )
- {
- LogError( ( "getIccid: Response in invalid " ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pRespLine = pAtResp->pItm->pLine;
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pRespLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- /* Removing QCCID Prefix in AT Response. */
- atCoreStatus = Cellular_ATRemovePrefix( &pRespLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- /* Storing the ICCID value in the AT Response. */
- if( strlen( pRespLine ) < ( ( size_t ) CELLULAR_ICCID_MAX_SIZE + 1U ) )
- {
- ( void ) strncpy( pData, pRespLine, dataLen );
- }
- else
- {
- atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetImsi( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- char * pRespLine = NULL;
-
- if( pContext == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) ||
- ( pAtResp->pItm->pLine == NULL ) || ( pData == NULL ) )
- {
- LogError( ( "getImsi: Response in invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pRespLine = pAtResp->pItm->pLine;
-
- /* Removing all the Spaces in the AT Response. */
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pRespLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( strlen( pRespLine ) < ( CELLULAR_IMSI_MAX_SIZE + 1U ) )
- {
- ( void ) strncpy( ( char * ) pData, pRespLine, dataLen );
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static bool _checkCrsmMemoryStatus( const char * pToken )
-{
- bool memoryStatus = true;
-
- if( pToken == NULL )
- {
- LogError( ( "Input Parameter NULL" ) );
- memoryStatus = false;
- }
-
- if( memoryStatus )
- {
- /* checking the value sw2 in AT command response for memory problem during CRSM read.
- * Refer 3GPP Spec TS 51.011 Section 9.4. */
- if( strcmp( pToken, "64" ) == 0 )
- {
- LogError( ( "_checkCrsmMemoryStatus: Error in Processing HPLMN: CRSM Memory Error" ) );
- memoryStatus = false;
- }
- }
-
- return memoryStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static bool _checkCrsmReadStatus( const char * pToken )
-{
- bool readStatus = true;
-
- if( pToken == NULL )
- {
- LogError( ( "Input Parameter NULL" ) );
- readStatus = false;
- }
-
- if( readStatus )
- {
- /* checking the parameter sw1 in AT command response for successful CRSM read.
- * Refer 3GPP Spec TS 51.011 Section 9.4. */
- if( ( strcmp( pToken, "144" ) != 0 ) &&
- ( strcmp( pToken, "145" ) != 0 ) &&
- ( strcmp( pToken, "146" ) != 0 ) )
- {
- LogError( ( "_checkCrsmReadStatus: Error in Processing HPLMN: CRSM Read Error" ) );
- readStatus = false;
- }
- }
-
- return readStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static bool _parseHplmn( char * pToken,
- void * pData )
-{
- bool parseStatus = true;
- CellularPlmnInfo_t * plmn = ( CellularPlmnInfo_t * ) pData;
-
- if( ( pToken == NULL ) || ( pData == NULL ) )
- {
- LogError( ( "Input Parameter NULL" ) );
- parseStatus = false;
- }
-
- if( parseStatus == true )
- {
- /* Checking if the very first HPLMN entry in AT command Response is valid*/
- if( ( strlen( pToken ) < ( CRSM_HPLMN_RAT_LENGTH ) ) || ( strncmp( pToken, "FFFFFF", 6 ) == 0 ) )
- {
- LogError( ( "_parseHplmn: Error in Processing HPLMN: Invalid Token %s", pToken ) );
- parseStatus = false;
- }
- }
-
- if( parseStatus == true )
- {
- /* Returning only the very first HPLMN present in EFHPLMNwACT in SIM.
- * EF-HPLMNwACT can contain a maximum of 10 HPLMN entries in decreasing order of priority.
- * In this implementation, returning the very first HPLMN is the PLMN priority list. */
- /* Refer TS 51.011 Section 10.3.37 for encoding. */
- plmn->mcc[ 0 ] = pToken[ 1 ];
- plmn->mcc[ 1 ] = pToken[ 0 ];
- plmn->mcc[ 2 ] = pToken[ 3 ];
- plmn->mnc[ 0 ] = pToken[ 5 ];
- plmn->mnc[ 1 ] = pToken[ 4 ];
-
- if( pToken[ 2 ] != 'F' )
- {
- plmn->mnc[ 2 ] = pToken[ 2 ];
- plmn->mnc[ 3 ] = '\0';
- }
- else
- {
- plmn->mnc[ 2 ] = '\0';
- }
- }
-
- return parseStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetHplmn( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- bool parseStatus = true;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- char * pCrsmResponse = NULL, * pToken = NULL;
-
- if( pContext == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) ||
- ( pData == NULL ) || ( dataLen != sizeof( CellularPlmnInfo_t ) ) )
- {
- LogError( ( "GetHplmn: Response is invalid " ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pCrsmResponse = pAtResp->pItm->pLine;
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pCrsmResponse );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- /* Removing the CRSM prefix in AT Response. */
- atCoreStatus = Cellular_ATRemovePrefix( &pCrsmResponse );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- /* Removing All quotes in the AT Response. */
- atCoreStatus = Cellular_ATRemoveAllDoubleQuote( pCrsmResponse );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- /* Getting the next token separated by comma in At Response*/
- atCoreStatus = Cellular_ATGetNextTok( &pCrsmResponse, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- parseStatus = _checkCrsmReadStatus( pToken );
-
- if( !parseStatus )
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pCrsmResponse, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- parseStatus = _checkCrsmMemoryStatus( pToken );
-
- if( !parseStatus )
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pCrsmResponse, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- parseStatus = _parseHplmn( pToken, pData );
-
- if( !parseStatus )
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetSimCardStatus( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL;
- const char * pTokenPtr = NULL;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularSimCardState_t * pSimCardState = ( CellularSimCardState_t * ) pData;
-
- if( pContext == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "GetSimStatus: response is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pData == NULL ) || ( dataLen != sizeof( CellularSimCardState_t ) ) )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
- atCoreStatus = Cellular_ATRemoveLeadingWhiteSpaces( &pInputLine );
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- /* remove the token prefix. */
- pTokenPtr = strtok_r( pInputLine, ":", &pInputLine );
-
- /* check the token prefix. */
- if( pTokenPtr == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_RESPONSE;
- }
- else
- {
- pktStatus = _Cellular_ParseSimstat( pInputLine, pSimCardState );
- }
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularSimCardLockState_t _getSimLockState( char * pToken )
-{
- CellularSimCardLockState_t tempState = CELLULAR_SIM_CARD_LOCK_UNKNOWN;
-
- if( pToken != NULL )
- {
- if( strcmp( pToken, "READY" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_READY;
- }
- else if( strcmp( pToken, "SIM PIN" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_PIN;
- }
- else if( strcmp( pToken, "SIM PUK" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_PUK;
- }
- else if( strcmp( pToken, "SIM PIN2" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_PIN2;
- }
- else if( strcmp( pToken, "SIM PUK2" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_PUK2;
- }
- else if( strcmp( pToken, "PH-NET PIN" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_PH_NET_PIN;
- }
- else if( strcmp( pToken, "PH-NET PUK" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_PH_NET_PUK;
- }
- else if( strcmp( pToken, "PH-NETSUB PIN" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_PH_NETSUB_PIN;
- }
- else if( strcmp( pToken, "PH-NETSUB PUK" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_PH_NETSUB_PUK;
- }
- else if( strcmp( pToken, "PH-SP PIN" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_SP_PIN;
- }
- else if( strcmp( pToken, "PH-SP PUK" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_SP_PUK;
- }
- else if( strcmp( pToken, "PH-CORP PIN" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_CORP_PIN;
- }
- else if( strcmp( pToken, "PH-CORP PUK" ) == 0 )
- {
- tempState = CELLULAR_SIM_CARD_CORP_PUK;
- }
- else
- {
- LogError( ( "Unknown SIM Lock State %s", pToken ) );
- }
- }
-
- return tempState;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetSimLockStatus( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pToken = NULL, * pInputStr = NULL;
- CellularSimCardLockState_t * pSimLockState = NULL;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- if( pContext == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) ||
- ( pData == NULL ) || ( dataLen != sizeof( CellularSimCardLockState_t ) ) )
- {
- LogError( ( " Get SIM lock State: Response data is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pInputStr = pAtResp->pItm->pLine;
- pSimLockState = ( CellularSimCardLockState_t * ) pData;
-
- if( strlen( pInputStr ) == 0U )
- {
- LogError( ( "Get SIM lock State: Input data is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- }
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pInputStr );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemovePrefix( &pInputStr );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputStr, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- LogDebug( ( "SIM Lock State: %s", pToken ) );
- *pSimLockState = _getSimLockState( pToken );
- }
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parsePdnStatusContextId( char * pToken,
- CellularPdnStatus_t * pPdnStatusBuffers )
-{
- int32_t tempValue = 0;
- CellularATError_t atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= ( int32_t ) CELLULAR_PDN_CONTEXT_ID_MIN ) &&
- ( tempValue <= ( int32_t ) CELLULAR_PDN_CONTEXT_ID_MAX ) )
- {
- pPdnStatusBuffers->contextId = ( uint8_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in Processing Context Id. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parsePdnStatusContextState( char * pToken,
- CellularPdnStatus_t * pPdnStatusBuffers )
-{
- int32_t tempValue = 0;
- CellularATError_t atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) &&
- ( tempValue <= ( int32_t ) UINT8_MAX ) )
- {
- pPdnStatusBuffers->state = ( uint8_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in processing PDN Status Buffer state. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parsePdnStatusContextType( char * pToken,
- CellularPdnStatus_t * pPdnStatusBuffers )
-{
- int32_t tempValue = 0;
- CellularATError_t atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) && ( tempValue < ( int32_t ) CELLULAR_PDN_CONTEXT_TYPE_MAX ) )
- {
- /* Variable "tempValue" is ensured that it is valid and within
- * a valid range. Hence, assigning the value of the variable to
- * pdnContextType with a enum cast. */
- /* coverity[misra_c_2012_rule_10_5_violation] */
- pPdnStatusBuffers->pdnContextType = ( CellularPdnContextType_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in processing PDN State Buffer Status. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t getPdnStatusParseToken( char * pToken,
- uint8_t tokenIndex,
- CellularPdnStatus_t * pPdnStatusBuffers )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- switch( tokenIndex )
- {
- case ( CELLULAR_PDN_STATUS_POS_CONTEXT_ID ):
- LogDebug( ( "Context Id: %s", pToken ) );
- atCoreStatus = parsePdnStatusContextId( pToken, pPdnStatusBuffers );
- break;
-
- case ( CELLULAR_PDN_STATUS_POS_CONTEXT_STATE ):
- LogDebug( ( "Context State: %s", pToken ) );
- atCoreStatus = parsePdnStatusContextState( pToken, pPdnStatusBuffers );
- break;
-
- case ( CELLULAR_PDN_STATUS_POS_CONTEXT_TYPE ):
- LogDebug( ( "Context Type: %s", pToken ) );
- atCoreStatus = parsePdnStatusContextType( pToken, pPdnStatusBuffers );
- break;
-
- case ( CELLULAR_PDN_STATUS_POS_IP_ADDRESS ):
- LogDebug( ( "IP address: %s", pToken ) );
- ( void ) memcpy( ( void * ) pPdnStatusBuffers->ipAddress.ipAddress,
- ( void * ) pToken, CELLULAR_IP_ADDRESS_MAX_SIZE + 1U );
-
- if( pPdnStatusBuffers->pdnContextType == CELLULAR_PDN_CONTEXT_IPV4 )
- {
- pPdnStatusBuffers->ipAddress.ipAddressType = CELLULAR_IP_ADDRESS_V4;
- }
- else if( pPdnStatusBuffers->pdnContextType == CELLULAR_PDN_CONTEXT_IPV6 )
- {
- pPdnStatusBuffers->ipAddress.ipAddressType = CELLULAR_IP_ADDRESS_V6;
- }
- else
- {
- LogError( ( "Unknown pdnContextType %d", pPdnStatusBuffers->pdnContextType ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
-
- break;
-
- default:
- LogError( ( "Unknown token in getPdnStatusParseToken %s %d",
- pToken, tokenIndex ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- break;
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t getPdnStatusParseLine( char * pRespLine,
- CellularPdnStatus_t * pPdnStatusBuffers )
-{
- char * pToken = NULL;
- char * pLocalRespLine = pRespLine;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- uint8_t tokenIndex = 0;
-
- atCoreStatus = Cellular_ATRemovePrefix( &pLocalRespLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllDoubleQuote( pLocalRespLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pLocalRespLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- tokenIndex = 0;
-
- while( ( pToken != NULL ) && ( atCoreStatus == CELLULAR_AT_SUCCESS ) )
- {
- atCoreStatus = getPdnStatusParseToken( pToken, tokenIndex, pPdnStatusBuffers );
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- LogInfo( ( "getPdnStatusParseToken %s index %d failed", pToken, tokenIndex ) );
- }
-
- tokenIndex++;
-
- if( Cellular_ATGetNextTok( &pLocalRespLine, &pToken ) != CELLULAR_AT_SUCCESS )
- {
- break;
- }
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetPdnStatus( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pRespLine = NULL;
- CellularPdnStatus_t * pPdnStatusBuffers = ( CellularPdnStatus_t * ) pData;
- uint8_t numStatusBuffers = ( uint8_t ) dataLen;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- const CellularATCommandLine_t * pCommnadItem = NULL;
-
- if( pContext == NULL )
- {
- LogError( ( "GetPdnStatus: invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp == NULL ) )
- {
- LogError( ( "GetPdnStatus: Response is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pPdnStatusBuffers == NULL ) || ( numStatusBuffers < 1U ) )
- {
- LogError( ( "GetPdnStatus: PDN Status bad parameters" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "GetPdnStatus: no activated PDN" ) );
- pPdnStatusBuffers[ 0 ].contextId = INVALID_PDN_INDEX;
- pktStatus = CELLULAR_PKT_STATUS_OK;
- }
- else
- {
- pRespLine = pAtResp->pItm->pLine;
-
- pCommnadItem = pAtResp->pItm;
-
- while( ( numStatusBuffers != 0U ) && ( pCommnadItem != NULL ) )
- {
- pRespLine = pCommnadItem->pLine;
- atCoreStatus = getPdnStatusParseLine( pRespLine, pPdnStatusBuffers );
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "getPdnStatusParseLine parse %s failed", pRespLine ) );
- break;
- }
-
- pPdnStatusBuffers++;
- numStatusBuffers--;
- pCommnadItem = pCommnadItem->pNext;
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t buildSocketConnect( CellularSocketHandle_t socketHandle,
- char * pCmdBuf )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- char protocol[ 15 ];
-
- if( pCmdBuf == NULL )
- {
- LogError( ( "buildSocketConnect: Invalid command buffer" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- if( socketHandle->socketProtocol == CELLULAR_SOCKET_PROTOCOL_TCP )
- {
- ( void ) strcpy( protocol, "TCP" );
- }
- else
- {
- ( void ) strcpy( protocol, "UDP SERVICE" );
- }
-
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( pCmdBuf, CELLULAR_AT_CMD_MAX_SIZE,
- "%s%d,%ld,\"%s\",\"%s\",%d,%d,%d",
- "AT+QIOPEN=",
- socketHandle->contextId,
- socketHandle->socketId,
- protocol,
- socketHandle->remoteSocketAddress.ipAddress.ipAddress,
- socketHandle->remoteSocketAddress.port,
- socketHandle->localPort,
- socketHandle->dataMode );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t getDataFromResp( const CellularATCommandResponse_t * pAtResp,
- const _socketDataRecv_t * pDataRecv,
- uint32_t outBufSize )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- const char * pInputLine = NULL;
- uint32_t dataLenToCopy = 0;
-
- /* Check if the received data size is greater than the output buffer size. */
- if( *pDataRecv->pDataLen > outBufSize )
- {
- LogError( ( "Data is turncated, received data length %d, out buffer size %d",
- *pDataRecv->pDataLen, outBufSize ) );
- dataLenToCopy = outBufSize;
- *pDataRecv->pDataLen = outBufSize;
- }
- else
- {
- dataLenToCopy = *pDataRecv->pDataLen;
- }
-
- /* Data is stored in the next intermediate response. */
- if( pAtResp->pItm->pNext != NULL )
- {
- pInputLine = pAtResp->pItm->pNext->pLine;
-
- if( ( pInputLine != NULL ) && ( dataLenToCopy > 0U ) )
- {
- /* Copy the data to the out buffer. */
- ( void ) memcpy( ( void * ) pDataRecv->pData, ( const void * ) pInputLine, dataLenToCopy );
- }
- else
- {
- LogError( ( "Receive Data: Data pointer NULL" ) );
- atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
- }
- }
- else if( *pDataRecv->pDataLen == 0U )
- {
- /* Receive command success but no data. */
- LogDebug( ( "Receive Data: no data" ) );
- }
- else
- {
- LogError( ( "Receive Data: Intermediate response empty" ) );
- atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncData( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char * pInputLine = NULL, * pToken = NULL;
- const _socketDataRecv_t * pDataRecv = ( _socketDataRecv_t * ) pData;
- int32_t tempValue = 0;
-
- if( pContext == NULL )
- {
- LogError( ( "Receive Data: invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "Receive Data: response is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pDataRecv == NULL ) || ( pDataRecv->pData == NULL ) || ( pDataRecv->pDataLen == NULL ) )
- {
- LogError( ( "Receive Data: Bad param" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- /* parse the datalen. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= ( int32_t ) 0 ) && ( tempValue < ( ( int32_t ) CELLULAR_MAX_RECV_DATA_LEN + 1 ) ) )
- {
- *pDataRecv->pDataLen = ( uint32_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in Data Length Processing: No valid digit found. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- /* Process the data buffer. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = getDataFromResp( pAtResp, pDataRecv, dataLen );
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parseQpsmsMode( char * pToken,
- CellularPsmSettings_t * pPsmSettings )
-{
- int32_t tempValue = 0;
- CellularATError_t atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) && ( tempValue <= ( int32_t ) UINT8_MAX ) )
- {
- pPsmSettings->mode = ( uint8_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in processing mode. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parseQpsmsRau( char * pToken,
- CellularPsmSettings_t * pPsmSettings )
-{
- int32_t tempValue = 0;
- CellularATError_t atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( tempValue >= 0 )
- {
- pPsmSettings->periodicRauValue = ( uint32_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in processing Periodic Processing RAU value. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parseQpsmsRdyTimer( char * pToken,
- CellularPsmSettings_t * pPsmSettings )
-{
- int32_t tempValue = 0;
- CellularATError_t atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( tempValue >= 0 )
- {
- pPsmSettings->gprsReadyTimer = ( uint32_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in processing Periodic Processing GPRS Ready Timer value. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parseQpsmsTau( char * pToken,
- CellularPsmSettings_t * pPsmSettings )
-{
- int32_t tempValue = 0;
- CellularATError_t atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( tempValue >= 0 )
- {
- pPsmSettings->periodicTauValue = ( uint32_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in processing Periodic TAU value value. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parseQpsmsActiveTime( char * pToken,
- CellularPsmSettings_t * pPsmSettings )
-{
- int32_t tempValue = 0;
- CellularATError_t atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( tempValue >= 0 )
- {
- pPsmSettings->activeTimeValue = ( uint32_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in processing Periodic Processing Active time value. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parseGetPsmToken( char * pToken,
- uint8_t tokenIndex,
- CellularPsmSettings_t * pPsmSettings )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- switch( tokenIndex )
- {
- case QPSMS_POS_MODE:
- atCoreStatus = parseQpsmsMode( pToken, pPsmSettings );
- break;
-
- case QPSMS_POS_RAU:
- atCoreStatus = parseQpsmsRau( pToken, pPsmSettings );
- break;
-
- case QPSMS_POS_RDY_TIMER:
- atCoreStatus = parseQpsmsRdyTimer( pToken, pPsmSettings );
- break;
-
- case QPSMS_POS_TAU:
- atCoreStatus = parseQpsmsTau( pToken, pPsmSettings );
- break;
-
- case QPSMS_POS_ACTIVE_TIME:
- atCoreStatus = parseQpsmsActiveTime( pToken, pPsmSettings );
- break;
-
- default:
- LogDebug( ( "Unknown Parameter Position in AT+QPSMS Response" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- break;
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularRat_t convertRatPriority( char * pRatString )
-{
- CellularRat_t retRat = CELLULAR_RAT_INVALID;
-
- if( strncmp( pRatString, "01", RAT_PRIOIRTY_STRING_LENGTH ) == 0 )
- {
- retRat = CELLULAR_RAT_GSM;
- }
- else if( strncmp( pRatString, "02", RAT_PRIOIRTY_STRING_LENGTH ) == 0 )
- {
- retRat = CELLULAR_RAT_CATM1;
- }
- else if( strncmp( pRatString, "03", RAT_PRIOIRTY_STRING_LENGTH ) == 0 )
- {
- retRat = CELLULAR_RAT_NBIOT;
- }
- else
- {
- LogDebug( ( "Invalid RAT string %s", pRatString ) );
- }
-
- return retRat;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetRatPriority( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL, * pToken = NULL;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularRat_t * pRatPriorities = NULL;
- char pTempString[ RAT_PRIOIRTY_STRING_LENGTH + 1 ] = { "\0" }; /* The return RAT has two chars plus NULL char. */
- uint32_t ratIndex = 0;
- uint32_t maxRatPriorityLength = ( dataLen > RAT_PRIOIRTY_LIST_LENGTH ? RAT_PRIOIRTY_LIST_LENGTH : dataLen );
-
- if( pContext == NULL )
- {
- LogError( ( "GetRatPriority: Invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) ||
- ( pAtResp->pItm->pLine == NULL ) || ( pData == NULL ) || ( dataLen == 0U ) )
- {
- LogError( ( "GetRatPriority: Invalid param" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
- pRatPriorities = ( CellularRat_t * ) pData;
-
- /* Response string +QCFG:"nwscanseq",020301 => pToken : +QCFG:"nwscanseq", pInputLine : 020301. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
- }
-
- /* Response string 020301 => pToken : 020301, pInputLine : NULL. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( strlen( pToken ) != ( RAT_PRIOIRTY_STRING_LENGTH * RAT_PRIOIRTY_LIST_LENGTH ) )
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- memset( pRatPriorities, CELLULAR_RAT_INVALID, dataLen );
-
- for( ratIndex = 0; ratIndex < maxRatPriorityLength; ratIndex++ )
- {
- memcpy( pTempString, &pToken[ ratIndex * RAT_PRIOIRTY_STRING_LENGTH ], RAT_PRIOIRTY_STRING_LENGTH );
- pRatPriorities[ ratIndex ] = convertRatPriority( pTempString );
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetPsmSettings( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL, * pToken = NULL;
- uint8_t tokenIndex = 0;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularPsmSettings_t * pPsmSettings = NULL;
-
- if( pContext == NULL )
- {
- LogError( ( "GetPsmSettings: Invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) ||
- ( pAtResp->pItm->pLine == NULL ) || ( pData == NULL ) || ( dataLen != sizeof( CellularPsmSettings_t ) ) )
- {
- LogError( ( "GetPsmSettings: Invalid param" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
- pPsmSettings = ( CellularPsmSettings_t * ) pData;
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllDoubleQuote( pInputLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- tokenIndex = 0;
-
- while( pToken != NULL )
- {
- if( tokenIndex == 0 )
- {
- atCoreStatus = parseGetPsmToken( pToken, tokenIndex, pPsmSettings );
- }
- else
- {
- parseGetPsmToken( pToken, tokenIndex, pPsmSettings );
- }
-
- tokenIndex++;
-
- if( *pInputLine == ',' )
- {
- *pInputLine = '\0';
- pToken = pInputLine;
- *pToken = '\0';
- pInputLine = &pInputLine[ 1 ];
- }
- else if( Cellular_ATGetNextTok( &pInputLine, &pToken ) != CELLULAR_AT_SUCCESS )
- {
- break;
- }
- else
- {
- /* Empty Else MISRA 15.7 */
- }
- }
- }
-
- LogDebug( ( "PSM setting: mode: %d, RAU: %d, RDY_Timer: %d, TAU: %d, Active_time: %d",
- pPsmSettings->mode,
- pPsmSettings->periodicRauValue,
- pPsmSettings->gprsReadyTimer,
- pPsmSettings->periodicTauValue,
- pPsmSettings->activeTimeValue ) );
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t socketRecvDataPrefix( void * pCallbackContext,
- char * pLine,
- uint32_t lineLength,
- char ** ppDataStart,
- uint32_t * pDataLength )
-{
- char * pDataStart = NULL;
- uint32_t prefixLineLength = 0U;
- int32_t tempValue = 0;
- CellularATError_t atResult = CELLULAR_AT_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- uint32_t i = 0;
- char pLocalLine[ MAX_QIRD_STRING_PREFIX_STRING + 1 ] = "\0";
- uint32_t localLineLength = MAX_QIRD_STRING_PREFIX_STRING > lineLength ? lineLength : MAX_QIRD_STRING_PREFIX_STRING;
-
- ( void ) pCallbackContext;
-
- if( ( pLine == NULL ) || ( ppDataStart == NULL ) || ( pDataLength == NULL ) )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- /* Check if the message is a data response. */
- if( strncmp( pLine, DATA_PREFIX_STRING, DATA_PREFIX_STRING_LENGTH ) == 0 )
- {
- strncpy( pLocalLine, pLine, MAX_QIRD_STRING_PREFIX_STRING );
- pLocalLine[ MAX_QIRD_STRING_PREFIX_STRING ] = '\0';
- pDataStart = pLocalLine;
-
- /* Add a '\0' char at the end of the line. */
- for( i = 0; i < localLineLength; i++ )
- {
- if( ( pDataStart[ i ] == '\r' ) || ( pDataStart[ i ] == '\n' ) )
- {
- pDataStart[ i ] = '\0';
- prefixLineLength = i;
- break;
- }
- }
-
- if( i == localLineLength )
- {
- LogDebug( ( "Data prefix invalid line : %s", pLocalLine ) );
- pDataStart = NULL;
- }
- }
-
- if( pDataStart != NULL )
- {
- atResult = Cellular_ATStrtoi( &pDataStart[ DATA_PREFIX_STRING_LENGTH ], 10, &tempValue );
-
- if( ( atResult == CELLULAR_AT_SUCCESS ) && ( tempValue >= 0 ) &&
- ( tempValue <= ( int32_t ) CELLULAR_MAX_RECV_DATA_LEN ) )
- {
- if( ( prefixLineLength + DATA_PREFIX_STRING_CHANGELINE_LENGTH ) > lineLength )
- {
- /* More data is required. */
- *pDataLength = 0;
- pDataStart = NULL;
- pktStatus = CELLULAR_PKT_STATUS_SIZE_MISMATCH;
- }
- else
- {
- pDataStart = &pLine[ prefixLineLength ];
- pDataStart[ 0 ] = '\0';
- pDataStart = &pDataStart[ DATA_PREFIX_STRING_CHANGELINE_LENGTH ];
- *pDataLength = ( uint32_t ) tempValue;
- }
-
- LogDebug( ( "DataLength %p at pktIo = %d", pDataStart, *pDataLength ) );
- }
- else
- {
- *pDataLength = 0;
- pDataStart = NULL;
- LogError( ( "Data response received with wrong size" ) );
- }
- }
-
- *ppDataStart = pDataStart;
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t storeAccessModeAndAddress( CellularContext_t * pContext,
- CellularSocketHandle_t socketHandle,
- CellularSocketAccessMode_t dataAccessMode,
- const CellularSocketAddress_t * pRemoteSocketAddress )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ( pRemoteSocketAddress == NULL ) || ( socketHandle == NULL ) )
- {
- LogError( ( "storeAccessModeAndAddress: Invalid socket address" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketHandle->socketState != SOCKETSTATE_ALLOCATED )
- {
- LogError( ( "storeAccessModeAndAddress, bad socket state %d",
- socketHandle->socketState ) );
- cellularStatus = CELLULAR_INTERNAL_FAILURE;
- }
- else if( dataAccessMode != CELLULAR_ACCESSMODE_BUFFER )
- {
- LogError( ( "storeAccessModeAndAddress, Access mode not supported %d",
- dataAccessMode ) );
- cellularStatus = CELLULAR_UNSUPPORTED;
- }
- else
- {
- socketHandle->remoteSocketAddress.port = pRemoteSocketAddress->port;
- socketHandle->dataMode = dataAccessMode;
- socketHandle->remoteSocketAddress.ipAddress.ipAddressType =
- pRemoteSocketAddress->ipAddress.ipAddressType;
- ( void ) strncpy( socketHandle->remoteSocketAddress.ipAddress.ipAddress,
- pRemoteSocketAddress->ipAddress.ipAddress,
- CELLULAR_IP_ADDRESS_MAX_SIZE + 1U );
- }
-
- return cellularStatus;
-}
-
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t registerDnsEventCallback( cellularModuleContext_t * pModuleContext,
- CellularDnsResultEventCallback_t dnsEventCallback,
- char * pDnsUsrData )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- if( pModuleContext == NULL )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else
- {
- pModuleContext->dnsEventCallback = dnsEventCallback;
- pModuleContext->pDnsUsrData = pDnsUsrData;
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static void _dnsResultCallback( cellularModuleContext_t * pModuleContext,
- char * pDnsResult,
- char * pDnsUsrData )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- char * pToken = NULL, * pDnsResultStr = pDnsResult;
- int32_t dnsResultNumber = 0;
- cellularDnsQueryResult_t dnsQueryResult = CELLULAR_DNS_QUERY_UNKNOWN;
-
- if( pModuleContext != NULL )
- {
- if( pModuleContext->dnsResultNumber == ( uint8_t ) 0 )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pDnsResultStr, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pDnsResultStr, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &dnsResultNumber );
-
- if( ( atCoreStatus == CELLULAR_AT_SUCCESS ) && ( dnsResultNumber >= 0 ) &&
- ( dnsResultNumber <= ( int32_t ) UINT8_MAX ) )
- {
- pModuleContext->dnsResultNumber = ( uint8_t ) dnsResultNumber;
- }
- else
- {
- LogDebug( ( "_dnsResultCallback convert string failed %s", pToken ) );
- }
- }
- }
- else if( ( pModuleContext->dnsIndex < pModuleContext->dnsResultNumber ) && ( pDnsResultStr != NULL ) )
- {
- pModuleContext->dnsIndex = pModuleContext->dnsIndex + ( uint8_t ) 1;
-
- ( void ) strncpy( pDnsUsrData, pDnsResultStr, CELLULAR_IP_ADDRESS_MAX_SIZE );
- ( void ) registerDnsEventCallback( pModuleContext, NULL, NULL );
- dnsQueryResult = CELLULAR_DNS_QUERY_SUCCESS;
-
- if( xQueueSend( pModuleContext->pktDnsQueue, &dnsQueryResult, ( TickType_t ) 0 ) != pdPASS )
- {
- LogDebug( ( "_dnsResultCallback sends pktDnsQueue fail" ) );
- }
- }
- else
- {
- LogDebug( ( "_dnsResultCallback spurious DNS response" ) );
- }
- }
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetRatPriority( CellularHandle_t cellularHandle,
- const CellularRat_t * pRatPriorities,
- uint8_t ratPrioritiesLength )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- uint8_t i = 0;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSetRatPriority =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( ( pRatPriorities == NULL ) || ( ratPrioritiesLength == 0U ) ||
- ( ratPrioritiesLength > ( uint8_t ) CELLULAR_MAX_RAT_PRIORITY_COUNT ) )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- /** Using AT+QCFG="nwscanseq",, to set the RAT priorities while searching.
- * can take value 01 for GSM, 02 for CAT M1 and 03 for CAT NB1.
- * can take value 0 for take effect after reboot and 1 for take effect immediately.
- * If < effect > is omitted, RAT priority takes effect immediately.
- * e.g. AT+QCFG="nwscanseq",020301,1 for decreasing RAT Priorities CAT M1, CAT NB1, GSM to take effect immediately. */
- ( void ) strcpy( cmdBuf, "AT+QCFG=\"nwscanseq\"," );
-
- while( i < ratPrioritiesLength )
- {
- if( pRatPriorities[ i ] == CELLULAR_RAT_GSM )
- {
- ( void ) strcat( cmdBuf, "01" );
- }
- else if( pRatPriorities[ i ] == CELLULAR_RAT_CATM1 )
- {
- ( void ) strcat( cmdBuf, "02" );
- }
- else if( pRatPriorities[ i ] == CELLULAR_RAT_NBIOT )
- {
- ( void ) strcat( cmdBuf, "03" );
- }
- else
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- break;
- }
-
- i++;
- }
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSetRatPriority );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetRatPriority( CellularHandle_t cellularHandle,
- CellularRat_t * pRatPriorities,
- uint8_t ratPrioritiesLength,
- uint8_t * pReceiveRatPrioritesLength )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- uint32_t ratIndex = 0;
-
- CellularAtReq_t atReqSetRatPriority =
- {
- "AT+QCFG=\"nwscanseq\"",
- CELLULAR_AT_WITH_PREFIX,
- "+QCFG",
- _Cellular_RecvFuncGetRatPriority,
- pRatPriorities,
- ( uint16_t ) ratPrioritiesLength,
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( ( pRatPriorities == NULL ) || ( ratPrioritiesLength == 0U ) ||
- ( ratPrioritiesLength > ( uint8_t ) CELLULAR_MAX_RAT_PRIORITY_COUNT ) ||
- ( pReceiveRatPrioritesLength == NULL ) )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSetRatPriority );
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- for( ratIndex = 0; ratIndex < ratPrioritiesLength; ratIndex++ )
- {
- if( pRatPriorities[ ratIndex ] == CELLULAR_RAT_INVALID )
- {
- break;
- }
- }
-
- *pReceiveRatPrioritesLength = ratIndex;
- }
-
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetDns( CellularHandle_t cellularHandle,
- uint8_t contextId,
- const char * pDnsServerAddress )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSetDns =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pDnsServerAddress == NULL )
- {
- LogError( ( "Cellular_SetDns: Invalid parameter" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- cellularStatus = _Cellular_IsValidPdn( contextId );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "%s%d,\"%s\"", "AT+QIDNSCFG=", contextId, pDnsServerAddress );
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSetDns );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_SetDns: couldn't set the DNS, cmdBuf:%s, PktRet: %d", cmdBuf, pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetPsmSettings( CellularHandle_t cellularHandle,
- CellularPsmSettings_t * pPsmSettings )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularAtReq_t atReqGetPsm =
- {
- "AT+QPSMS?",
- CELLULAR_AT_WITH_PREFIX,
- "+QPSMS",
- _Cellular_RecvFuncGetPsmSettings,
- pPsmSettings,
- sizeof( CellularPsmSettings_t ),
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pPsmSettings == NULL )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- /* initialize the data. */
- ( void ) memset( pPsmSettings, 0, sizeof( CellularPsmSettings_t ) );
- pPsmSettings->mode = 0xFF;
-
- /* we should always query the PSMsettings from the network. */
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqGetPsm );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_GetPsmSettings: couldn't retrieve PSM settings" ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static uint32_t appendBinaryPattern( char * cmdBuf,
- uint32_t cmdLen,
- uint32_t value,
- bool endOfString )
-{
- uint32_t retLen = 0;
-
- if( cmdBuf != NULL )
- {
- if( value != 0U )
- {
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, cmdLen, "\"" PRINTF_BINARY_PATTERN_INT8 "\"%c",
- PRINTF_BYTE_TO_BINARY_INT8( value ), endOfString ? '\0' : ',' );
- }
- else
- {
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, cmdLen, "%c", endOfString ? '\0' : ',' );
- }
-
- retLen = strlen( cmdBuf );
- }
-
- return retLen;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t socketSendDataPrefix( void * pCallbackContext,
- char * pLine,
- uint32_t * pBytesRead )
-{
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
-
- if( ( pLine == NULL ) || ( pBytesRead == NULL ) )
- {
- LogError( ( "socketSendDataPrefix: pLine is invalid or pBytesRead is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( pCallbackContext != NULL )
- {
- LogError( ( "socketSendDataPrefix: pCallbackContext is not NULL" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( *pBytesRead != 2U )
- {
- LogDebug( ( "socketSendDataPrefix: pBytesRead %u %s is not 1", *pBytesRead, pLine ) );
- }
- else
- {
- /* After the data prefix, there should not be any data in stream.
- * Cellular commmon processes AT command in lines. Add a '\0' after '>'. */
- if( strcmp( pLine, "> " ) == 0 )
- {
- pLine[ 1 ] = '\n';
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetPsmSettings( CellularHandle_t cellularHandle,
- const CellularPsmSettings_t * pPsmSettings )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- uint32_t cmdBufLen = 0;
- CellularAtReq_t atReqSetPsm =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pPsmSettings == NULL )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "AT+QPSMS=%d,", pPsmSettings->mode );
- cmdBufLen = strlen( cmdBuf );
- cmdBufLen = cmdBufLen + appendBinaryPattern( &cmdBuf[ cmdBufLen ], ( CELLULAR_AT_CMD_MAX_SIZE - cmdBufLen ),
- pPsmSettings->periodicRauValue, false );
- cmdBufLen = cmdBufLen + appendBinaryPattern( &cmdBuf[ cmdBufLen ], ( CELLULAR_AT_CMD_MAX_SIZE - cmdBufLen ),
- pPsmSettings->gprsReadyTimer, false );
- cmdBufLen = cmdBufLen + appendBinaryPattern( &cmdBuf[ cmdBufLen ], ( CELLULAR_AT_CMD_MAX_SIZE - cmdBufLen ),
- pPsmSettings->periodicTauValue, false );
- cmdBufLen = cmdBufLen + appendBinaryPattern( &cmdBuf[ cmdBufLen ], ( CELLULAR_AT_CMD_MAX_SIZE - cmdBufLen ),
- pPsmSettings->activeTimeValue, true );
-
- LogDebug( ( "PSM setting: %s ", cmdBuf ) );
-
- if( cmdBufLen < CELLULAR_AT_CMD_MAX_SIZE )
- {
- /* we should always query the PSMsettings from the network. */
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSetPsm );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_SetPsmSettings: couldn't set PSM settings" ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
- else
- {
- cellularStatus = CELLULAR_NO_MEMORY;
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_DeactivatePdn( CellularHandle_t cellularHandle,
- uint8_t contextId )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqDeactPdn =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- cellularStatus = _Cellular_IsValidPdn( contextId );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "%s%d", "AT+QIDEACT=", contextId );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqDeactPdn, PDN_DEACTIVATION_PACKET_REQ_TIMEOUT_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_DeactivatePdn: can't deactivate PDN, cmdBuf:%s, PktRet: %d", cmdBuf, pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ActivatePdn( CellularHandle_t cellularHandle,
- uint8_t contextId )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
-
- CellularAtReq_t atReqActPdn =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- cellularStatus = _Cellular_IsValidPdn( contextId );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "%s%d", "AT+QIACT=", contextId );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqActPdn, PDN_ACTIVATION_PACKET_REQ_TIMEOUT_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_ActivatePdn: can't activate PDN, cmdBuf:%s, PktRet: %d", cmdBuf, pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetPdnConfig( CellularHandle_t cellularHandle,
- uint8_t contextId,
- const CellularPdnConfig_t * pPdnConfig )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSetPdn =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- if( pPdnConfig == NULL )
- {
- LogError( ( "Cellular_ATCommandRaw: Input parameter is NULL" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- cellularStatus = _Cellular_IsValidPdn( contextId );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "%s%d,%d,\"%s\",\"%s\",\"%s\",%d",
- "AT+QICSGP=",
- contextId,
- pPdnConfig->pdnContextType,
- pPdnConfig->apnName,
- pPdnConfig->username,
- pPdnConfig->password,
- pPdnConfig->pdnAuthType );
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSetPdn );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_SetPdnConfig: can't set PDN, cmdBuf:%s, PktRet: %d", cmdBuf, pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetSignalInfo( CellularHandle_t cellularHandle,
- CellularSignalInfo_t * pSignalInfo )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularRat_t rat = CELLULAR_RAT_INVALID;
- CellularAtReq_t atReqQuerySignalInfo =
- {
- "AT+QCSQ",
- CELLULAR_AT_WITH_PREFIX,
- "+QCSQ",
- _Cellular_RecvFuncGetSignalInfo,
- pSignalInfo,
- sizeof( CellularSignalInfo_t ),
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pSignalInfo == NULL )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- cellularStatus = _Cellular_GetCurrentRat( pContext, &rat );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqQuerySignalInfo );
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- /* If the convert failed, the API will return CELLULAR_INVALID_SIGNAL_BAR_VALUE in bars field. */
- ( void ) _Cellular_ComputeSignalBars( rat, pSignalInfo );
- }
-
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-CellularError_t Cellular_SocketRecv( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- /* coverity[misra_c_2012_rule_8_13_violation] */
- uint8_t * pBuffer,
- uint32_t bufferLength,
- /* coverity[misra_c_2012_rule_8_13_violation] */
- uint32_t * pReceivedDataLength )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- uint32_t recvTimeout = DATA_READ_TIMEOUT_MS;
- uint32_t recvLen = bufferLength;
- _socketDataRecv_t dataRecv =
- {
- pReceivedDataLength,
- pBuffer,
- NULL
- };
- CellularAtReq_t atReqSocketRecv =
- {
- cmdBuf,
- CELLULAR_AT_MULTI_DATA_WO_PREFIX,
- "+QIRD",
- _Cellular_RecvFuncData,
- ( void * ) &dataRecv,
- bufferLength,
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogError( ( "_Cellular_CheckLibraryStatus failed." ) );
- }
- else if( socketHandle == NULL )
- {
- LogError( ( "Cellular_SocketRecv: Invalid socket handle." ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ( pBuffer == NULL ) || ( pReceivedDataLength == NULL ) || ( bufferLength == 0U ) )
- {
- LogError( ( "Cellular_SocketRecv: Bad input Param." ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketHandle->socketState != SOCKETSTATE_CONNECTED )
- {
- /* Check the socket connection state. */
- LogInfo( ( "Cellular_SocketRecv: socket state %d is not connected.", socketHandle->socketState ) );
-
- if( ( socketHandle->socketState == SOCKETSTATE_ALLOCATED ) || ( socketHandle->socketState == SOCKETSTATE_CONNECTING ) )
- {
- cellularStatus = CELLULAR_SOCKET_NOT_CONNECTED;
- }
- else
- {
- cellularStatus = CELLULAR_SOCKET_CLOSED;
- }
- }
- else
- {
- /* Update recvLen to maximum module length. */
- if( CELLULAR_MAX_RECV_DATA_LEN <= bufferLength )
- {
- recvLen = ( uint32_t ) CELLULAR_MAX_RECV_DATA_LEN;
- }
-
- /* Update receive timeout to default timeout if not set with setsocketopt. */
- if( socketHandle->recvTimeoutMs != 0U )
- {
- recvTimeout = socketHandle->recvTimeoutMs;
- }
-
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE,
- "%s%ld,%ld", "AT+QIRD=", socketHandle->socketId, recvLen );
- pktStatus = _Cellular_TimeoutAtcmdDataRecvRequestWithCallback( pContext,
- atReqSocketRecv, recvTimeout, socketRecvDataPrefix, NULL );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- /* Reset data handling parameters. */
- LogError( ( "_Cellular_RecvData: Data Receive fail, pktStatus: %d", pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-CellularError_t Cellular_SocketSend( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- const uint8_t * pData,
- uint32_t dataLength,
- /* coverity[misra_c_2012_rule_8_13_violation] */
- uint32_t * pSentDataLength )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- uint32_t sendTimeout = DATA_SEND_TIMEOUT_MS;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSocketSend =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
- CellularAtDataReq_t atDataReqSocketSend =
- {
- pData,
- dataLength,
- pSentDataLength,
- NULL,
- 0
- };
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogError( ( "_Cellular_CheckLibraryStatus failed." ) );
- }
- else if( socketHandle == NULL )
- {
- LogError( ( "Cellular_SocketSend: Invalid socket handle." ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ( pData == NULL ) || ( pSentDataLength == NULL ) || ( dataLength == 0U ) )
- {
- LogError( ( "Cellular_SocketSend: Invalid parameter." ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketHandle->socketState != SOCKETSTATE_CONNECTED )
- {
- /* Check the socket connection state. */
- LogInfo( ( "Cellular_SocketSend: socket state %d is not connected.", socketHandle->socketState ) );
-
- if( ( socketHandle->socketState == SOCKETSTATE_ALLOCATED ) || ( socketHandle->socketState == SOCKETSTATE_CONNECTING ) )
- {
- cellularStatus = CELLULAR_SOCKET_NOT_CONNECTED;
- }
- else
- {
- cellularStatus = CELLULAR_SOCKET_CLOSED;
- }
- }
- else
- {
- /* Send data length check. */
- if( dataLength > ( uint32_t ) CELLULAR_MAX_SEND_DATA_LEN )
- {
- atDataReqSocketSend.dataLen = ( uint32_t ) CELLULAR_MAX_SEND_DATA_LEN;
- }
-
- /* Check send timeout. If not set by setsockopt, use default value. */
- if( socketHandle->sendTimeoutMs != 0U )
- {
- sendTimeout = socketHandle->sendTimeoutMs;
- }
-
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "%s%ld,%ld",
- "AT+QISEND=", socketHandle->socketId, atDataReqSocketSend.dataLen );
-
- pktStatus = _Cellular_AtcmdDataSend( pContext, atReqSocketSend, atDataReqSocketSend,
- socketSendDataPrefix, NULL,
- PACKET_REQ_TIMEOUT_MS, sendTimeout, 0U );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_SocketSend: Data send fail, PktRet: %d", pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketClose( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSockClose =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( socketHandle == NULL )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else
- {
- if( socketHandle->socketState == SOCKETSTATE_CONNECTING )
- {
- LogWarn( ( "Cellular_SocketClose: Socket state is SOCKETSTATE_CONNECTING." ) );
- }
-
- if( ( socketHandle->socketState == SOCKETSTATE_CONNECTING ) ||
- ( socketHandle->socketState == SOCKETSTATE_CONNECTED ) ||
- ( socketHandle->socketState == SOCKETSTATE_DISCONNECTED ) )
- {
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "%s%ld", "AT+QICLOSE=", socketHandle->socketId );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqSockClose,
- SOCKET_DISCONNECT_PACKET_REQ_TIMEOUT_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_SocketClose: Socket close failed, cmdBuf:%s, PktRet: %d", cmdBuf, pktStatus ) );
- }
- }
-
- /* Ignore the result from the info, and force to remove the socket. */
- cellularStatus = _Cellular_RemoveSocketData( pContext, socketHandle );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketConnect( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketAccessMode_t dataAccessMode,
- const CellularSocketAddress_t * pRemoteSocketAddress )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSocketConnect =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogError( ( "Cellular_SocketConnect: _Cellular_CheckLibraryStatus failed." ) );
- }
- else if( pRemoteSocketAddress == NULL )
- {
- LogError( ( "Cellular_SocketConnect: Invalid socket address." ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketHandle == NULL )
- {
- LogError( ( "Cellular_SocketConnect: Invalid socket handle." ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ( socketHandle->socketState == SOCKETSTATE_CONNECTED ) || ( socketHandle->socketState == SOCKETSTATE_CONNECTING ) )
- {
- LogError( ( "Cellular_SocketConnect: Not allowed in state %d.", socketHandle->socketState ) );
- cellularStatus = CELLULAR_NOT_ALLOWED;
- }
- else
- {
- cellularStatus = storeAccessModeAndAddress( pContext, socketHandle, dataAccessMode, pRemoteSocketAddress );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Builds the Socket connect command. */
- cellularStatus = buildSocketConnect( socketHandle, cmdBuf );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Set the socket state to connecting state. If cellular modem returns error,
- * revert the state to allocated state. */
- socketHandle->socketState = SOCKETSTATE_CONNECTING;
-
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqSocketConnect,
- SOCKET_CONNECT_PACKET_REQ_TIMEOUT_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_SocketConnect: Socket connect failed, cmdBuf:%s, PktRet: %d", cmdBuf, pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- /* Revert the state to allocated state. */
- socketHandle->socketState = SOCKETSTATE_ALLOCATED;
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-CellularError_t Cellular_GetPdnStatus( CellularHandle_t cellularHandle,
- CellularPdnStatus_t * pPdnStatusBuffers,
- uint8_t numStatusBuffers,
- uint8_t * pNumStatus )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- const CellularPdnStatus_t * pTempPdnStatusBuffer = pPdnStatusBuffers;
- uint8_t numBuffers = 0;
- CellularAtReq_t atReqGetPdnStatus =
- {
- "AT+QIACT?",
- CELLULAR_AT_WITH_PREFIX,
- "+QIACT",
- _Cellular_RecvFuncGetPdnStatus,
- pPdnStatusBuffers,
- numStatusBuffers,
- };
-
- if( ( pTempPdnStatusBuffer == NULL ) || ( pNumStatus == NULL ) || ( numStatusBuffers < 1u ) )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- LogWarn( ( "_Cellular_GetPdnStatus: Bad input Parameter " ) );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqGetPdnStatus );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Populate the Valid number of statuses. */
- *pNumStatus = 0;
- numBuffers = numStatusBuffers;
-
- while( numBuffers != 0U )
- {
- /* Check if the PDN state is valid. The context ID of the first
- * invalid PDN status is set to FF. */
- if( ( pTempPdnStatusBuffer->contextId <= CELLULAR_PDN_CONTEXT_ID_MAX ) &&
- ( pTempPdnStatusBuffer->contextId != INVALID_PDN_INDEX ) )
- {
- ( *pNumStatus ) += 1U;
- }
- else
- {
- break;
- }
-
- numBuffers--;
- pTempPdnStatusBuffer++;
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetSimCardStatus( CellularHandle_t cellularHandle,
- CellularSimCardStatus_t * pSimCardStatus )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularAtReq_t atReqGetSimCardStatus =
- {
- "AT+QSIMSTAT?",
- CELLULAR_AT_WITH_PREFIX,
- "+QSIMSTAT",
- _Cellular_RecvFuncGetSimCardStatus,
- &pSimCardStatus->simCardState,
- sizeof( CellularSimCardState_t ),
- };
- CellularAtReq_t atReqGetSimLockStatus =
- {
- "AT+CPIN?",
- CELLULAR_AT_WITH_PREFIX,
- "+CPIN",
- _Cellular_RecvFuncGetSimLockStatus,
- &pSimCardStatus->simCardLockState,
- sizeof( CellularSimCardLockState_t ),
- };
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pSimCardStatus == NULL )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- /* Initialize the sim state and the sim lock state. */
- pSimCardStatus->simCardState = CELLULAR_SIM_CARD_UNKNOWN;
- pSimCardStatus->simCardLockState = CELLULAR_SIM_CARD_LOCK_UNKNOWN;
-
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqGetSimCardStatus );
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqGetSimLockStatus );
- }
-
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- LogDebug( ( "_Cellular_GetSimStatus, Sim Insert State[%d], Lock State[%d]",
- pSimCardStatus->simCardState, pSimCardStatus->simCardLockState ) );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetSimCardInfo( CellularHandle_t cellularHandle,
- CellularSimCardInfo_t * pSimCardInfo )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
-
- CellularAtReq_t atReqGetIccid =
- {
- "AT+QCCID",
- CELLULAR_AT_WITH_PREFIX,
- "+QCCID",
- _Cellular_RecvFuncGetIccid,
- pSimCardInfo->iccid,
- CELLULAR_ICCID_MAX_SIZE + 1U,
- };
- CellularAtReq_t atReqGetImsi =
- {
- "AT+CIMI",
- CELLULAR_AT_WO_PREFIX,
- NULL,
- _Cellular_RecvFuncGetImsi,
- pSimCardInfo->imsi,
- CELLULAR_IMSI_MAX_SIZE + 1U,
- };
- CellularAtReq_t atReqGetHplmn =
- {
- "AT+CRSM=176,28514,0,0,0",
- CELLULAR_AT_WITH_PREFIX,
- "+CRSM",
- _Cellular_RecvFuncGetHplmn,
- &pSimCardInfo->plmn,
- sizeof( CellularPlmnInfo_t ),
- };
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pSimCardInfo == NULL )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- ( void ) memset( pSimCardInfo, 0, sizeof( CellularSimCardInfo_t ) );
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqGetImsi );
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqGetHplmn );
- }
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqGetIccid );
- }
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- else
- {
- LogDebug( ( "SimInfo updated: IMSI:%s, Hplmn:%s%s, ICCID:%s",
- pSimCardInfo->imsi, pSimCardInfo->plmn.mcc, pSimCardInfo->plmn.mnc,
- pSimCardInfo->iccid ) );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterUrcSignalStrengthChangedCallback( CellularHandle_t cellularHandle,
- CellularUrcSignalStrengthChangedCallback_t signalStrengthChangedCallback,
- void * pCallbackContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
-
- /* pContext is checked in the common library. */
- cellularStatus = Cellular_CommonRegisterUrcSignalStrengthChangedCallback(
- cellularHandle, signalStrengthChangedCallback, pCallbackContext );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- if( signalStrengthChangedCallback != NULL )
- {
- cellularStatus = controlSignalStrengthIndication( pContext, true );
- }
- else
- {
- cellularStatus = controlSignalStrengthIndication( pContext, false );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetHostByName( CellularHandle_t cellularHandle,
- uint8_t contextId,
- const char * pcHostName,
- char * pResolvedAddress )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_QUERY_DNS_MAX_SIZE ];
- cellularDnsQueryResult_t dnsQueryResult = CELLULAR_DNS_QUERY_UNKNOWN;
- cellularModuleContext_t * pModuleContext = NULL;
- CellularAtReq_t atReqQueryDns =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( ( pcHostName == NULL ) || ( pResolvedAddress == NULL ) )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- cellularStatus = _Cellular_IsValidPdn( contextId );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- cellularStatus = _Cellular_GetModuleContext( pContext, ( void ** ) &pModuleContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- PlatformMutex_Lock( &pModuleContext->dnsQueryMutex );
- pModuleContext->dnsResultNumber = 0;
- pModuleContext->dnsIndex = 0;
- ( void ) xQueueReset( pModuleContext->pktDnsQueue );
- cellularStatus = registerDnsEventCallback( pModuleContext, _dnsResultCallback, pResolvedAddress );
- }
-
- /* Send the AT command and wait the URC result. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_QUERY_DNS_MAX_SIZE,
- "AT+QIDNSGIP=%u,\"%s\"", contextId, pcHostName );
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqQueryDns );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_GetHostByName: couldn't resolve host name" ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- PlatformMutex_Unlock( &pModuleContext->dnsQueryMutex );
- }
- }
-
- /* URC handler calls the callback to unblock this function. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- if( xQueueReceive( pModuleContext->pktDnsQueue, &dnsQueryResult,
- pdMS_TO_TICKS( DNS_QUERY_TIMEOUT_MS ) ) == pdTRUE )
- {
- if( dnsQueryResult != CELLULAR_DNS_QUERY_SUCCESS )
- {
- cellularStatus = CELLULAR_UNKNOWN;
- }
- }
- else
- {
- ( void ) registerDnsEventCallback( pModuleContext, NULL, NULL );
- cellularStatus = CELLULAR_TIMEOUT;
- }
-
- PlatformMutex_Unlock( &pModuleContext->dnsQueryMutex );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-CellularError_t Cellular_Init( CellularHandle_t * pCellularHandle,
- const CellularCommInterface_t * pCommInterface )
-{
- CellularTokenTable_t cellularTokenTable =
- {
- .pCellularUrcHandlerTable = CellularUrcHandlerTable,
- .cellularPrefixToParserMapSize = CellularUrcHandlerTableSize,
- .pCellularSrcTokenErrorTable = CellularSrcTokenErrorTable,
- .cellularSrcTokenErrorTableSize = CellularSrcTokenErrorTableSize,
- .pCellularSrcTokenSuccessTable = CellularSrcTokenSuccessTable,
- .cellularSrcTokenSuccessTableSize = CellularSrcTokenSuccessTableSize,
- .pCellularUrcTokenWoPrefixTable = CellularUrcTokenWoPrefixTable,
- .cellularUrcTokenWoPrefixTableSize = CellularUrcTokenWoPrefixTableSize,
- .pCellularSrcExtraTokenSuccessTable = NULL,
- .cellularSrcExtraTokenSuccessTableSize = 0
- };
-
- return Cellular_CommonInit( pCellularHandle, pCommInterface, &cellularTokenTable );
-}
-
-/*-----------------------------------------------------------*/
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96_urc_handler.c b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96_urc_handler.c
deleted file mode 100644
index d872c0d9b..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96_urc_handler.c
+++ /dev/null
@@ -1,807 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-#include "cellular_config.h"
-#include "cellular_config_defaults.h"
-
-/* Standard includes. */
-#include
-#include
-#include
-
-#include "cellular_platform.h"
-#include "cellular_types.h"
-#include "cellular_common.h"
-#include "cellular_common_api.h"
-#include "cellular_common_portable.h"
-#include "cellular_bg96.h"
-
-/*-----------------------------------------------------------*/
-
-static void _Cellular_ProcessPowerDown( CellularContext_t * pContext,
- char * pInputLine );
-static void _Cellular_ProcessPsmPowerDown( CellularContext_t * pContext,
- char * pInputLine );
-static void _Cellular_ProcessModemRdy( CellularContext_t * pContext,
- char * pInputLine );
-static void _Cellular_ProcessSocketOpen( CellularContext_t * pContext,
- char * pInputLine );
-static void _Cellular_ProcessSocketurc( CellularContext_t * pContext,
- char * pInputLine );
-static void _Cellular_ProcessSimstat( CellularContext_t * pContext,
- char * pInputLine );
-static void _Cellular_ProcessIndication( CellularContext_t * pContext,
- char * pInputLine );
-
-/*-----------------------------------------------------------*/
-
-/* Try to Keep this map in Alphabetical order. */
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularAtParseTokenMap_t CellularUrcHandlerTable[] =
-{
- { "CEREG", Cellular_CommonUrcProcessCereg },
- { "CGREG", Cellular_CommonUrcProcessCgreg },
- { "CREG", Cellular_CommonUrcProcessCreg },
- { "NORMAL POWER DOWN", _Cellular_ProcessPowerDown },
- { "PSM POWER DOWN", _Cellular_ProcessPsmPowerDown },
- { "QIND", _Cellular_ProcessIndication },
- { "QIOPEN", _Cellular_ProcessSocketOpen },
- { "QIURC", _Cellular_ProcessSocketurc },
- { "QSIMSTAT", _Cellular_ProcessSimstat },
- { "RDY", _Cellular_ProcessModemRdy }
-};
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-uint32_t CellularUrcHandlerTableSize = sizeof( CellularUrcHandlerTable ) / sizeof( CellularAtParseTokenMap_t );
-
-/*-----------------------------------------------------------*/
-
-/* internal function of _parseSocketOpen to reduce complexity. */
-static CellularPktStatus_t _parseSocketOpenNextTok( const char * pToken,
- uint32_t sockIndex,
- CellularSocketContext_t * pSocketData )
-{
- int32_t sockStatus = 0;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
-
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &sockStatus );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( sockStatus != 0 )
- {
- pSocketData->socketState = SOCKETSTATE_DISCONNECTED;
- LogError( ( "_parseSocketOpen: Socket open failed, conn %d, status %d", sockIndex, sockStatus ) );
- }
- else
- {
- pSocketData->socketState = SOCKETSTATE_CONNECTED;
- LogDebug( ( "_parseSocketOpen: Socket open success, conn %d", sockIndex ) );
- }
-
- /* Indicate the upper layer about the socket open status. */
- if( pSocketData->openCallback != NULL )
- {
- if( sockStatus != 0 )
- {
- pSocketData->openCallback( CELLULAR_URC_SOCKET_OPEN_FAILED,
- pSocketData, pSocketData->pOpenCallbackContext );
- }
- else
- {
- pSocketData->openCallback( CELLULAR_URC_SOCKET_OPENED,
- pSocketData, pSocketData->pOpenCallbackContext );
- }
- }
- else
- {
- LogError( ( ( "_parseSocketOpen: Socket open callback for conn %d is not set!!", sockIndex ) ) );
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Cellular common prototype. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static void _Cellular_ProcessSocketOpen( CellularContext_t * pContext,
- char * pInputLine )
-{
- char * pUrcStr = NULL, * pToken = NULL;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- uint32_t sockIndex = 0;
- int32_t tempValue = 0;
- CellularSocketContext_t * pSocketData = NULL;
-
- if( pContext == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( pInputLine == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pUrcStr = pInputLine;
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pUrcStr );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pUrcStr, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) &&
- ( tempValue < ( int32_t ) CELLULAR_NUM_SOCKET_MAX ) )
- {
- sockIndex = ( uint32_t ) tempValue;
- }
- else
- {
- LogError( ( ( "Error processing in Socket index. token %s", pToken ) ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- pSocketData = _Cellular_GetSocketData( pContext, sockIndex );
-
- if( pSocketData != NULL )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pUrcStr, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- pktStatus = _parseSocketOpenNextTok( pToken, sockIndex, pSocketData );
- }
- }
- else
- {
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- }
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
- }
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogDebug( ( "Socket Open URC Parse failure" ) );
- }
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t _parseUrcIndicationCsq( const CellularContext_t * pContext,
- char * pUrcStr )
-{
- char * pToken = NULL;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- int32_t retStrtoi = 0;
- int16_t csqRssi = CELLULAR_INVALID_SIGNAL_VALUE, csqBer = CELLULAR_INVALID_SIGNAL_VALUE;
- CellularSignalInfo_t signalInfo = { 0 };
- char * pLocalUrcStr = pUrcStr;
-
- if( ( pContext == NULL ) || ( pUrcStr == NULL ) )
- {
- atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
- }
- else
- {
- /* Parse the RSSI index from string and convert it. */
- atCoreStatus = Cellular_ATGetNextTok( &pLocalUrcStr, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &retStrtoi );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( retStrtoi >= INT16_MIN ) && ( retStrtoi <= ( int32_t ) INT16_MAX ) )
- {
- cellularStatus = _Cellular_ConvertCsqSignalRssi( ( int16_t ) retStrtoi, &csqRssi );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
- }
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- /* Parse the BER index from string and convert it. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pLocalUrcStr, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &retStrtoi );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( retStrtoi >= INT16_MIN ) &&
- ( retStrtoi <= ( int32_t ) INT16_MAX ) )
- {
- cellularStatus = _Cellular_ConvertCsqSignalBer( ( int16_t ) retStrtoi, &csqBer );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
- }
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- /* Handle the callback function. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- signalInfo.rssi = csqRssi;
- signalInfo.rsrp = CELLULAR_INVALID_SIGNAL_VALUE;
- signalInfo.rsrq = CELLULAR_INVALID_SIGNAL_VALUE;
- signalInfo.ber = csqBer;
- signalInfo.bars = CELLULAR_INVALID_SIGNAL_BAR_VALUE;
- _Cellular_SignalStrengthChangedCallback( pContext, CELLULAR_URC_EVENT_SIGNAL_CHANGED, &signalInfo );
- }
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Cellular common prototype. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static void _Cellular_ProcessIndication( CellularContext_t * pContext,
- char * pInputLine )
-{
- char * pUrcStr = NULL, * pToken = NULL;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- /* Check context status. */
- if( pContext == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( pInputLine == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pUrcStr = pInputLine;
- atCoreStatus = Cellular_ATRemoveAllDoubleQuote( pUrcStr );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveLeadingWhiteSpaces( &pUrcStr );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pUrcStr, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( strstr( pToken, "csq" ) != NULL )
- {
- pktStatus = _parseUrcIndicationCsq( ( const CellularContext_t * ) pContext, pUrcStr );
- }
- }
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
- }
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogDebug( ( "UrcIndication Parse failure" ) );
- }
-}
-
-/*-----------------------------------------------------------*/
-
-static void _informDataReadyToUpperLayer( CellularSocketContext_t * pSocketData )
-{
- /* Indicate the upper layer about the data reception. */
- if( ( pSocketData != NULL ) && ( pSocketData->dataReadyCallback != NULL ) )
- {
- pSocketData->dataReadyCallback( pSocketData, pSocketData->pDataReadyCallbackContext );
- }
- else
- {
- LogError( ( ( "_parseSocketUrc: Data ready callback not set!!" ) ) );
- }
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t _parseSocketUrcRecv( const CellularContext_t * pContext,
- char * pUrcStr )
-{
- char * pToken = NULL;
- char * pLocalUrcStr = pUrcStr;
- int32_t tempValue = 0;
- uint32_t sockIndex = 0;
- CellularSocketContext_t * pSocketData = NULL;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
-
- atCoreStatus = Cellular_ATGetNextTok( &pLocalUrcStr, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) && ( tempValue < ( int32_t ) CELLULAR_NUM_SOCKET_MAX ) )
- {
- sockIndex = ( uint32_t ) tempValue;
- }
- else
- {
- LogError( ( ( "Error in processing SockIndex. Token %s", pToken ) ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- pSocketData = _Cellular_GetSocketData( pContext, sockIndex );
-
- if( pSocketData != NULL )
- {
- if( pSocketData->dataMode == CELLULAR_ACCESSMODE_BUFFER )
- {
- /* Data received indication in buffer mode, need to fetch the data. */
- LogDebug( ( "Data Received on socket Conn Id %d", sockIndex ) );
- _informDataReadyToUpperLayer( pSocketData );
- }
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t _parseSocketUrcClosed( const CellularContext_t * pContext,
- char * pUrcStr )
-{
- char * pToken = NULL;
- char * pLocalUrcStr = pUrcStr;
- int32_t tempValue = 0;
- uint32_t sockIndex = 0;
- CellularSocketContext_t * pSocketData = NULL;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
-
- atCoreStatus = Cellular_ATGetNextTok( &pLocalUrcStr, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( tempValue < ( int32_t ) CELLULAR_NUM_SOCKET_MAX )
- {
- sockIndex = ( uint32_t ) tempValue;
- }
- else
- {
- LogError( ( ( "Error in processing Socket Index. Token %s", pToken ) ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- pSocketData = _Cellular_GetSocketData( pContext, sockIndex );
-
- if( pSocketData != NULL )
- {
- pSocketData->socketState = SOCKETSTATE_DISCONNECTED;
- LogDebug( ( "Socket closed. Conn Id %d", sockIndex ) );
-
- /* Indicate the upper layer about the socket close. */
- if( pSocketData->closedCallback != NULL )
- {
- pSocketData->closedCallback( pSocketData, pSocketData->pClosedCallbackContext );
- }
- else
- {
- LogInfo( ( "_parseSocketUrc: Socket close callback not set!!" ) );
- }
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t _parseSocketUrcAct( const CellularContext_t * pContext,
- char * pUrcStr )
-{
- int32_t tempValue = 0;
- char * pToken = NULL;
- char * pLocalUrcStr = pUrcStr;
- uint8_t contextId = 0;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
-
- atCoreStatus = Cellular_ATGetNextTok( &pLocalUrcStr, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( ( tempValue >= ( int32_t ) CELLULAR_PDN_CONTEXT_ID_MIN ) &&
- ( tempValue <= ( int32_t ) CELLULAR_PDN_CONTEXT_ID_MAX ) ) )
- {
- contextId = ( uint8_t ) tempValue;
-
- if( _Cellular_IsValidPdn( contextId ) == CELLULAR_SUCCESS )
- {
- LogDebug( ( "PDN deactivated. Context Id %d", contextId ) );
- /* Indicate the upper layer about the PDN deactivate. */
- _Cellular_PdnEventCallback( pContext, CELLULAR_URC_EVENT_PDN_DEACTIVATED, contextId );
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- LogError( ( ( "Error in processing Context Id. Token %s", pToken ) ) );
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t _parseSocketUrcDns( const CellularContext_t * pContext,
- char * pUrcStr )
-{
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- cellularModuleContext_t * pModuleContext = NULL;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- if( pContext == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( pUrcStr == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- cellularStatus = _Cellular_GetModuleContext( pContext, ( void ** ) &pModuleContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- }
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- if( pModuleContext->dnsEventCallback != NULL )
- {
- pModuleContext->dnsEventCallback( pModuleContext, pUrcStr, pModuleContext->pDnsUsrData );
- }
- else
- {
- LogDebug( ( "_parseSocketUrcDns: spurious DNS response!!" ) );
- pktStatus = CELLULAR_PKT_STATUS_INVALID_DATA;
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Cellular common prototype. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static void _Cellular_ProcessSocketurc( CellularContext_t * pContext,
- char * pInputLine )
-{
- char * pUrcStr = NULL, * pToken = NULL;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- if( pContext == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( pInputLine == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pUrcStr = pInputLine;
- atCoreStatus = Cellular_ATRemoveAllDoubleQuote( pUrcStr );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveLeadingWhiteSpaces( &pUrcStr );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pUrcStr, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- /* Check if this is a data receive indication. */
-
- /* this whole if as a function and return pktstatus
- * take iotat_getnexttok inside
- * convert atcore status to pktstatus. */
- if( strstr( pToken, "recv" ) != NULL )
- {
- pktStatus = _parseSocketUrcRecv( pContext, pUrcStr );
- }
- else if( strcmp( pToken, "closed" ) == 0 )
- {
- pktStatus = _parseSocketUrcClosed( pContext, pUrcStr );
- }
- else if( strcmp( pToken, "pdpdeact" ) == 0 )
- {
- pktStatus = _parseSocketUrcAct( pContext, pUrcStr );
- }
- else if( strcmp( pToken, "dnsgip" ) == 0 )
- {
- pktStatus = _parseSocketUrcDns( pContext, pUrcStr );
- }
- else
- {
- /* Empty else MISRA 15.7 */
- }
- }
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
- }
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogDebug( ( "Socketurc Parse failure" ) );
- }
-}
-
-/*-----------------------------------------------------------*/
-
-/* Cellular common prototype. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static void _Cellular_ProcessSimstat( CellularContext_t * pContext,
- char * pInputLine )
-{
- CellularSimCardState_t simCardState = CELLULAR_SIM_CARD_UNKNOWN;
-
- if( pContext != NULL )
- {
- ( void ) _Cellular_ParseSimstat( pInputLine, &simCardState );
- }
-}
-
-/*-----------------------------------------------------------*/
-
-/* Cellular common prototype. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static void _Cellular_ProcessPowerDown( CellularContext_t * pContext,
- char * pInputLine )
-{
- /* The token is the pInputLine. No need to process the pInputLine. */
- ( void ) pInputLine;
-
- if( pContext == NULL )
- {
- LogError( ( ( "_Cellular_ProcessPowerDown: Context not set" ) ) );
- }
- else
- {
- LogDebug( ( "_Cellular_ProcessPowerDown: Modem Power down event received" ) );
- _Cellular_ModemEventCallback( pContext, CELLULAR_MODEM_EVENT_POWERED_DOWN );
- }
-}
-
-/*-----------------------------------------------------------*/
-
-/* Cellular common prototype. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static void _Cellular_ProcessPsmPowerDown( CellularContext_t * pContext,
- char * pInputLine )
-{
- /* The token is the pInputLine. No need to process the pInputLine. */
- ( void ) pInputLine;
-
- if( pContext == NULL )
- {
- LogError( ( ( "_Cellular_ProcessPowerDown: Context not set" ) ) );
- }
- else
- {
- LogDebug( ( "_Cellular_ProcessPsmPowerDown: Modem PSM power down event received" ) );
- _Cellular_ModemEventCallback( pContext, CELLULAR_MODEM_EVENT_PSM_ENTER );
- }
-}
-
-/*-----------------------------------------------------------*/
-
-/* Cellular common prototype. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static void _Cellular_ProcessModemRdy( CellularContext_t * pContext,
- char * pInputLine )
-{
- /* The token is the pInputLine. No need to process the pInputLine. */
- ( void ) pInputLine;
-
- if( pContext == NULL )
- {
- LogWarn( ( "_Cellular_ProcessModemRdy: Context not set" ) );
- }
- else
- {
- LogDebug( ( "_Cellular_ProcessModemRdy: Modem Ready event received" ) );
- _Cellular_ModemEventCallback( pContext, CELLULAR_MODEM_EVENT_BOOTUP_OR_REBOOT );
- }
-}
-
-/*-----------------------------------------------------------*/
-
-/* Cellular common prototype. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-CellularPktStatus_t _Cellular_ParseSimstat( char * pInputStr,
- CellularSimCardState_t * pSimState )
-{
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- char * pToken = NULL;
- char * pLocalInputStr = pInputStr;
- int32_t tempValue = 0;
-
- if( ( pInputStr == NULL ) || ( strlen( pInputStr ) == 0U ) ||
- ( strlen( pInputStr ) < 2U ) || ( pSimState == NULL ) )
- {
- LogError( ( ( "_Cellular_ProcessQsimstat Input data is invalid %s", pInputStr ) ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- atCoreStatus = Cellular_ATGetNextTok( &pLocalInputStr, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- LogDebug( ( "QSIMSTAT URC Enable: %s", pToken ) );
- atCoreStatus = Cellular_ATGetNextTok( &pLocalInputStr, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- LogDebug( ( " Sim insert status: %s", pToken ) );
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) &&
- ( tempValue < ( int32_t ) CELLULAR_SIM_CARD_STATUS_MAX ) )
- {
- /* Variable "tempValue" is ensured that it is valid and within
- * a valid range. Hence, assigning the value at the pointer of
- * type cellular_SimCardState_t with an enum cast. */
- /* coverity[misra_c_2012_rule_10_5_violation] */
- *pSimState = ( CellularSimCardState_t ) tempValue;
- }
- else
- {
- LogError( ( ( "Error in processing SIM state. token %s", pToken ) ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96_wrapper.c b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96_wrapper.c
deleted file mode 100644
index e2109c0e1..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/bg96/cellular_bg96_wrapper.c
+++ /dev/null
@@ -1,268 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-/* The config header is always included first. */
-#include "cellular_config.h"
-#include "cellular_config_defaults.h"
-
-/* Standard includes. */
-#include
-#include
-
-#include "cellular_platform.h"
-#include "cellular_types.h"
-#include "cellular_api.h"
-#include "cellular_common.h"
-#include "cellular_common_api.h"
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_Cleanup( CellularHandle_t cellularHandle )
-{
- return Cellular_CommonCleanup( cellularHandle );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterUrcNetworkRegistrationEventCallback( CellularHandle_t cellularHandle,
- CellularUrcNetworkRegistrationCallback_t networkRegistrationCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonRegisterUrcNetworkRegistrationEventCallback( cellularHandle, networkRegistrationCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterUrcPdnEventCallback( CellularHandle_t cellularHandle,
- CellularUrcPdnEventCallback_t pdnEventCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonRegisterUrcPdnEventCallback( cellularHandle, pdnEventCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterUrcGenericCallback( CellularHandle_t cellularHandle,
- CellularUrcGenericCallback_t genericCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonRegisterUrcGenericCallback( cellularHandle, genericCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterModemEventCallback( CellularHandle_t cellularHandle,
- CellularModemEventCallback_t modemEventCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonRegisterModemEventCallback( cellularHandle, modemEventCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ATCommandRaw( CellularHandle_t cellularHandle,
- const char * pATCommandPrefix,
- const char * pATCommandPayload,
- CellularATCommandType_t atCommandType,
- CellularATCommandResponseReceivedCallback_t responseReceivedCallback,
- void * pData,
- uint16_t dataLen )
-{
- return Cellular_CommonATCommandRaw( cellularHandle, pATCommandPrefix, pATCommandPayload, atCommandType,
- responseReceivedCallback, pData, dataLen );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_CreateSocket( CellularHandle_t cellularHandle,
- uint8_t pdnContextId,
- CellularSocketDomain_t socketDomain,
- CellularSocketType_t socketType,
- CellularSocketProtocol_t socketProtocol,
- CellularSocketHandle_t * pSocketHandle )
-{
- return Cellular_CommonCreateSocket( cellularHandle, pdnContextId, socketDomain, socketType,
- socketProtocol, pSocketHandle );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketSetSockOpt( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketOptionLevel_t optionLevel,
- CellularSocketOption_t option,
- const uint8_t * pOptionValue,
- uint32_t optionValueLength )
-{
- return Cellular_CommonSocketSetSockOpt( cellularHandle, socketHandle, optionLevel, option,
- pOptionValue, optionValueLength );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketRegisterDataReadyCallback( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketDataReadyCallback_t dataReadyCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonSocketRegisterDataReadyCallback( cellularHandle, socketHandle,
- dataReadyCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketRegisterSocketOpenCallback( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketOpenCallback_t socketOpenCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonSocketRegisterSocketOpenCallback( cellularHandle, socketHandle,
- socketOpenCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketRegisterClosedCallback( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketClosedCallback_t closedCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonSocketRegisterClosedCallback( cellularHandle, socketHandle,
- closedCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RfOn( CellularHandle_t cellularHandle )
-{
- return Cellular_CommonRfOn( cellularHandle );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RfOff( CellularHandle_t cellularHandle )
-{
- return Cellular_CommonRfOff( cellularHandle );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetIPAddress( CellularHandle_t cellularHandle,
- uint8_t contextId,
- char * pBuffer,
- uint32_t bufferLength )
-{
- return Cellular_CommonGetIPAddress( cellularHandle, contextId, pBuffer, bufferLength );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetModemInfo( CellularHandle_t cellularHandle,
- CellularModemInfo_t * pModemInfo )
-{
- return Cellular_CommonGetModemInfo( cellularHandle, pModemInfo );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetEidrxSettings( CellularHandle_t cellularHandle,
- CellularEidrxSettingsList_t * pEidrxSettingsList )
-{
- return Cellular_CommonGetEidrxSettings( cellularHandle, pEidrxSettingsList );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetEidrxSettings( CellularHandle_t cellularHandle,
- const CellularEidrxSettings_t * pEidrxSettings )
-{
- return Cellular_CommonSetEidrxSettings( cellularHandle, pEidrxSettings );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetRegisteredNetwork( CellularHandle_t cellularHandle,
- CellularPlmnInfo_t * pNetworkInfo )
-{
- return Cellular_CommonGetRegisteredNetwork( cellularHandle, pNetworkInfo );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetNetworkTime( CellularHandle_t cellularHandle,
- CellularTime_t * pNetworkTime )
-{
- return Cellular_CommonGetNetworkTime( cellularHandle, pNetworkTime );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetServiceStatus( CellularHandle_t cellularHandle,
- CellularServiceStatus_t * pServiceStatus )
-{
- return Cellular_CommonGetServiceStatus( cellularHandle, pServiceStatus );
-}
-
-/*-----------------------------------------------------------*/
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802 b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802
new file mode 160000
index 000000000..7ad590202
--- /dev/null
+++ b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802
@@ -0,0 +1 @@
+Subproject commit 7ad590202fb55ac487d12e31059e5488a4e47c0e
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802.c b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802.c
deleted file mode 100644
index bdfc7380b..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802.c
+++ /dev/null
@@ -1,585 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-/* The config header is always included first. */
-
-#include
-
-#include "cellular_config.h"
-#include "cellular_config_defaults.h"
-#include "cellular_common.h"
-#include "cellular_common_portable.h"
-#include "cellular_hl7802.h"
-
-/*-----------------------------------------------------------*/
-
-#define ENBABLE_MODULE_UE_RETRY_COUNT ( 6U )
-#define HL7802_MAX_BAND_CFG ( 21U )
-#define HL7802_KSELACQ_CMD_MAX_SIZE ( 19U ) /* The length of AT+KSELACQ=0,1,2,3\0. */
-
-/*-----------------------------------------------------------*/
-
-typedef struct Hl7802BandConfig
-{
- char catm1BandCfg[ HL7802_MAX_BAND_CFG ];
- char nbiotBandCfg[ HL7802_MAX_BAND_CFG ];
- char gsmBandCfg[ HL7802_MAX_BAND_CFG ];
-} Hl7802BandConfig_t;
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t sendAtCommandWithRetryTimeout( CellularContext_t * pContext,
- const CellularAtReq_t * pAtReq,
- uint32_t timeoutMs );
-static CellularError_t getBandCfg( CellularContext_t * pContext,
- Hl7802BandConfig_t * pBandCfg );
-static CellularPktStatus_t recvFuncGetBandCfg( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-
-/*-----------------------------------------------------------*/
-
-static cellularModuleContext_t cellularHl7802Context = { 0 };
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-const char * CellularSrcTokenErrorTable[] =
-{ "ERROR", "BUSY", "NO CARRIER", "NO ANSWER", "NO DIALTONE", "ABORTED", "+CMS ERROR", "+CME ERROR", "SEND FAIL" };
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-uint32_t CellularSrcTokenErrorTableSize = sizeof( CellularSrcTokenErrorTable ) / sizeof( char * );
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-const char * CellularSrcTokenSuccessTable[] =
-{ "OK" };
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-uint32_t CellularSrcTokenSuccessTableSize = sizeof( CellularSrcTokenSuccessTable ) / sizeof( char * );
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-const char * CellularUrcTokenWoPrefixTable[] = { 0 };
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-uint32_t CellularUrcTokenWoPrefixTableSize = 0;
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t sendAtCommandWithRetryTimeout( CellularContext_t * pContext,
- const CellularAtReq_t * pAtReq,
- uint32_t timeoutMs )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- uint8_t tryCount = 0;
-
- if( pAtReq == NULL )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- for( ; tryCount < ENBABLE_MODULE_UE_RETRY_COUNT; tryCount++ )
- {
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, *pAtReq, timeoutMs );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- break;
- }
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t recvFuncGetBandCfg( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- Hl7802BandConfig_t * pBandCfg = NULL;
- const CellularATCommandLine_t * pCommnadItem = NULL;
- char * pInputLine = NULL;
- char * pToken = NULL;
- char * pRatBand = NULL;
-
- if( pContext == NULL )
- {
- LogError( ( "recvFuncGetBandCfg: Invalid context." ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( pAtResp == NULL )
- {
- LogError( ( "recvFuncGetBandCfg: Invalid pAtResp." ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( pData == NULL ) || ( dataLen != sizeof( Hl7802BandConfig_t ) ) )
- {
- LogError( ( "recvFuncGetBandCfg: Invalid pData %p or dataLen %u.", pData, dataLen ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pBandCfg = ( Hl7802BandConfig_t * ) pData;
- pCommnadItem = pAtResp->pItm;
-
- while( pCommnadItem != NULL )
- {
- pInputLine = pCommnadItem->pLine;
- LogDebug( ( "recvFuncGetBandCfg: input line %s", pInputLine ) );
-
- /* Remove the line prefix. */
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- /* Parse the RAT field. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveLeadingWhiteSpaces( &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- switch( *pToken )
- {
- case '0':
- pRatBand = pBandCfg->catm1BandCfg;
- break;
-
- case '1':
- pRatBand = pBandCfg->nbiotBandCfg;
- break;
-
- case '2':
- pRatBand = pBandCfg->gsmBandCfg;
- break;
-
- default:
- pRatBand = NULL;
- LogError( ( "recvFuncGetBandCfg: unknown RAT %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- break;
- }
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- /* Copy the band configuration. */
- strncpy( pRatBand, pInputLine, HL7802_MAX_BAND_CFG );
- }
- else
- {
- LogError( ( "recvFuncGetBandCfg process response line error" ) );
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- break;
- }
-
- pCommnadItem = pCommnadItem->pNext;
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t getBandCfg( CellularContext_t * pContext,
- Hl7802BandConfig_t * pBandCfg )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularAtReq_t atReqGetBndCfg =
- {
- "AT+KBNDCFG?",
- CELLULAR_AT_MULTI_WITH_PREFIX,
- "+KBNDCFG",
- recvFuncGetBandCfg,
- pBandCfg,
- sizeof( Hl7802BandConfig_t )
- };
-
- /* pContext and pBandCfg are checked in Cellular_ModuleEnableUe function. */
- ( void ) memset( pBandCfg, 0, sizeof( Hl7802BandConfig_t ) );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetBndCfg,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "getBandCfg: couldn't retrieve band configurations." ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static bool appendRatList( char * pRatList,
- CellularRat_t cellularRat )
-{
- bool retValue = true;
-
- switch( cellularRat )
- {
- case CELLULAR_RAT_CATM1:
- strcat( pRatList, ",1" );
- break;
-
- case CELLULAR_RAT_NBIOT:
- strcat( pRatList, ",2" );
- break;
-
- case CELLULAR_RAT_GSM:
- strcat( pRatList, ",3" );
- break;
-
- default:
- /* Unsupported RAT. */
- retValue = false;
- break;
- }
-
- return retValue;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ModuleInit( const CellularContext_t * pContext,
- void ** ppModuleContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- uint32_t i = 0;
-
- if( pContext == NULL )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ppModuleContext == NULL )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- /* Initialize the module context. */
- ( void ) memset( &cellularHl7802Context, 0, sizeof( cellularModuleContext_t ) );
-
- for( i = 0; i < TCP_SESSION_TABLE_LEGNTH; i++ )
- {
- cellularHl7802Context.pSessionMap[ i ] = INVALID_SOCKET_INDEX;
- }
-
- *ppModuleContext = ( void * ) &cellularHl7802Context;
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ModuleCleanUp( const CellularContext_t * pContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- if( pContext == NULL )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ModuleEnableUE( CellularContext_t * pContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularAtReq_t atReqGetNoResult =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0
- };
- Hl7802BandConfig_t bandCfg = { 0 };
- char ratSelectCmd[ HL7802_KSELACQ_CMD_MAX_SIZE ] = "AT+KSELACQ=0";
- bool retAppendRat = true;
-
- if( pContext != NULL )
- {
- /* Disable echo. */
- atReqGetNoResult.pAtCmd = "ATE0";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Disable DTR function. */
- atReqGetNoResult.pAtCmd = "AT&D0";
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- #ifndef CELLULAR_CONFIG_DISABLE_FLOW_CONTROL
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Enable RTS/CTS hardware flow control. */
- atReqGetNoResult.pAtCmd = "AT+IFC=2,2";
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- #endif
-
- /* Set Radio Access Technology. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* In the Write format, =0 is used to switch to the first RAT
- * in the preferred RAT list (PRL), and fall back to subsequent RATS
- * in the PRL if cell coverage is lost. If the PRL is empty, switch to
- * CAT-M1. To set the PRL, see AT+KSELACQ. */
- atReqGetNoResult.pAtCmd = "AT+KSRAT=0";
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- /* Set Default Radio Access Technology. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- retAppendRat = appendRatList( ratSelectCmd, CELLULAR_CONFIG_DEFAULT_RAT );
- configASSERT( retAppendRat == true );
-
- #ifdef CELLULAR_CONFIG_DEFAULT_RAT_2
- retAppendRat = appendRatList( ratSelectCmd, CELLULAR_CONFIG_DEFAULT_RAT_2 );
- configASSERT( retAppendRat == true );
- #endif
-
- #ifdef CELLULAR_CONFIG_DEFAULT_RAT_3
- retAppendRat = appendRatList( ratSelectCmd, CELLULAR_CONFIG_DEFAULT_RAT_3 );
- configASSERT( retAppendRat == true );
- #endif
-
- atReqGetNoResult.pAtCmd = ratSelectCmd;
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
- CELLULAR_HL7802_AT_KSELACQ_TIMEOUT_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- /* Set Configured LTE Band. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- cellularStatus = getBandCfg( pContext, &bandCfg );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- if( strcmp( bandCfg.catm1BandCfg, CELLULAR_CONFIG_HL7802_CATM1_BAND ) != 0 )
- {
- LogInfo( ( "Cellular_ModuleEnableUE : CAT-M1 band desired %s actual %s",
- CELLULAR_CONFIG_HL7802_CATM1_BAND, bandCfg.catm1BandCfg ) );
- atReqGetNoResult.pAtCmd = "AT+KBNDCFG=0,"CELLULAR_CONFIG_HL7802_CATM1_BAND;
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- if( strcmp( bandCfg.nbiotBandCfg, CELLULAR_CONFIG_HL7802_NBIOT_BAND ) != 0 )
- {
- LogInfo( ( "Cellular_ModuleEnableUE : NBIOT band desired %s actual %s",
- CELLULAR_CONFIG_HL7802_NBIOT_BAND, bandCfg.nbiotBandCfg ) );
- atReqGetNoResult.pAtCmd = "AT+KBNDCFG=1,"CELLULAR_CONFIG_HL7802_NBIOT_BAND;
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- /* Disable standalone sleep mode. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- atReqGetNoResult.pAtCmd = "AT+KSLEEP=2";
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- /* Force initialization of radio to consider new configured bands. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- atReqGetNoResult.pAtCmd = "AT+CFUN=1,1";
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_30_SECONDS_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- /* Disable echo after reboot device. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- Platform_Delay( CELLULAR_HL7802_RESET_DELAY_MS );
- atReqGetNoResult.pAtCmd = "ATE0";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ModuleEnableUrc( CellularContext_t * pContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularAtReq_t atReqGetNoResult =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0
- };
-
- atReqGetNoResult.pAtCmd = "AT+COPS=3,2";
- ( void ) _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_120_SECONDS_MS );
-
- atReqGetNoResult.pAtCmd = "AT+CREG=2";
- ( void ) _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
-
- atReqGetNoResult.pAtCmd = "AT+CEREG=2";
- ( void ) _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
-
- atReqGetNoResult.pAtCmd = "AT+CTZR=1";
- ( void ) _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-uint32_t _Cellular_GetSocketId( CellularContext_t * pContext,
- uint8_t sessionId )
-{
- cellularModuleContext_t * pModuleContext = NULL;
- uint32_t socketIndex = INVALID_SOCKET_INDEX;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- if( pContext != NULL )
- {
- cellularStatus = _Cellular_GetModuleContext( pContext, ( void ** ) &pModuleContext );
- }
- else
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
-
- if( ( cellularStatus == CELLULAR_SUCCESS ) &&
- ( sessionId >= MIN_TCP_SESSION_ID ) && ( sessionId <= MAX_TCP_SESSION_ID ) )
- {
- socketIndex = pModuleContext->pSessionMap[ sessionId ];
- }
-
- return socketIndex;
-}
-
-/*-----------------------------------------------------------*/
-
-uint32_t _Cellular_GetSessionId( CellularContext_t * pContext,
- uint32_t socketIndex )
-{
- cellularModuleContext_t * pModuleContext = NULL;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- uint32_t sessionId = INVALID_SESSION_ID;
-
- if( pContext == NULL )
- {
- LogError( ( "_Cellular_GetSessionId invalid cellular context" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketIndex == INVALID_SOCKET_INDEX )
- {
- LogError( ( "_Cellular_GetSessionId invalid socketIndex" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- cellularStatus = _Cellular_GetModuleContext( pContext, ( void ** ) &pModuleContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- for( sessionId = 0; sessionId < TCP_SESSION_TABLE_LEGNTH; sessionId++ )
- {
- if( pModuleContext->pSessionMap[ sessionId ] == socketIndex )
- {
- break;
- }
- }
-
- /* Mapping is not found in the session mapping table. */
- if( sessionId == TCP_SESSION_TABLE_LEGNTH )
- {
- sessionId = INVALID_SESSION_ID;
- }
- }
- else
- {
- sessionId = INVALID_SESSION_ID;
- }
-
- return sessionId;
-}
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802.h b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802.h
deleted file mode 100644
index 059e7f537..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802.h
+++ /dev/null
@@ -1,150 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-#ifndef __CELLULAR_HL7802_H__
-#define __CELLULAR_HL7802_H__
-
-/* *INDENT-OFF* */
-#ifdef __cplusplus
- extern "C" {
-#endif
-/* *INDENT-ON* */
-
-#define MIN_TCP_SESSION_ID ( 1U )
-#define MAX_TCP_SESSION_ID ( 6U )
-#define TCP_SESSION_TABLE_LEGNTH ( MAX_TCP_SESSION_ID + 1 )
-
-#define INVALID_SOCKET_INDEX ( UINT32_MAX )
-#define INVALID_SESSION_ID ( UINT32_MAX )
-
-/* Delay after AT+CFUN=1,1 commands. */
-#ifndef CELLULAR_HL7802_RESET_DELAY_MS
- #define CELLULAR_HL7802_RESET_DELAY_MS ( 3000U )
-#endif
-
-/* AT command recommended timeout value for HL7802. Reference HL7802 AT Commands
- * Interface Guide to setup the timeout value for each AT commands. */
-#define CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS ( 2000U )
-#define CELLULAR_HL7802_AT_TIMEOUT_5_SECONDS_MS ( 5000U )
-#define CELLULAR_HL7802_AT_TIMEOUT_30_SECONDS_MS ( 30000U )
-#define CELLULAR_HL7802_AT_TIMEOUT_60_SECONDS_MS ( 60000U )
-#define CELLULAR_HL7802_AT_TIMEOUT_120_SECONDS_MS ( 120000U )
-
-/* Define the following timeout value since they are content dependent or no recommended value. */
-#ifndef CELLULAR_HL7802_AT_KSELACQ_TIMEOUT_MS
- #define CELLULAR_HL7802_AT_KSELACQ_TIMEOUT_MS CELLULAR_HL7802_AT_TIMEOUT_5_SECONDS_MS
-#endif
-
-#ifndef CELLULAR_HL7802_AT_KEDRXCFG_TIMEOUT_MS
- #define CELLULAR_HL7802_AT_KEDRXCFG_TIMEOUT_MS CELLULAR_HL7802_AT_TIMEOUT_5_SECONDS_MS
-#endif
-
-#ifndef CELLULAR_HL7802_AT_KCNXUP_TIMEOUT_MS
- #define CELLULAR_HL7802_AT_KCNXUP_TIMEOUT_MS CELLULAR_HL7802_AT_TIMEOUT_30_SECONDS_MS
-#endif
-
-#ifndef CELLULAR_HL7802_AT_KCNXDOWN_TIMEOUT_MS
- #define CELLULAR_HL7802_AT_KCNXDOWN_TIMEOUT_MS CELLULAR_HL7802_AT_TIMEOUT_30_SECONDS_MS
-#endif
-
-/* Band configuration for HL7802. */
-#ifndef CELLULAR_CONFIG_HL7802_CATM1_BAND
- /* Default enable all bands. */
- #define CELLULAR_CONFIG_HL7802_CATM1_BAND "0002000000000F0F1B9F"
-#endif
-
-#ifndef CELLULAR_CONFIG_HL7802_NBIOT_BAND
- /* Default enable all bands. */
- #define CELLULAR_CONFIG_HL7802_NBIOT_BAND "0002000000000B0F189F"
-#endif
-
-/*-----------------------------------------------------------*/
-
-typedef struct cellularModuleContext
-{
- uint32_t pSessionMap[ TCP_SESSION_TABLE_LEGNTH ];
-} cellularModuleContext_t;
-
-typedef enum tcpSocketState
-{
- TCP_SOCKET_STATE_NOT_DEFINED = 0,
- TCP_SOCKET_STATE_DEFINED_BUT_NOT_USED = 1,
- TCP_SOCKET_STATE_OPENING_AND_CONNECTING = 2,
- TCP_SOCKET_STATE_CONNECTION_UP = 3,
- TCP_SOCKET_STATE_CONNECTION_CLOSING = 4,
- TCP_SOCKET_STATE_CLOSED = 5,
- TCP_SOCKET_STATE_MAX
-} tcpSocketState_t;
-
-typedef enum tcpConnectionFailure
-{
- TCP_NOTIF_OK = -1,
- TCP_NOTIF_NETWORK_ERROR = 0,
- TCP_NOTIF_NO_MORE_SOCKETS_AVAILABLE = 1,
- TCP_NOTIF_MEMORY_PROBLEM = 2,
- TCP_NOTIF_DNS_ERROR = 3,
- TCP_NOTIF_TCP_DISCONNECTION = 4,
- TCP_NOTIF_TCP_CONNECTION_ERROR = 5,
- TCP_NOTIF_GENERIC_ERROR = 6,
- TCP_NOTIF_FAIL_TO_ACCEPT_CLIENT_REQUEST = 7,
- TCP_NOTIF_KTCPSND_WAITING_FOR_MORE_OR_LESS_CHARACTERS = 8,
- TCP_NOTIF_BAD_SESSION_ID = 9,
- TCP_NOTIF_SESSION_IS_ALREADY_RUNNING = 10,
- TCP_NOTIF_ALL_SESSIONS_ARE_USED = 11,
- TCP_NOTIF_SOCKET_CONNECTION_TIMEOUT_ERROR = 12,
- TCP_NOTIF_SSL_CONNECTION_ERROR = 13,
- TCP_NOTIF_SSL_INITIALIZATION_ERROR = 14,
- TCP_NOTIF_MAX,
-} tcpConnectionFailure_t;
-
-/*-----------------------------------------------------------*/
-
-uint32_t _Cellular_GetSocketId( CellularContext_t * pContext,
- uint8_t sessionId );
-
-uint32_t _Cellular_GetSessionId( CellularContext_t * pContext,
- uint32_t socketIndex );
-
-/*-----------------------------------------------------------*/
-
-extern CellularAtParseTokenMap_t CellularUrcHandlerTable[];
-extern uint32_t CellularUrcHandlerTableSize;
-
-extern const char * CellularSrcTokenErrorTable[];
-extern uint32_t CellularSrcTokenErrorTableSize;
-
-extern const char * CellularSrcTokenSuccessTable[];
-extern uint32_t CellularSrcTokenSuccessTableSize;
-
-extern const char * CellularUrcTokenWoPrefixTable[];
-extern uint32_t CellularUrcTokenWoPrefixTableSize;
-
-/* *INDENT-OFF* */
-#ifdef __cplusplus
- }
-#endif
-/* *INDENT-ON* */
-
-#endif /* ifndef __CELLULAR_HL7802_H__ */
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802_api.c b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802_api.c
deleted file mode 100644
index ddab82a14..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802_api.c
+++ /dev/null
@@ -1,2788 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-#include "cellular_config.h"
-#include "cellular_config_defaults.h"
-
-/* Standard includes. */
-#include
-#include
-#include
-#include
-
-/* Cellular includes. */
-#include "cellular_types.h"
-#include "cellular_api.h"
-#include "cellular_common_api.h"
-#include "cellular_common.h"
-#include "cellular_at_core.h"
-
-/* Cellular module includes. */
-#include "cellular_hl7802.h"
-
-/*-----------------------------------------------------------*/
-
-#define CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ( 32U )
-
-#define SOCKET_END_PATTERN "--EOF--Pattern--"
-#define SOCKET_END_PATTERN_LEN ( 16U )
-
-#define SOCKET_DATA_CONNECT_TOKEN "CONNECT"
-#define SOCKET_DATA_CONNECT_TOKEN_LEN ( 7U )
-
-#define CELLULAR_CEDRXS_POS_ACT ( 0U )
-#define CELLULAR_CEDRXS_POS_RAT ( 1U )
-#define CELLULAR_CEDRXS_POS_REQUESTED_EDRX_VALUE ( 2U )
-#define CELLULAR_CEDRXS_POS_NW_PROVIDED_EDRX_VALUE ( 3U )
-#define CELLULAR_CEDRXS_POS_REQUESTED_PTW_VALUE ( 4U )
-#define CELLULAR_CEDRXS_POS_NW_PROVIDED_PTW_VALUE ( 5U )
-
-#define RAT_PRIOIRTY_LIST_LENGTH ( 3U )
-
-#define SIGNAL_QUALITY_CSQ_UNKNOWN ( 99 )
-#define SIGNAL_QUALITY_CSQ_BER_MIN ( 0 )
-#define SIGNAL_QUALITY_CSQ_BER_MAX ( 7 )
-
-#define INVALID_PDN_INDEX ( 0xFFU )
-
-#define CELLULAR_PDN_STATUS_POS_CONTEXT_ID ( 0U )
-#define CELLULAR_PDN_STATUS_POS_GPRS ( 1U ) /* Ignored pos. */
-#define CELLULAR_PDN_STATUS_POS_APN ( 2U ) /* Ignored pos. */
-#define CELLULAR_PDN_STATUS_POS_LOGIN ( 3U ) /* Ignored pos. */
-#define CELLULAR_PDN_STATUS_POS_PASSWORD ( 4U ) /* Ignored pos. */
-#define CELLULAR_PDN_STATUS_POS_AF ( 5U )
-#define CELLULAR_PDN_STATUS_POS_IP ( 6U ) /* Ignored pos. */
-#define CELLULAR_PDN_STATUS_POS_DNS1 ( 7U ) /* Ignored pos. */
-#define CELLULAR_PDN_STATUS_POS_DNS2 ( 8U ) /* Ignored pos. */
-#define CELLULAR_PDN_STATUS_POS_STATE ( 9U )
-
-#define CELLULAR_PDN_STATE_DISCONNECTED ( 0U )
-#define CELLULAR_PDN_STATE_CONNECTING ( 1U )
-#define CELLULAR_PDN_STATE_CONNECTED ( 2U )
-#define CELLULAR_PDN_STATE_IDLE ( 3U )
-#define CELLULAR_PDN_STATE_DISCONNECTING ( 4U )
-
-#define KSELACQ_RAT_CATM_CHAR ( '1' )
-#define KSELACQ_RAT_NBIOT_CHAR ( '2' )
-#define KSELACQ_RAT_GSM_CHAR ( '3' )
-
-#define CELLULAR_PORT_NUM_CHAR_LEN ( 6 )
-
-#define CELLULAR_REMOTE_IP_ADDR_MAX_LENGTH ( 127 )
-
-/*-----------------------------------------------------------*/
-
-/**
- * @brief Parameters involved in receiving data through sockets
- */
-typedef struct _socketDataRecv
-{
- uint32_t * pDataLen;
- uint8_t * pData;
-} _socketDataRecv_t;
-
-typedef struct socketStat
-{
- tcpSocketState_t status; /* TCP socket state. */
- tcpConnectionFailure_t tcpNotif; /* 1 if socket/connection is OK, if an error has happened. */
- uint16_t remData; /* Remaining bytes in the socket buffer, waiting to be sent. */
- uint16_t rcvData; /* Received bytes, can be read with +KTCPRCV command. */
-} socketStat_t;
-
-/*-----------------------------------------------------------*/
-
-static const char * _socketSendSuccesTokenTable[] = { SOCKET_DATA_CONNECT_TOKEN };
-static const uint32_t _socketSendSuccesTokenTableLength = 1;
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t _Cellular_RecvFuncGetSocketStat( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularError_t _Cellular_GetSocketStat( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- socketStat_t * pSocketStat );
-static CellularPktStatus_t socketRecvDataPrefix( void * pCallbackContext,
- char * pLine,
- uint32_t lineLength,
- char ** ppDataStart,
- uint32_t * pDataLength );
-static CellularATError_t getDataFromResp( const CellularATCommandResponse_t * pAtResp,
- const _socketDataRecv_t * pDataRecv,
- uint32_t outBufSize );
-static CellularPktStatus_t _Cellular_RecvFuncData( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularError_t buildSocketConfig( CellularSocketHandle_t socketHandle,
- char * pCmdBuf );
-static CellularError_t storeAccessModeAndAddress( CellularContext_t * pContext,
- CellularSocketHandle_t socketHandle,
- CellularSocketAccessMode_t dataAccessMode,
- const CellularSocketAddress_t * pRemoteSocketAddress );
-static CellularPktStatus_t _Cellular_RecvFuncGetTcpCfgSessionId( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularError_t _Cellular_getTcpCfgSessionId( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- uint8_t * pSessionId );
-static CellularATError_t parseEidrxToken( char * pToken,
- uint8_t tokenIndex,
- CellularEidrxSettingsList_t * pEidrxSettingsList,
- uint8_t count );
-static CellularATError_t parseEidrxLine( char * pInputLine,
- uint8_t count,
- CellularEidrxSettingsList_t * pEidrxSettingsList );
-static CellularPktStatus_t _Cellular_RecvFuncGetEidrxSettings( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularRat_t convertKselacqIndexToRat( char ratIndex );
-static CellularPktStatus_t _Cellular_RecvFuncGetRatPriority( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static int16_t convertCesqSignalRxlev( int32_t rxlevValue );
-static int16_t convertCesqSignalRsrq( int32_t rsrqValue );
-static int16_t convertCesqSignalRsrp( int32_t rsrpValue );
-static bool _parseSignalQuality( char * pQcsqPayload,
- CellularSignalInfo_t * pSignalInfo );
-static CellularPktStatus_t _Cellular_RecvFuncGetSignalInfo( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetSocketStat( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL, * pToken = NULL;
- socketStat_t * pSocketStat = ( socketStat_t * ) pData;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- int32_t tempValue = 0;
-
- if( pContext == NULL )
- {
- LogError( ( "GetSocketStat: Invalid handle" ) );
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pSocketStat == NULL ) || ( dataLen != sizeof( socketStat_t ) ) )
- {
- LogError( ( "GetSocketStat: Bad parameters" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "GetSocketStat: Input Line passed is NULL" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else
- {
- /* +KTCPSTAT: ,,,,. */
- /* Remove prefix and leading space. */
- pInputLine = pAtResp->pItm->pLine;
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveLeadingWhiteSpaces( &pInputLine );
- }
-
- /* Get token status. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= TCP_SOCKET_STATE_NOT_DEFINED ) && ( tempValue < TCP_SOCKET_STATE_MAX ) )
- {
- pSocketStat->status = ( tcpSocketState_t ) tempValue;
- }
- else
- {
- LogError( ( "GetSocketStat unknown status %d", tempValue ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- /* Get token tcp_notif. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= TCP_NOTIF_OK ) && ( tempValue < TCP_NOTIF_MAX ) )
- {
- pSocketStat->tcpNotif = ( tcpConnectionFailure_t ) tempValue;
- }
- else
- {
- LogError( ( "GetSocketStat unknown tcp_notif %d", tempValue ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- /* Get token rem_data. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) && ( tempValue < UINT16_MAX ) )
- {
- pSocketStat->remData = ( uint16_t ) tempValue;
- }
- else
- {
- LogError( ( "GetSocketStat unknown rem_data %d", tempValue ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- /* Get token rcv_data. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) && ( tempValue < UINT16_MAX ) )
- {
- pSocketStat->rcvData = ( uint16_t ) tempValue;
- }
- else
- {
- LogError( ( "GetSocketStat unknown rcvData %d", tempValue ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t _Cellular_GetSocketStat( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- socketStat_t * pSocketStat )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSocketStat =
- {
- cmdBuf,
- CELLULAR_AT_WITH_PREFIX,
- "+KTCPSTAT",
- _Cellular_RecvFuncGetSocketStat,
- pSocketStat,
- sizeof( socketStat_t ),
- };
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- uint32_t sessionId = _Cellular_GetSessionId( pContext, socketHandle->socketId );
-
- /* Internal function. Caller checks parameters. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "AT+KTCPSTAT=%lu", sessionId );
-
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqSocketStat,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
-
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t socketRecvDataPrefix( void * pCallbackContext,
- char * pLine,
- uint32_t lineLength,
- char ** ppDataStart,
- uint32_t * pDataLength )
-{
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- uint32_t * pRecvDataLength = ( uint32_t * ) pCallbackContext;
-
- if( ( pLine == NULL ) || ( ppDataStart == NULL ) || ( pDataLength == NULL ) || ( pCallbackContext == NULL ) )
- {
- LogError( ( "socketRecvData: Bad parameters" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( lineLength < ( SOCKET_DATA_CONNECT_TOKEN_LEN + 2U ) ) && ( *pRecvDataLength > 0 ) )
- {
- /* Need more data to decide the data prefix. */
- pktStatus = CELLULAR_PKT_STATUS_SIZE_MISMATCH;
- }
- else
- {
- if( strncmp( pLine, SOCKET_DATA_CONNECT_TOKEN, SOCKET_DATA_CONNECT_TOKEN_LEN ) == 0 )
- {
- /* The string length of "CONNECT\r\n". */
- *ppDataStart = ( char * ) &pLine[ SOCKET_DATA_CONNECT_TOKEN_LEN + 2 ]; /* Indicate the data start in pLine. */
- *pDataLength = *pRecvDataLength; /* Return the data length from pCallbackContext. */
- *pRecvDataLength = 0;
- }
- else
- {
- /* Prefix string which is not "CONNECT" does't indicate data start. Set data length to 0.*/
- *pDataLength = 0;
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t getDataFromResp( const CellularATCommandResponse_t * pAtResp,
- const _socketDataRecv_t * pDataRecv,
- uint32_t outBufSize )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- const char * pInputLine = NULL;
- uint32_t dataLenToCopy = 0;
-
- /* Check if the received data size is greater than the output buffer size. */
- if( *pDataRecv->pDataLen > outBufSize )
- {
- LogError( ( "Data is turncated, received data length %d, out buffer size %d",
- *pDataRecv->pDataLen, outBufSize ) );
- dataLenToCopy = outBufSize;
- *pDataRecv->pDataLen = outBufSize;
- }
- else
- {
- dataLenToCopy = *pDataRecv->pDataLen;
- }
-
- /* Data is stored in the next intermediate response. */
- if( pAtResp->pItm->pNext != NULL )
- {
- pInputLine = pAtResp->pItm->pNext->pLine;
-
- if( ( pInputLine != NULL ) && ( dataLenToCopy > 0U ) )
- {
- /* Copy the data to the out buffer. */
- ( void ) memcpy( ( void * ) pDataRecv->pData, ( const void * ) pInputLine, dataLenToCopy );
- }
- else
- {
- LogError( ( "Receive Data: paramerter error, data pointer %p, data to copy %d",
- pInputLine, dataLenToCopy ) );
- atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
- }
- }
- else if( *pDataRecv->pDataLen == 0U )
- {
- /* Receive command success but no data. */
- LogDebug( ( "Receive Data: no data" ) );
- }
- else
- {
- LogError( ( "Receive Data: Intermediate response empty" ) );
- atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncData( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char * pInputLine = NULL, * pEndPatternLine = NULL;
- const _socketDataRecv_t * pDataRecv = ( _socketDataRecv_t * ) pData;
-
- if( pContext == NULL )
- {
- LogError( ( "Receive Data: invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "Receive Data: response is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp->pItm->pNext == NULL ) || ( pAtResp->pItm->pNext->pNext == NULL ) )
- {
- LogError( ( "Receive Data: response data or end pattern is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pDataRecv == NULL ) || ( pDataRecv->pData == NULL ) || ( pDataRecv->pDataLen == NULL ) )
- {
- LogError( ( "Receive Data: Bad parameters" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine; /* The first item is the data prefix. */
- pEndPatternLine = pAtResp->pItm->pNext->pNext->pLine; /* The third item is the end pattern. */
-
- /* Check the data prefix token "CONNECT". */
- if( strncmp( pInputLine, SOCKET_DATA_CONNECT_TOKEN, SOCKET_DATA_CONNECT_TOKEN_LEN ) != 0 )
- {
- LogError( ( "response item error in prefix CONNECT" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
-
- /* Check the data end pattern. */
- if( strncmp( pEndPatternLine, SOCKET_END_PATTERN, SOCKET_END_PATTERN_LEN ) != 0 )
- {
- LogError( ( "response item error in end pattern"SOCKET_END_PATTERN ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
-
- /* Process the data buffer. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = getDataFromResp( pAtResp, pDataRecv, dataLen );
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t buildSocketConfig( CellularSocketHandle_t socketHandle,
- char * pCmdBuf )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- /* +1 size in buffer for ',' */
- char portBuf[ CELLULAR_PORT_NUM_CHAR_LEN + 1 ] = { 0 };
-
- if( pCmdBuf == NULL )
- {
- LogDebug( ( "buildSocketConfig: Invalid command buffer" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketHandle->socketProtocol != CELLULAR_SOCKET_PROTOCOL_TCP )
- {
- LogError( ( "buildSocketConfig: socket protocol unsupported %d",
- socketHandle->socketProtocol ) );
- cellularStatus = CELLULAR_UNSUPPORTED;
- }
- else if( strlen( socketHandle->remoteSocketAddress.ipAddress.ipAddress ) > CELLULAR_REMOTE_IP_ADDR_MAX_LENGTH )
- {
- /* The maximum length of domain name is 127 in HL7802. */
- LogError( ( "buildSocketConfig: the remote server's address is too long, length=%u",
- strlen( socketHandle->remoteSocketAddress.ipAddress.ipAddress ) ) );
- cellularStatus = CELLULAR_UNSUPPORTED;
- }
- else
- {
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline.
- * Reserve buffer for port setting. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( pCmdBuf, CELLULAR_AT_CMD_MAX_SIZE - sizeof( portBuf ),
- "AT+KTCPCFG=%u,0,\"%s\",%u",
- socketHandle->contextId,
- socketHandle->remoteSocketAddress.ipAddress.ipAddress,
- socketHandle->remoteSocketAddress.port );
-
- /* Set the local port in the end of command buffer string if localPort is not 0. */
- if( socketHandle->localPort > 0 )
- {
- ( void ) snprintf( portBuf, sizeof( portBuf ),
- ",%u",
- socketHandle->localPort );
-
- /* Because the length of host's IP address is limited,
- * the buffer size must be enough for port setting. */
- strcat( pCmdBuf, portBuf );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t storeAccessModeAndAddress( CellularContext_t * pContext,
- CellularSocketHandle_t socketHandle,
- CellularSocketAccessMode_t dataAccessMode,
- const CellularSocketAddress_t * pRemoteSocketAddress )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ( pRemoteSocketAddress == NULL ) || ( socketHandle == NULL ) )
- {
- LogDebug( ( "storeAccessModeAndAddress: Invalid socket address" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketHandle->socketState != SOCKETSTATE_ALLOCATED )
- {
- LogError( ( "storeAccessModeAndAddress, bad socket state %d",
- socketHandle->socketState ) );
- cellularStatus = CELLULAR_INTERNAL_FAILURE;
- }
- else if( dataAccessMode != CELLULAR_ACCESSMODE_BUFFER )
- {
- LogError( ( "storeAccessModeAndAddress, Access mode not supported %d",
- dataAccessMode ) );
- cellularStatus = CELLULAR_UNSUPPORTED;
- }
- else
- {
- socketHandle->remoteSocketAddress.port = pRemoteSocketAddress->port;
- socketHandle->dataMode = dataAccessMode;
- socketHandle->remoteSocketAddress.ipAddress.ipAddressType =
- pRemoteSocketAddress->ipAddress.ipAddressType;
- ( void ) strncpy( socketHandle->remoteSocketAddress.ipAddress.ipAddress,
- pRemoteSocketAddress->ipAddress.ipAddress,
- CELLULAR_IP_ADDRESS_MAX_SIZE + 1U );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetTcpCfgSessionId( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL;
- uint8_t * pSessionId = pData;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- int32_t tempValue = 0;
-
- if( pContext == NULL )
- {
- LogError( ( "GetTcpCfgSessionId: Invalid handle" ) );
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pSessionId == NULL ) || ( dataLen != sizeof( uint8_t ) ) )
- {
- LogError( ( "GetTcpCfgSessionId: Bad parameters" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "GetTcpCfgSessionId: Input Line passed is NULL" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pInputLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pInputLine, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= MIN_TCP_SESSION_ID ) && ( tempValue <= MAX_TCP_SESSION_ID ) )
- {
- *pSessionId = ( uint8_t ) tempValue;
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t _Cellular_getTcpCfgSessionId( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- uint8_t * pSessionId )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSocketConnect =
- {
- cmdBuf,
- CELLULAR_AT_WITH_PREFIX,
- "+KTCPCFG",
- _Cellular_RecvFuncGetTcpCfgSessionId,
- pSessionId,
- sizeof( uint8_t ),
- };
-
- /* Internal function. Caller checks parameters. */
- cellularStatus = buildSocketConfig( socketHandle, cmdBuf );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqSocketConnect,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_SocketConnect: Socket connect failed, cmdBuf:%s, PktRet: %d", cmdBuf, pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parseEidrxToken( char * pToken,
- uint8_t tokenIndex,
- CellularEidrxSettingsList_t * pEidrxSettingsList,
- uint8_t count )
-{
- int32_t tempValue = 0;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- switch( tokenIndex )
- {
- case CELLULAR_CEDRXS_POS_ACT:
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) &&
- ( tempValue <= ( int32_t ) UINT8_MAX ) )
- {
- pEidrxSettingsList->eidrxList[ count ].mode = ( uint8_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in processing mode value. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- break;
-
- case CELLULAR_CEDRXS_POS_RAT:
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) &&
- ( tempValue <= ( int32_t ) UINT8_MAX ) )
- {
- pEidrxSettingsList->eidrxList[ count ].rat = ( uint8_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in processing Requested rat value. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- break;
-
-
- case CELLULAR_CEDRXS_POS_REQUESTED_EDRX_VALUE:
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) &&
- ( tempValue <= ( int32_t ) UINT8_MAX ) )
- {
- pEidrxSettingsList->eidrxList[ count ].requestedEdrxVaue = ( uint8_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in processing Requested Edrx value. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- break;
-
- case CELLULAR_CEDRXS_POS_NW_PROVIDED_EDRX_VALUE:
- /* Unused value. */
- break;
-
- case CELLULAR_CEDRXS_POS_REQUESTED_PTW_VALUE:
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) &&
- ( tempValue <= ( int32_t ) UINT8_MAX ) )
- {
- pEidrxSettingsList->eidrxList[ count ].pagingTimeWindow = ( uint8_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in processing Requested paging time window value. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- break;
-
- case CELLULAR_CEDRXS_POS_NW_PROVIDED_PTW_VALUE:
- /* Unused value. */
- break;
-
- default:
- LogDebug( ( "Unknown Parameter Position %u in AT+CEDRXS Response", tokenIndex ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- break;
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parseEidrxLine( char * pInputLine,
- uint8_t count,
- CellularEidrxSettingsList_t * pEidrxSettingsList )
-{
- char * pToken = NULL;
- char * pLocalInputLine = pInputLine;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- uint8_t tokenIndex = 0;
-
- atCoreStatus = Cellular_ATRemovePrefix( &pLocalInputLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllDoubleQuote( pLocalInputLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pLocalInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- tokenIndex = 0;
-
- while( pToken != NULL )
- {
- if( parseEidrxToken( pToken, tokenIndex, pEidrxSettingsList, count ) != CELLULAR_AT_SUCCESS )
- {
- LogInfo( ( "parseEidrxToken %s index %d failed", pToken, tokenIndex ) );
- }
-
- tokenIndex++;
-
- if( Cellular_ATGetNextTok( &pLocalInputLine, &pToken ) != CELLULAR_AT_SUCCESS )
- {
- break;
- }
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library prototype. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetEidrxSettings( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL;
- uint8_t count = 0;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularEidrxSettingsList_t * pEidrxSettingsList = NULL;
- const CellularATCommandLine_t * pCommnadItem = NULL;
-
- if( pContext == NULL )
- {
- LogError( ( "GetEidrxSettings: Invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp == NULL ) ||
- ( pAtResp->pItm == NULL ) ||
- ( pAtResp->pItm->pLine == NULL ) ||
- ( pData == NULL ) ||
- ( dataLen != CELLULAR_EDRX_LIST_MAX_SIZE ) )
- {
- LogError( ( "GetEidrxSettings: Invalid param" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pEidrxSettingsList = ( CellularEidrxSettingsList_t * ) pData;
- pCommnadItem = pAtResp->pItm;
-
- while( pCommnadItem != NULL )
- {
- pInputLine = pCommnadItem->pLine;
- atCoreStatus = parseEidrxLine( pInputLine, count, pEidrxSettingsList );
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "GetEidrx: Parsing Error encountered, atCoreStatus: %d", atCoreStatus ) );
- }
- else
- {
- LogDebug( ( "GetEidrx setting[%d]: RAT: %d, Value: 0x%x",
- count, pEidrxSettingsList->eidrxList[ count ].rat, pEidrxSettingsList->eidrxList[ count ].requestedEdrxVaue ) );
- }
-
- pCommnadItem = pCommnadItem->pNext;
- count++;
- pEidrxSettingsList->count = count;
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularRat_t convertKselacqIndexToRat( char ratIndex )
-{
- CellularRat_t rat = CELLULAR_RAT_INVALID;
-
- switch( ratIndex )
- {
- case KSELACQ_RAT_CATM_CHAR:
- rat = CELLULAR_RAT_CATM1;
- break;
-
- case KSELACQ_RAT_NBIOT_CHAR:
- rat = CELLULAR_RAT_NBIOT;
- break;
-
- case KSELACQ_RAT_GSM_CHAR:
- rat = CELLULAR_RAT_GSM;
- break;
-
- default:
- break;
- }
-
- return rat;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetRatPriority( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL, * pToken = NULL;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularRat_t * pRatPriorities = NULL;
- uint32_t ratIndex = 0;
- uint32_t maxRatPriorityLength = ( dataLen > RAT_PRIOIRTY_LIST_LENGTH ? RAT_PRIOIRTY_LIST_LENGTH : dataLen );
-
- if( pContext == NULL )
- {
- LogError( ( "GetRatPriority: Invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) ||
- ( pAtResp->pItm->pLine == NULL ) || ( pData == NULL ) || ( dataLen == 0U ) )
- {
- LogError( ( "GetRatPriority: Invalid param" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
- pRatPriorities = ( CellularRat_t * ) pData;
-
- /* Response string "+KSELACQ: 1,2,3". */
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- for( ratIndex = 0; ratIndex < maxRatPriorityLength; ratIndex++ )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveLeadingWhiteSpaces( &pToken );
- }
-
- if( ( atCoreStatus == CELLULAR_AT_SUCCESS ) && ( strlen( pToken ) == 1 ) )
- {
- pRatPriorities[ ratIndex ] = convertKselacqIndexToRat( pToken[ 0 ] );
- }
- else
- {
- pRatPriorities[ ratIndex ] = CELLULAR_RAT_INVALID;
- }
- }
- }
-
- for( ; ratIndex < dataLen; ratIndex++ )
- {
- pRatPriorities[ ratIndex ] = CELLULAR_RAT_INVALID;
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Received signal strength level (see 3GPP TS 45.008 [20] subclause 8.1.4)
- * 0 rssi < -110 dBm : assume -111 dBm to indicate the signal is detectable but fairly week.
- * 1 -110 dBm <= rssi < -109 dBm
- * 2 -109 dBm <= rssi < -108 dBm
- * ...
- * 61 -50 dBm <= rssi < -49 dBm
- * 62 -49 dBm <= rssi < -48 dBm
- * 63 -48 dBm <= rssi
- * 99 not known or not detectable */
-static int16_t convertCesqSignalRxlev( int32_t rxlevValue )
-{
- int16_t rssidBm = 0;
-
- if( ( rxlevValue >= 0 ) && ( rxlevValue <= 63 ) )
- {
- rssidBm = ( int16_t ) ( ( -111 ) + ( rxlevValue ) );
- }
- else
- {
- rssidBm = CELLULAR_INVALID_SIGNAL_VALUE;
- }
-
- return rssidBm;
-}
-
-/*-----------------------------------------------------------*/
-
-/* 0 rsrq < -19.5 dB
- * 1 -19.5 dB <= rsrq < -19 dB
- * 2 -19 dB <= rsrq < -18.5 dB
- * ...
- * 32 -4 dB <= rsrq < -3.5 dB
- * 33 -3.5 dB <= rsrq < -3 dB
- * 34 -3 dB <= rsrq
- * 255 Not known or not detectable. */
-static int16_t convertCesqSignalRsrq( int32_t rsrqValue )
-{
- int16_t rsrqDb = 0;
-
- if( ( rsrqValue >= 0 ) && ( rsrqValue <= 34 ) )
- {
- rsrqDb = ( int16_t ) ( ( -20 ) + ( rsrqValue * 0.5 ) );
- }
- else
- {
- rsrqDb = CELLULAR_INVALID_SIGNAL_VALUE;
- }
-
- return rsrqDb;
-}
-
-/*-----------------------------------------------------------*/
-
-/* 0 rsrp < -140 dBm
- * 1 -140 dBm <= rsrp < -139 dBm
- * 2 -139 dBm <= rsrp < -138 dBm
- * ...
- * 95 -46 dBm <= rsrp < -45 dBm
- * 96 -45 dBm <= rsrp < -44 dBm
- * 97 -44 dBm <= rsrp
- * 255 Not known or not detectable. */
-static int16_t convertCesqSignalRsrp( int32_t rsrpValue )
-{
- int16_t rsrpDb = 0;
-
- if( ( rsrpValue >= 0 ) && ( rsrpValue <= 97 ) )
- {
- rsrpDb = ( int16_t ) ( ( -141 ) + ( rsrpValue ) );
- }
- else
- {
- rsrpDb = CELLULAR_INVALID_SIGNAL_VALUE;
- }
-
- return rsrpDb;
-}
-
-/*-----------------------------------------------------------*/
-
-static bool _parseSignalQuality( char * pQcsqPayload,
- CellularSignalInfo_t * pSignalInfo )
-{
- char * pToken = NULL, * pTmpQcsqPayload = pQcsqPayload;
- int32_t tempValue = 0;
- int16_t berValue = 0;
- bool parseStatus = true;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- /* The cesq payload format is ,,,,,. */
-
- /* rxlev. */
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- pSignalInfo->rssi = convertCesqSignalRxlev( tempValue );
- }
- else
- {
- LogError( ( "_parseSignalQuality: Error in processing RXLEV. Token %s", pToken ) );
- parseStatus = false;
- }
- }
-
- /* ber. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( ( atCoreStatus == CELLULAR_AT_SUCCESS ) && ( tempValue <= INT16_MAX ) && ( tempValue >= INT16_MIN ) )
- {
- /* As RXQUAL values in the table in 3GPP TS 45.008 [20] subclause 8.2.4.
- * The CESQ ber signal value has the same scale with the AT+CSQ ber signal value. */
- cellularStatus = _Cellular_ConvertCsqSignalBer( ( int16_t ) tempValue, &berValue );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- pSignalInfo->ber = berValue;
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- else
- {
- LogError( ( "_parseSignalQuality: Error in processing BER. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- /* Skip rscp. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
- }
-
- /* Skip ecno. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
- }
-
- /* rsrq. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- pSignalInfo->rsrq = convertCesqSignalRsrq( tempValue );
- }
- else
- {
- LogError( ( "_parseSignalQuality: Error in processing RSRQ. Token %s", pToken ) );
- parseStatus = false;
- }
- }
-
- /* rsrp. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- pSignalInfo->rsrp = convertCesqSignalRsrp( tempValue );
- }
- else
- {
- LogError( ( "_parseSignalQuality: Error in processing RSRP. Token %s", pToken ) );
- parseStatus = false;
- }
- }
-
- return parseStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetSignalInfo( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL;
- CellularSignalInfo_t * pSignalInfo = ( CellularSignalInfo_t * ) pData;
- bool parseStatus = true;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- if( pContext == NULL )
- {
- LogError( ( "GetSignalInfo: Invalid handle" ) );
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pSignalInfo == NULL ) || ( dataLen != sizeof( CellularSignalInfo_t ) ) )
- {
- LogError( ( "GetSignalInfo: Invalid param" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "GetSignalInfo: Input Line passed is NULL" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pInputLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- parseStatus = _parseSignalQuality( pInputLine, pSignalInfo );
- }
-
- if( parseStatus != true )
- {
- pSignalInfo->rssi = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->rsrp = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->rsrq = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->ber = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->bars = CELLULAR_INVALID_SIGNAL_BAR_VALUE;
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetDns( CellularHandle_t cellularHandle,
- uint8_t contextId,
- const char * pDnsServerAddress )
-{
- ( void ) cellularHandle;
- ( void ) contextId;
- ( void ) pDnsServerAddress;
-
- /* Modem use dynamic DNS addresses. Return unsupported. */
- return CELLULAR_UNSUPPORTED;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-CellularError_t Cellular_SocketRecv( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- /* coverity[misra_c_2012_rule_8_13_violation] */
- uint8_t * pBuffer,
- uint32_t bufferLength,
- /* coverity[misra_c_2012_rule_8_13_violation] */
- uint32_t * pReceivedDataLength )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- uint32_t recvTimeout = CELLULAR_HL7802_AT_TIMEOUT_60_SECONDS_MS;
- uint32_t recvLen = bufferLength;
- _socketDataRecv_t dataRecv =
- {
- pReceivedDataLength,
- pBuffer
- };
- CellularAtReq_t atReqSocketRecv =
- {
- cmdBuf,
- CELLULAR_AT_MULTI_DATA_WO_PREFIX,
- "CONNECT",
- _Cellular_RecvFuncData,
- ( void * ) &dataRecv,
- bufferLength,
- };
- socketStat_t socketStat = { 0 };
- uint32_t socktCmdDataLength = 0;
- uint32_t sessionId = 0;
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogError( ( "_Cellular_CheckLibraryStatus failed." ) );
- }
- else if( socketHandle == NULL )
- {
- LogError( ( "_Cellular_RecvData: Invalid socket handle." ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ( pBuffer == NULL ) || ( pReceivedDataLength == NULL ) || ( bufferLength == 0U ) )
- {
- LogError( ( "_Cellular_RecvData: Bad input Param." ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( ( socketHandle->socketState != SOCKETSTATE_CONNECTED ) && ( socketHandle->socketState != SOCKETSTATE_DISCONNECTED ) )
- {
- /* Check the socket connection state. */
- /* For SOCKETSTATE_DISCONNECTED, there may be packets that can be read even though socket is disconnected by remote. */
- LogInfo( ( "Cellular_SocketRecv: socket state %d is not connected.", socketHandle->socketState ) );
-
- if( ( socketHandle->socketState == SOCKETSTATE_ALLOCATED ) || ( socketHandle->socketState == SOCKETSTATE_CONNECTING ) )
- {
- cellularStatus = CELLULAR_SOCKET_NOT_CONNECTED;
- }
- else
- {
- cellularStatus = CELLULAR_SOCKET_CLOSED;
- }
- }
- else
- {
- sessionId = _Cellular_GetSessionId( pContext, socketHandle->socketId );
-
- if( sessionId == INVALID_SESSION_ID )
- {
- LogError( ( "Cellular_SocketRecv : invalid session ID for socket index %u",
- socketHandle->socketId ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Calculate the read length. */
- cellularStatus = _Cellular_GetSocketStat( cellularHandle, socketHandle, &socketStat );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- socktCmdDataLength = socketStat.rcvData;
- }
- else
- {
- socktCmdDataLength = 0;
- }
-
- /* Update recvLen to maximum module length. */
- if( CELLULAR_MAX_RECV_DATA_LEN <= bufferLength )
- {
- recvLen = ( uint32_t ) CELLULAR_MAX_RECV_DATA_LEN;
- }
-
- /* Update the recvLen to available data length in cellular module. */
- if( recvLen > socktCmdDataLength )
- {
- recvLen = socktCmdDataLength;
- }
-
- *pReceivedDataLength = recvLen;
- socktCmdDataLength = recvLen;
-
- /* Update receive timeout to default timeout if not set with setsocketopt. */
- if( recvLen > 0 )
- {
- if( socketHandle->recvTimeoutMs != 0U )
- {
- recvTimeout = socketHandle->recvTimeoutMs;
- }
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE,
- "%s%u,%u", "AT+KTCPRCV=", sessionId, recvLen );
- pktStatus = _Cellular_TimeoutAtcmdDataRecvRequestWithCallback( pContext,
- atReqSocketRecv, recvTimeout, socketRecvDataPrefix, &socktCmdDataLength );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- /* Reset data handling parameters. */
- LogError( ( "Cellular_SocketRecv: Data Receive fail, pktStatus: %d", pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-CellularError_t Cellular_SocketSend( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- const uint8_t * pData,
- uint32_t dataLength,
- /* coverity[misra_c_2012_rule_8_13_violation] */
- uint32_t * pSentDataLength )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- uint32_t sendTimeout = CELLULAR_HL7802_AT_TIMEOUT_60_SECONDS_MS;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSocketSend =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
- CellularAtDataReq_t atDataReqSocketSend =
- {
- pData,
- dataLength,
- pSentDataLength,
- ( const uint8_t * ) SOCKET_END_PATTERN,
- SOCKET_END_PATTERN_LEN
- };
- uint32_t sessionId = 0;
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogError( ( "_Cellular_CheckLibraryStatus failed." ) );
- }
- else if( socketHandle == NULL )
- {
- LogError( ( "Cellular_SocketSend: Invalid socket handle." ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ( pData == NULL ) || ( pSentDataLength == NULL ) || ( dataLength == 0U ) )
- {
- LogError( ( "Cellular_SocketSend: Invalid parameter." ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketHandle->socketState != SOCKETSTATE_CONNECTED )
- {
- /* Check the socket connection state. */
- LogInfo( ( "Cellular_SocketSend: socket state %d is not connected.", socketHandle->socketState ) );
-
- if( ( socketHandle->socketState == SOCKETSTATE_ALLOCATED ) || ( socketHandle->socketState == SOCKETSTATE_CONNECTING ) )
- {
- cellularStatus = CELLULAR_SOCKET_NOT_CONNECTED;
- }
- else
- {
- cellularStatus = CELLULAR_SOCKET_CLOSED;
- }
- }
- else
- {
- sessionId = _Cellular_GetSessionId( pContext, socketHandle->socketId );
-
- if( sessionId == INVALID_SESSION_ID )
- {
- LogError( ( "Cellular_SocketSend : invalid session ID for socket index %u",
- socketHandle->socketId ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Send data length check. */
- if( dataLength > ( uint32_t ) CELLULAR_MAX_SEND_DATA_LEN )
- {
- atDataReqSocketSend.dataLen = ( uint32_t ) CELLULAR_MAX_SEND_DATA_LEN;
- }
-
- /* Check send timeout. If not set by setsockopt, use default value. */
- if( socketHandle->sendTimeoutMs != 0U )
- {
- sendTimeout = socketHandle->sendTimeoutMs;
- }
-
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "%s%u,%u",
- "AT+KTCPSND=", sessionId, atDataReqSocketSend.dataLen );
-
- pktStatus = _Cellular_TimeoutAtcmdDataSendSuccessToken( pContext, atReqSocketSend, atDataReqSocketSend,
- CELLULAR_HL7802_AT_TIMEOUT_60_SECONDS_MS, sendTimeout,
- _socketSendSuccesTokenTable, _socketSendSuccesTokenTableLength );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- if( socketHandle->socketState == SOCKETSTATE_DISCONNECTED )
- {
- LogWarn( ( "Cellular_SocketSend: Data send fail. Socket is closed during the send operation." ) );
- cellularStatus = CELLULAR_SOCKET_CLOSED;
- }
- else
- {
- LogError( ( "Cellular_SocketSend: Data send fail, PktRet: %d", pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketClose( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSocketClose =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
- uint32_t sessionId = 0U;
- cellularModuleContext_t * pModuleContext = NULL;
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( socketHandle == NULL )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else
- {
- if( socketHandle->socketState == SOCKETSTATE_CONNECTING )
- {
- LogWarn( ( "Cellular_SocketClose: Socket state is SOCKETSTATE_CONNECTING." ) );
- }
-
- cellularStatus = _Cellular_GetModuleContext( pContext, ( void ** ) &pModuleContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- sessionId = _Cellular_GetSessionId( pContext, socketHandle->socketId );
-
- if( sessionId == INVALID_SESSION_ID )
- {
- LogError( ( "Cellular_SocketSend : invalid session ID for socket index %u",
- socketHandle->socketId ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Remove the mapping. */
- pModuleContext->pSessionMap[ sessionId ] = INVALID_SOCKET_INDEX;
-
- /* Close the socket. */
- if( socketHandle->socketState == SOCKETSTATE_CONNECTED )
- {
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "%s%lu,1",
- "AT+KTCPCLOSE=", sessionId );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqSocketClose,
- CELLULAR_HL7802_AT_TIMEOUT_60_SECONDS_MS );
-
- /* Delete the socket config. */
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogWarn( ( "Cellular_SocketClose: AT+KTCPCLOSE fail, PktRet: %d", pktStatus ) );
- }
- }
-
- if( ( socketHandle->socketState == SOCKETSTATE_CONNECTED ) ||
- ( socketHandle->socketState == SOCKETSTATE_CONNECTING ) ||
- ( socketHandle->socketState == SOCKETSTATE_DISCONNECTED ) )
- {
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "%s%lu",
- "AT+KTCPDEL=", sessionId );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqSocketClose,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_SocketClose: AT+KTCPDEL fail, PktRet: %d", pktStatus ) );
- }
- }
-
- /* Ignore the result from the info, and force to remove the socket. */
- cellularStatus = _Cellular_RemoveSocketData( pContext, socketHandle );
- }
-
- return CELLULAR_SUCCESS;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketConnect( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketAccessMode_t dataAccessMode,
- const CellularSocketAddress_t * pRemoteSocketAddress )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- uint8_t sessionId = 0;
- CellularAtReq_t atReqSocketConnect =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
- cellularModuleContext_t * pModuleContext = NULL;
-
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogError( ( "_Cellular_CheckLibraryStatus failed." ) );
- }
- else if( pRemoteSocketAddress == NULL )
- {
- LogError( ( "Cellular_SocketConnect: Invalid socket address." ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketHandle == NULL )
- {
- LogError( ( "Cellular_SocketConnect: Invalid socket handle." ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ( socketHandle->socketState == SOCKETSTATE_CONNECTED ) || ( socketHandle->socketState == SOCKETSTATE_CONNECTING ) )
- {
- LogError( ( "Cellular_SocketConnect: Not allowed in state %d.", socketHandle->socketState ) );
- cellularStatus = CELLULAR_NOT_ALLOWED;
- }
- else
- {
- cellularStatus = storeAccessModeAndAddress( pContext, socketHandle, dataAccessMode, pRemoteSocketAddress );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- cellularStatus = _Cellular_GetModuleContext( pContext, ( void ** ) &pModuleContext );
- }
-
- /* Set socket config and get session id. The session id is defined by the modem. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Builds the Socket connect command. */
- cellularStatus = _Cellular_getTcpCfgSessionId( pContext, socketHandle, &sessionId );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Create the reverse table to store the socketIndex to sessionId. */
- pModuleContext->pSessionMap[ sessionId ] = socketHandle->socketId;
- }
- }
-
- /* Start the tcp connection. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Set the socket state to connecting state. If cellular modem returns error,
- * revert the state to allocated state. */
- socketHandle->socketState = SOCKETSTATE_CONNECTING;
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE,
- "AT+KTCPCNX=%u", sessionId );
-
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqSocketConnect,
- CELLULAR_HL7802_AT_TIMEOUT_30_SECONDS_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_SocketConnect: Socket connect failed, cmdBuf:%s, PktRet: %d", cmdBuf, pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- /* Revert the state to allocated state. */
- socketHandle->socketState = SOCKETSTATE_ALLOCATED;
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetSimCardStatus( CellularHandle_t cellularHandle,
- CellularSimCardStatus_t * pSimCardStatus )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- /* Parameters are checked in this API. */
- cellularStatus = Cellular_CommonGetSimCardLockStatus( cellularHandle, pSimCardStatus );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- cellularStatus = Cellular_CommonGetSimCardLockStatus( cellularHandle, pSimCardStatus );
-
- if( ( cellularStatus == CELLULAR_SUCCESS ) &&
- ( pSimCardStatus->simCardLockState != CELLULAR_SIM_CARD_INVALID ) &&
- ( pSimCardStatus->simCardLockState != CELLULAR_SIM_CARD_LOCK_UNKNOWN ) )
- {
- pSimCardStatus->simCardState = CELLULAR_SIM_CARD_INSERTED;
- }
- else
- {
- pSimCardStatus->simCardState = CELLULAR_SIM_CARD_UNKNOWN;
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterUrcSignalStrengthChangedCallback( CellularHandle_t cellularHandle,
- CellularUrcSignalStrengthChangedCallback_t signalStrengthChangedCallback,
- void * pCallbackContext )
-{
- ( void ) cellularHandle;
- ( void ) signalStrengthChangedCallback;
- ( void ) pCallbackContext;
- return CELLULAR_UNSUPPORTED;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetHostByName( CellularHandle_t cellularHandle,
- uint8_t contextId,
- const char * pcHostName,
- char * pResolvedAddress )
-{
- ( void ) cellularHandle;
- ( void ) contextId;
- ( void ) pcHostName;
- ( void ) pResolvedAddress;
- return CELLULAR_UNSUPPORTED;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_DeactivatePdn( CellularHandle_t cellularHandle,
- uint8_t contextId )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
-
- CellularAtReq_t atReqDeactPdn =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- cellularStatus = _Cellular_IsValidPdn( contextId );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "%s=%u", "AT+KCNXDOWN", contextId );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqDeactPdn,
- CELLULAR_HL7802_AT_KCNXDOWN_TIMEOUT_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_DeactivatePdn: can't deactivate PDN, PktRet: %d", pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library prototype. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncPacketSwitchStatus( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- bool * pPacketSwitchStatus = ( bool * ) pData;
-
- if( pContext == NULL )
- {
- LogError( ( "PacketSwitchStatus: Invalid handle" ) );
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pData == NULL ) || ( dataLen != sizeof( bool ) ) )
- {
- LogError( ( "GetPacketSwitchStatus: Invalid param" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "GetPacketSwitchStatus: Input Line passed is NULL" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
-
- /* Remove prefix. */
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- /* Remove leading space. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveLeadingWhiteSpaces( &pInputLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( *pInputLine == '0' )
- {
- *pPacketSwitchStatus = false;
- }
- else if( *pInputLine == '1' )
- {
- *pPacketSwitchStatus = true;
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t _Cellular_GetPacketSwitchStatus( CellularHandle_t cellularHandle,
- bool * pPacketSwitchStatus )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularAtReq_t atReqPacketSwitchStatus =
- {
- "AT+CGATT?",
- CELLULAR_AT_WITH_PREFIX,
- "+CGATT",
- _Cellular_RecvFuncPacketSwitchStatus,
- pPacketSwitchStatus,
- sizeof( bool ),
- };
-
- /* Internal function. Callee check parameters. */
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqPacketSwitchStatus,
- CELLULAR_HL7802_AT_TIMEOUT_60_SECONDS_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ActivatePdn( CellularHandle_t cellularHandle,
- uint8_t contextId )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- bool packetSwitchStatus = false;
-
- CellularAtReq_t atReqActPdn =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- cellularStatus = _Cellular_IsValidPdn( contextId );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Check packet switch attach first. If not attached, attach packet switch first. */
- cellularStatus = _Cellular_GetPacketSwitchStatus( cellularHandle, &packetSwitchStatus );
-
- if( ( cellularStatus == CELLULAR_SUCCESS ) && ( packetSwitchStatus == false ) )
- {
- LogError( ( "Activate Packet switch" ) );
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "%s", "AT+CGATT=1" );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqActPdn,
- CELLULAR_HL7802_AT_TIMEOUT_60_SECONDS_MS );
- }
- else if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogError( ( "Packet switch query failed" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else
- {
- LogInfo( ( "Packet switch attached" ) );
- }
-
- /* Check the current attach status. If not activated, activate the PDN context ID. */
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "%s=%u", "AT+KCNXUP", contextId );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqActPdn,
- CELLULAR_HL7802_AT_KCNXUP_TIMEOUT_MS );
- }
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_ActivatePdn: can't activate PDN, PktRet: %d", pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parsePdnStatusContextId( char * pToken,
- CellularPdnStatus_t * pPdnStatusBuffers )
-{
- int32_t tempValue = 0;
- CellularATError_t atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= ( int32_t ) CELLULAR_PDN_CONTEXT_ID_MIN ) &&
- ( tempValue <= ( int32_t ) CELLULAR_PDN_CONTEXT_ID_MAX ) )
- {
- pPdnStatusBuffers->contextId = ( uint8_t ) tempValue;
- }
- else
- {
- LogError( ( "Error in Processing Context Id. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parsePdnStatusContextState( char * pToken,
- CellularPdnStatus_t * pPdnStatusBuffers )
-{
- int32_t tempValue = 0;
- CellularATError_t atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) &&
- ( tempValue <= ( int32_t ) UINT8_MAX ) )
- {
- /* Remap the status. */
- switch( tempValue )
- {
- case CELLULAR_PDN_STATE_CONNECTED:
- pPdnStatusBuffers->state = 1;
- break;
-
- case CELLULAR_PDN_STATE_DISCONNECTED:
- case CELLULAR_PDN_STATE_CONNECTING:
- case CELLULAR_PDN_STATE_IDLE:
- case CELLULAR_PDN_STATE_DISCONNECTING:
- pPdnStatusBuffers->state = 0;
- break;
-
- default:
- LogError( ( "parsePdnStatusContextState unknown status : %d", tempValue ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- break;
- }
- }
- else
- {
- LogError( ( "Error in processing PDN Status Buffer state. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t parsePdnStatusContextType( char * pToken,
- CellularPdnStatus_t * pPdnStatusBuffers )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- if( strcmp( pToken, "IPV4" ) == 0 )
- {
- pPdnStatusBuffers->pdnContextType = CELLULAR_PDN_CONTEXT_IPV4;
- pPdnStatusBuffers->ipAddress.ipAddressType = CELLULAR_IP_ADDRESS_V4;
- }
- else if( strcmp( pToken, "IPV6" ) == 0 )
- {
- pPdnStatusBuffers->pdnContextType = CELLULAR_PDN_CONTEXT_IPV6;
- pPdnStatusBuffers->ipAddress.ipAddressType = CELLULAR_IP_ADDRESS_V6;
- }
- else if( strcmp( pToken, "IPV4V6" ) == 0 )
- {
- pPdnStatusBuffers->pdnContextType = CELLULAR_PDN_CONTEXT_IPV4V6;
- /* The IP address depends on the format returned. */
- }
- else
- {
- LogError( ( "parsePdnStatusContextType : unknown token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t getPdnStatusParseToken( char * pToken,
- uint8_t tokenIndex,
- CellularPdnStatus_t * pPdnStatusBuffers )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- switch( tokenIndex )
- {
- case ( CELLULAR_PDN_STATUS_POS_CONTEXT_ID ):
- LogDebug( ( "CELLULAR_PDN_STATUS_POS_CONTEXT_ID: %s", pToken ) );
- atCoreStatus = parsePdnStatusContextId( pToken, pPdnStatusBuffers );
- break;
-
- case ( CELLULAR_PDN_STATUS_POS_AF ):
- LogDebug( ( "CELLULAR_PDN_STATUS_POS_AF: %s", pToken ) );
- atCoreStatus = parsePdnStatusContextType( pToken, pPdnStatusBuffers );
- break;
-
- case ( CELLULAR_PDN_STATUS_POS_STATE ):
- LogDebug( ( "CELLULAR_PDN_STATUS_POS_STATE: %s", pToken ) );
- atCoreStatus = parsePdnStatusContextState( pToken, pPdnStatusBuffers );
- break;
-
- case ( CELLULAR_PDN_STATUS_POS_APN ):
- case ( CELLULAR_PDN_STATUS_POS_LOGIN ):
- case ( CELLULAR_PDN_STATUS_POS_PASSWORD ):
- case ( CELLULAR_PDN_STATUS_POS_IP ):
- case ( CELLULAR_PDN_STATUS_POS_GPRS ):
- case ( CELLULAR_PDN_STATUS_POS_DNS1 ):
- case ( CELLULAR_PDN_STATUS_POS_DNS2 ):
- LogDebug( ( "CELLULAR_PDN_STATUS Ignored index %d : %s", tokenIndex, pToken ) );
- atCoreStatus = CELLULAR_AT_SUCCESS;
- break;
-
- default:
- LogError( ( "Unknown token in getPdnStatusParseToken %s %d",
- pToken, tokenIndex ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- break;
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t getPdnStatusParseLine( char * pRespLine,
- CellularPdnStatus_t * pPdnStatusBuffers )
-{
- char * pToken = NULL;
- char * pLocalRespLine = pRespLine;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- uint8_t tokenIndex = 0;
-
- atCoreStatus = Cellular_ATRemovePrefix( &pLocalRespLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllDoubleQuote( pLocalRespLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pLocalRespLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- tokenIndex = 0;
-
- while( ( pToken != NULL ) && ( atCoreStatus == CELLULAR_AT_SUCCESS ) )
- {
- atCoreStatus = getPdnStatusParseToken( pToken, tokenIndex, pPdnStatusBuffers );
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- LogError( ( "getPdnStatusParseToken %s index %d failed", pToken, tokenIndex ) );
- }
-
- tokenIndex++;
-
- if( pLocalRespLine[ 0 ] == ',' )
- {
- pToken = pLocalRespLine;
- pLocalRespLine[ 0 ] = '\0';
- pLocalRespLine = &pLocalRespLine[ 1 ];
- }
- else
- {
- if( Cellular_ATGetNextTok( &pLocalRespLine, &pToken ) != CELLULAR_AT_SUCCESS )
- {
- break;
- }
- }
- }
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetPdnStatus( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pRespLine = NULL;
- CellularPdnStatus_t * pPdnStatusBuffers = ( CellularPdnStatus_t * ) pData;
- uint8_t numStatusBuffers = ( uint8_t ) dataLen;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- const CellularATCommandLine_t * pCommnadItem = NULL;
-
- if( pContext == NULL )
- {
- LogError( ( "GetPdnStatus: invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp == NULL ) )
- {
- LogError( ( "GetPdnStatus: Response is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pPdnStatusBuffers == NULL ) || ( numStatusBuffers < 1U ) )
- {
- LogError( ( "GetPdnStatus: PDN Status bad parameters" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "GetPdnStatus: no activated PDN" ) );
- pPdnStatusBuffers[ 0 ].contextId = INVALID_PDN_INDEX;
- pktStatus = CELLULAR_PKT_STATUS_OK;
- }
- else
- {
- pRespLine = pAtResp->pItm->pLine;
-
- pCommnadItem = pAtResp->pItm;
-
- while( ( numStatusBuffers != 0U ) && ( pCommnadItem != NULL ) )
- {
- pRespLine = pCommnadItem->pLine;
- atCoreStatus = getPdnStatusParseLine( pRespLine, pPdnStatusBuffers );
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "getPdnStatusParseLine parse %s failed", pRespLine ) );
- break;
- }
-
- pPdnStatusBuffers++;
- numStatusBuffers--;
- pCommnadItem = pCommnadItem->pNext;
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-CellularError_t Cellular_GetPdnStatus( CellularHandle_t cellularHandle,
- CellularPdnStatus_t * pPdnStatusBuffers,
- uint8_t numStatusBuffers,
- uint8_t * pNumStatus )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- const CellularPdnStatus_t * pTempPdnStatusBuffer = pPdnStatusBuffers;
- uint8_t numBuffers = 0;
- CellularAtReq_t atReqGetPdnStatus =
- {
- "AT+KCNXCFG?",
- CELLULAR_AT_WITH_PREFIX,
- "+KCNXCFG",
- _Cellular_RecvFuncGetPdnStatus,
- pPdnStatusBuffers,
- numStatusBuffers,
- };
-
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( ( pTempPdnStatusBuffer == NULL ) || ( pNumStatus == NULL ) || ( numStatusBuffers < 1u ) )
- {
- LogDebug( ( "_Cellular_GetPdnStatus: Bad input Parameter " ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetPdnStatus,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Populate the Valid number of statuses. */
- *pNumStatus = 0;
- numBuffers = numStatusBuffers;
-
- while( numBuffers != 0U )
- {
- /* Check if the PDN state is valid. The context ID of the first
- * invalid PDN status is set to FF. */
- if( pTempPdnStatusBuffer->contextId <= CELLULAR_PDN_CONTEXT_ID_MAX )
- {
- ( *pNumStatus ) += 1U;
- }
- else
- {
- break;
- }
-
- numBuffers--;
- pTempPdnStatusBuffer++;
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetEidrxSettings( CellularHandle_t cellularHandle,
- CellularEidrxSettingsList_t * pEidrxSettingsList )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularAtReq_t atReqGetEidrx =
- {
- "AT+KEDRXCFG?",
- CELLULAR_AT_MULTI_WITH_PREFIX,
- "+KEDRXCFG",
- _Cellular_RecvFuncGetEidrxSettings,
- pEidrxSettingsList,
- CELLULAR_EDRX_LIST_MAX_SIZE,
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pEidrxSettingsList == NULL )
- {
- LogDebug( ( "Cellular_GetEidrxSettings : Bad parameter" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- ( void ) memset( pEidrxSettingsList, 0, sizeof( CellularEidrxSettingsList_t ) );
- /* Query the pEidrxSettings from the network. */
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetEidrx,
- CELLULAR_HL7802_AT_KEDRXCFG_TIMEOUT_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_GetEidrxSettings: couldn't retrieve Eidrx settings" ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetEidrxSettings( CellularHandle_t cellularHandle,
- const CellularEidrxSettings_t * pEidrxSettings )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSetEidrx =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pEidrxSettings == NULL )
- {
- LogDebug( ( "Cellular_SetEidrxSettings : Bad parameter" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "%s%u,%u,%u,%u",
- "AT+KEDRXCFG=",
- pEidrxSettings->mode,
- pEidrxSettings->rat,
- pEidrxSettings->requestedEdrxVaue,
- pEidrxSettings->pagingTimeWindow );
- LogDebug( ( "Eidrx setting: %s ", cmdBuf ) );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqSetEidrx,
- CELLULAR_HL7802_AT_KEDRXCFG_TIMEOUT_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "_Cellular_SetEidrxSettings: couldn't set Eidrx settings" ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetRatPriority( CellularHandle_t cellularHandle,
- const CellularRat_t * pRatPriorities,
- uint8_t ratPrioritiesLength )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- uint8_t i = 0;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSetRatPriority =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( ( pRatPriorities == NULL ) || ( ratPrioritiesLength == 0U ) ||
- ( ratPrioritiesLength > ( uint8_t ) CELLULAR_MAX_RAT_PRIORITY_COUNT ) )
- {
- LogDebug( ( "Cellular_SetRatPriority : Bad parameter" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- /* Reboot is required for this command. */
- ( void ) strcpy( cmdBuf, "AT+KSELACQ=0," );
-
- for( i = 0; i < ratPrioritiesLength; i++ )
- {
- if( pRatPriorities[ i ] == CELLULAR_RAT_CATM1 )
- {
- ( void ) strcat( cmdBuf, "1" );
- }
- else if( pRatPriorities[ i ] == CELLULAR_RAT_NBIOT )
- {
- ( void ) strcat( cmdBuf, "2" );
- }
- else if( pRatPriorities[ i ] == CELLULAR_RAT_GSM )
- {
- ( void ) strcat( cmdBuf, "3" );
- }
- else
- {
- LogDebug( ( "Cellular_SetRatPriority : unsupported mode %d", pRatPriorities[ i ] ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- break;
- }
-
- if( i != ( ratPrioritiesLength - 1 ) )
- {
- ( void ) strcat( cmdBuf, "," );
- }
- }
-
- LogError( ( " setRatPriority cmdbuf %s", cmdBuf ) );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqSetRatPriority,
- CELLULAR_HL7802_AT_KSELACQ_TIMEOUT_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetRatPriority( CellularHandle_t cellularHandle,
- CellularRat_t * pRatPriorities,
- uint8_t ratPrioritiesLength,
- uint8_t * pReceiveRatPrioritesLength )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- uint32_t ratIndex = 0;
-
- CellularAtReq_t atReqSetRatPriority =
- {
- "AT+KSELACQ?",
- CELLULAR_AT_WITH_PREFIX,
- "+KSELACQ",
- _Cellular_RecvFuncGetRatPriority,
- pRatPriorities,
- ( uint16_t ) ratPrioritiesLength,
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( ( pRatPriorities == NULL ) || ( ratPrioritiesLength == 0U ) ||
- ( ratPrioritiesLength > ( uint8_t ) CELLULAR_MAX_RAT_PRIORITY_COUNT ) ||
- ( pReceiveRatPrioritesLength == NULL ) )
- {
- LogDebug( ( "Cellular_GetRatPriority : Bad parameter" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqSetRatPriority,
- CELLULAR_HL7802_AT_KSELACQ_TIMEOUT_MS );
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- for( ratIndex = 0; ratIndex < ratPrioritiesLength; ratIndex++ )
- {
- if( pRatPriorities[ ratIndex ] == CELLULAR_RAT_INVALID )
- {
- break;
- }
- }
-
- *pReceiveRatPrioritesLength = ratIndex;
- }
-
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetSignalInfo( CellularHandle_t cellularHandle,
- CellularSignalInfo_t * pSignalInfo )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularRat_t rat = CELLULAR_RAT_INVALID;
- CellularAtReq_t atReqQuerySignalInfo =
- {
- "AT+CESQ",
- CELLULAR_AT_WITH_PREFIX,
- "+CESQ",
- _Cellular_RecvFuncGetSignalInfo,
- pSignalInfo,
- sizeof( CellularSignalInfo_t ),
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "_Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pSignalInfo == NULL )
- {
- LogDebug( ( "Cellular_GetSignalInfo : Bad parameter" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- cellularStatus = _Cellular_GetCurrentRat( pContext, &rat );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Init the signal value. */
- pSignalInfo->rssi = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->rsrp = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->rsrq = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->ber = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->bars = CELLULAR_INVALID_SIGNAL_BAR_VALUE;
-
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqQuerySignalInfo,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- /* If the convert failed, the API will return CELLULAR_INVALID_SIGNAL_BAR_VALUE in bars field. */
- ( void ) _Cellular_ComputeSignalBars( rat, pSignalInfo );
- }
-
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetPdnConfig( CellularHandle_t cellularHandle,
- uint8_t contextId,
- const CellularPdnConfig_t * pPdnConfig )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atGprsConnectionConfighReq =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- /* Parameters are also checked in Cellular_CommonSetPdnConfig. */
- cellularStatus = Cellular_CommonSetPdnConfig( cellularHandle, contextId, pPdnConfig );
-
- /* Set the GPRS connection configuration. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "AT+KCNXCFG=%u,\"GPRS\",\"%s\"",
- contextId, pPdnConfig->apnName );
- LogDebug( ( "cmd %s", cmdBuf ) );
-
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atGprsConnectionConfighReq,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_PacketSwitchAttach: failed, PktRet: %d", pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetPsmSettings( CellularHandle_t cellularHandle,
- const CellularPsmSettings_t * pPsmSettings )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atKsleepReq =
- {
- cmdBuf,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- /* Parameters are checked in this function. */
- cellularStatus = Cellular_CommonSetPsmSettings( cellularHandle, pPsmSettings );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Sleep mode driven by a HW signal (DTR). Sleep level is hibernate.
- * Can be woken up by WAKE_UP signal or T3412 timer expiration. */
- if( pPsmSettings->mode == 1 )
- {
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "AT+KSLEEP=0,2,30" );
- }
- else
- {
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "AT+KSLEEP=2" );
- }
-
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atKsleepReq,
- CELLULAR_HL7802_AT_TIMEOUT_2_SECONDS_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_PacketSwitchAttach: failed, PktRet: %d", pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-CellularError_t Cellular_Init( CellularHandle_t * pCellularHandle,
- const CellularCommInterface_t * pCommInterface )
-{
- CellularTokenTable_t cellularTokenTable =
- {
- .pCellularUrcHandlerTable = CellularUrcHandlerTable,
- .cellularPrefixToParserMapSize = CellularUrcHandlerTableSize,
- .pCellularSrcTokenErrorTable = CellularSrcTokenErrorTable,
- .cellularSrcTokenErrorTableSize = CellularSrcTokenErrorTableSize,
- .pCellularSrcTokenSuccessTable = CellularSrcTokenSuccessTable,
- .cellularSrcTokenSuccessTableSize = CellularSrcTokenSuccessTableSize,
- .pCellularUrcTokenWoPrefixTable = CellularUrcTokenWoPrefixTable,
- .cellularUrcTokenWoPrefixTableSize = CellularUrcTokenWoPrefixTableSize,
- .pCellularSrcExtraTokenSuccessTable = NULL,
- .cellularSrcExtraTokenSuccessTableSize = 0
- };
-
- return Cellular_CommonInit( pCellularHandle, pCommInterface, &cellularTokenTable );
-}
-
-/*-----------------------------------------------------------*/
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802_urc_handler.c b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802_urc_handler.c
deleted file mode 100644
index 7855ab2e8..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802_urc_handler.c
+++ /dev/null
@@ -1,349 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-#include "cellular_config.h"
-#include "cellular_config_defaults.h"
-
-/* Standard includes. */
-#include
-#include
-#include
-
-#include "cellular_types.h"
-#include "cellular_common.h"
-#include "cellular_common_api.h"
-#include "cellular_common_portable.h"
-
-/* Cellular module includes. */
-#include "cellular_hl7802.h"
-
-/*-----------------------------------------------------------*/
-
-static void _cellular_UrcProcessKtcpInd( CellularContext_t * pContext,
- char * pInputLine );
-static void handleTcpNotif( CellularSocketContext_t * pSocketData,
- uint8_t tcpNotif,
- uint32_t sessionId );
-static void _cellular_UrcProcessKtcpNotif( CellularContext_t * pContext,
- char * pInputLine );
-static void _cellular_UrcProcessKtcpData( CellularContext_t * pContext,
- char * pInputLine );
-
-/*-----------------------------------------------------------*/
-
-/* Try to Keep this map in Alphabetical order. */
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularAtParseTokenMap_t CellularUrcHandlerTable[] =
-{
- { "CEREG", Cellular_CommonUrcProcessCereg },
- { "CREG", Cellular_CommonUrcProcessCreg },
- { "KTCP_DATA", _cellular_UrcProcessKtcpData }, /* TCP data URC. */
- { "KTCP_IND", _cellular_UrcProcessKtcpInd }, /* TCP status URC. */
- { "KTCP_NOTIF", _cellular_UrcProcessKtcpNotif } /* TCP connection failure. */
-};
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-uint32_t CellularUrcHandlerTableSize = sizeof( CellularUrcHandlerTable ) / sizeof( CellularAtParseTokenMap_t );
-
-/*-----------------------------------------------------------*/
-
-static void _cellular_UrcProcessKtcpInd( CellularContext_t * pContext,
- char * pInputLine )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- char * pLocalInputLine = pInputLine;
- char * pToken = NULL;
- CellularSocketContext_t * pSocketData = NULL;
- uint8_t sessionId = 0;
- uint32_t socketIndex = 0;
- int32_t tempValue = 0;
-
- if( ( pContext != NULL ) && ( pInputLine != NULL ) )
- {
- /* The inputline is in this format +KTCP_IND: , 1
- * This URC indicate connection success. */
- atCoreStatus = Cellular_ATGetNextTok( &pLocalInputLine, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= MIN_TCP_SESSION_ID ) && ( tempValue <= MAX_TCP_SESSION_ID ) )
- {
- sessionId = ( uint8_t ) tempValue;
- socketIndex = _Cellular_GetSocketId( pContext, sessionId );
- }
- else
- {
- LogError( ( "error parsing _cellular_UrcProcessKtcpInd session ID" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- /* Call the callback function of this session. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( socketIndex == INVALID_SOCKET_INDEX )
- {
- LogWarn( ( "_cellular_UrcProcessKtcpInd : unknown session data received. "
- "The session %u may not be closed properly in previous execution.", sessionId ) );
- }
- else
- {
- pSocketData = _Cellular_GetSocketData( pContext, socketIndex );
-
- if( pSocketData == NULL )
- {
- LogError( ( "_cellular_UrcProcessKtcpInd : invalid socket index %u", socketIndex ) );
- }
- else if( pSocketData->openCallback == NULL )
- {
- LogDebug( ( "_cellular_UrcProcessKtcpInd : Open callback not set!!" ) );
- }
- else
- {
- LogDebug( ( "Notify session %d with socket opened\r\n", sessionId ) );
- pSocketData->socketState = SOCKETSTATE_CONNECTED;
- pSocketData->openCallback( CELLULAR_URC_SOCKET_OPENED,
- pSocketData, pSocketData->pOpenCallbackContext );
- }
- }
- }
- }
-}
-
-/*-----------------------------------------------------------*/
-
-static void handleTcpNotif( CellularSocketContext_t * pSocketData,
- uint8_t tcpNotif,
- uint32_t sessionId )
-{
- /* Suppress warning message if log level is not debug. */
- ( void ) sessionId;
-
- switch( tcpNotif )
- {
- case TCP_NOTIF_TCP_DISCONNECTION: /* TCP disconnection by the server or remote client. */
-
- pSocketData->socketState = SOCKETSTATE_DISCONNECTED;
-
- if( pSocketData->closedCallback != NULL )
- {
- LogDebug( ( "Notify session %d with socket disconnected\r\n", sessionId ) );
- pSocketData->closedCallback( pSocketData, pSocketData->pClosedCallbackContext );
- }
-
- break;
-
- case TCP_NOTIF_TCP_CONNECTION_ERROR: /* TCP connection error. */
-
- pSocketData->socketState = SOCKETSTATE_DISCONNECTED;
-
- if( pSocketData->openCallback != NULL )
- {
- LogDebug( ( "Notify session %d with socket open failed\r\n", sessionId ) );
- pSocketData->openCallback( CELLULAR_URC_SOCKET_OPEN_FAILED,
- pSocketData, pSocketData->pOpenCallbackContext );
- }
-
- break;
-
- default:
- break;
- }
-}
-
-/*-----------------------------------------------------------*/
-
-static void _cellular_UrcProcessKtcpNotif( CellularContext_t * pContext,
- char * pInputLine )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- char * pLocalInputLine = pInputLine;
- char * pToken = NULL;
- CellularSocketContext_t * pSocketData = NULL;
- uint8_t sessionId = 0;
- tcpConnectionFailure_t tcpNotif = TCP_NOTIF_OK;
- uint32_t socketIndex = 0;
- int32_t tempValue = 0;
-
- if( ( pContext != NULL ) && ( pInputLine != NULL ) )
- {
- /* The inputline is in this format +KTCP_NOTIF: ,
- * This URC indicate connection problem. */
-
- /* Remove leading space. */
- atCoreStatus = Cellular_ATRemoveLeadingWhiteSpaces( &pLocalInputLine );
-
- /* Parse the session ID. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pLocalInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= MIN_TCP_SESSION_ID ) && ( tempValue <= MAX_TCP_SESSION_ID ) )
- {
- sessionId = ( uint8_t ) tempValue;
- socketIndex = _Cellular_GetSocketId( pContext, sessionId );
- }
- else
- {
- LogError( ( "error parsing _cellular_UrcProcessKtcpInd session ID" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- /* Parse the tcp notif. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pLocalInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= TCP_NOTIF_OK ) && ( tempValue <= TCP_NOTIF_MAX ) )
- {
- tcpNotif = ( tcpConnectionFailure_t ) tempValue;
- }
- else
- {
- LogError( ( "error parsing _cellular_UrcProcessKtcpInd session ID" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- /* Call the callback function of this session. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( socketIndex == INVALID_SOCKET_INDEX )
- {
- LogWarn( ( "_cellular_UrcProcessKtcpNotif : unknown session data received. "
- "The session %u may not be closed properly in previous execution.", sessionId ) );
- }
- else
- {
- pSocketData = _Cellular_GetSocketData( pContext, socketIndex );
-
- if( pSocketData == NULL )
- {
- LogError( ( "_cellular_UrcProcessKtcpNotif : invalid socket index %u", socketIndex ) );
- }
- else
- {
- handleTcpNotif( pSocketData, tcpNotif, sessionId );
- }
- }
- }
- }
-}
-
-/*-----------------------------------------------------------*/
-
-static void _cellular_UrcProcessKtcpData( CellularContext_t * pContext,
- char * pInputLine )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- char * pLocalInputLine = pInputLine;
- char * pToken = NULL;
- CellularSocketContext_t * pSocketData = NULL;
- uint8_t sessionId = 0;
- uint32_t socketIndex = 0;
- int32_t tempValue = 0;
-
- if( ( pContext != NULL ) && ( pInputLine != NULL ) )
- {
- /* The inputline is in this format +KTCP_DATA: ,
- * This URC indicate connection problem. */
-
- /* parse the session ID. */
- atCoreStatus = Cellular_ATGetNextTok( &pLocalInputLine, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= MIN_TCP_SESSION_ID ) && ( tempValue <= MAX_TCP_SESSION_ID ) )
- {
- sessionId = ( uint8_t ) tempValue;
- socketIndex = _Cellular_GetSocketId( pContext, sessionId );
- }
- else
- {
- LogError( ( "error parsing _cellular_UrcProcessKtcpData session ID" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- /* Indicate the upper layer about the data reception. */
- /* Call the callback function of this session. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( socketIndex == INVALID_SOCKET_INDEX )
- {
- LogWarn( ( "_cellular_UrcProcessKtcpData : unknown session data received. "
- "The session %u may not be closed properly in previous execution.", sessionId ) );
- }
- else
- {
- pSocketData = _Cellular_GetSocketData( pContext, socketIndex );
-
- if( pSocketData == NULL )
- {
- LogError( ( "_cellular_UrcProcessKtcpData : invalid socket index %u", socketIndex ) );
- }
- else if( pSocketData->dataReadyCallback == NULL )
- {
- LogDebug( ( "_cellular_UrcProcessKtcpData : Data ready callback not set!!" ) );
- }
- else
- {
- pSocketData->dataReadyCallback( pSocketData, pSocketData->pDataReadyCallbackContext );
- }
- }
- }
- }
-}
-
-/*-----------------------------------------------------------*/
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802_wrapper.c b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802_wrapper.c
deleted file mode 100644
index 8b5967dca..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/hl7802/cellular_hl7802_wrapper.c
+++ /dev/null
@@ -1,269 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-/* The config header is always included first. */
-#include "cellular_config.h"
-#include "cellular_config_defaults.h"
-
-/* Standard includes. */
-#include
-#include
-
-#include "cellular_platform.h"
-#include "cellular_types.h"
-#include "cellular_api.h"
-#include "cellular_common.h"
-#include "cellular_common_api.h"
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_Cleanup( CellularHandle_t cellularHandle )
-{
- return Cellular_CommonCleanup( cellularHandle );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterUrcNetworkRegistrationEventCallback( CellularHandle_t cellularHandle,
- CellularUrcNetworkRegistrationCallback_t networkRegistrationCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonRegisterUrcNetworkRegistrationEventCallback( cellularHandle, networkRegistrationCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterUrcPdnEventCallback( CellularHandle_t cellularHandle,
- CellularUrcPdnEventCallback_t pdnEventCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonRegisterUrcPdnEventCallback( cellularHandle, pdnEventCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterUrcGenericCallback( CellularHandle_t cellularHandle,
- CellularUrcGenericCallback_t genericCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonRegisterUrcGenericCallback( cellularHandle, genericCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterModemEventCallback( CellularHandle_t cellularHandle,
- CellularModemEventCallback_t modemEventCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonRegisterModemEventCallback( cellularHandle, modemEventCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ATCommandRaw( CellularHandle_t cellularHandle,
- const char * pATCommandPrefix,
- const char * pATCommandPayload,
- CellularATCommandType_t atCommandType,
- CellularATCommandResponseReceivedCallback_t responseReceivedCallback,
- void * pData,
- uint16_t dataLen )
-{
- return Cellular_CommonATCommandRaw( cellularHandle, pATCommandPrefix, pATCommandPayload, atCommandType,
- responseReceivedCallback, pData, dataLen );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_CreateSocket( CellularHandle_t cellularHandle,
- uint8_t pdnContextId,
- CellularSocketDomain_t socketDomain,
- CellularSocketType_t socketType,
- CellularSocketProtocol_t socketProtocol,
- CellularSocketHandle_t * pSocketHandle )
-{
- return Cellular_CommonCreateSocket( cellularHandle, pdnContextId, socketDomain, socketType,
- socketProtocol, pSocketHandle );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketSetSockOpt( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketOptionLevel_t optionLevel,
- CellularSocketOption_t option,
- const uint8_t * pOptionValue,
- uint32_t optionValueLength )
-{
- return Cellular_CommonSocketSetSockOpt( cellularHandle, socketHandle, optionLevel, option,
- pOptionValue, optionValueLength );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketRegisterDataReadyCallback( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketDataReadyCallback_t dataReadyCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonSocketRegisterDataReadyCallback( cellularHandle, socketHandle,
- dataReadyCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketRegisterSocketOpenCallback( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketOpenCallback_t socketOpenCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonSocketRegisterSocketOpenCallback( cellularHandle, socketHandle,
- socketOpenCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketRegisterClosedCallback( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketClosedCallback_t closedCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonSocketRegisterClosedCallback( cellularHandle, socketHandle,
- closedCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RfOn( CellularHandle_t cellularHandle )
-{
- return Cellular_CommonRfOn( cellularHandle );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RfOff( CellularHandle_t cellularHandle )
-{
- return Cellular_CommonRfOff( cellularHandle );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetIPAddress( CellularHandle_t cellularHandle,
- uint8_t contextId,
- char * pBuffer,
- uint32_t bufferLength )
-{
- return Cellular_CommonGetIPAddress( cellularHandle, contextId, pBuffer, bufferLength );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetModemInfo( CellularHandle_t cellularHandle,
- CellularModemInfo_t * pModemInfo )
-{
- return Cellular_CommonGetModemInfo( cellularHandle, pModemInfo );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetRegisteredNetwork( CellularHandle_t cellularHandle,
- CellularPlmnInfo_t * pNetworkInfo )
-{
- return Cellular_CommonGetRegisteredNetwork( cellularHandle, pNetworkInfo );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetNetworkTime( CellularHandle_t cellularHandle,
- CellularTime_t * pNetworkTime )
-{
- return Cellular_CommonGetNetworkTime( cellularHandle, pNetworkTime );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetServiceStatus( CellularHandle_t cellularHandle,
- CellularServiceStatus_t * pServiceStatus )
-{
- return Cellular_CommonGetServiceStatus( cellularHandle, pServiceStatus );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetSimCardInfo( CellularHandle_t cellularHandle,
- CellularSimCardInfo_t * pSimCardInfo )
-{
- return Cellular_CommonGetSimCardInfo( cellularHandle, pSimCardInfo );
-}
-
-/*-----------------------------------------------------------*/
-
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetPsmSettings( CellularHandle_t cellularHandle,
- CellularPsmSettings_t * pPsmSettings )
-{
- return Cellular_CommonGetPsmSettings( cellularHandle, pPsmSettings );
-}
-
-/*-----------------------------------------------------------*/
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4 b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4
new file mode 160000
index 000000000..6b1ac75f6
--- /dev/null
+++ b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4
@@ -0,0 +1 @@
+Subproject commit 6b1ac75f65bdf08d5a55a74a27ad900c70d7820b
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4.c b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4.c
deleted file mode 100644
index 741425d94..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4.c
+++ /dev/null
@@ -1,562 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-#include "cellular_config.h"
-#include "cellular_config_defaults.h"
-
-#include
-
-#include "cellular_platform.h"
-#include "cellular_common.h"
-#include "cellular_common_portable.h"
-#include "cellular_r4.h"
-
-/*-----------------------------------------------------------*/
-
-#define ENBABLE_MODULE_UE_RETRY_COUNT ( 3U )
-#define ENBABLE_MODULE_UE_RETRY_TIMEOUT ( 5000U )
-#define ENBABLE_MODULE_UE_REBOOT_POLL_TIME ( 2000U )
-#define ENBABLE_MODULE_UE_REBOOT_MAX_TIME ( 25000U )
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t sendAtCommandWithRetryTimeout( CellularContext_t * pContext,
- const CellularAtReq_t * pAtReq );
-
-/*-----------------------------------------------------------*/
-
-static cellularModuleContext_t cellularHl7802Context = { 0 };
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-const char * CellularSrcTokenErrorTable[] =
-{ "ERROR", "BUSY", "NO CARRIER", "NO ANSWER", "NO DIALTONE", "ABORTED", "+CMS ERROR", "+CME ERROR", "SEND FAIL" };
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-uint32_t CellularSrcTokenErrorTableSize = sizeof( CellularSrcTokenErrorTable ) / sizeof( char * );
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-const char * CellularSrcTokenSuccessTable[] =
-{ "OK", "@" };
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-uint32_t CellularSrcTokenSuccessTableSize = sizeof( CellularSrcTokenSuccessTable ) / sizeof( char * );
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-const char * CellularUrcTokenWoPrefixTable[] =
-{ "RDY" };
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-uint32_t CellularUrcTokenWoPrefixTableSize = sizeof( CellularUrcTokenWoPrefixTable ) / sizeof( char * );
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t sendAtCommandWithRetryTimeout( CellularContext_t * pContext,
- const CellularAtReq_t * pAtReq )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- uint8_t tryCount = 0;
-
- if( pAtReq == NULL )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- for( ; tryCount < ENBABLE_MODULE_UE_RETRY_COUNT; tryCount++ )
- {
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, *pAtReq, ENBABLE_MODULE_UE_RETRY_TIMEOUT );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- break;
- }
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ModuleInit( const CellularContext_t * pContext,
- void ** ppModuleContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- uint32_t i = 0;
-
- if( pContext == NULL )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ppModuleContext == NULL )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- /* Initialize the module context. */
- ( void ) memset( &cellularHl7802Context, 0, sizeof( cellularModuleContext_t ) );
-
- for( i = 0; i < TCP_SESSION_TABLE_LEGNTH; i++ )
- {
- cellularHl7802Context.pSessionMap[ i ] = INVALID_SOCKET_INDEX;
- }
-
- *ppModuleContext = ( void * ) &cellularHl7802Context;
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ModuleCleanUp( const CellularContext_t * pContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- if( pContext == NULL )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Parse AT response for current MNO profile */
-static CellularPktStatus_t _Cellular_RecvFuncGetCurrentMNOProfile( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- MNOProfileType_t * pCurrentMNOProfile = ( MNOProfileType_t * ) pData;
- char * pToken = NULL;
- int32_t tempValue = 0;
-
- if( pContext == NULL )
- {
- LogError( ( "_Cellular_RecvFuncGetCurrentMNOProfile: Invalid handle" ) );
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pData == NULL ) || ( dataLen != sizeof( MNOProfileType_t ) ) )
- {
- LogError( ( "_Cellular_RecvFuncGetCurrentMNOProfile: Invalid param" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "_Cellular_RecvFuncGetCurrentMNOProfile: Input Line passed is NULL" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
-
- /* Remove prefix. */
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- /* Remove leading space. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveLeadingWhiteSpaces( &pInputLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= MNO_PROFILE_SW_DEFAULT ) && ( tempValue <= MNO_PROFILE_STANDARD_EUROPE ) )
- {
- *pCurrentMNOProfile = tempValue;
- LogInfo( ( "_Cellular_RecvFuncGetCurrentMNOProfile: pCurrentMNOProfile [%d]", *pCurrentMNOProfile ) );
- }
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-/* Get modem's current MNO profile */
-static CellularError_t _Cellular_GetCurrentMNOProfile( CellularContext_t * pContext,
- MNOProfileType_t * pCurrentMNOProfile )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularAtReq_t atReqGetCurrentMNOProfile =
- {
- "AT+UMNOPROF?",
- CELLULAR_AT_WITH_PREFIX,
- "+UMNOPROF",
- _Cellular_RecvFuncGetCurrentMNOProfile,
- NULL,
- sizeof( MNOProfileType_t ),
- };
-
- atReqGetCurrentMNOProfile.pData = pCurrentMNOProfile;
-
- /* Internal function. Callee check parameters. */
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqGetCurrentMNOProfile );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Reboot modem and wait for ready state. */
-
-CellularError_t rebootCellularModem( CellularContext_t * pContext,
- bool disablePsm,
- bool disableEidrx )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- uint32_t count = 0;
-
- CellularAtReq_t atReqGetNoResult =
- {
- "AT+CFUN=15",
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0
- };
-
- LogInfo( ( "rebootCellularModem: Rebooting Modem." ) );
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- Platform_Delay( ENBABLE_MODULE_UE_REBOOT_POLL_TIME );
- count = count + ENBABLE_MODULE_UE_REBOOT_POLL_TIME;
-
- /* wait for modem after reboot*/
- while( count < ENBABLE_MODULE_UE_REBOOT_MAX_TIME )
- {
- LogInfo( ( "rebootCellularModem: Use ATE0 command to test modem status." ) );
-
- atReqGetNoResult.pAtCmd = "ATE0";
-
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqGetNoResult, ENBABLE_MODULE_UE_REBOOT_POLL_TIME );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- LogInfo( ( "rebootCellularModem: Modem is now available." ) );
-
- Platform_Delay( ENBABLE_MODULE_UE_REBOOT_POLL_TIME * 3 );
-
- /* Query current PSM settings. */
- atReqGetNoResult.pAtCmd = "AT+CPSMS?";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
-
- if( disablePsm && ( cellularStatus == CELLULAR_SUCCESS ) )
- {
- LogInfo( ( "rebootCellularModem: Disable +CPSMS setting." ) );
- atReqGetNoResult.pAtCmd = "AT+CPSMS=0";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
-
- if( disableEidrx && ( cellularStatus == CELLULAR_SUCCESS ) )
- {
- LogInfo( ( "rebootCellularModem: Disable +CEDRXS setting." ) );
- atReqGetNoResult.pAtCmd = "AT+CEDRXS=0,4";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
-
- break;
- }
- else
- {
- LogWarn( ( "rebootCellularModem: Modem is not ready. Retry sending ATE0." ) );
- }
-
- count = count + ENBABLE_MODULE_UE_REBOOT_POLL_TIME;
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ModuleEnableUE( CellularContext_t * pContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularAtReq_t atReqGetNoResult =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0
- };
- CellularAtReq_t atReqGetWithResult =
- {
- NULL,
- CELLULAR_AT_WO_PREFIX,
- NULL,
- NULL,
- NULL,
- 0
- };
- char pAtCmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { 0 };
-
- if( pContext != NULL )
- {
- /* Disable echo. */
- atReqGetWithResult.pAtCmd = "ATE0";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetWithResult );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Disable DTR function. */
- atReqGetNoResult.pAtCmd = "AT&D0";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
-
- #ifndef CELLULAR_CONFIG_DISABLE_FLOW_CONTROL
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Enable RTS/CTS hardware flow control. */
- atReqGetNoResult.pAtCmd = "AT+IFC=2,2";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
- #endif
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Report verbose mobile termination error. */
- atReqGetNoResult.pAtCmd = "AT+CMEE=2";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Setup mobile network operator profiles. */
- /* Setting +UMNOPROF profile will automatically select suitable values for +URAT and +UBANDMASK. */
-
- /* Check current MNO profile first to avoid unneccessary modem reboot. */
- MNOProfileType_t currentMNOProfile = MNO_PROFILE_NOT_SET;
- cellularStatus = _Cellular_GetCurrentMNOProfile( pContext, ¤tMNOProfile );
-
- LogInfo( ( "Cellular_ModuleEnableUE: currentMNOProfile = [%d], desiredProfile = [%d]", currentMNOProfile, CELLULAR_CONFIG_SARA_R4_SET_MNO_PROFILE ) );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Set MNO profile if not set already */
- if( ( currentMNOProfile != CELLULAR_CONFIG_SARA_R4_SET_MNO_PROFILE ) && ( CELLULAR_CONFIG_SARA_R4_SET_MNO_PROFILE != MNO_PROFILE_NOT_SET ) )
- {
- atReqGetNoResult.pAtCmd = pAtCmdBuf;
- ( void ) snprintf( ( char * ) atReqGetNoResult.pAtCmd, CELLULAR_AT_CMD_MAX_SIZE, "%s%d", "AT+COPS=2;+UMNOPROF=", CELLULAR_CONFIG_SARA_R4_SET_MNO_PROFILE );
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- cellularStatus = rebootCellularModem( pContext, true, true );
- }
- }
-
- #ifdef CELLULAR_CONFIG_SARA_R4_REBOOT_ON_INIT
- else
- {
- cellularStatus = rebootCellularModem( pContext, true, true );
- }
- #endif
- }
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- atReqGetNoResult.pAtCmd = "AT+COPS=0";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- atReqGetNoResult.pAtCmd = "AT+CFUN=1";
- cellularStatus = sendAtCommandWithRetryTimeout( pContext, &atReqGetNoResult );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ModuleEnableUrc( CellularContext_t * pContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularAtReq_t atReqGetNoResult =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0
- };
-
- atReqGetNoResult.pAtCmd = "AT+COPS=3,2";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- atReqGetNoResult.pAtCmd = "AT+CREG=2";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- atReqGetNoResult.pAtCmd = "AT+CGREG=2";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- atReqGetNoResult.pAtCmd = "AT+CEREG=2";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- atReqGetNoResult.pAtCmd = "AT+CTZR=1";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- /* TODO: +CGEV URC enable. */
- /* atReqGetNoResult.pAtCmd = "AT+CGEREP=2,0"; */
- /* (void)_Cellular_AtcmdRequestWithCallback(pContext, atReqGetNoResult); */
-
- /* Power saving mode URC enable. */
- atReqGetNoResult.pAtCmd = "AT+UPSMR=1";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- /* Mobile termination event reporting +CIEV URC enable. */
- atReqGetNoResult.pAtCmd = "AT+CMER=1,0,0,2,1";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- /* Enable signal level change indication via +CIEV URC. (To enable all indications, set to 4095) */
- atReqGetNoResult.pAtCmd = "AT+UCIND=2";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- /* Enable greeting message "RDY" on modem bootup. */
- atReqGetNoResult.pAtCmd = "AT+CSGT=1,\"RDY\"";
- ( void ) _Cellular_AtcmdRequestWithCallback( pContext, atReqGetNoResult );
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-uint32_t _Cellular_GetSocketId( CellularContext_t * pContext,
- uint8_t sessionId )
-{
- cellularModuleContext_t * pModuleContext = NULL;
- uint32_t socketIndex = INVALID_SOCKET_INDEX;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- if( pContext != NULL )
- {
- cellularStatus = _Cellular_GetModuleContext( pContext, ( void ** ) &pModuleContext );
- }
- else
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
-
- if( ( cellularStatus == CELLULAR_SUCCESS ) && ( sessionId <= ( ( uint8_t ) MAX_TCP_SESSION_ID ) ) )
- {
- socketIndex = pModuleContext->pSessionMap[ sessionId ];
- }
-
- return socketIndex;
-}
-
-/*-----------------------------------------------------------*/
-
-uint32_t _Cellular_GetSessionId( CellularContext_t * pContext,
- uint32_t socketIndex )
-{
- cellularModuleContext_t * pModuleContext = NULL;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- uint32_t sessionId = INVALID_SESSION_ID;
-
- if( pContext == NULL )
- {
- LogError( ( "_Cellular_GetSessionId invalid cellular context" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketIndex == INVALID_SOCKET_INDEX )
- {
- LogError( ( "_Cellular_GetSessionId invalid socketIndex" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- cellularStatus = _Cellular_GetModuleContext( pContext, ( void ** ) &pModuleContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- for( sessionId = 0; sessionId < TCP_SESSION_TABLE_LEGNTH; sessionId++ )
- {
- if( pModuleContext->pSessionMap[ sessionId ] == socketIndex )
- {
- break;
- }
- }
-
- /* Mapping is not found in the session mapping table. */
- if( sessionId == TCP_SESSION_TABLE_LEGNTH )
- {
- sessionId = INVALID_SESSION_ID;
- }
- }
- else
- {
- sessionId = INVALID_SESSION_ID;
- }
-
- return sessionId;
-}
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4.h b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4.h
deleted file mode 100644
index b5640cb66..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4.h
+++ /dev/null
@@ -1,164 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-#ifndef __CELLULAR_R4_H__
-#define __CELLULAR_R4_H__
-
-/* *INDENT-OFF* */
-#ifdef __cplusplus
- extern "C" {
-#endif
-/* *INDENT-ON* */
-
-/*-----------------------------------------------------------*/
-
-#define MIN_TCP_SESSION_ID ( 0 )
-#define MAX_TCP_SESSION_ID ( 6 )
-#define TCP_SESSION_TABLE_LEGNTH ( MAX_TCP_SESSION_ID + 1 )
-
-#define INVALID_SOCKET_INDEX ( UINT32_MAX )
-#define INVALID_SESSION_ID ( UINT32_MAX )
-
-/*-----------------------------------------------------------*/
-
-typedef struct cellularModuleContext
-{
- uint32_t pSessionMap[ TCP_SESSION_TABLE_LEGNTH ];
-} cellularModuleContext_t;
-
-/*-----------------------------------------------------------*/
-
-uint32_t _Cellular_GetSocketId( CellularContext_t * pContext,
- uint8_t sessionId );
-
-uint32_t _Cellular_GetSessionId( CellularContext_t * pContext,
- uint32_t socketIndex );
-
-CellularError_t rebootCellularModem( CellularContext_t * pContext,
- bool disablePsm,
- bool disableEidrx );
-
-/*-----------------------------------------------------------*/
-
-/**
- * @brief Cellular MNO profiles.
- */
-typedef enum MNOProfileType
-{
- MNO_PROFILE_SW_DEFAULT = 0,
- MNO_PROFILE_SIM_ICCID_IMSI_SELECT = 1,
- MNO_PROFILE_ATT = 2,
- MNO_PROFILE_VERIZON = 3,
- MNO_PROFILE_TELSTRA = 4,
- MNO_PROFILE_TMOBILE = 5,
- MNO_PROFILE_CHINA_TELECOM = 6,
- MNO_PROFILE_SPRINT = 8,
- MNO_PROFILE_VODAFONE = 19,
- MNO_PROFILE_GLOBAL = 90,
- MNO_PROFILE_STANDARD_EUROPE = 100,
- MNO_PROFILE_NOT_SET = 999
-} MNOProfileType_t;
-
-/*-----------------------------------------------------------*/
-
-/* Select network MNO profile. Default value is MNO_PROFILE_NOT_SET */
-#ifndef CELLULAR_CONFIG_SARA_R4_SET_MNO_PROFILE
- #define CELLULAR_CONFIG_SARA_R4_SET_MNO_PROFILE ( MNO_PROFILE_NOT_SET )
-#endif
-
-/*
- * By default socket is closed in normal mode i.e. flag is 0.
- * In normal mode, +USOCL can take time to close socket (Max timeout is 120 sec).
- * To avoid wait, socket can be closed in async mode via flag.
- * In mode, socket close will be notified via +UUSOCL URC.
- * Drawback of mode is that if try to deactivate context (e.g. AT+CGACT=0,1).
- * prior to socket close URC, AT command will result in ERROR.
- */
-#define CELLULAR_CONFIG_SET_SOCKET_CLOSE_ASYNC_MODE ( 0U )
-
-/*-----------------------------------------------------------*/
-
-/* MAX valid PDP contexts */
-#define MAX_PDP_CONTEXTS ( 4U )
-
-#define DEFAULT_BEARER_CONTEXT_ID ( 1U ) /* SARA-R4 default bearer context */
-
-#define CELULAR_PDN_CONTEXT_TYPE_MAX_SIZE ( 7U ) /* The length of IP type e.g. IPV4V6. */
-
-/*-----------------------------------------------------------*/
-
-/* +CGDCONT PDN context definition tokens */
-#define CELLULAR_PDN_STATUS_POS_CONTEXT_ID ( 0U )
-#define CELLULAR_PDN_STATUS_POS_CONTEXT_TYPE ( 1U )
-#define CELLULAR_PDN_STATUS_POS_APN_NAME ( 2U )
-#define CELLULAR_PDN_STATUS_POS_IP_ADDRESS ( 3U )
-
-/* +CGACT PDN context activation tokens */
-#define CELLULAR_PDN_ACT_STATUS_POS_CONTEXT_ID ( 0U )
-#define CELLULAR_PDN_ACT_STATUS_POS_CONTEXT_STATE ( 1U )
-
-/**
- * @brief Context info from +CGDCONT (Context IP type, APN name, IP Address)
- */
-typedef struct CellularPdnContextInfo
-{
- bool contextsPresent[ MAX_PDP_CONTEXTS ]; /**< Context present in +CGDCONT response or not. */
- char ipType[ MAX_PDP_CONTEXTS ][ CELULAR_PDN_CONTEXT_TYPE_MAX_SIZE ]; /**< PDN Context type. */
- char apnName[ MAX_PDP_CONTEXTS ][ CELLULAR_APN_MAX_SIZE ]; /**< APN name. */
- char ipAddress[ MAX_PDP_CONTEXTS ][ CELLULAR_IP_ADDRESS_MAX_SIZE ]; /**< IP address. */
-} CellularPdnContextInfo_t;
-
-/**
- * @brief Context state from +CGACT
- */
-typedef struct CellularPdnContextActInfo
-{
- bool contextsPresent[ MAX_PDP_CONTEXTS ]; /**< Context present in +CGACT response or not. */
- bool contextActState[ MAX_PDP_CONTEXTS ]; /**< Context active state from +CGACT response. */
-} CellularPdnContextActInfo_t;
-
-/*-----------------------------------------------------------*/
-
-extern CellularAtParseTokenMap_t CellularUrcHandlerTable[];
-extern uint32_t CellularUrcHandlerTableSize;
-
-extern const char * CellularSrcTokenErrorTable[];
-extern uint32_t CellularSrcTokenErrorTableSize;
-
-extern const char * CellularSrcTokenSuccessTable[];
-extern uint32_t CellularSrcTokenSuccessTableSize;
-
-extern const char * CellularUrcTokenWoPrefixTable[];
-extern uint32_t CellularUrcTokenWoPrefixTableSize;
-
-/*-----------------------------------------------------------*/
-
-/* *INDENT-OFF* */
-#ifdef __cplusplus
- }
-#endif
-/* *INDENT-ON* */
-
-#endif /* ifndef __CELLULAR_R4_H__ */
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4_api.c b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4_api.c
deleted file mode 100644
index 741d0ae96..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4_api.c
+++ /dev/null
@@ -1,2906 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-#include "cellular_config.h"
-#include "cellular_config_defaults.h"
-
-/* Standard includes. */
-#include
-#include
-#include
-
-/* Cellular includes. */
-#include "cellular_platform.h"
-#include "cellular_types.h"
-#include "cellular_api.h"
-#include "cellular_common_api.h"
-#include "cellular_common.h"
-#include "cellular_at_core.h"
-
-/* Cellular module incliudes. */
-#include "cellular_r4.h"
-
-/*-----------------------------------------------------------*/
-
-/* TODO : confirm the value. */
-#define PDN_ACT_PACKET_REQ_TIMEOUT_MS ( 150000UL )
-
-#define PDN_DEACT_PACKET_REQ_TIMEOUT_MS ( 40000UL )
-
-#define GPRS_ATTACH_REQ_TIMEOUT_MS ( 180000UL )
-
-#define DNS_QUERY_REQ_TIMEOUT_MS ( 120000UL )
-
-#define SOCKET_CLOSE_PACKET_REQ_TIMEOUT_MS ( 120000U )
-
-#define SOCKET_CONNECT_PACKET_REQ_TIMEOUT_MS ( 120000U )
-
-#define CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ( 32U )
-
-#define DATA_SEND_TIMEOUT_MS ( 10000U )
-
-#define PACKET_REQ_TIMEOUT_MS ( 10000U )
-
-#define DATA_READ_TIMEOUT_MS ( 50000UL )
-
-#define SOCKET_DATA_PREFIX_TOKEN "+USORD: "
-#define SOCKET_DATA_PREFIX_TOKEN_LEN ( 8U )
-#define SOCKET_DATA_PREFIX_STRING_LENGTH ( SOCKET_DATA_PREFIX_TOKEN_LEN + 9U )
-#define RAT_PRIOIRTY_LIST_LENGTH ( 3U )
-
-/**
- * @brief Parameters involved in receiving data through sockets
- */
-typedef struct _socketDataRecv
-{
- uint32_t * pDataLen;
- uint8_t * pData;
-} _socketDataRecv_t;
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t socketRecvDataPrefix( void * pCallbackContext,
- char * pLine,
- uint32_t lineLength,
- char ** ppDataStart,
- uint32_t * pDataLength );
-static CellularATError_t getDataFromResp( const CellularATCommandResponse_t * pAtResp,
- const _socketDataRecv_t * pDataRecv,
- uint32_t outBufSize );
-static CellularPktStatus_t _Cellular_RecvFuncData( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularError_t storeAccessModeAndAddress( CellularContext_t * pContext,
- CellularSocketHandle_t socketHandle,
- CellularSocketAccessMode_t dataAccessMode,
- const CellularSocketAddress_t * pRemoteSocketAddress );
-static CellularPktStatus_t _Cellular_RecvFuncGetSocketId( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularError_t _Cellular_GetSocketNumber( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- uint8_t * pSessionId );
-
-CellularError_t Cellular_SetPdnConfig( CellularHandle_t cellularHandle,
- uint8_t contextId,
- const CellularPdnConfig_t * pPdnConfig );
-
-static CellularError_t _Cellular_GetPacketSwitchStatus( CellularHandle_t cellularHandle,
- bool * pPacketSwitchStatus );
-
-static CellularError_t _Cellular_GetContextActivationStatus( CellularHandle_t cellularHandle,
- CellularPdnContextActInfo_t * pPdpContextsActInfo );
-
-static bool _parseExtendedSignalQuality( char * pQcsqPayload,
- CellularSignalInfo_t * pSignalInfo );
-static bool _parseSignalQuality( char * pQcsqPayload,
- CellularSignalInfo_t * pSignalInfo );
-static CellularPktStatus_t _Cellular_RecvFuncGetSignalInfo( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen );
-static CellularError_t controlSignalStrengthIndication( CellularContext_t * pContext,
- bool enable );
-
-CellularError_t Cellular_SetPsmSettings( CellularHandle_t cellularHandle,
- const CellularPsmSettings_t * pPsmSettings );
-
-static CellularError_t _Cellular_isSockOptSupport( CellularSocketOptionLevel_t optionLevel,
- CellularSocketOption_t option );
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t socketRecvDataPrefix( void * pCallbackContext,
- char * pLine,
- uint32_t lineLength,
- char ** ppDataStart,
- uint32_t * pDataLength )
-{
- char * pToken = NULL;
- int32_t tempValue = 0;
- CellularATError_t atResult = CELLULAR_AT_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char pLocalLine[ SOCKET_DATA_PREFIX_STRING_LENGTH + 1 ] = { '\0' };
- char * pDataStart = pLocalLine;
-
- ( void ) lineLength;
-
- /* pCallbackContext is not used in this function. It should be NULL. */
- if( ( pLine == NULL ) || ( ppDataStart == NULL ) || ( pDataLength == NULL ) || ( pCallbackContext != NULL ) )
- {
- LogError( ( "socketRecvData: Bad parameters" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( strncmp( pLine, SOCKET_DATA_PREFIX_TOKEN, SOCKET_DATA_PREFIX_TOKEN_LEN ) != 0 )
- {
- /* Prefix string which is not SOCKET_DATA_PREFIX_TOKEN does't indicate data start.
- * Set data length to 0.*/
- *ppDataStart = NULL;
- *pDataLength = 0;
- }
- else
- {
- /* The string length of "+USORD: [,],"". */
- strncpy( pLocalLine, pLine, SOCKET_DATA_PREFIX_STRING_LENGTH );
- pDataStart = &pLocalLine[ SOCKET_DATA_PREFIX_TOKEN_LEN ];
-
- /* Skip the socket number. */
- atResult = Cellular_ATGetNextTok( &pDataStart, &pToken );
-
- /* Parse the receive data length. */
- if( ( atResult == CELLULAR_AT_SUCCESS ) && ( pDataStart[ 0 ] == '"' ) )
- {
- /* Peek the next symbol. If it is \", then length is ommited. Received byte is 0. */
- LogDebug( ( "socketRecvData: 0 received bytes." ) );
- *pDataLength = 0U;
- *ppDataStart = NULL;
- }
- else if( atResult == CELLULAR_AT_SUCCESS )
- {
- /* Parse the length. */
- atResult = Cellular_ATGetNextTok( &pDataStart, &pToken );
-
- if( atResult == CELLULAR_AT_SUCCESS )
- {
- atResult = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( ( tempValue < 0 ) && ( ( uint32_t ) tempValue > CELLULAR_MAX_RECV_DATA_LEN ) )
- {
- LogError( ( "socketRecvData: Bad parameters" ) );
- atResult = CELLULAR_AT_ERROR;
- }
- }
-
- if( atResult == CELLULAR_AT_SUCCESS )
- {
- /* Change +USROD: ,," to +USROD: ,,\r. */
- pDataStart = &pLine[ pDataStart - pLocalLine ];
-
- if( pDataStart[ 0 ] == '\"' )
- {
- *pDataStart = '\r';
- *ppDataStart = ( char * ) &pDataStart[ 1 ];
- *pDataLength = ( uint32_t ) tempValue;
- }
- }
- }
- else
- {
- LogDebug( ( "socketRecvDataPrefix : pLine [%s] with lineLength [%d] is not data prefix", pLine, lineLength ) );
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularATError_t getDataFromResp( const CellularATCommandResponse_t * pAtResp,
- const _socketDataRecv_t * pDataRecv,
- uint32_t outBufSize )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- const char * pInputLine = NULL;
- uint32_t dataLenToCopy = 0;
-
- /* Check if the received data size is greater than the output buffer size. */
- if( *pDataRecv->pDataLen > outBufSize )
- {
- LogError( ( "Data is turncated, received data length %u, out buffer size %u",
- *pDataRecv->pDataLen, outBufSize ) );
- dataLenToCopy = outBufSize;
- *pDataRecv->pDataLen = outBufSize;
- }
- else
- {
- dataLenToCopy = *pDataRecv->pDataLen;
- }
-
- /* Data is stored in the next intermediate response. */
- pInputLine = pAtResp->pItm->pNext->pLine;
-
- if( ( pInputLine != NULL ) && ( dataLenToCopy > 0U ) )
- {
- /* Copy the data to the out buffer. */
- ( void ) memcpy( ( void * ) pDataRecv->pData, ( const void * ) pInputLine, dataLenToCopy );
- }
- else
- {
- LogError( ( "Receive Data: paramerter error, data pointer %p, data to copy %u",
- pInputLine, dataLenToCopy ) );
- atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
- }
-
- return atCoreStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncData( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char * pInputLine = NULL, * pToken = NULL;
- const _socketDataRecv_t * pDataRecv = ( _socketDataRecv_t * ) pData;
- int32_t tempValue = 0;
-
- if( pContext == NULL )
- {
- LogError( ( "Receive Data: invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "Receive Data: response is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pDataRecv == NULL ) || ( pDataRecv->pData == NULL ) || ( pDataRecv->pDataLen == NULL ) )
- {
- LogError( ( "Receive Data: Bad parameters" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine; /* The first item is the data prefix. */
-
- /* Check the data prefix token "+USORD: ". */
- if( strncmp( pInputLine, SOCKET_DATA_PREFIX_TOKEN, SOCKET_DATA_PREFIX_TOKEN_LEN ) != 0 )
- {
- LogError( ( "response item error in prefix CONNECT" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( pAtResp->pItm->pNext == NULL )
- {
- /* Modem return +USORD: 0,"". No data returned since there is no data
- * length field in modem response. */
- *pDataRecv->pDataLen = 0;
- }
- else
- {
- /* Parse the data length. */
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( tempValue >= 0 )
- {
- *pDataRecv->pDataLen = ( uint32_t ) tempValue;
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- /* Process the data buffer. Modem may also return +USORD: 0,0,"" with 0 data length.
- * Process the data response only when data length is greater than 0. */
- if( ( atCoreStatus == CELLULAR_AT_SUCCESS ) && ( *pDataRecv->pDataLen > 0U ) )
- {
- atCoreStatus = getDataFromResp( pAtResp, pDataRecv, dataLen );
- }
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t storeAccessModeAndAddress( CellularContext_t * pContext,
- CellularSocketHandle_t socketHandle,
- CellularSocketAccessMode_t dataAccessMode,
- const CellularSocketAddress_t * pRemoteSocketAddress )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ( pRemoteSocketAddress == NULL ) || ( socketHandle == NULL ) )
- {
- LogDebug( ( "storeAccessModeAndAddress: Invalid socket address" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketHandle->socketState != SOCKETSTATE_ALLOCATED )
- {
- LogError( ( "storeAccessModeAndAddress, bad socket state %d",
- socketHandle->socketState ) );
- cellularStatus = CELLULAR_INTERNAL_FAILURE;
- }
- else if( dataAccessMode != CELLULAR_ACCESSMODE_BUFFER )
- {
- LogError( ( "storeAccessModeAndAddress, Access mode not supported %d",
- dataAccessMode ) );
- cellularStatus = CELLULAR_UNSUPPORTED;
- }
- else
- {
- socketHandle->remoteSocketAddress.port = pRemoteSocketAddress->port;
- socketHandle->dataMode = dataAccessMode;
- socketHandle->remoteSocketAddress.ipAddress.ipAddressType =
- pRemoteSocketAddress->ipAddress.ipAddressType;
- ( void ) strncpy( socketHandle->remoteSocketAddress.ipAddress.ipAddress,
- pRemoteSocketAddress->ipAddress.ipAddress,
- CELLULAR_IP_ADDRESS_MAX_SIZE + 1U );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library types. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetSocketId( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL;
- uint8_t * pSessionId = pData;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- int32_t tempValue = 0;
-
- if( pContext == NULL )
- {
- LogError( ( "GetSocketId: Invalid handle" ) );
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pSessionId == NULL ) || ( dataLen != sizeof( uint8_t ) ) )
- {
- LogError( ( "GetSocketId: Bad parameters" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "GetSocketId: Input Line passed is NULL" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pInputLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pInputLine, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= MIN_TCP_SESSION_ID ) && ( tempValue <= MAX_TCP_SESSION_ID ) )
- {
- *pSessionId = ( uint8_t ) tempValue;
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t _Cellular_GetSocketNumber( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- uint8_t * pSessionId )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularAtReq_t atReqSocketConnect =
- {
- "AT+USOCR=6,0",
- CELLULAR_AT_WITH_PREFIX,
- "+USOCR",
- _Cellular_RecvFuncGetSocketId,
- NULL,
- sizeof( uint8_t ),
- };
-
- ( void ) socketHandle;
-
- atReqSocketConnect.pData = pSessionId;
-
- /* Internal function. Caller checks parameters. */
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSocketConnect );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "_Cellular_GetSocketNumber: get socekt number failed PktRet: %d", pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-CellularError_t Cellular_SocketRecv( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- /* coverity[misra_c_2012_rule_8_13_violation] */
- uint8_t * pBuffer,
- uint32_t bufferLength,
- /* coverity[misra_c_2012_rule_8_13_violation] */
- uint32_t * pReceivedDataLength )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- uint32_t recvTimeout = DATA_READ_TIMEOUT_MS;
- uint32_t recvLen = bufferLength;
- _socketDataRecv_t dataRecv = { 0 };
- CellularAtReq_t atReqSocketRecv =
- {
- NULL,
- CELLULAR_AT_MULTI_DATA_WO_PREFIX,
- "+USORD",
- _Cellular_RecvFuncData,
- NULL,
- 0,
- };
- uint32_t sessionId = 0;
-
- dataRecv.pDataLen = pReceivedDataLength;
- dataRecv.pData = pBuffer;
-
- atReqSocketRecv.pAtCmd = cmdBuf;
- atReqSocketRecv.pData = ( void * ) &dataRecv;
- atReqSocketRecv.dataLen = bufferLength;
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogError( ( "Cellular_SocketRecv: _Cellular_CheckLibraryStatus failed." ) );
- }
- else if( socketHandle == NULL )
- {
- LogError( ( "Cellular_SocketRecv: Invalid socketHandle." ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ( pBuffer == NULL ) || ( pReceivedDataLength == NULL ) || ( bufferLength == 0U ) )
- {
- LogError( ( "Cellular_SocketRecv: Bad input Param." ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketHandle->socketState != SOCKETSTATE_CONNECTED )
- {
- /* Check the socket connection state. */
- LogInfo( ( "Cellular_SocketRecv: socket state %d is not connected.", socketHandle->socketState ) );
-
- if( ( socketHandle->socketState == SOCKETSTATE_ALLOCATED ) || ( socketHandle->socketState == SOCKETSTATE_CONNECTING ) )
- {
- cellularStatus = CELLULAR_SOCKET_NOT_CONNECTED;
- }
- else
- {
- cellularStatus = CELLULAR_SOCKET_CLOSED;
- }
- }
- else
- {
- sessionId = _Cellular_GetSessionId( pContext, socketHandle->socketId );
-
- if( sessionId == INVALID_SESSION_ID )
- {
- LogError( ( "Cellular_SocketRecv : invalid session ID for socket index %u",
- socketHandle->socketId ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Update recvLen to maximum module length. */
- if( CELLULAR_MAX_RECV_DATA_LEN <= bufferLength )
- {
- recvLen = ( uint32_t ) CELLULAR_MAX_RECV_DATA_LEN;
- }
-
- /* Update receive timeout to default timeout if not set with setsocketopt. */
- if( recvLen > 0 )
- {
- if( socketHandle->recvTimeoutMs != 0U )
- {
- recvTimeout = socketHandle->recvTimeoutMs;
- }
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE,
- "%s%u,%u", "AT+USORD=", sessionId, recvLen );
- pktStatus = _Cellular_TimeoutAtcmdDataRecvRequestWithCallback( pContext,
- atReqSocketRecv,
- recvTimeout,
- socketRecvDataPrefix,
- NULL );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- /* Reset data handling parameters. */
- LogError( ( "Cellular_SocketRecv: Data Receive fail, pktStatus: %d", pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularPktStatus_t socketSendDataPrefix( void * pCallbackContext,
- char * pLine,
- uint32_t * pBytesRead )
-{
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
-
- if( ( pLine == NULL ) || ( pBytesRead == NULL ) )
- {
- LogError( ( "socketSendDataPrefix: pLine is invalid or pBytesRead is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( pCallbackContext != NULL )
- {
- LogError( ( "socketSendDataPrefix: pCallbackContext is not NULL" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( *pBytesRead != 1U )
- {
- LogDebug( ( "socketSendDataPrefix: pBytesRead %u %s is not 1", *pBytesRead, pLine ) );
- }
- else
- {
- /* After the data prefix, there should not be any data in stream.
- * Cellular commmon processes AT command in lines. Add a '\0' after '@'. */
- if( strcmp( pLine, "@" ) == 0 )
- {
- pLine[ 1 ] = '\n';
- *pBytesRead = 2;
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-CellularError_t Cellular_SocketSend( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- const uint8_t * pData,
- uint32_t dataLength,
- /* coverity[misra_c_2012_rule_8_13_violation] */
- uint32_t * pSentDataLength )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- uint32_t sendTimeout = DATA_SEND_TIMEOUT_MS;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSocketSend = { 0 };
- CellularAtDataReq_t atDataReqSocketSend = { 0 };
- uint32_t sessionId = 0;
-
- atReqSocketSend.atCmdType = CELLULAR_AT_NO_RESULT;
- atReqSocketSend.pAtCmd = cmdBuf;
-
- atDataReqSocketSend.pData = pData;
- atDataReqSocketSend.dataLen = dataLength;
- atDataReqSocketSend.pSentDataLength = pSentDataLength;
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "Cellular_SocketSend: _Cellular_CheckLibraryStatus failed" ) );
- }
- else if( socketHandle == NULL )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( ( pData == NULL ) || ( pSentDataLength == NULL ) || ( dataLength == 0U ) )
- {
- LogDebug( ( "Cellular_SocketSend: Invalid parameter" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketHandle->socketState != SOCKETSTATE_CONNECTED )
- {
- /* Check the socket connection state. */
- LogInfo( ( "Cellular_SocketSend: socket state %d is not connected.", socketHandle->socketState ) );
-
- if( ( socketHandle->socketState == SOCKETSTATE_ALLOCATED ) || ( socketHandle->socketState == SOCKETSTATE_CONNECTING ) )
- {
- cellularStatus = CELLULAR_SOCKET_NOT_CONNECTED;
- }
- else
- {
- cellularStatus = CELLULAR_SOCKET_CLOSED;
- }
- }
- else
- {
- sessionId = _Cellular_GetSessionId( pContext, socketHandle->socketId );
-
- if( sessionId == INVALID_SESSION_ID )
- {
- LogError( ( "Cellular_SocketSend : invalid session ID for socket index %u",
- socketHandle->socketId ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Send data length check. */
- if( dataLength > ( uint32_t ) CELLULAR_MAX_SEND_DATA_LEN )
- {
- atDataReqSocketSend.dataLen = ( uint32_t ) CELLULAR_MAX_SEND_DATA_LEN;
- }
-
- /* Check send timeout. If not set by setsockopt, use default value. */
- if( socketHandle->sendTimeoutMs != 0U )
- {
- sendTimeout = socketHandle->sendTimeoutMs;
- }
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "%s%u,%u",
- "AT+USOWR=", sessionId, atDataReqSocketSend.dataLen );
-
- pktStatus = _Cellular_AtcmdDataSend( pContext, atReqSocketSend, atDataReqSocketSend,
- socketSendDataPrefix, NULL,
- PACKET_REQ_TIMEOUT_MS, sendTimeout, 200U );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- if( socketHandle->socketState == SOCKETSTATE_DISCONNECTED )
- {
- LogInfo( ( "Cellular_SocketSend: Data send fail, socket already closed" ) );
- cellularStatus = CELLULAR_SOCKET_CLOSED;
- }
- else
- {
- LogError( ( "Cellular_SocketSend: Data send fail, PktRet: %d", pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketClose( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- CellularAtReq_t atReqSocketClose =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
- uint32_t sessionId = INVALID_SESSION_ID;
- cellularModuleContext_t * pModuleContext = NULL;
-
- atReqSocketClose.pAtCmd = cmdBuf;
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "Cellular_SocketClose: _Cellular_CheckLibraryStatus failed" ) );
- }
- else if( socketHandle == NULL )
- {
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else
- {
- if( socketHandle->socketState == SOCKETSTATE_CONNECTING )
- {
- LogWarn( ( "Cellular_SocketClose: Socket state is SOCKETSTATE_CONNECTING." ) );
- }
-
- cellularStatus = _Cellular_GetModuleContext( pContext, ( void ** ) &pModuleContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- sessionId = _Cellular_GetSessionId( pContext, socketHandle->socketId );
-
- if( sessionId == INVALID_SESSION_ID )
- {
- LogError( ( "Cellular_SocketClose : invalid session ID for socket index %u",
- socketHandle->socketId ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Remove the mapping. */
- pModuleContext->pSessionMap[ sessionId ] = INVALID_SOCKET_INDEX;
-
- /* Close the socket. */
- if( socketHandle->socketState == SOCKETSTATE_CONNECTED )
- {
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "%s%u,%d",
- "AT+USOCL=", sessionId, CELLULAR_CONFIG_SET_SOCKET_CLOSE_ASYNC_MODE );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqSocketClose, SOCKET_CLOSE_PACKET_REQ_TIMEOUT_MS );
-
- /* Delete the socket config. */
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogWarn( ( "Cellular_SocketClose: AT+USOCL fail, PktRet: %d", pktStatus ) );
- }
- }
-
- /* Ignore the result from the info, and force to remove the socket. */
- cellularStatus = _Cellular_RemoveSocketData( pContext, socketHandle );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketConnect( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketAccessMode_t dataAccessMode,
- const CellularSocketAddress_t * pRemoteSocketAddress )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- uint8_t sessionId = 0;
- CellularAtReq_t atReqSocketConnect =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
- cellularModuleContext_t * pModuleContext = NULL;
-
- atReqSocketConnect.pAtCmd = cmdBuf;
-
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogError( ( "Cellular_SocketConnect: _Cellular_CheckLibraryStatus failed." ) );
- }
- else if( pRemoteSocketAddress == NULL )
- {
- LogError( ( "Cellular_SocketConnect: Invalid socket address." ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( socketHandle == NULL )
- {
- LogError( ( "Cellular_SocketConnect: Invalid socket handle." ) );
- cellularStatus = CELLULAR_INVALID_HANDLE;
- }
- else if( socketHandle->socketProtocol != CELLULAR_SOCKET_PROTOCOL_TCP )
- {
- LogError( ( "Cellular_SocketConnect: Invalid socket protocol." ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else if( ( socketHandle->socketState == SOCKETSTATE_CONNECTED ) || ( socketHandle->socketState == SOCKETSTATE_CONNECTING ) )
- {
- LogError( ( "Cellular_SocketConnect: Not allowed in state %d.", socketHandle->socketState ) );
- cellularStatus = CELLULAR_NOT_ALLOWED;
- }
- else
- {
- cellularStatus = storeAccessModeAndAddress( pContext, socketHandle, dataAccessMode, pRemoteSocketAddress );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- cellularStatus = _Cellular_GetModuleContext( pContext, ( void ** ) &pModuleContext );
- }
-
- /* Set socket config and get session id. The session id is defined by the modem. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Builds the Socket connect command. */
- cellularStatus = _Cellular_GetSocketNumber( pContext, socketHandle, &sessionId );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Create the reverse table to store the socketIndex to sessionId. */
- pModuleContext->pSessionMap[ sessionId ] = socketHandle->socketId;
- }
- }
-
- /* Start the tcp connection. */
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE,
- "AT+USOCO=%u,\"%s\",%d,1",
- sessionId,
- socketHandle->remoteSocketAddress.ipAddress.ipAddress,
- socketHandle->remoteSocketAddress.port );
-
- /* Set the socket state to connecting state. If cellular modem returns error,
- * revert the state to allocated state. */
- socketHandle->socketState = SOCKETSTATE_CONNECTING;
-
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqSocketConnect,
- SOCKET_CONNECT_PACKET_REQ_TIMEOUT_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_SocketConnect: Socket connect failed, cmdBuf:%s, PktRet: %d", cmdBuf, pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- /* Revert the state to allocated state. */
- socketHandle->socketState = SOCKETSTATE_ALLOCATED;
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetSimCardStatus( CellularHandle_t cellularHandle,
- CellularSimCardStatus_t * pSimCardStatus )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "Cellular_GetSimCardStatus: _Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pSimCardStatus == NULL )
- {
- LogWarn( ( "Cellular_GetSimCardStatus: Bad input Parameter " ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- /* Parameters are checked in this API. */
- pSimCardStatus->simCardState = CELLULAR_SIM_CARD_UNKNOWN;
- pSimCardStatus->simCardLockState = CELLULAR_SIM_CARD_LOCK_UNKNOWN;
-
- cellularStatus = Cellular_CommonGetSimCardLockStatus( cellularHandle, pSimCardStatus );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- if( ( pSimCardStatus->simCardLockState != CELLULAR_SIM_CARD_INVALID ) &&
- ( pSimCardStatus->simCardLockState != CELLULAR_SIM_CARD_LOCK_UNKNOWN ) )
- {
- pSimCardStatus->simCardState = CELLULAR_SIM_CARD_INSERTED;
- }
- else
- {
- pSimCardStatus->simCardState = CELLULAR_SIM_CARD_UNKNOWN;
- }
-
- LogInfo( ( "Cellular_GetSimCardStatus, Sim Insert State[%d], Lock State[%d]",
- pSimCardStatus->simCardState, pSimCardStatus->simCardLockState ) );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_DeactivatePdn( CellularHandle_t cellularHandle,
- uint8_t contextId )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- bool packetSwitchStatus = false;
- uint32_t i = 0;
-
- CellularServiceStatus_t serviceStatus = { 0 };
- CellularPdnContextActInfo_t pdpContextsActInfo = { 0 };
-
- CellularAtReq_t atReqDeactPdn =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- atReqDeactPdn.pAtCmd = cmdBuf;
-
- cellularStatus = _Cellular_IsValidPdn( contextId );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Get current network operator settings. */
- cellularStatus = Cellular_CommonGetServiceStatus( cellularHandle, &serviceStatus );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Check the current status of context. */
- cellularStatus = _Cellular_GetContextActivationStatus( cellularHandle, &pdpContextsActInfo );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- LogDebug( ( "Cellular_DeactivatePdn: Listing operator and context details below." ) );
-
- for( i = 0U; i < ( MAX_PDP_CONTEXTS - 1 ); i++ )
- {
- /* Print only those contexts that are present in +CGACT response */
- if( pdpContextsActInfo.contextsPresent[ i ] )
- {
- LogDebug( ( "Context [%d], Act State [%d], Operator [%d]\r\n", i + 1,
- pdpContextsActInfo.contextActState[ i ], serviceStatus.rat ) );
- }
- }
-
- /* Deactivate context if active */
- if( pdpContextsActInfo.contextActState[ contextId - 1 ] == true )
- {
- /* Don't deactivate LTE default bearer context */
- /* Otherwise sending AT command "+CGACT=0,1" for deactivation will result in ERROR */
- if( ( serviceStatus.rat >= CELLULAR_RAT_LTE ) && ( contextId == DEFAULT_BEARER_CONTEXT_ID ) )
- {
- LogInfo( ( "Cellular_DeactivatePdn: Default Bearer context %d Active. Not allowed to deactivate.", contextId ) );
- cellularStatus = CELLULAR_NOT_ALLOWED;
- }
- else
- {
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "%s=0,%u", "AT+CGACT", contextId );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqDeactPdn, PDN_DEACT_PACKET_REQ_TIMEOUT_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- if( ( cellularStatus != CELLULAR_SUCCESS ) && ( cellularStatus != CELLULAR_NOT_ALLOWED ) )
- {
- LogError( ( "Cellular_DeactivatePdn: can't deactivate PDN, PktRet: %d", pktStatus ) );
-
- /* Sometimes +CGACT deactivation fails in 2G. Then check packet switch attach. If attached, detach packet switch. */
- if( ( serviceStatus.rat == CELLULAR_RAT_GSM ) || ( serviceStatus.rat == CELLULAR_RAT_EDGE ) )
- {
- cellularStatus = _Cellular_GetPacketSwitchStatus( cellularHandle, &packetSwitchStatus );
-
- if( ( cellularStatus == CELLULAR_SUCCESS ) && ( packetSwitchStatus == true ) )
- {
- LogError( ( "Deactivate Packet switch" ) );
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "%s", "AT+CGATT=0" );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqDeactPdn, GPRS_ATTACH_REQ_TIMEOUT_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- else if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogError( ( "Packet switch query failed" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- else
- {
- LogInfo( ( "Packet switch detached" ) );
- }
- }
- }
- }
- else
- {
- LogInfo( ( "Cellular_DeactivatePdn: Context id [%d] is already deactive", contextId ) );
- }
- }
- else
- {
- LogError( ( "Cellular_DeactivatePdn: Unable to list operator and context details." ) );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library prototype. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncPacketSwitchStatus( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- bool * pPacketSwitchStatus = ( bool * ) pData;
-
- if( pContext == NULL )
- {
- LogError( ( "PacketSwitchStatus: Invalid handle" ) );
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pData == NULL ) || ( dataLen != sizeof( bool ) ) )
- {
- LogError( ( "GetPacketSwitchStatus: Invalid param" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "GetPacketSwitchStatus: Input Line passed is NULL" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
-
- /* Remove prefix. */
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- /* Remove leading space. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveLeadingWhiteSpaces( &pInputLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( *pInputLine == '0' )
- {
- *pPacketSwitchStatus = false;
- }
- else if( *pInputLine == '1' )
- {
- *pPacketSwitchStatus = true;
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Get PDN context Activation state */
-
-static CellularPktStatus_t _Cellular_RecvFuncGetPdpContextActState( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pRespLine = NULL;
- CellularPdnContextActInfo_t * pPDPContextsActInfo = ( CellularPdnContextActInfo_t * ) pData;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- const CellularATCommandLine_t * pCommnadItem = NULL;
- uint8_t tokenIndex = 0;
- uint8_t contextId = 0;
- int32_t tempValue = 0;
- char * pToken = NULL;
-
- if( pContext == NULL )
- {
- LogError( ( "_Cellular_RecvFuncGetPdpContextActState: invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pPDPContextsActInfo == NULL ) || ( dataLen != sizeof( CellularPdnContextActInfo_t ) ) )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( pAtResp == NULL )
- {
- LogError( ( "_Cellular_RecvFuncGetPdpContextActState: Response is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "_Cellular_RecvFuncGetPdpContextActState: no PDN context available" ) );
- pktStatus = CELLULAR_PKT_STATUS_OK;
- }
- else
- {
- pRespLine = pAtResp->pItm->pLine;
-
- pCommnadItem = pAtResp->pItm;
-
- while( pCommnadItem != NULL )
- {
- pRespLine = pCommnadItem->pLine;
- LogDebug( ( "_Cellular_RecvFuncGetPdpContextActState: pRespLine [%s]", pRespLine ) );
-
- /* Removing all the Spaces in the AT Response. */
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pRespLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemovePrefix( &pRespLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllDoubleQuote( pRespLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pRespLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- tokenIndex = 0;
-
- while( ( pToken != NULL ) && ( atCoreStatus == CELLULAR_AT_SUCCESS ) )
- {
- switch( tokenIndex )
- {
- case ( CELLULAR_PDN_ACT_STATUS_POS_CONTEXT_ID ):
- LogDebug( ( "_Cellular_RecvFuncGetPdpContextActState: Context Id pToken: %s", pToken ) );
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= ( int32_t ) CELLULAR_PDN_CONTEXT_ID_MIN ) &&
- ( tempValue <= ( int32_t ) MAX_PDP_CONTEXTS ) )
- {
- contextId = ( uint8_t ) tempValue;
- pPDPContextsActInfo->contextsPresent[ contextId - 1 ] = true;
- LogDebug( ( "_Cellular_RecvFuncGetPdpContextActState: Context Id: %d", contextId ) );
- }
- else
- {
- LogError( ( "_Cellular_RecvFuncGetPdpContextActState: Invalid Context Id. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- break;
-
- case ( CELLULAR_PDN_ACT_STATUS_POS_CONTEXT_STATE ):
- LogDebug( ( "_Cellular_RecvFuncGetPdpContextActState: Context pToken: %s", pToken ) );
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- pPDPContextsActInfo->contextActState[ contextId - 1 ] = ( bool ) tempValue;
- LogDebug( ( "_Cellular_RecvFuncGetPdpContextActState: Context : %d", pPDPContextsActInfo->contextActState[ contextId - 1 ] ) );
- }
-
- break;
-
- default:
- break;
- }
-
- tokenIndex++;
-
- if( Cellular_ATGetNextTok( &pRespLine, &pToken ) != CELLULAR_AT_SUCCESS )
- {
- break;
- }
- }
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "_Cellular_RecvFuncGetPdpContextActState: parse %s failed", pRespLine ) );
- break;
- }
-
- pCommnadItem = pCommnadItem->pNext;
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Check activation status of particular context. */
-
-static CellularError_t _Cellular_GetContextActivationStatus( CellularHandle_t cellularHandle,
- CellularPdnContextActInfo_t * pPdpContextsActInfo )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
-
- CellularAtReq_t atReqPacketSwitchStatus =
- {
- "AT+CGACT?",
- CELLULAR_AT_MULTI_WITH_PREFIX,
- "+CGACT",
- _Cellular_RecvFuncGetPdpContextActState,
- NULL,
- sizeof( CellularPdnContextActInfo_t ),
- };
-
- atReqPacketSwitchStatus.pData = pPdpContextsActInfo;
-
- /* Internal function. Callee check parameters. */
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqPacketSwitchStatus );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t _Cellular_GetPacketSwitchStatus( CellularHandle_t cellularHandle,
- bool * pPacketSwitchStatus )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularAtReq_t atReqPacketSwitchStatus =
- {
- "AT+CGATT?",
- CELLULAR_AT_WITH_PREFIX,
- "+CGATT",
- _Cellular_RecvFuncPacketSwitchStatus,
- NULL,
- sizeof( bool ),
- };
-
- atReqPacketSwitchStatus.pData = pPacketSwitchStatus;
-
- /* Internal function. Callee check parameters. */
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqPacketSwitchStatus, PDN_ACT_PACKET_REQ_TIMEOUT_MS );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ActivatePdn( CellularHandle_t cellularHandle,
- uint8_t contextId )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- uint32_t i = 0;
-
- CellularPdnContextActInfo_t pdpContextsActInfo = { 0 };
-
- CellularAtReq_t atReqActPdn =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- cellularStatus = _Cellular_IsValidPdn( contextId );
-
- atReqActPdn.pAtCmd = cmdBuf;
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Check the current status of context. If not activated, activate the PDN context ID. */
- cellularStatus = _Cellular_GetContextActivationStatus( cellularHandle, &pdpContextsActInfo );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- LogDebug( ( "Cellular_ActivatePdn: Listing operator and context details below." ) );
-
- for( i = 0U; i < ( MAX_PDP_CONTEXTS - 1 ); i++ )
- {
- /* Print only those contexts that are present in +CGACT response */
- if( pdpContextsActInfo.contextsPresent[ i ] )
- {
- LogDebug( ( "Cellular_ActivatePdn: Context [%d], Act State [%d]\r\n", i + 1,
- pdpContextsActInfo.contextActState[ i ] ) );
- }
- }
- }
-
- /* Activate context if not already active */
- if( pdpContextsActInfo.contextActState[ contextId - 1 ] == false )
- {
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "%s=1,%u", "AT+CGACT", contextId );
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqActPdn, PDN_ACT_PACKET_REQ_TIMEOUT_MS );
- }
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_ActivatePdn: can't activate PDN, PktRet: %d", pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
- else
- {
- LogInfo( ( "Cellular_ActivatePdn: Context id [%d] is already active", contextId ) );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-CellularError_t Cellular_GetPdnStatus( CellularHandle_t cellularHandle,
- CellularPdnStatus_t * pPdnStatusBuffers,
- uint8_t numStatusBuffers,
- uint8_t * pNumStatus )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- uint8_t i = 0;
-
- CellularPdnContextActInfo_t pdpContextsActInfo = { 0 };
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
- }
-
- if( ( pPdnStatusBuffers == NULL ) || ( pNumStatus == NULL ) || ( numStatusBuffers < 1u ) )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- LogWarn( ( "_Cellular_GetPdnStatus: Bad input Parameter " ) );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- *pNumStatus = 0U;
-
- /* Check the current status of contexts. */
- cellularStatus = _Cellular_GetContextActivationStatus( cellularHandle, &pdpContextsActInfo );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- LogDebug( ( "Cellular_GetPdnStatus: Listing operator and context details below." ) );
-
- for( i = 0U; i < ( MAX_PDP_CONTEXTS - 1 ); i++ )
- {
- /* Print only those contexts that are present in +CGACT response. */
- if( pdpContextsActInfo.contextsPresent[ i ] )
- {
- LogDebug( ( "Context [%d], Act State [%d]\r\n", i + 1, pdpContextsActInfo.contextActState[ i ] ) );
-
- if( *pNumStatus < numStatusBuffers )
- {
- pPdnStatusBuffers[ *pNumStatus ].contextId = i + 1U;
- pPdnStatusBuffers[ *pNumStatus ].state = pdpContextsActInfo.contextActState[ i ];
- *pNumStatus = *pNumStatus + 1U;
- }
- }
- }
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetRatPriority( CellularHandle_t cellularHandle,
- const CellularRat_t * pRatPriorities,
- uint8_t ratPrioritiesLength )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- uint8_t i = 0;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
-
- CellularAtReq_t atReqSetRatPriority =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- atReqSetRatPriority.pAtCmd = cmdBuf;
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "Cellular_SetRatPriority: _Cellular_CheckLibraryStatus failed" ) );
- }
- else if( ( pRatPriorities == NULL ) || ( ratPrioritiesLength == 0U ) ||
- ( ratPrioritiesLength > ( uint8_t ) CELLULAR_MAX_RAT_PRIORITY_COUNT ) )
- {
- LogWarn( ( "Cellular_SetRatPriority: Bad input Parameter " ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- /* In case of +UMNOPROF=0, AT+URAT set commad is not allowed */
- if( CELLULAR_CONFIG_SARA_R4_SET_MNO_PROFILE != 0 )
- {
- ( void ) strcpy( cmdBuf, "AT+CFUN=4;+URAT=" );
-
- while( i < ratPrioritiesLength )
- {
- if( ( pRatPriorities[ i ] == CELLULAR_RAT_GSM ) || ( pRatPriorities[ i ] == CELLULAR_RAT_EDGE ) )
- {
- ( void ) strcat( cmdBuf, "9" );
- }
- else if( pRatPriorities[ i ] == CELLULAR_RAT_CATM1 )
- {
- ( void ) strcat( cmdBuf, "7" );
- }
- else if( pRatPriorities[ i ] == CELLULAR_RAT_NBIOT )
- {
- ( void ) strcat( cmdBuf, "8" );
- }
- else
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- break;
- }
-
- i++;
-
- if( i < ratPrioritiesLength )
- {
- ( void ) strcat( cmdBuf, "," );
- }
- }
-
- ( void ) strcat( cmdBuf, ";+CFUN=1" );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSetRatPriority );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
- else
- {
- LogDebug( ( "Cellular_SetRatPriority: Automatic selection as UMNOPROF profile is 0" ) );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Get modem RAT priority setting. */
-/* coverity[misra_c_2012_rule_8_13_violation] */
-static CellularPktStatus_t _Cellular_RecvFuncGetRatPriority( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL, * pToken = NULL;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularRat_t * pRatPriorities = NULL;
- uint8_t ratIndex = 0;
- uint32_t maxRatPriorityLength = ( dataLen > RAT_PRIOIRTY_LIST_LENGTH ? RAT_PRIOIRTY_LIST_LENGTH : dataLen );
-
- if( pContext == NULL )
- {
- LogError( ( "_Cellular_RecvFuncGetRatPriority: Invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) ||
- ( pAtResp->pItm->pLine == NULL ) || ( pData == NULL ) || ( dataLen == 0U ) )
- {
- LogError( ( "_Cellular_RecvFuncGetRatPriority: Invalid param" ) );
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
- pRatPriorities = ( CellularRat_t * ) pData;
-
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pInputLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- memset( pRatPriorities, CELLULAR_RAT_INVALID, dataLen );
-
- /* pInputLine : 7,8,9. */
- atCoreStatus = Cellular_ATGetNextTok( &pInputLine, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- while( pToken != NULL && ratIndex < maxRatPriorityLength )
- {
- LogDebug( ( "_Cellular_RecvFuncGetRatPriority: pToken [%s]", pToken ) );
-
- if( strcmp( pToken, "7" ) == 0 )
- {
- pRatPriorities[ ratIndex ] = CELLULAR_RAT_CATM1;
- LogDebug( ( "_Cellular_RecvFuncGetRatPriority: CELLULAR_RAT_CATM1" ) );
- }
- else if( strcmp( pToken, "8" ) == 0 )
- {
- pRatPriorities[ ratIndex ] = CELLULAR_RAT_NBIOT;
- LogDebug( ( "_Cellular_RecvFuncGetRatPriority: CELLULAR_RAT_NBIOT" ) );
- }
- else if( strcmp( pToken, "9" ) == 0 )
- {
- pRatPriorities[ ratIndex ] = CELLULAR_RAT_GSM; /* or CELLULAR_RAT_EDGE */
- LogDebug( ( "_Cellular_RecvFuncGetRatPriority: CELLULAR_RAT_GSM" ) );
- }
- else
- {
- LogDebug( ( "_Cellular_RecvFuncGetRatPriority: Invalid RAT string [%s]", pToken ) );
- }
-
- ratIndex++;
-
- if( Cellular_ATGetNextTok( &pInputLine, &pToken ) != CELLULAR_AT_SUCCESS )
- {
- break;
- }
- }
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetRatPriority( CellularHandle_t cellularHandle,
- CellularRat_t * pRatPriorities,
- uint8_t ratPrioritiesLength,
- uint8_t * pReceiveRatPrioritesLength )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- uint8_t ratIndex = 0;
-
- CellularAtReq_t atReqSetRatPriority =
- {
- "AT+URAT?",
- CELLULAR_AT_WITH_PREFIX,
- "+URAT",
- _Cellular_RecvFuncGetRatPriority,
- NULL,
- 0U,
- };
-
- atReqSetRatPriority.pData = pRatPriorities;
- atReqSetRatPriority.dataLen = ( uint16_t ) ratPrioritiesLength;
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "Cellular_GetRatPriority: _Cellular_CheckLibraryStatus failed" ) );
- }
- else if( ( pRatPriorities == NULL ) || ( ratPrioritiesLength == 0U ) ||
- ( ratPrioritiesLength > ( uint8_t ) CELLULAR_MAX_RAT_PRIORITY_COUNT ) ||
- ( pReceiveRatPrioritesLength == NULL ) )
- {
- LogWarn( ( "Cellular_GetRatPriority: Bad input Parameter " ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- /* In case of +UMNOPROF=0, AT+URAT? read commad is not allowed */
- if( CELLULAR_CONFIG_SARA_R4_SET_MNO_PROFILE != 0 )
- {
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSetRatPriority );
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- for( ratIndex = 0; ratIndex < ratPrioritiesLength; ratIndex++ )
- {
- if( pRatPriorities[ ratIndex ] == CELLULAR_RAT_INVALID )
- {
- break;
- }
- }
-
- *pReceiveRatPrioritesLength = ratIndex;
- }
-
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- else
- {
- LogDebug( ( "Cellular_GetRatPriority: Automatic selection as UMNOPROF profile is 0" ) );
-
- pRatPriorities[ ratIndex++ ] = CELLULAR_RAT_CATM1;
- pRatPriorities[ ratIndex++ ] = CELLULAR_RAT_NBIOT;
- pRatPriorities[ ratIndex++ ] = CELLULAR_RAT_GSM;
- *pReceiveRatPrioritesLength = RAT_PRIOIRTY_LIST_LENGTH;
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static bool _parseExtendedSignalQuality( char * pQcsqPayload,
- CellularSignalInfo_t * pSignalInfo )
-{
- char * pToken = NULL, * pTmpQcsqPayload = pQcsqPayload;
- int32_t tempValue = 0;
- bool parseStatus = true;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- if( ( pSignalInfo == NULL ) || ( pQcsqPayload == NULL ) )
- {
- LogError( ( "_parseExtendedSignalQuality: Invalid Input Parameters" ) );
- parseStatus = false;
- }
-
- /* +CESQ: ,,,,,. */
-
- /* Skip . */
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
-
- /* Parse . */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( ( atCoreStatus == CELLULAR_AT_SUCCESS ) && ( tempValue <= INT16_MAX ) && ( tempValue >= INT16_MIN ) )
- {
- /*
- * Bit Error Rate (BER):
- * 0..7: as RXQUAL values in the table in 3GPP TS 45.008 [124], subclause 8.2.4
- * 99: not known or not detectable
- */
- if( ( tempValue >= 0 ) && ( tempValue <= 7 ) )
- {
- pSignalInfo->ber = ( int16_t ) tempValue;
- }
- else
- {
- pSignalInfo->ber = CELLULAR_INVALID_SIGNAL_VALUE;
- }
- }
- else
- {
- LogError( ( "_parseExtendedSignalQuality: Error in processing BER. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- /* Skip . */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
- }
-
- /* Skip . */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
- }
-
- /* Parse . */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- /*
- * Reference Signal Received Quality (RSRQ):
- * 0: less than -19.5 dB
- * 1..33: from -19.5 dB to -3.5 dB with 0.5 dB steps
- * 34: -3 dB or greater
- * 255: not known or not detectable
- */
- if( ( tempValue >= 0 ) && ( tempValue <= 34 ) )
- {
- pSignalInfo->rsrq = ( int16_t ) ( ( -20 ) + ( tempValue * 0.5 ) );
- }
- else
- {
- pSignalInfo->rsrq = CELLULAR_INVALID_SIGNAL_VALUE;
- }
- }
- else
- {
- LogError( ( "_parseExtendedSignalQuality: Error in processing RSRP. Token %s", pToken ) );
- parseStatus = false;
- }
- }
-
- /* Parse . */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- /*
- * Reference Signal Received Power(RSRP) :
- * 0 : less than - 140 dBm
- * 1..96 : from - 140 dBm to - 45 dBm with 1 dBm steps
- * 97 : -44 dBm or greater
- * 255 : not known or not detectable
- */
- if( ( tempValue >= 0 ) && ( tempValue <= 97 ) )
- {
- pSignalInfo->rsrp = ( int16_t ) ( ( -141 ) + ( tempValue ) );
- }
- else
- {
- pSignalInfo->rsrp = CELLULAR_INVALID_SIGNAL_VALUE;
- }
- }
- else
- {
- LogError( ( "_parseExtendedSignalQuality: Error in processing RSRP. Token %s", pToken ) );
- parseStatus = false;
- }
- }
-
- return parseStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static bool _parseSignalQuality( char * pQcsqPayload,
- CellularSignalInfo_t * pSignalInfo )
-{
- char * pToken = NULL, * pTmpQcsqPayload = pQcsqPayload;
- int32_t tempValue = 0;
- bool parseStatus = true;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
-
- if( ( pSignalInfo == NULL ) || ( pQcsqPayload == NULL ) )
- {
- LogError( ( "_parseSignalQuality: Invalid Input Parameters" ) );
- parseStatus = false;
- }
-
- /* +CSQ: ,. */
-
- /* Parse . */
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- /*
- * The allowed range is 0-31 and 99.
- * 0 RSSI of the network <= -113 dBm
- * 1 -111 dBm
- * 2...30 -109 dBm <= RSSI of the network <= -53 dBm
- * 31 -51 dBm <= RSSI of the network
- * 99 Not known or not detectable
- */
- if( ( tempValue >= 0 ) && ( tempValue <= 31 ) )
- {
- pSignalInfo->rssi = ( int16_t ) ( ( -113 ) + ( tempValue * 2 ) );
- }
- else if( tempValue == 99 )
- {
- pSignalInfo->rssi = -113;
- }
- else
- {
- pSignalInfo->rssi = CELLULAR_INVALID_SIGNAL_VALUE;
- }
- }
- else
- {
- LogError( ( "_parseSignalQuality: Error in processing RSSI. Token %s", pToken ) );
- parseStatus = false;
- }
- }
-
- /* Parse . */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pTmpQcsqPayload, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- /*
- * The allowed range is 0-7 and 99 :
- * In 2G RAT CS dedicated and GPRS packet transfer mode indicates the Bit Error Rate (BER) as specified in 3GPP TS 45.008
- */
- if( ( tempValue >= 0 ) && ( tempValue <= 7 ) )
- {
- pSignalInfo->ber = ( int16_t ) tempValue;
- }
- else
- {
- pSignalInfo->ber = CELLULAR_INVALID_SIGNAL_VALUE;
- }
- }
- else
- {
- LogError( ( "_parseSignalQuality: Error in processing ber. Token %s", pToken ) );
- parseStatus = false;
- }
- }
-
- return parseStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* parse signal strength response */
-
-static CellularPktStatus_t _Cellular_RecvFuncGetSignalInfo( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pInputLine = NULL;
- CellularSignalInfo_t * pSignalInfo = ( CellularSignalInfo_t * ) pData;
- bool parseStatus = true;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- bool isExtendedResponse = false;
-
- if( pContext == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_INVALID_HANDLE;
- }
- else if( ( pSignalInfo == NULL ) || ( dataLen != sizeof( CellularSignalInfo_t ) ) )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( ( pAtResp == NULL ) || ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "GetSignalInfo: Input Line passed is NULL" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else
- {
- pInputLine = pAtResp->pItm->pLine;
-
- if( strstr( pInputLine, "+CESQ" ) )
- {
- LogDebug( ( "GetSignalInfo: ExtendedResponse received." ) );
- isExtendedResponse = true;
- }
-
- atCoreStatus = Cellular_ATRemovePrefix( &pInputLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pInputLine );
- }
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
- }
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- if( isExtendedResponse )
- {
- parseStatus = _parseExtendedSignalQuality( pInputLine, pSignalInfo );
- }
- else
- {
- parseStatus = _parseSignalQuality( pInputLine, pSignalInfo );
- }
-
- if( parseStatus != true )
- {
- pSignalInfo->rssi = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->rsrp = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->rsrq = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->ber = CELLULAR_INVALID_SIGNAL_VALUE;
- pSignalInfo->bars = CELLULAR_INVALID_SIGNAL_BAR_VALUE;
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-CellularError_t Cellular_GetSignalInfo( CellularHandle_t cellularHandle,
- CellularSignalInfo_t * pSignalInfo )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularRat_t rat = CELLULAR_RAT_INVALID;
- CellularAtReq_t atReqQuerySignalInfo =
- {
- "AT+CSQ",
- CELLULAR_AT_WITH_PREFIX,
- "+CSQ",
- _Cellular_RecvFuncGetSignalInfo,
- NULL,
- sizeof( CellularSignalInfo_t ),
- };
- CellularAtReq_t atReqQueryExtendedSignalInfo =
- {
- "AT+CESQ",
- CELLULAR_AT_WITH_PREFIX,
- "+CESQ",
- _Cellular_RecvFuncGetSignalInfo,
- NULL,
- sizeof( CellularSignalInfo_t ),
- };
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
- atReqQuerySignalInfo.pData = pSignalInfo;
- atReqQueryExtendedSignalInfo.pData = pSignalInfo;
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "Cellular_GetSignalInfo: _Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pSignalInfo == NULL )
- {
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- cellularStatus = _Cellular_GetCurrentRat( pContext, &rat );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Get +CSQ response */
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqQuerySignalInfo );
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- /* Get +CESQ response */
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqQueryExtendedSignalInfo );
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- /* If the convert failed, the API will return CELLULAR_INVALID_SIGNAL_BAR_VALUE in bars field. */
- ( void ) _Cellular_ComputeSignalBars( rat, pSignalInfo );
- }
-
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetDns( CellularHandle_t cellularHandle,
- uint8_t contextId,
- const char * pDnsServerAddress )
-{
- /* Modem use dynamic DNS addresses. Return unsupported. */
- ( void ) cellularHandle;
- ( void ) contextId;
- ( void ) pDnsServerAddress;
- return CELLULAR_UNSUPPORTED;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t controlSignalStrengthIndication( CellularContext_t * pContext,
- bool enable )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_TYPICAL_MAX_SIZE ] = { '\0' };
- uint8_t enable_value = 0;
- CellularAtReq_t atReqControlSignalStrengthIndication =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- atReqControlSignalStrengthIndication.pAtCmd = cmdBuf;
-
- if( enable == true )
- {
- enable_value = 1;
- }
- else
- {
- enable_value = 0;
- }
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- if( enable_value )
- {
- /* Enable signal level change indication via +CIEV URC.*/
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "AT+UCIND=2" );
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqControlSignalStrengthIndication );
- }
- else
- {
- /* Disable signal level change indication via +CIEV URC.*/
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_TYPICAL_MAX_SIZE, "AT+UCIND=0" );
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqControlSignalStrengthIndication );
- }
-
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterUrcSignalStrengthChangedCallback( CellularHandle_t cellularHandle,
- CellularUrcSignalStrengthChangedCallback_t signalStrengthChangedCallback,
- void * pCallbackContext )
-{
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
-
- /* pContext is checked in the common library. */
- cellularStatus = Cellular_CommonRegisterUrcSignalStrengthChangedCallback(
- cellularHandle, signalStrengthChangedCallback, pCallbackContext );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- if( signalStrengthChangedCallback != NULL )
- {
- cellularStatus = controlSignalStrengthIndication( pContext, true );
- }
- else
- {
- cellularStatus = controlSignalStrengthIndication( pContext, false );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Resolve Domain name to IP address */
-
-static CellularPktStatus_t _Cellular_RecvFuncResolveDomainToIpAddress( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pRespLine = NULL;
- char * pResolvedIpAddress = ( char * ) pData;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- const CellularATCommandLine_t * pCommnadItem = NULL;
- char * pToken = NULL;
-
- if( pContext == NULL )
- {
- LogError( ( "_Cellular_RecvFuncResolveDomainToIpAddress: invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pResolvedIpAddress == NULL ) || ( dataLen != CELLULAR_IP_ADDRESS_MAX_SIZE ) )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( pAtResp == NULL )
- {
- LogError( ( "_Cellular_RecvFuncResolveDomainToIpAddress: Response is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "_Cellular_RecvFuncResolveDomainToIpAddress: Address not resolved" ) );
- pktStatus = CELLULAR_PKT_STATUS_OK;
- }
- else
- {
- pRespLine = pAtResp->pItm->pLine;
-
- pCommnadItem = pAtResp->pItm;
-
- while( pCommnadItem != NULL )
- {
- pRespLine = pCommnadItem->pLine;
- LogDebug( ( "_Cellular_RecvFuncResolveDomainToIpAddress: pRespLine [%s]", pRespLine ) );
-
- /* Removing all the Spaces in the AT Response. */
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pRespLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemovePrefix( &pRespLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllDoubleQuote( pRespLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pRespLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- ( void ) strncpy( pResolvedIpAddress, pToken, dataLen );
-
- LogDebug( ( "_Cellular_RecvFuncResolveDomainToIpAddress: Resolved IP Address: [%s]", pResolvedIpAddress ) );
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "_Cellular_RecvFuncResolveDomainToIpAddress: parse %s failed", pRespLine ) );
- break;
- }
-
- pCommnadItem = pCommnadItem->pNext;
- }
- }
-
- return pktStatus;
-}
-
-
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetHostByName( CellularHandle_t cellularHandle,
- uint8_t contextId,
- const char * pcHostName,
- char * pResolvedAddress )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
-
- CellularAtReq_t atReqQueryDns =
- {
- NULL,
- CELLULAR_AT_MULTI_WITH_PREFIX,
- "+UDNSRN",
- _Cellular_RecvFuncResolveDomainToIpAddress,
- NULL,
- CELLULAR_IP_ADDRESS_MAX_SIZE,
- };
-
- ( void ) contextId;
-
- /* pContext is checked in _Cellular_CheckLibraryStatus function. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- atReqQueryDns.pAtCmd = cmdBuf;
- atReqQueryDns.pData = pResolvedAddress;
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogDebug( ( "Cellular_GetHostByName: _Cellular_CheckLibraryStatus failed" ) );
- }
- else if( ( pcHostName == NULL ) || ( pResolvedAddress == NULL ) )
- {
- LogError( ( "Cellular_GetHostByName: Bad input Parameter " ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE,
- "AT+UDNSRN=0,\"%s\"", pcHostName );
-
- pktStatus = _Cellular_TimeoutAtcmdRequestWithCallback( pContext, atReqQueryDns, DNS_QUERY_REQ_TIMEOUT_MS );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_GetHostByName: couldn't resolve host name" ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Get PDN context APN name*/
-
-static CellularPktStatus_t _Cellular_RecvFuncGetPdpContextSettings( CellularContext_t * pContext,
- const CellularATCommandResponse_t * pAtResp,
- void * pData,
- uint16_t dataLen )
-{
- char * pRespLine = NULL;
- CellularPdnContextInfo_t * pPDPContextsInfo = ( CellularPdnContextInfo_t * ) pData;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- const CellularATCommandLine_t * pCommnadItem = NULL;
- uint8_t tokenIndex = 0;
- uint8_t contextId = 0;
- int32_t tempValue = 0;
- char * pToken = NULL;
-
- if( pContext == NULL )
- {
- LogError( ( "_Cellular_RecvFuncGetPdpContextSettings: invalid context" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pPDPContextsInfo == NULL ) || ( dataLen != sizeof( CellularPdnContextInfo_t ) ) )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else if( pAtResp == NULL )
- {
- LogError( ( "_Cellular_RecvFuncGetPdpContextSettings: Response is invalid" ) );
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( ( pAtResp->pItm == NULL ) || ( pAtResp->pItm->pLine == NULL ) )
- {
- LogError( ( "_Cellular_RecvFuncGetPdpContextSettings: no PDN context available" ) );
- pktStatus = CELLULAR_PKT_STATUS_OK;
- }
- else
- {
- pRespLine = pAtResp->pItm->pLine;
-
- pCommnadItem = pAtResp->pItm;
-
- while( pCommnadItem != NULL )
- {
- pRespLine = pCommnadItem->pLine;
- LogDebug( ( "_Cellular_RecvFuncGetPdpContextSettings: pRespLine [%s]", pRespLine ) );
-
- /* Removing all the Spaces in the AT Response. */
- atCoreStatus = Cellular_ATRemoveAllWhiteSpaces( pRespLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemovePrefix( &pRespLine );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveAllDoubleQuote( pRespLine );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pRespLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- tokenIndex = 0;
-
- while( ( pToken != NULL ) && ( atCoreStatus == CELLULAR_AT_SUCCESS ) )
- {
- switch( tokenIndex )
- {
- case ( CELLULAR_PDN_STATUS_POS_CONTEXT_ID ):
- LogDebug( ( "_Cellular_RecvFuncGetPdpContextSettings: Context Id pToken: %s", pToken ) );
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= ( int32_t ) CELLULAR_PDN_CONTEXT_ID_MIN ) &&
- ( tempValue <= ( int32_t ) MAX_PDP_CONTEXTS ) )
- {
- contextId = ( uint8_t ) tempValue;
- pPDPContextsInfo->contextsPresent[ contextId - 1 ] = true;
- LogDebug( ( "_Cellular_RecvFuncGetPdpContextSettings: Context Id: %d", contextId ) );
- }
- else
- {
- LogError( ( "_Cellular_RecvFuncGetPdpContextSettings: Invalid Context Id. Token %s", pToken ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- break;
-
- case ( CELLULAR_PDN_STATUS_POS_CONTEXT_TYPE ):
- LogDebug( ( "_Cellular_RecvFuncGetPdpContextSettings: Context Type pToken: %s", pToken ) );
-
- ( void ) memcpy( ( void * ) pPDPContextsInfo->ipType[ contextId - 1 ],
- ( void * ) pToken, CELULAR_PDN_CONTEXT_TYPE_MAX_SIZE + 1U );
- break;
-
- case ( CELLULAR_PDN_STATUS_POS_APN_NAME ):
- LogDebug( ( "_Cellular_RecvFuncGetPdpContextSettings: Context APN name pToken: %s", pToken ) );
-
- ( void ) memcpy( ( void * ) pPDPContextsInfo->apnName[ contextId - 1 ],
- ( void * ) pToken, CELLULAR_APN_MAX_SIZE + 1U );
- break;
-
- case ( CELLULAR_PDN_STATUS_POS_IP_ADDRESS ):
- LogDebug( ( "_Cellular_RecvFuncGetPdpContextSettings: Context IP address pToken: %s", pToken ) );
-
- ( void ) memcpy( ( void * ) pPDPContextsInfo->ipAddress[ contextId - 1 ],
- ( void * ) pToken, CELLULAR_IP_ADDRESS_MAX_SIZE + 1U );
- break;
-
- default:
- break;
- }
-
- tokenIndex++;
-
- if( Cellular_ATGetNextTok( &pRespLine, &pToken ) != CELLULAR_AT_SUCCESS )
- {
- break;
- }
- }
- }
- }
-
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "_Cellular_RecvFuncGetPdpContextSettings: parse %s failed", pRespLine ) );
- break;
- }
-
- pCommnadItem = pCommnadItem->pNext;
- }
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Set PDN APN name and Authentication setting */
-
-CellularError_t Cellular_SetPdnConfig( CellularHandle_t cellularHandle,
- uint8_t contextId,
- const CellularPdnConfig_t * pPdnConfig )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
- char pPdpTypeStr[ CELULAR_PDN_CONTEXT_TYPE_MAX_SIZE ] = { '\0' };
- uint32_t i = 0;
-
- CellularPdnContextInfo_t pdpContextsInfo = { 0 };
- CellularPdnContextInfo_t * pPdpContextsInfo = &pdpContextsInfo;
-
- CellularAtReq_t atReqSetPdn =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0,
- };
-
- atReqSetPdn.pAtCmd = cmdBuf;
-
- if( pPdnConfig == NULL )
- {
- LogDebug( ( "Cellular_SetPdnConfig: Input parameter is NULL" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- switch( pPdnConfig->pdnContextType )
- {
- case CELLULAR_PDN_CONTEXT_IPV4:
- ( void ) strncpy( pPdpTypeStr, "IP", 3U ); /* 3U is the length of "IP" + '\0'. */
- break;
-
- case CELLULAR_PDN_CONTEXT_IPV6:
- ( void ) strncpy( pPdpTypeStr, "IPV6", 5U ); /* 5U is the length of "IPV6" + '\0'. */
- break;
-
- case CELLULAR_PDN_CONTEXT_IPV4V6:
- ( void ) strncpy( pPdpTypeStr, "IPV4V6", 7U ); /* 7U is the length of "IPV4V6" + '\0'. */
- break;
-
- default:
- LogDebug( ( "Cellular_SetPdnConfig: Invalid pdn context type %d",
- CELLULAR_PDN_CONTEXT_IPV4V6 ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- break;
- }
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- cellularStatus = _Cellular_IsValidPdn( contextId );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Make sure the library is open. */
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Check current APN name and IP type of contextId first to avoid unneccessary network de-registration. */
- /* TODO: This implementation currently assumes only one context in list. Need to add complete contexts list parsing */
-
- CellularAtReq_t atReqGetCurrentApnName =
- {
- "AT+CGDCONT?",
- CELLULAR_AT_MULTI_WITH_PREFIX,
- "+CGDCONT",
- _Cellular_RecvFuncGetPdpContextSettings,
- NULL,
- sizeof( CellularPdnContextInfo_t ),
- };
- atReqGetCurrentApnName.pData = pPdpContextsInfo;
-
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqGetCurrentApnName );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- LogDebug( ( "Cellular_SetPdnConfig: Listing operator and context details below." ) );
-
- for( i = 0U; i < ( MAX_PDP_CONTEXTS - 1 ); i++ )
- {
- /* Print only those contexts that are present in +CGDCONT response */
- if( pdpContextsInfo.contextsPresent[ i ] )
- {
- LogDebug( ( "Context [%d], IP Type [%s], APN Name [%s], IP Address [%s]\r\n", i + 1,
- pdpContextsInfo.ipType[ i ], ( char * ) pdpContextsInfo.apnName,
- ( char * ) pdpContextsInfo.ipAddress ) );
- }
- }
- }
- }
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- /* Form the AT command. */
-
- /* The return value of snprintf is not used.
- * The max length of the string is fixed and checked offline. */
- /* coverity[misra_c_2012_rule_21_6_violation]. */
-
- if( ( strstr( pdpContextsInfo.apnName[ contextId - 1 ], pPdnConfig->apnName ) == NULL ) || ( strcmp( pdpContextsInfo.ipType[ contextId - 1 ], pPdpTypeStr ) != 0 ) )
- {
- if( strcmp( pdpContextsInfo.ipType[ contextId - 1 ], pPdpTypeStr ) != 0 )
- {
- LogInfo( ( "Cellular_SetPdnConfig: Setting new IPv (Module IPv:%s != %s)\r\n", pdpContextsInfo.ipType[ contextId - 1 ], pPdpTypeStr ) );
- }
-
- if( strstr( pdpContextsInfo.apnName[ contextId - 1 ], pPdnConfig->apnName ) == NULL )
- {
- LogInfo( ( "Cellular_SetPdnConfig: Setting new APN (Module APN:%s != %s)\r\n", pdpContextsInfo.apnName[ contextId - 1 ], pPdnConfig->apnName ) );
- }
-
- /* TODO: Add support if + UAUTHREQ is PAP / CHAP */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "%s%d,\"%s\",\"%s\",,0,0;%s%d,%d%s", /*,\"%s\",\"%s\" TODO: add if +UAUTHREQ is PAP/CHAP */
- "AT+COPS=2;+CGDCONT=",
- contextId,
- pPdpTypeStr,
- pPdnConfig->apnName,
- "+UAUTHREQ=",
- contextId,
- pPdnConfig->pdnAuthType,
- ";+COPS=0" );
- /*pPdnConfig->username, */
- /*pPdnConfig->password); */
-
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSetPdn );
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogError( ( "Cellular_SetPdnConfig: can't set PDN, cmdBuf:%s, PktRet: %d", cmdBuf, pktStatus ) );
- cellularStatus = _Cellular_TranslatePktStatus( pktStatus );
- }
- }
- else
- {
- LogInfo( ( "Cellular_SetPdnConfig: APN and IPv already set.\r\n" ) );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetPsmSettings( CellularHandle_t cellularHandle,
- const CellularPsmSettings_t * pPsmSettings )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
-
- CellularAtReq_t atReqSetPsm =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0
- };
-
- atReqSetPsm.pAtCmd = cmdBuf;
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogError( ( "Cellular_SetPsmSettings: _Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pPsmSettings == NULL )
- {
- LogError( ( "Cellular_SetPsmSettings : Bad parameter" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- if( pPsmSettings->mode == 1 )
- {
- /*
- * SARA-R4: To change the command setting issue AT+COPS=2 or AT+CFUN=0 to deregister the module from
- * network, issue the +CPSMS command and reboot the module in order to apply the new configuration. */
- /* After PSM mode active, press "PWR_ON" key to awake modem or T3412 timer is expired. */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "AT+CFUN=0" );
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSetPsm );
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- cellularStatus = Cellular_CommonSetPsmSettings( cellularHandle, pPsmSettings );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- cellularStatus = rebootCellularModem( pContext, false, true );
- }
- else
- {
- LogError( ( "Cellular_SetPsmSettings: Unable to set PSM settings." ) );
- }
- }
- }
- else
- {
- cellularStatus = Cellular_CommonSetPsmSettings( cellularHandle, pPsmSettings );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static CellularError_t _Cellular_isSockOptSupport( CellularSocketOptionLevel_t optionLevel,
- CellularSocketOption_t option )
-{
- CellularError_t err = CELLULAR_UNSUPPORTED;
-
- if( ( optionLevel == CELLULAR_SOCKET_OPTION_LEVEL_TRANSPORT ) &&
- ( ( option == CELLULAR_SOCKET_OPTION_SEND_TIMEOUT ) ||
- ( option == CELLULAR_SOCKET_OPTION_RECV_TIMEOUT ) ||
- ( option == CELLULAR_SOCKET_OPTION_PDN_CONTEXT_ID ) ) )
- {
- err = CELLULAR_SUCCESS;
- }
- else
- {
- LogWarn( ( "Cellular_SocketSetSockOpt: Option [Level:option=%d:%d] not supported in SARA R4",
- optionLevel, option ) );
- }
-
- return err;
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SetEidrxSettings( CellularHandle_t cellularHandle,
- const CellularEidrxSettings_t * pEidrxSettings )
-{
- CellularContext_t * pContext = ( CellularContext_t * ) cellularHandle;
- CellularError_t cellularStatus = CELLULAR_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- char cmdBuf[ CELLULAR_AT_CMD_MAX_SIZE ] = { '\0' };
-
- CellularAtReq_t atReqSetEidrx =
- {
- NULL,
- CELLULAR_AT_NO_RESULT,
- NULL,
- NULL,
- NULL,
- 0
- };
-
- atReqSetEidrx.pAtCmd = cmdBuf;
-
- cellularStatus = _Cellular_CheckLibraryStatus( pContext );
-
- if( cellularStatus != CELLULAR_SUCCESS )
- {
- LogError( ( "Cellular_SetEidrxSettings: _Cellular_CheckLibraryStatus failed" ) );
- }
- else if( pEidrxSettings == NULL )
- {
- LogError( ( "Cellular_SetEidrxSettings : Bad parameter" ) );
- cellularStatus = CELLULAR_BAD_PARAMETER;
- }
- else
- {
- if( ( pEidrxSettings->mode == 1 ) || ( pEidrxSettings->mode == 2 ) )
- {
- /*
- * SARA-R4: To change the command setting issue AT+COPS=2 or AT+CFUN=0 to deregister the module from
- * network, issue the +CEDRXS command and reboot the module in order to apply the new configuration.
- */
- ( void ) snprintf( cmdBuf, CELLULAR_AT_CMD_MAX_SIZE, "AT+CFUN=0" );
- pktStatus = _Cellular_AtcmdRequestWithCallback( pContext, atReqSetEidrx );
-
- if( pktStatus == CELLULAR_PKT_STATUS_OK )
- {
- cellularStatus = Cellular_CommonSetEidrxSettings( cellularHandle, pEidrxSettings );
-
- if( cellularStatus == CELLULAR_SUCCESS )
- {
- cellularStatus = rebootCellularModem( pContext, true, false );
- }
- else
- {
- LogError( ( "Cellular_SetEidrxSettings: Unable to set Eidrx settings." ) );
- }
- }
- }
- else
- {
- cellularStatus = Cellular_CommonSetEidrxSettings( cellularHandle, pEidrxSettings );
- }
- }
-
- return cellularStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-CellularError_t Cellular_Init( CellularHandle_t * pCellularHandle,
- const CellularCommInterface_t * pCommInterface )
-{
- CellularTokenTable_t cellularTokenTable = { 0 };
-
- cellularTokenTable.pCellularUrcHandlerTable = CellularUrcHandlerTable;
- cellularTokenTable.cellularPrefixToParserMapSize = CellularUrcHandlerTableSize;
- cellularTokenTable.pCellularSrcTokenErrorTable = CellularSrcTokenErrorTable;
- cellularTokenTable.cellularSrcTokenErrorTableSize = CellularSrcTokenErrorTableSize;
- cellularTokenTable.pCellularSrcTokenSuccessTable = CellularSrcTokenSuccessTable;
- cellularTokenTable.cellularSrcTokenSuccessTableSize = CellularSrcTokenSuccessTableSize;
- cellularTokenTable.pCellularUrcTokenWoPrefixTable = CellularUrcTokenWoPrefixTable;
- cellularTokenTable.cellularUrcTokenWoPrefixTableSize = CellularUrcTokenWoPrefixTableSize;
- cellularTokenTable.pCellularSrcExtraTokenSuccessTable = NULL;
- cellularTokenTable.cellularSrcExtraTokenSuccessTableSize = 0;
-
- return Cellular_CommonInit( pCellularHandle, pCommInterface, &cellularTokenTable );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-CellularError_t Cellular_SocketSetSockOpt( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketOptionLevel_t optionLevel,
- CellularSocketOption_t option,
- const uint8_t * pOptionValue,
- uint32_t optionValueLength )
-{
- CellularError_t err = CELLULAR_SUCCESS;
-
- err = _Cellular_isSockOptSupport( optionLevel, option );
-
- if( err == CELLULAR_SUCCESS )
- {
- err = Cellular_CommonSocketSetSockOpt( cellularHandle, socketHandle, optionLevel, option,
- pOptionValue, optionValueLength );
- }
-
- return err;
-}
-
-/*-----------------------------------------------------------*/
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4_urc_handler.c b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4_urc_handler.c
deleted file mode 100644
index 10308869d..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4_urc_handler.c
+++ /dev/null
@@ -1,656 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-#include "cellular_config.h"
-#include "cellular_config_defaults.h"
-
-/* Standard includes. */
-#include
-#include
-#include
-
-#include "cellular_platform.h"
-#include "cellular_types.h"
-#include "cellular_common.h"
-#include "cellular_common_api.h"
-#include "cellular_common_portable.h"
-
-/* Cellular module includes. */
-#include "cellular_r4.h"
-
-/*-----------------------------------------------------------*/
-
-/* +UUPSMR URC */
-#define PSM_MODE_EXIT ( 0U )
-#define PSM_MODE_ENTER ( 1U )
-#define PSM_MODE_PREVENT_ENTRY ( 2U )
-#define PSM_MODE_PREVENT_DEEP_ENTRY ( 3U )
-
-/* +CIEV URC */
-#define CIEV_POS_MIN ( 1U )
-#define CIEV_POS_SIGNAL ( 2U )
-#define CIEV_POS_SERVICE ( 3U )
-#define CIEV_POS_CALL ( 6U )
-#define CIEV_POS_MAX ( 12U )
-
-/*-----------------------------------------------------------*/
-
-static void _cellular_UrcProcessUusoco( CellularContext_t * pContext,
- char * pInputLine );
-static void _cellular_UrcProcessUusord( CellularContext_t * pContext,
- char * pInputLine );
-static void _cellular_UrcProcessUusocl( CellularContext_t * pContext,
- char * pInputLine );
-
-static void _cellular_UrcProcessUupsmr( CellularContext_t * pContext,
- char * pInputLine );
-static void _cellular_UrcProcessCiev( CellularContext_t * pContext,
- char * pInputLine );
-static void _Cellular_ProcessModemRdy( CellularContext_t * pContext,
- char * pInputLine );
-static CellularPktStatus_t _parseUrcIndicationCsq( CellularContext_t * pContext,
- char * pUrcStr );
-static void _Cellular_UrcProcessCereg( CellularContext_t * pContext,
- char * pInputLine );
-static void _Cellular_UrcProcessCgreg( CellularContext_t * pContext,
- char * pInputLine );
-static void _Cellular_UrcProcessCreg( CellularContext_t * pContext,
- char * pInputLine );
-
-/*-----------------------------------------------------------*/
-
-/* Try to Keep this map in Alphabetical order. */
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularAtParseTokenMap_t CellularUrcHandlerTable[] =
-{
- { "CEREG", _Cellular_UrcProcessCereg },
- { "CGREG", _Cellular_UrcProcessCgreg },
- /*{ "CGEV", _cellular_UrcProcessCgev }, / * TODO: PS event reporting URC. * / */
- { "CIEV", _cellular_UrcProcessCiev }, /* PS ACT/DEACT and Signal strength status change indication URC. */
- { "CREG", _Cellular_UrcProcessCreg },
- { "RDY", _Cellular_ProcessModemRdy }, /* Modem bootup indication. */
- { "UUPSMR", _cellular_UrcProcessUupsmr }, /* Power saving mode indication URC. */
- { "UUSOCL", _cellular_UrcProcessUusocl }, /* Socket close URC. */
- { "UUSOCO", _cellular_UrcProcessUusoco }, /* Socket connect URC. */
- { "UUSORD", _cellular_UrcProcessUusord } /* Socket receive URC. */
-};
-
-/* FreeRTOS Cellular Common Library porting interface. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-uint32_t CellularUrcHandlerTableSize = sizeof( CellularUrcHandlerTable ) / sizeof( CellularAtParseTokenMap_t );
-
-/*-----------------------------------------------------------*/
-
-/* Parse PS ACT/DEACT from +CIEV URC indication. */
-/* This URC does not tell which context ID number is ACT/DEACT. */
-
-static CellularPktStatus_t _parseUrcIndicationCall( const CellularContext_t * pContext,
- char * pUrcStr )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- int32_t isActivated = 0;
- /* In SARA-R4, usually context 1 is used for PS. */
- uint8_t contextId = 1;
-
- if( ( pContext == NULL ) || ( pUrcStr == NULL ) )
- {
- atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pUrcStr, 10, &isActivated );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( isActivated >= INT16_MIN ) && ( isActivated <= ( int32_t ) INT16_MAX ) )
- {
- LogDebug( ( "_parseUrcIndicationCall: PS status isActivated=[%d]", isActivated ) );
-
- /* Handle the callback function. */
- if( isActivated )
- {
- LogDebug( ( "_parseUrcIndicationCall: PDN activated. Context Id %d", contextId ) );
- _Cellular_PdnEventCallback( pContext, CELLULAR_URC_EVENT_PDN_ACTIVATED, contextId );
- }
- else
- {
- LogDebug( ( "_parseUrcIndicationCall: PDN deactivated. Context Id %d", contextId ) );
- _Cellular_PdnEventCallback( pContext, CELLULAR_URC_EVENT_PDN_DEACTIVATED, contextId );
- }
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-/* Parse signal level from +CIEV URC indication. */
-/* This URC only gives bar level and not the exact RSSI value. */
-
-static CellularPktStatus_t _parseUrcIndicationCsq( CellularContext_t * pContext,
- char * pUrcStr )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- int32_t retStrtoi = 0;
- int16_t csqBarLevel = CELLULAR_INVALID_SIGNAL_BAR_VALUE;
- CellularSignalInfo_t signalInfo = { 0 };
-
- if( ( pContext == NULL ) || ( pUrcStr == NULL ) )
- {
- atCoreStatus = CELLULAR_AT_BAD_PARAMETER;
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pUrcStr, 10, &retStrtoi );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( retStrtoi >= INT16_MIN ) && ( retStrtoi <= ( int32_t ) INT16_MAX ) )
- {
- csqBarLevel = retStrtoi;
- }
- else
- {
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
-
- /* Handle the callback function. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- LogDebug( ( "_parseUrcIndicationCsq: SIGNAL Strength Bar level [%d]", csqBarLevel ) );
- signalInfo.rssi = CELLULAR_INVALID_SIGNAL_VALUE;
- signalInfo.rsrp = CELLULAR_INVALID_SIGNAL_VALUE;
- signalInfo.rsrq = CELLULAR_INVALID_SIGNAL_VALUE;
- signalInfo.ber = CELLULAR_INVALID_SIGNAL_VALUE;
- signalInfo.bars = csqBarLevel;
- _Cellular_SignalStrengthChangedCallback( pContext, CELLULAR_URC_EVENT_SIGNAL_CHANGED, &signalInfo );
- }
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
-
- return pktStatus;
-}
-
-/*-----------------------------------------------------------*/
-
-static void _cellular_UrcProcessCiev( CellularContext_t * pContext,
- char * pInputLine )
-{
- char * pUrcStr = NULL, * pToken = NULL;
- CellularPktStatus_t pktStatus = CELLULAR_PKT_STATUS_OK;
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- int32_t tempValue = 0;
- uint8_t indicatorDescr = 0;
-
- /* Check context status. */
- if( pContext == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_FAILURE;
- }
- else if( pInputLine == NULL )
- {
- pktStatus = CELLULAR_PKT_STATUS_BAD_PARAM;
- }
- else
- {
- pUrcStr = pInputLine;
- atCoreStatus = Cellular_ATRemoveAllDoubleQuote( pUrcStr );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATRemoveLeadingWhiteSpaces( &pUrcStr );
- }
-
- /* Extract indicator */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pUrcStr, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= ( ( int32_t ) CIEV_POS_MIN ) ) && ( tempValue <= ( ( int32_t ) CIEV_POS_MAX ) ) )
- {
- indicatorDescr = ( uint8_t ) tempValue;
-
- switch( indicatorDescr )
- {
- case CIEV_POS_SIGNAL:
- LogDebug( ( "_cellular_UrcProcessCiev: CIEV_POS_SIGNAL" ) );
- /* This URC only gives bar level and not the exact RSSI value. */
-
- /*
- * o 0: < -105 dBm
- * o 1 : < -93 dBm
- * o 2 : < -81 dBm
- * o 3 : < -69 dBm
- * o 4 : < -57 dBm
- * o 5 : >= -57 dBm
- */
- /* Parse the signal Bar level from string. */
- pktStatus = _parseUrcIndicationCsq( pContext, pUrcStr );
- break;
-
- case CIEV_POS_CALL:
- LogDebug( ( "_cellular_UrcProcessCiev: CIEV_POS_CALL" ) );
- /* Parse PS ACT/DEACT from +CIEV URC indication. */
- /* This URC does not tell which context ID number is ACT/DEACT. */
- pktStatus = _parseUrcIndicationCall( ( const CellularContext_t * ) pContext, pUrcStr );
- break;
-
- default:
- break;
- }
- }
- else
- {
- LogError( ( "_cellular_UrcProcessCiev: parsing failed" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- if( atCoreStatus != CELLULAR_AT_SUCCESS )
- {
- pktStatus = _Cellular_TranslateAtCoreStatus( atCoreStatus );
- }
- }
-
- if( pktStatus != CELLULAR_PKT_STATUS_OK )
- {
- LogDebug( ( "_cellular_UrcProcessCiev: Parse failure" ) );
- }
-}
-
-/*-----------------------------------------------------------*/
-
-static void _cellular_UrcProcessUupsmr( CellularContext_t * pContext,
- char * pInputLine )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- char * pLocalInputLine = pInputLine;
- char * pToken = NULL;
- uint8_t psmState = 0;
- int32_t tempValue = 0;
-
- if( ( pContext != NULL ) && ( pInputLine != NULL ) )
- {
- /* The inputline is in this format +UUPSMR: [,] */
- atCoreStatus = Cellular_ATGetNextTok( &pLocalInputLine, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= ( ( int32_t ) PSM_MODE_EXIT ) ) && ( tempValue <= ( ( int32_t ) PSM_MODE_PREVENT_DEEP_ENTRY ) ) )
- {
- psmState = ( uint8_t ) tempValue;
-
- switch( psmState )
- {
- case PSM_MODE_EXIT:
- LogInfo( ( "_cellular_UrcProcessUupsmr: PSM_MODE_EXIT" ) );
- break;
-
- case PSM_MODE_ENTER:
- LogInfo( ( "_cellular_UrcProcessUupsmr: PSM_MODE_ENTER event received" ) );
- /* Call the callback function. Indicate the upper layer about the PSM state change. */
- _Cellular_ModemEventCallback( pContext, CELLULAR_MODEM_EVENT_PSM_ENTER );
- break;
-
- case PSM_MODE_PREVENT_ENTRY:
- LogInfo( ( "_cellular_UrcProcessUupsmr: PSM_MODE_PREVENT_ENTRY" ) );
- break;
-
- case PSM_MODE_PREVENT_DEEP_ENTRY:
- LogInfo( ( "_cellular_UrcProcessUupsmr: PSM_MODE_PREVENT_DEEP_ENTRY" ) );
- break;
- }
- }
- else
- {
- LogError( ( "_cellular_UrcProcessUupsmr: parsing failed" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
- }
-}
-
-/*-----------------------------------------------------------*/
-
-static void _cellular_UrcProcessUusoco( CellularContext_t * pContext,
- char * pInputLine )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- char * pLocalInputLine = pInputLine;
- char * pToken = NULL;
- CellularSocketContext_t * pSocketData = NULL;
- uint8_t sessionId = 0;
- uint8_t socketError = 0;
- uint32_t socketIndex = 0;
- int32_t tempValue = 0;
-
- if( ( pContext != NULL ) && ( pInputLine != NULL ) )
- {
- /* The inputline is in this format +UUSOCO: ,
- * socket_error = 0 : no error, others : error. */
- atCoreStatus = Cellular_ATGetNextTok( &pLocalInputLine, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= MIN_TCP_SESSION_ID ) && ( tempValue <= MAX_TCP_SESSION_ID ) )
- {
- sessionId = ( uint8_t ) tempValue;
- socketIndex = _Cellular_GetSocketId( pContext, sessionId );
- }
- else
- {
- LogError( ( "parsing _cellular_UrcProcessKtcpInd session ID failed" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATGetNextTok( &pLocalInputLine, &pToken );
- }
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= 0 ) && ( tempValue <= UINT8_MAX ) )
- {
- socketError = ( uint8_t ) tempValue;
- }
- else
- {
- LogError( ( "parsing _cellular_UrcProcessUusoco socket error failed" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- /* Call the callback function of this session. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- pSocketData = _Cellular_GetSocketData( pContext, socketIndex );
-
- if( pSocketData == NULL )
- {
- LogError( ( "_cellular_UrcProcessUusoco : invalid socket index %u", socketIndex ) );
- }
- else
- {
- if( socketError == 0 )
- {
- pSocketData->socketState = SOCKETSTATE_CONNECTED;
- LogDebug( ( "Notify session %d with socket opened\r\n", sessionId ) );
-
- if( pSocketData->openCallback != NULL )
- {
- pSocketData->openCallback( CELLULAR_URC_SOCKET_OPENED,
- pSocketData, pSocketData->pOpenCallbackContext );
- }
- }
- else
- {
- if( pSocketData->openCallback != NULL )
- {
- pSocketData->openCallback( CELLULAR_URC_SOCKET_OPEN_FAILED,
- pSocketData, pSocketData->pOpenCallbackContext );
- }
- }
- }
- }
- }
-}
-
-/*-----------------------------------------------------------*/
-
-static void _cellular_UrcProcessUusord( CellularContext_t * pContext,
- char * pInputLine )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- char * pLocalInputLine = pInputLine;
- char * pToken = NULL;
- CellularSocketContext_t * pSocketData = NULL;
- uint8_t sessionId = 0;
- uint32_t socketIndex = 0;
- int32_t tempValue = 0;
-
- if( ( pContext != NULL ) && ( pInputLine != NULL ) )
- {
- /* The inputline is in this format +UUSOCO: , */
- atCoreStatus = Cellular_ATGetNextTok( &pLocalInputLine, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= MIN_TCP_SESSION_ID ) && ( tempValue <= MAX_TCP_SESSION_ID ) )
- {
- sessionId = ( uint8_t ) tempValue;
- socketIndex = _Cellular_GetSocketId( pContext, sessionId );
- }
- else
- {
- LogError( ( "parsing _cellular_UrcProcessUusord session ID failed" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- /* Skip data length. */
-
- /* Call the callback function of this session. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( socketIndex == INVALID_SOCKET_INDEX )
- {
- LogWarn( ( "_cellular_UrcProcessUusord : unknown session data received. "
- "The session %u may not be closed properly in previous execution.", sessionId ) );
- }
- else
- {
- pSocketData = _Cellular_GetSocketData( pContext, socketIndex );
-
- if( pSocketData == NULL )
- {
- LogError( ( "_cellular_UrcProcessUusord : invalid socket index %d", socketIndex ) );
- }
- else
- {
- /* Indicate the upper layer about the data reception. */
- if( pSocketData->dataReadyCallback != NULL )
- {
- pSocketData->dataReadyCallback( pSocketData, pSocketData->pDataReadyCallbackContext );
- }
- else
- {
- LogDebug( ( "_cellular_UrcProcessUusord: Data ready callback not set!!" ) );
- }
- }
- }
- }
- }
-}
-
-/*-----------------------------------------------------------*/
-
-static void _cellular_UrcProcessUusocl( CellularContext_t * pContext,
- char * pInputLine )
-{
- CellularATError_t atCoreStatus = CELLULAR_AT_SUCCESS;
- char * pLocalInputLine = pInputLine;
- char * pToken = NULL;
- CellularSocketContext_t * pSocketData = NULL;
- uint8_t sessionId = 0;
- uint32_t socketIndex = 0;
- int32_t tempValue = 0;
-
- if( ( pContext != NULL ) && ( pInputLine != NULL ) )
- {
- /* The inputline is in this format +UUSOCL: */
- atCoreStatus = Cellular_ATGetNextTok( &pLocalInputLine, &pToken );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- atCoreStatus = Cellular_ATStrtoi( pToken, 10, &tempValue );
-
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( ( tempValue >= MIN_TCP_SESSION_ID ) && ( tempValue <= MAX_TCP_SESSION_ID ) )
- {
- sessionId = ( uint8_t ) tempValue;
- socketIndex = _Cellular_GetSocketId( pContext, sessionId );
- }
- else
- {
- LogError( ( "parsing _cellular_UrcProcessUusocl session ID failed" ) );
- atCoreStatus = CELLULAR_AT_ERROR;
- }
- }
- }
-
- /* Call the callback function of this session. */
- if( atCoreStatus == CELLULAR_AT_SUCCESS )
- {
- if( socketIndex == INVALID_SOCKET_INDEX )
- {
- LogWarn( ( "_cellular_UrcProcessUusocl : unknown session closed URC received. "
- "The session %u may not be closed properly in previous execution.", sessionId ) );
- }
- else
- {
- pSocketData = _Cellular_GetSocketData( pContext, socketIndex );
-
- if( pSocketData == NULL )
- {
- LogError( ( "_cellular_UrcProcessUusocl : invalid socket index %d", socketIndex ) );
- }
- else
- {
- /* Change the socket state to disconnected. */
- pSocketData->socketState = SOCKETSTATE_DISCONNECTED;
-
- /* Indicate the upper layer about the data reception. */
- if( pSocketData->closedCallback != NULL )
- {
- pSocketData->closedCallback( pSocketData, pSocketData->pClosedCallbackContext );
- }
- else
- {
- LogDebug( ( "_cellular_UrcProcessUusord: Data ready callback not set!!" ) );
- }
- }
- }
- }
- }
-}
-
-/*-----------------------------------------------------------*/
-
-/* Modem bootup indication. */
-
-static void _Cellular_ProcessModemRdy( CellularContext_t * pContext,
- char * pInputLine )
-{
- /* The token is the pInputLine. No need to process the pInputLine. */
- ( void ) pInputLine;
-
- if( pContext == NULL )
- {
- LogWarn( ( "_Cellular_ProcessModemRdy: Context not set" ) );
- }
- else
- {
- LogDebug( ( "_Cellular_ProcessModemRdy: Modem Ready event received" ) );
- _Cellular_ModemEventCallback( pContext, CELLULAR_MODEM_EVENT_BOOTUP_OR_REBOOT );
- }
-}
-
-/*-----------------------------------------------------------*/
-
-static void _Cellular_UrcProcessCereg( CellularContext_t * pContext,
- char * pInputLine )
-{
- ( void ) Cellular_CommonUrcProcessCereg( pContext, pInputLine );
-}
-
-/*-----------------------------------------------------------*/
-
-static void _Cellular_UrcProcessCgreg( CellularContext_t * pContext,
- char * pInputLine )
-{
- ( void ) Cellular_CommonUrcProcessCgreg( pContext, pInputLine );
-}
-
-/*-----------------------------------------------------------*/
-
-static void _Cellular_UrcProcessCreg( CellularContext_t * pContext,
- char * pInputLine )
-{
- ( void ) Cellular_CommonUrcProcessCreg( pContext, pInputLine );
-}
-
-/*-----------------------------------------------------------*/
diff --git a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4_wrapper.c b/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4_wrapper.c
deleted file mode 100644
index b0eb9cea2..000000000
--- a/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4_wrapper.c
+++ /dev/null
@@ -1,263 +0,0 @@
-/*
- * FreeRTOS-Cellular-Interface v1.3.0
- * Copyright (C) 2020 Amazon.com, Inc. or its affiliates. All Rights Reserved.
- *
- * Permission is hereby granted, free of charge, to any person obtaining a copy of
- * this software and associated documentation files (the "Software"), to deal in
- * the Software without restriction, including without limitation the rights to
- * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
- * the Software, and to permit persons to whom the Software is furnished to do so,
- * subject to the following conditions:
- *
- * The above copyright notice and this permission notice shall be included in all
- * copies or substantial portions of the Software.
- *
- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
- * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
- * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
- * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
- * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
- *
- * https://www.FreeRTOS.org
- * https://github.com/FreeRTOS
- */
-
-/* The config header is always included first. */
-#include "cellular_config.h"
-#include "cellular_config_defaults.h"
-
-/* Standard includes. */
-#include
-#include
-
-#include "cellular_platform.h"
-#include "cellular_types.h"
-#include "cellular_api.h"
-#include "cellular_common.h"
-#include "cellular_common_api.h"
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_Cleanup( CellularHandle_t cellularHandle )
-{
- return Cellular_CommonCleanup( cellularHandle );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterUrcNetworkRegistrationEventCallback( CellularHandle_t cellularHandle,
- CellularUrcNetworkRegistrationCallback_t networkRegistrationCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonRegisterUrcNetworkRegistrationEventCallback( cellularHandle, networkRegistrationCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterUrcPdnEventCallback( CellularHandle_t cellularHandle,
- CellularUrcPdnEventCallback_t pdnEventCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonRegisterUrcPdnEventCallback( cellularHandle, pdnEventCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterUrcGenericCallback( CellularHandle_t cellularHandle,
- CellularUrcGenericCallback_t genericCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonRegisterUrcGenericCallback( cellularHandle, genericCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RegisterModemEventCallback( CellularHandle_t cellularHandle,
- CellularModemEventCallback_t modemEventCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonRegisterModemEventCallback( cellularHandle, modemEventCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_ATCommandRaw( CellularHandle_t cellularHandle,
- const char * pATCommandPrefix,
- const char * pATCommandPayload,
- CellularATCommandType_t atCommandType,
- CellularATCommandResponseReceivedCallback_t responseReceivedCallback,
- void * pData,
- uint16_t dataLen )
-{
- return Cellular_CommonATCommandRaw( cellularHandle, pATCommandPrefix, pATCommandPayload, atCommandType,
- responseReceivedCallback, pData, dataLen );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_CreateSocket( CellularHandle_t cellularHandle,
- uint8_t pdnContextId,
- CellularSocketDomain_t socketDomain,
- CellularSocketType_t socketType,
- CellularSocketProtocol_t socketProtocol,
- CellularSocketHandle_t * pSocketHandle )
-{
- return Cellular_CommonCreateSocket( cellularHandle, pdnContextId, socketDomain, socketType,
- socketProtocol, pSocketHandle );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketRegisterDataReadyCallback( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketDataReadyCallback_t dataReadyCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonSocketRegisterDataReadyCallback( cellularHandle, socketHandle,
- dataReadyCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketRegisterSocketOpenCallback( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketOpenCallback_t socketOpenCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonSocketRegisterSocketOpenCallback( cellularHandle, socketHandle,
- socketOpenCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_SocketRegisterClosedCallback( CellularHandle_t cellularHandle,
- CellularSocketHandle_t socketHandle,
- CellularSocketClosedCallback_t closedCallback,
- void * pCallbackContext )
-{
- return Cellular_CommonSocketRegisterClosedCallback( cellularHandle, socketHandle,
- closedCallback, pCallbackContext );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RfOn( CellularHandle_t cellularHandle )
-{
- return Cellular_CommonRfOn( cellularHandle );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_RfOff( CellularHandle_t cellularHandle )
-{
- return Cellular_CommonRfOff( cellularHandle );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetIPAddress( CellularHandle_t cellularHandle,
- uint8_t contextId,
- char * pBuffer,
- uint32_t bufferLength )
-{
- return Cellular_CommonGetIPAddress( cellularHandle, contextId, pBuffer, bufferLength );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetModemInfo( CellularHandle_t cellularHandle,
- CellularModemInfo_t * pModemInfo )
-{
- return Cellular_CommonGetModemInfo( cellularHandle, pModemInfo );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetRegisteredNetwork( CellularHandle_t cellularHandle,
- CellularPlmnInfo_t * pNetworkInfo )
-{
- return Cellular_CommonGetRegisteredNetwork( cellularHandle, pNetworkInfo );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetNetworkTime( CellularHandle_t cellularHandle,
- CellularTime_t * pNetworkTime )
-{
- return Cellular_CommonGetNetworkTime( cellularHandle, pNetworkTime );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetServiceStatus( CellularHandle_t cellularHandle,
- CellularServiceStatus_t * pServiceStatus )
-{
- return Cellular_CommonGetServiceStatus( cellularHandle, pServiceStatus );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetSimCardInfo( CellularHandle_t cellularHandle,
- CellularSimCardInfo_t * pSimCardInfo )
-{
- return Cellular_CommonGetSimCardInfo( cellularHandle, pSimCardInfo );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetPsmSettings( CellularHandle_t cellularHandle,
- CellularPsmSettings_t * pPsmSettings )
-{
- return Cellular_CommonGetPsmSettings( cellularHandle, pPsmSettings );
-}
-
-/*-----------------------------------------------------------*/
-
-/* FreeRTOS Cellular Library API. */
-/* coverity[misra_c_2012_rule_8_7_violation] */
-CellularError_t Cellular_GetEidrxSettings( CellularHandle_t cellularHandle,
- CellularEidrxSettingsList_t * pEidrxSettingsList )
-{
- return Cellular_CommonGetEidrxSettings( cellularHandle, pEidrxSettingsList );
-}
-
-/*-----------------------------------------------------------*/
diff --git a/FreeRTOS-Plus/Test/FreeRTOS-Cellular-Interface/Integration/WIN32.vcxproj b/FreeRTOS-Plus/Test/FreeRTOS-Cellular-Interface/Integration/WIN32.vcxproj
index 6b8f3ece9..790128771 100644
--- a/FreeRTOS-Plus/Test/FreeRTOS-Cellular-Interface/Integration/WIN32.vcxproj
+++ b/FreeRTOS-Plus/Test/FreeRTOS-Cellular-Interface/Integration/WIN32.vcxproj
@@ -160,10 +160,10 @@
-
-
-
-
+
+
+
+
@@ -1704,7 +1704,7 @@
-
+
diff --git a/FreeRTOS-Plus/Test/FreeRTOS-Cellular-Interface/Integration/WIN32.vcxproj.filters b/FreeRTOS-Plus/Test/FreeRTOS-Cellular-Interface/Integration/WIN32.vcxproj.filters
index f103d4cd4..9dd42b856 100644
--- a/FreeRTOS-Plus/Test/FreeRTOS-Cellular-Interface/Integration/WIN32.vcxproj.filters
+++ b/FreeRTOS-Plus/Test/FreeRTOS-Cellular-Interface/Integration/WIN32.vcxproj.filters
@@ -139,16 +139,16 @@
FreeRTOS+\FreeRTOS IoT Libraries\platform\cellular
-
+
FreeRTOS+\module\bg96
-
+
FreeRTOS+\module\bg96
-
+
FreeRTOS+\module\bg96
-
+
FreeRTOS+\module\bg96
@@ -4774,7 +4774,7 @@
FreeRTOS+\FreeRTOS IoT Libraries\platform\cellular\include\private
-
+
FreeRTOS+\module\bg96