You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
FreeRTOS/FreeRTOS-Plus/Source/FreeRTOS-Cellular-Modules/sara-r4/cellular_r4.h

165 lines
6.1 KiB
C

/*
* 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. <async_close> 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 <async_close> flag.
* In <async_close> mode, socket close will be notified via +UUSOCL URC.
* Drawback of <async_close> 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 <Act> 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__ */