[修改] 增加freeRTOS

1. 版本FreeRTOSv202212.01,命名为kernel;
This commit is contained in:
2023-05-06 16:43:01 +00:00
commit a345df017b
20944 changed files with 11094377 additions and 0 deletions

View File

@ -0,0 +1,50 @@
<table>
<tr>
<td colspan="3"><center><b>Code Size of cellularLibrary (example generated with GCC for ARM Cortex-M)</b></center></td>
</tr>
<tr>
<td><b>File</b></td>
<td><b><center>With -O1 Optimization</center></b></td>
<td><b><center>With -Os Optimization</center></b></td>
</tr>
<tr>
<td>cellular_3gpp_api.c</td>
<td><center>6.4K</center></td>
<td><center>5.9K</center></td>
</tr>
<tr>
<td>cellular_3gpp_urc_handler.c</td>
<td><center>0.9K</center></td>
<td><center>0.8K</center></td>
</tr>
<tr>
<td>cellular_at_core.c</td>
<td><center>1.4K</center></td>
<td><center>1.2K</center></td>
</tr>
<tr>
<td>cellular_common_api.c</td>
<td><center>0.7K</center></td>
<td><center>0.6K</center></td>
</tr>
<tr>
<td>cellular_common.c</td>
<td><center>1.7K</center></td>
<td><center>1.5K</center></td>
</tr>
<tr>
<td>cellular_pkthandler.c</td>
<td><center>1.7K</center></td>
<td><center>1.6K</center></td>
</tr>
<tr>
<td>cellular_pktio.c</td>
<td><center>2.0K</center></td>
<td><center>1.8K</center></td>
</tr>
<tr>
<td><b>Total estimates</b></td>
<td><b><center>14.8K</center></b></td>
<td><b><center>13.4K</center></b></td>
</tr>
</table>

View File

@ -0,0 +1,228 @@
<doxygenlayout version="1.0">
<!-- Generated by doxygen 1.8.20 -->
<!-- Navigation index tabs for HTML output -->
<navindex>
<tab type="mainpage" visible="yes" title=""/>
<tab type="pages" visible="yes" title="" intro=""/>
<!-- Hide the default "Data Structures" tab and use the "Modules" tab for data
structures. This allows internal data structures to be hidden. -->
<tab type="modules" visible="yes" title="Data types and Constants" intro="This library defines the following data types and constants."/>
<tab type="namespaces" visible="yes" title="">
<tab type="namespacelist" visible="yes" title="" intro=""/>
<tab type="namespacemembers" visible="yes" title="" intro=""/>
</tab>
<tab type="interfaces" visible="no" title="">
<tab type="interfacelist" visible="no" title="" intro=""/>
<tab type="interfaceindex" visible="no" title=""/>
<tab type="interfacehierarchy" visible="yes" title="" intro=""/>
</tab>
<tab type="classes" visible="no" title="">
<tab type="classlist" visible="no" title="" intro=""/>
<tab type="classindex" visible="no" title=""/>
<tab type="hierarchy" visible="no" title="" intro=""/>
<tab type="classmembers" visible="no" title="" intro=""/>
</tab>
<tab type="structs" visible="no" title="">
<tab type="structlist" visible="no" title="" intro=""/>
<tab type="structindex" visible="no" title=""/>
</tab>
<tab type="exceptions" visible="no" title="">
<tab type="exceptionlist" visible="no" title="" intro=""/>
<tab type="exceptionindex" visible="no" title=""/>
<tab type="exceptionhierarchy" visible="yes" title="" intro=""/>
</tab>
<tab type="files" visible="no" title="">
<tab type="filelist" visible="yes" title="Files" intro="The following files are associated with this library."/>
<tab type="globals" visible="no" title="" intro=""/>
</tab>
<tab type="examples" visible="yes" title="" intro=""/>
</navindex>
<!-- Layout definition for a class page -->
<class>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<inheritancegraph visible="$CLASS_GRAPH"/>
<collaborationgraph visible="$COLLABORATION_GRAPH"/>
<memberdecl>
<nestedclasses visible="yes" title=""/>
<publictypes title=""/>
<services title=""/>
<interfaces title=""/>
<publicslots title=""/>
<signals title=""/>
<publicmethods title=""/>
<publicstaticmethods title=""/>
<publicattributes title=""/>
<publicstaticattributes title=""/>
<protectedtypes title=""/>
<protectedslots title=""/>
<protectedmethods title=""/>
<protectedstaticmethods title=""/>
<protectedattributes title=""/>
<protectedstaticattributes title=""/>
<packagetypes title=""/>
<packagemethods title=""/>
<packagestaticmethods title=""/>
<packageattributes title=""/>
<packagestaticattributes title=""/>
<properties title=""/>
<events title=""/>
<privatetypes title=""/>
<privateslots title=""/>
<privatemethods title=""/>
<privatestaticmethods title=""/>
<privateattributes title=""/>
<privatestaticattributes title=""/>
<friends title=""/>
<related title="" subtitle=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<enums title=""/>
<services title=""/>
<interfaces title=""/>
<constructors title=""/>
<functions title=""/>
<related title=""/>
<variables title=""/>
<properties title=""/>
<events title=""/>
</memberdef>
<allmemberslink visible="yes"/>
<usedfiles visible="$SHOW_USED_FILES"/>
<authorsection visible="yes"/>
</class>
<!-- Layout definition for a namespace page -->
<namespace>
<briefdescription visible="yes"/>
<memberdecl>
<nestednamespaces visible="yes" title=""/>
<constantgroups visible="yes" title=""/>
<interfaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<structs visible="yes" title=""/>
<exceptions visible="yes" title=""/>
<typedefs title=""/>
<sequences title=""/>
<dictionaries title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<typedefs title=""/>
<sequences title=""/>
<dictionaries title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection visible="yes"/>
</namespace>
<!-- Layout definition for a file page -->
<file>
<briefdescription visible="yes"/>
<includes visible="$SHOW_INCLUDE_FILES"/>
<includegraph visible="$INCLUDE_GRAPH"/>
<includedbygraph visible="$INCLUDED_BY_GRAPH"/>
<sourcelink visible="yes"/>
<memberdecl>
<interfaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<structs visible="yes" title=""/>
<exceptions visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<constantgroups visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<sequences title=""/>
<dictionaries title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<sequences title=""/>
<dictionaries title=""/>
<enums title=""/>
<functions title=""/>
<variables title=""/>
</memberdef>
<authorsection/>
</file>
<!-- Layout definition for a group page -->
<group>
<briefdescription visible="yes"/>
<groupgraph visible="$GROUP_GRAPHS"/>
<memberdecl>
<nestedgroups visible="yes" title=""/>
<dirs visible="yes" title=""/>
<files visible="yes" title=""/>
<namespaces visible="yes" title=""/>
<classes visible="yes" title=""/>
<defines title=""/>
<typedefs title=""/>
<sequences title=""/>
<dictionaries title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
<membergroups visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
<memberdef>
<pagedocs/>
<inlineclasses title=""/>
<defines title=""/>
<typedefs title=""/>
<sequences title=""/>
<dictionaries title=""/>
<enums title=""/>
<enumvalues title=""/>
<functions title=""/>
<variables title=""/>
<signals title=""/>
<publicslots title=""/>
<protectedslots title=""/>
<privateslots title=""/>
<events title=""/>
<properties title=""/>
<friends title=""/>
</memberdef>
<authorsection visible="yes"/>
</group>
<!-- Layout definition for a directory page -->
<directory>
<briefdescription visible="yes"/>
<directorygraph visible="yes"/>
<memberdecl>
<dirs visible="yes"/>
<files visible="yes"/>
</memberdecl>
<detaileddescription title=""/>
</directory>
</doxygenlayout>

View File

@ -0,0 +1,421 @@
/**
@mainpage Overview
@anchor cellular
@brief FreeRTOS Cellular library
FreeRTOS Cellular Library use communication interface to communicate with cellular modules to provide cellular network connectivity.
<b>FreeRTOS Cellular Library</b>
- <b>Repository structure</b><br>
This library contains the following three components in three folders.
| FreeRTOS Cellular Library folders | High Level Description |
| :--------------------| :--------------------- |
| source | Reusable common code that implements the standard AT commands defined by 3GPP TS v27.007. |
| docs | Documentations. |
| test | Unit test and cbmc. |
| tools | tools for Coverity static analysis and CMock. |
- <b>Supported cellular modules</b><br>
Three cellular modules are supported in this library.
| Cellular module |
| :--------------------|
| [Quectel BG96](https://github.com/FreeRTOS/FreeRTOS-Cellular-Interface-Reference-Quectel-BG96) |
| [Sierra HL7802](https://github.com/FreeRTOS/FreeRTOS-Cellular-Interface-Reference-Sierra-Wireless-HL7802) |
| [Ublox SARA R4 series](https://github.com/FreeRTOS/FreeRTOS-Cellular-Interface-Reference-ublox-SARA-R4) |
New cellular module can reference these module porting to be integrated into FreeRTOS Cellular Library.<br>
Please reference [Porting module Guide](https://www.freertos.org/Documentation/api-ref/cellular/cellular_porting_module_guide.html) document for detail information about porting new cellular module.
- <b>Currently Supported Features in FreeRTOS Cellular Library</b>
- User of FreeRTOS Cellular Library is able to use Cat-M1 cellular technology to connect to network.
- User of FreeRTOS Cellular Library is able to perform control plane operations like (initialize modem, register on a network etc.) in a vendor agnostic way.
- User of FreeRTOS Cellular Library is able to send and receive data using TCP/IP in a vendor agnostic way given that TCP/IP stack is running on the cellular modem.
- User of FreeRTOS Cellular Library is able to put the modem in different low power modes (PSM and eDRX) in a vendor agnostic way.
- User of FreeRTOS Cellular Library is able to receive asynchronous notifications about various events like "disconnected", "signal strength changed" etc. to enable them to take appropriate action as desired.
- User of FreeRTOS Cellular Library is able to use the existing application protocol clients (MQTT, HTTP) over cellular seamlessly. i.e. any existing user application using MQTT which works over WiFi/Ethernet shall work over Cellular given the underlying cellular technology permits that.<br>
@section cellular_memory_requirements Memory Requirements
@brief Memory requirements of the Cellular library.
@include{doc} size_table.md
*/
/**
@page Design
@section FreeRTOS_Cellular_Library_Design Cellular Interface Design
FreeRTOS Cellular Library uses communication interface to communicate with cellular modules.<br>
Users of FreeRTOS Cellular Library should create a instance of CellularCommInterface and pass it
to Cellular_Init function as paremeters.
\image html comm_interaction.png "Cellular library interacts with comm interface" width=800px
The following communication interface implementation can be used as reference.
- <a href="https://github.com/aws/amazon-freertos/blob/feature/cellular/vendors/pc/boards/windows/ports/comm_if/comm_if_windows.c">FreeRTOS windows simulator comm interface </a>
- <a href="https://github.com/aws/amazon-freertos/blob/feature/cellular/vendors/st/boards/stm32l475_discovery/ports/comm_if/comm_if_st.c"> STM32 L475 discovery board comm interface </a>
- <a href="https://github.com/aws/amazon-freertos/blob/feature/cellular/vendors/sierra/boards/sensorhub/ports/comm_if/comm_if_sierra.c"> Sierra sensorhub board comm interface </a>
<b></b>
@section cellular_socket_api_desing Cellular Socket API Design
FreeRTOS Cellular Interface offloads the TCP/IP stacks to cellular module. The implementation
of the socket APIs use module specific AT commands. Cellular socket APIs abstract the differences
between different cellular module. The following are cellular socket APIs:
- @function_name{Cellular_CreateSocket}
- @function_name{Cellular_SocketSetSockOpt}
- @function_name{Cellular_SocketSend}
- @function_name{Cellular_SocketRecv}
- @function_name{Cellular_SocketClose}
- @function_name{Cellular_GetHostByName}
- @function_name{Cellular_SocketRegisterDataReadyCallback}
- @function_name{Cellular_SocketRegisterClosedCallback}
- @function_name{Cellular_SocketRegisterSocketOpenCallback}
Cellular socket APIs and cellular modem events change cellular socket state.
See the below graph for the socket state transitions:
@image html cellular_socket_state.png width=70%
*/
/**
@page cellular_config Configurations
@brief Configurations of the Cellular Library.
Some configuration settings are C pre-processor constants, and some are function-like macros for logging. They can be set with a `#define` in the config file (**cellular_config.h**) or by using a compiler option such as -D in gcc.
@section CELLULAR_DO_NOT_USE_CUSTOM_CONFIG
@copydoc CELLULAR_DO_NOT_USE_CUSTOM_CONFIG
@section CELLULAR_MCC_MAX_SIZE
@copydoc CELLULAR_MCC_MAX_SIZE
@section CELLULAR_MNC_MAX_SIZE
@copydoc CELLULAR_MNC_MAX_SIZE
@section CELLULAR_ICCID_MAX_SIZE
@copydoc CELLULAR_ICCID_MAX_SIZE
@section CELLULAR_IMSI_MAX_SIZE
@copydoc CELLULAR_IMSI_MAX_SIZE
@section CELLULAR_FW_VERSION_MAX_SIZE
@copydoc CELLULAR_FW_VERSION_MAX_SIZE
@section CELLULAR_HW_VERSION_MAX_SIZE
@copydoc CELLULAR_HW_VERSION_MAX_SIZE
@section CELLULAR_SERIAL_NUM_MAX_SIZE
@copydoc CELLULAR_SERIAL_NUM_MAX_SIZE
@section CELLULAR_IMEI_MAX_SIZE
@copydoc CELLULAR_IMEI_MAX_SIZE
@section CELLULAR_NETWORK_NAME_MAX_SIZE
@copydoc CELLULAR_NETWORK_NAME_MAX_SIZE
@section CELLULAR_APN_MAX_SIZE
@copydoc CELLULAR_APN_MAX_SIZE
@section CELLULAR_PDN_USERNAME_MAX_SIZE
@copydoc CELLULAR_PDN_USERNAME_MAX_SIZE
@section CELLULAR_PDN_PASSWORD_MAX_SIZE
@copydoc CELLULAR_PDN_PASSWORD_MAX_SIZE
@section CELLULAR_IP_ADDRESS_MAX_SIZE
@copydoc CELLULAR_IP_ADDRESS_MAX_SIZE
@section CELLULAR_AT_CMD_MAX_SIZE
@copydoc CELLULAR_AT_CMD_MAX_SIZE
@section CELLULAR_NUM_SOCKET_MAX
@copydoc CELLULAR_NUM_SOCKET_MAX
@section CELLULAR_MANUFACTURE_ID_MAX_SIZE
@copydoc CELLULAR_MANUFACTURE_ID_MAX_SIZE
@section CELLULAR_MODEL_ID_MAX_SIZE
@copydoc CELLULAR_MODEL_ID_MAX_SIZE
@section CELLULAR_EDRX_LIST_MAX_SIZE
@copydoc CELLULAR_EDRX_LIST_MAX_SIZE
@section CELLULAR_PDN_CONTEXT_ID_MIN
@copydoc CELLULAR_PDN_CONTEXT_ID_MIN
@section CELLULAR_PDN_CONTEXT_ID_MAX
@copydoc CELLULAR_PDN_CONTEXT_ID_MAX
@section CELLULAR_MAX_RAT_PRIORITY_COUNT
@copydoc CELLULAR_MAX_RAT_PRIORITY_COUNT
@section CELLULAR_MAX_SEND_DATA_LEN
@copydoc CELLULAR_MAX_SEND_DATA_LEN
@section CELLULAR_MAX_RECV_DATA_LEN
@copydoc CELLULAR_MAX_RECV_DATA_LEN
@section CELLULAR_SUPPORT_GETHOSTBYNAME
@copydoc CELLULAR_SUPPORT_GETHOSTBYNAME
@section CELLULAR_COMM_IF_SEND_TIMEOUT_MS
@copydoc CELLULAR_COMM_IF_SEND_TIMEOUT_MS
@section CELLULAR_COMM_IF_RECV_TIMEOUT_MS
@copydoc CELLULAR_COMM_IF_RECV_TIMEOUT_MS
@section CELLULAR_CONFIG_STATIC_ALLOCATION_CONTEXT
@copydoc CELLULAR_CONFIG_STATIC_ALLOCATION_CONTEXT
@section CELLULAR_CONFIG_STATIC_COMM_CONTEXT_ALLOCATION
@copydoc CELLULAR_CONFIG_STATIC_COMM_CONTEXT_ALLOCATION
@section CELLULAR_CONFIG_DEFAULT_RAT
@copydoc CELLULAR_CONFIG_DEFAULT_RAT
@section CELLULAR_CONFIG_STATIC_SOCKET_CONTEXT_ALLOCATION
@copydoc CELLULAR_CONFIG_STATIC_SOCKET_CONTEXT_ALLOCATION
@section cellular_logerror LogError
@copydoc LogError
@section cellular_logwarn LogWarn
@copydoc LogWarn
@section cellular_loginfo LogInfo
@copydoc LogInfo
@section cellular_logdebug LogDebug
@copydoc LogDebug
@section CELLULAR_MODEM_NO_EPS_NETWORK
@brief Macro to disable querying evolved packet system (EPS) network registration status in Cellular_CommonGetServiceStatus.<br>
@note Cellular modem porting can define this macro in cellular_config.h to disable this function.<br>
<b>Default value:</b> undefined
*/
/**
@functions_page{cellular,cellular}
@functions_brief{cellular}
<b>Control plane APIs</b>
- @function_name{Cellular_Init}
@function_brief{Cellular_Init}
- @function_name{Cellular_Cleanup}
@function_brief{Cellular_Cleanup}
- @function_name{Cellular_SetRatPriority}
@function_brief{Cellular_SetRatPriority}
- @function_name{Cellular_GetRatPriority}
@function_brief{Cellular_GetRatPriority}
- @function_name{Cellular_RfOn}
@function_brief{Cellular_RfOn}
- @function_name{Cellular_RfOff}
@function_brief{Cellular_RfOff}
<b>Hardware info</b>
- @function_name{Cellular_GetSimCardStatus}
@function_brief{Cellular_GetSimCardStatus}
- @function_name{Cellular_GetSimCardInfo}
@function_brief{Cellular_GetSimCardInfo}
- @function_name{Cellular_GetModemInfo}
@function_brief{Cellular_GetModemInfo}
<b>Network registration</b>
- @function_name{Cellular_GetRegisteredNetwork}
@function_brief{Cellular_GetRegisteredNetwork}
- @function_name{Cellular_GetNetworkTime}
@function_brief{Cellular_GetNetworkTime}
- @function_name{Cellular_GetSignalInfo}
@function_brief{Cellular_GetSignalInfo}
- @function_name{Cellular_GetServiceStatus}
@function_brief{Cellular_GetServiceStatus}
<b>Enable data network</b>
- @function_name{Cellular_SetPdnConfig}
@function_brief{Cellular_SetPdnConfig}
- @function_name{Cellular_GetPdnStatus}
@function_brief{Cellular_GetPdnStatus}
- @function_name{Cellular_ActivatePdn}
@function_brief{Cellular_ActivatePdn}
- @function_name{Cellular_DeactivatePdn}
@function_brief{Cellular_DeactivatePdn}
- @function_name{Cellular_GetIPAddress}
@function_brief{Cellular_GetIPAddress}
- @function_name{Cellular_SetDns}
@function_brief{Cellular_SetDns}
<b>Device and network status callback functions</b>
- @function_name{Cellular_RegisterUrcNetworkRegistrationEventCallback}
@function_brief{Cellular_RegisterUrcNetworkRegistrationEventCallback}
- @function_name{Cellular_RegisterUrcPdnEventCallback}
@function_brief{Cellular_RegisterUrcPdnEventCallback}
- @function_name{Cellular_RegisterUrcSignalStrengthChangedCallback}
@function_brief{Cellular_RegisterUrcSignalStrengthChangedCallback}
- @function_name{Cellular_RegisterModemEventCallback}
@function_brief{Cellular_RegisterModemEventCallback}
- @function_name{Cellular_RegisterUrcGenericCallback}
@function_brief{Cellular_RegisterUrcGenericCallback}
<b>Power saveing modes</b>
- @function_name{Cellular_GetPsmSettings}
@function_brief{Cellular_GetPsmSettings}
- @function_name{Cellular_SetPsmSettings}
@function_brief{Cellular_SetPsmSettings}
- @function_name{Cellular_GetEidrxSettings}
@function_brief{Cellular_GetEidrxSettings}
- @function_name{Cellular_SetEidrxSettings}
@function_brief{Cellular_SetEidrxSettings}
<b>Custom AT command</b>
- @function_name{Cellular_ATCommandRaw}
@function_brief{Cellular_ATCommandRaw}
<b>Data plan APIs</b>
- @function_name{Cellular_CreateSocket}
@function_brief{Cellular_CreateSocket}
- @function_name{Cellular_SocketConnect}
@function_brief{Cellular_SocketConnect}
- @function_name{Cellular_SocketSend}
@function_brief{Cellular_SocketSend}
- @function_name{Cellular_SocketRecv}
@function_brief{Cellular_SocketRecv}
- @function_name{Cellular_SocketClose}
@function_brief{Cellular_SocketClose}
- @function_name{Cellular_GetHostByName}
@function_brief{Cellular_GetHostByName}
- @function_name{Cellular_SocketSetSockOpt}
@function_brief{Cellular_SocketSetSockOpt}
- @function_name{Cellular_SocketRegisterSocketOpenCallback}
@function_brief{Cellular_SocketRegisterSocketOpenCallback}
- @function_name{Cellular_SocketRegisterDataReadyCallback}
@function_brief{Cellular_SocketRegisterDataReadyCallback}
- @function_name{Cellular_SocketRegisterClosedCallback}
@function_brief{Cellular_SocketRegisterClosedCallback}
*/
/**
@page cellular_porting Porting Guide
@brief Guide for porting Cellular library to a new platform.
To use the Cellular library, a platform must implement the following components:
1. [Configuration Macros](@ref cellular_porting_config)
2. [Cellular Communication Interface](@ref cellular_porting_comm_if)
3. [Cellular platform dependency](@ref cellular_platform_dependency)
@section cellular_porting_config Configuration Macros
@brief Settings that must be set as macros in the config header `cellular_config.h`, or passed in as compiler options.
@note If a custom configuration header `cellular_config.h` is not provided, then the @ref CELLULAR_DO_NOT_USE_CUSTOM_CONFIG macro must be defined.
@see [Configurations](@ref cellular_config)
In addition, the following logging macros are used throughout the library:
- @ref LogError
- @ref LogWarn
- @ref LogInfo
- @ref LogDebug
@section cellular_porting_comm_if Cellular Communication Interface
@brief FreeRTOS Cellular Library use communication interface to communicate with cellular modules.
CellularCommInterface includes the following four function pointers.
Reference the document page for prototype.
- @subpage CellularCommInterfaceOpen_t
@copybrief CellularCommInterfaceOpen_t
- @subpage CellularCommInterfaceSend_t
@copybrief CellularCommInterfaceSend_t
- @subpage CellularCommInterfaceRecv_t
@copybrief CellularCommInterfaceRecv_t
- @subpage CellularCommInterfaceClose_t
@copybrief CellularCommInterfaceClose_t
@section cellular_platform_dependency Cellular platform dependency
@brief Cellular platform depndency
FreeRTOS Cellular Library makes use of the following OS platform functions.<br>
<b>"cellular_platform.h"</b> is referenced during FreeRTOS Cellular Library compilation.<br>
User of FreeRTOS Cellular Library should provide these APIs and data structures in "cellular_platform.h".<br>
A default implementation with FreeRTOS is provided in FreeRTOS Labs cellular demo.
- <b>Threads</b><br>The following APIs and macros should be provided in cellular_platform.h
```
bool Platform_CreateDetachedThread( void ( * threadRoutine )( void * ),
void * pArgument,
int32_t priority,
size_t stackSize );
#define PLATFORM_THREAD_DEFAULT_STACK_SIZE ( 2048U )
#define PLATFORM_THREAD_DEFAULT_PRIORITY ( 5U )
```
- <b>Mutex</b><br>The following APIs and data structure should be provided in cellular_platform.h.<br>
FreeRTOS Cellular Library use static mutex allocation. Data fields in PlatformMutex can be defined by developers.
```
typedef struct PlatformMutex
{
...
} PlatformMutex_t;
bool PlatformMutex_Create( PlatformMutex_t * pNewMutex,
bool recursive );
void PlatformMutex_Destroy( PlatformMutex_t * pMutex );
void PlatformMutex_Lock( PlatformMutex_t * pMutex );
bool PlatformMutex_TryLock( PlatformMutex_t * pMutex );
void PlatformMutex_Unlock( PlatformMutex_t * pMutex );
```
- <b>Memory</b><br>The following malloc/free style APIs should be provided in cellular_platform.h.<br>
The <a href="https://www.freertos.org/a00111.html">FreeRTOS memory management document</a> can be referenced for these APIs.
```
// Example implementation of FreeRTOS malloc/free
#define Platform_Malloc pvPortMalloc
#define Platform_Free vPortFree
```
- <b>EventGroup</b><br>The following APIs and handle should be provided in cellular_platform.h.<br>
Please reference <a href="https://www.freertos.org/event-groups-API.html">FreeRTOS EvengGroup function prototypes</a>.
```
// Example implementation of FreeRTOS EvengGroup
#define PlatformEventGroupHandle_t EventGroupHandle_t
#define PlatformEventGroup_Delete vEventGroupDelete
#define PlatformEventGroup_ClearBits xEventGroupClearBits
#define PlatformEventGroup_Create xEventGroupCreate
#define PlatformEventGroup_GetBits xEventGroupGetBits
#define PlatformEventGroup_SetBits xEventGroupSetBits
#define PlatformEventGroup_SetBitsFromISR xEventGroupSetBitsFromISR
#define PlatformEventGroup_WaitBits xEventGroupWaitBits
```
- <b>Delay</b><br>The following API should be provided in cellular_platform.h.<br>
Please reference <a href="https://www.freertos.org/a00127.html">FreeRTOS Task Control function prototypes</a>.
```
// Example implementation of FreeRTOS Task Control
#define Platform_Delay( delayMs ) vTaskDelay( pdMS_TO_TICKS( delayMs ) )
```
*/
/**
* @paramstructs_group{cellular,Cellular}
* @paramstructs_brief{cellular,cellular}
*/
/**
* @handles_group{cellular,Cellular}
* @handles_brief{cellular library}
*/
/**
* @functionpointers_group{cellular,Cellular}
* @functionpointers_brief{cellular library}
*/
/**
* @enums_group{cellular,Cellular}
* @enums_brief{cellular library}
*/

View File

@ -0,0 +1,338 @@
/**
@page cellular_porting_module_guide Porting Module Guide
@brief FreeRTOS Cellular Common Library<br>
FreeRTOS Cellular Common Library provides the following functions to help cellular module implementing FreeRTOS Cellular Library APIs.<br>
- FreeRTOS Cellular Library APIs implementation with 3GPP TS v27.007 AT commands.
- AT command functions to help implementing FreeRTOS Cellular Library APIs with vendor specific AT commands.
<br>
The following diagram illustrates the relation between cellular common and cellular module porting.<br>
Reference @subpage porting_cellular_module for detail porting information and implemented @subpage cellular_common_functions.
@image html cellular_common_module.png width=70%
<br>
*/
/**
@page porting_cellular_module Porting cellular module
@brief Introduction to cellular module porting<br>
Cellular common library provides APIS and URC handler implemented with 3GPP v27.007 AT commands.<br>
These APIs and URC handler can be reused when porting cellular module. <br>
Reference the following pages for detail information.
- @subpage cellular_common_APIs
- @subpage cellular_common_URC_handlers
Porting cellular module with cellular common portable with the following steps.<br>
-# <b>Create a folder in modules with the following files. </b>
- modules/(module_name)/cellular_(module_name).c
- modules/(module_name)/cellular_(module_name)_api.c
- modules/(module_name)/cellular_(module_name)_urc_handler.c
- modules/(module_name)/cellular_(module_name)_wrapper.c
-# <b>Implement cellular module porting interface @ref cellular_common_portable.h in cellular_(module_name).c </b><br>
Reference @subpage cellular_module for detail information.
-# <b>Implement FreeRTOS Cellular Library API with cellular module specific AT commands in cellular_(module_name)_api.c </b><br>
Reference @subpage cellular_module_api for detail information.
-# <b>Implement URC handler to handle URC event and call the corresponding callback function in cellular_(module_name)_urc_handler.c </b><br>
Reference @subpage cellular_module_urc_handler for detail information.
-# <b>Create FreeRTOS Cellular Library APIs implemented with 3GPP TS v27.007 AT commands ( @ref cellular_common_api.h ) in cellular_(module_name)_wrapper.c</b><br>
<b>Cellular module porting examples</b><br>
Three cellular module portings can be referenced.<br>
It is recommended that you start by cloning the implementation of one of the existing modems,<br>
then make modifications where your modem's vendor-specific (non-3GPP) AT commands are different. <br>
- <a href="https://github.com/FreeRTOS/FreeRTOS-Cellular-Interface-Reference-Quectel-BG96">BG96</a>
- <a href="https://github.com/FreeRTOS/FreeRTOS-Cellular-Interface-Reference-Sierra-Wireless-HL7802">HL7802</a>
- <a href="https://github.com/FreeRTOS/FreeRTOS-Cellular-Interface-Reference-ublox-SARA-R4">SARA R4 series</a>
*/
/**
@page cellular_common_APIs Cellular common APIs
@brief Cellular common supported APIs
<b>Cellular common supported APIs</b><br>
Cellular common library has 3GPP AT command implemented APIs.<br>
They can be used to minimize porting efforts when implement FreeRTOS Cellular Library APIs.<br>
| FreeRTOS Cellular Library APIs | Cellular common supported |
| :-------------------------------------------------------| :-----------------------: |
| Cellular_Init | O |
| Cellular_Cleanup | O |
| Cellular_SetRatPriority | |
| Cellular_GetRatPriority | |
| Cellular_RfOn | O |
| Cellular_RfOff | O |
| Cellular_GetSimCardStatus | |
| Cellular_GetSimCardInfo | O |
| Cellular_GetModemInfo | O |
| Cellular_GetRegisteredNetwork | O |
| Cellular_GetNetworkTime | O |
| Cellular_GetSignalInfo | |
| Cellular_GetServiceStatus | O |
| Cellular_SetPdnConfig | O |
| Cellular_GetPdnStatus | |
| Cellular_ActivatePdn | |
| Cellular_DeactivatePdn | |
| Cellular_GetIPAddress | O |
| Cellular_SetDns | |
| Cellular_RegisterUrcNetworkRegistrationEventCallback | O |
| Cellular_RegisterUrcPdnEventCallback | O |
| Cellular_RegisterUrcSignalStrengthChangedCallback | |
| Cellular_RegisterModemEventCallback | O |
| Cellular_RegisterUrcGenericCallback | O |
| Cellular_GetPsmSettings | O |
| Cellular_SetPsmSettings | O |
| Cellular_GetEidrxSettings | O |
| Cellular_SetEidrxSettings | O |
| Cellular_ATCommandRaw | O |
| Cellular_CreateSocket | O |
| Cellular_SocketConnect | |
| Cellular_SocketSend | |
| Cellular_SocketRecv | |
| Cellular_SocketClose | |
| Cellular_GetHostByName | |
| Cellular_SocketSetSockOpt | O |
| Cellular_SocketRegisterSocketOpenCallback | O |
| Cellular_SocketRegisterDataReadyCallback | O |
| Cellular_SocketRegisterClosedCallback | O |
*/
/**
@page cellular_common_URC_handlers Cellular common URC handlers
@brief Cellular common supported URC handlers
<b>Cellular common supported URC handler</b><br>
FreeRTOS Cellular Library APIs callback function is called in URC handler. <br>
3GPP URC handlers are also provided by cellular common library. <br>
They can be used to reduce porting effort. <br>
| FreeRTOS Cellular Library callback functions | Event | Cellular common supported |
| :----------------------------------------------------| :----------------------------------------- | :-----------------------: |
| Cellular_RegisterUrcNetworkRegistrationEventCallback | CELLULAR_URC_EVENT_NETWORK_CS_REGISTRATION | O |
| Cellular_RegisterUrcNetworkRegistrationEventCallback | CELLULAR_URC_EVENT_NETWORK_PS_REGISTRATION | O |
| Cellular_RegisterUrcPdnEventCallback | CELLULAR_URC_EVENT_PDN_ACTIVATED | |
| Cellular_RegisterUrcPdnEventCallback | CELLULAR_URC_EVENT_PDN_DEACTIVATED | |
| Cellular_RegisterUrcSignalStrengthChangedCallback | CELLULAR_URC_EVENT_SIGNAL_CHANGED | |
| Cellular_RegisterModemEventCallback | CELLULAR_MODEM_EVENT_BOOTUP_OR_REBOOT | |
| Cellular_RegisterModemEventCallback | CELLULAR_MODEM_EVENT_POWERED_DOWN | |
| Cellular_RegisterModemEventCallback | CELLULAR_MODEM_EVENT_PSM_ENTER | |
| Cellular_SocketRegisterSocketOpenCallback | CELLULAR_URC_SOCKET_OPENED | |
| Cellular_SocketRegisterSocketOpenCallback | CELLULAR_URC_SOCKET_OPEN_FAILED | |
| Cellular_SocketRegisterDataReadyCallback | None | |
| Cellular_SocketRegisterClosedCallback | None | |
*/
/**
@page cellular_module cellular_module
@brief Implement cellular module porting interface. <br>
- Implement functions defined cellular_common_portable.h
- @ref Cellular_ModuleInit
- @ref Cellular_ModuleCleanUp
- @ref Cellular_ModuleEnableUE
- @ref Cellular_ModuleEnableUrc
@image html cellular_module_porting_functions.png width=80%
- Create variable instance defined in cellular_common_portable.h
- AT command response token tables.
- \ref CellularTokenTable_t.pCellularSrcTokenErrorTable : indicate AT command is success
- @ref CellularTokenTable_t.cellularSrcTokenErrorTableSize
- @ref CellularTokenTable_t.pCellularSrcTokenSuccessTable : indicat AT command fails
- @ref CellularTokenTable_t.cellularSrcTokenSuccessTableSize
- URC handler table
- @ref CellularTokenTable_t.pCellularUrcTokenWoPrefixTable : URC token without prefix "+". These tokens are used in URC handler tables.<br>
( E.X "APP READY", "POWER ON" )
- @ref CellularTokenTable_t.cellularUrcTokenWoPrefixTableSize
*/
/**
@page cellular_module_api cellular_module_api
@brief Implement FreeRTOS Cellular Library API with cellular module specific AT commands. <br>
- Create FreeRTOS Cellular Library APIs implemented with module specific AT commands with cellular_common.h and cellular_at_core.h
- AT command related data structure
- @ref CellularAtReq_t : AT command request data structure
- @ref CellularAtDataReq_t : Data send data structure
- Send AT command APIs
- @ref _Cellular_AtcmdRequestWithCallback : Default timeout
- @ref _Cellular_TimeoutAtcmdRequestWithCallback : Custom timeout
- Send AT command APIs for data receive ( E.X socket data receive )
- @ref _Cellular_TimeoutAtcmdDataRecvRequestWithCallback
- Send AT command APIS for data send ( E.X socket data send )
- @ref _Cellular_TimeoutAtcmdDataSendRequestWithCallback : Basic data send API
- @ref _Cellular_AtcmdDataSend : Prefix callback function to indicate data mode start
- @ref _Cellular_TimeoutAtcmdDataSendSuccessToken : Extra success token to indicate AT commnad success
@image html cellular_API_implementation.png width=80%
*/
/**
@page cellular_module_urc_handler cellular_module_urc_handler
@brief Implement URC handler to handle URC event and call the corresponding callback function. <br>
- @ref CellularTokenTable_t.pCellularUrcHandlerTable : URC handler table of @ref CellularAtParseTokenHandler_t
- @ref CellularTokenTable_t.cellularPrefixToParserMapSize
Example URC handler table.
```
CellularAtParseTokenMap_t CellularUrcHandlerTable[] =
{
{ "CEREG", Cellular_CommonUrcProcessCereg },
{ "CGREG", Cellular_CommonUrcProcessCgreg },
{ "CREG", Cellular_CommonUrcProcessCreg },
{ "NORMAL POWER DOWN", _Cellular_ProcessPowerDown },
}
uint32_t CellularUrcHandlerTableSize = 4;
```
@image html cellular_URC_handler_implementation.png width=80%
*/
/**
@paramstructs_group{cellular_common,Cellular_common}
@paramstructs_brief{cellular_common,cellular_common}
*/
/**
@functionpointers_group{cellular_common,Cellular_common}
@functionpointers_brief{cellular_common library}
*/
/**
@enums_group{cellular_common,Cellular_common}
@enums_brief{cellular_common library}
*/
/**
@functions_page{cellular_common,cellular_common}
@functions_brief{cellular_common}
<b>The following APIs are 3GPP v27.007 AT command implemented FreeRTOS Cellular Library APIs.</b><br>
- @function_name{Cellular_CommonInit}
@function_brief{Cellular_CommonInit}
- @function_name{Cellular_CommonCleanup}
@function_brief{Cellular_CommonCleanup}
- @function_name{Cellular_CommonRegisterUrcNetworkRegistrationEventCallback}
@function_brief{Cellular_CommonRegisterUrcNetworkRegistrationEventCallback}
- @function_name{Cellular_CommonRegisterUrcPdnEventCallback}
@function_brief{Cellular_CommonRegisterUrcPdnEventCallback}
- @function_name{Cellular_CommonRegisterUrcSignalStrengthChangedCallback}
@function_brief{Cellular_CommonRegisterUrcSignalStrengthChangedCallback}
- @function_name{Cellular_CommonRegisterUrcGenericCallback}
@function_brief{Cellular_CommonRegisterUrcGenericCallback}
- @function_name{Cellular_CommonRegisterModemEventCallback}
@function_brief{Cellular_CommonRegisterModemEventCallback}
- @function_name{Cellular_CommonATCommandRaw}
@function_brief{Cellular_CommonATCommandRaw}
- @function_name{Cellular_CommonCreateSocket}
@function_brief{Cellular_CommonCreateSocket}
- @function_name{Cellular_CommonSocketSetSockOpt}
@function_brief{Cellular_CommonSocketSetSockOpt}
- @function_name{Cellular_CommonSocketRegisterDataReadyCallback}
@function_brief{Cellular_CommonSocketRegisterDataReadyCallback}
- @function_name{Cellular_CommonSocketRegisterSocketOpenCallback}
@function_brief{Cellular_CommonSocketRegisterSocketOpenCallback}
- @function_name{Cellular_CommonSocketRegisterClosedCallback}
@function_brief{Cellular_CommonSocketRegisterClosedCallback}
- @function_name{Cellular_CommonRfOn}
@function_brief{Cellular_CommonRfOn}
- @function_name{Cellular_CommonRfOff}
@function_brief{Cellular_CommonRfOff}
- @function_name{Cellular_CommonGetIPAddress}
@function_brief{Cellular_CommonGetIPAddress}
- @function_name{Cellular_CommonGetModemInfo}
@function_brief{Cellular_CommonGetModemInfo}
- @function_name{Cellular_CommonGetEidrxSettings}
@function_brief{Cellular_CommonGetEidrxSettings}
- @function_name{Cellular_CommonSetEidrxSettings}
@function_brief{Cellular_CommonSetEidrxSettings}
- @function_name{Cellular_CommonGetRegisteredNetwork}
@function_brief{Cellular_CommonGetRegisteredNetwork}
- @function_name{Cellular_CommonGetNetworkTime}
@function_brief{Cellular_CommonGetNetworkTime}
- @function_name{Cellular_CommonGetServiceStatus}
@function_brief{Cellular_CommonGetServiceStatus}
- @function_name{Cellular_CommonSetPdnConfig}
@function_brief{Cellular_CommonSetPdnConfig}
- @function_name{Cellular_CommonGetPsmSettings}
@function_brief{Cellular_CommonGetPsmSettings}
- @function_name{Cellular_CommonSetPsmSettings}
@function_brief{Cellular_CommonSetPsmSettings}
- @function_name{Cellular_CommonGetSimCardInfo}
@function_brief{Cellular_CommonGetSimCardInfo}
- @function_name{Cellular_CommonGetSimCardLockStatus}
@function_brief{Cellular_CommonGetSimCardLockStatus}
The following APIs can be used when implementating FreeRTOS Cellular Library APIs with module specific AT command.<br>
<b>AT command parsing functions</b><br>
- @function_name{Cellular_ATRemovePrefix}
@function_brief{Cellular_ATRemovePrefix}
- @function_name{Cellular_ATRemoveLeadingWhiteSpaces}
@function_brief{Cellular_ATRemoveLeadingWhiteSpaces}
- @function_name{Cellular_ATRemoveTrailingWhiteSpaces}
@function_brief{Cellular_ATRemoveTrailingWhiteSpaces}
- @function_name{Cellular_ATRemoveAllWhiteSpaces}
@function_brief{Cellular_ATRemoveAllWhiteSpaces}
- @function_name{Cellular_ATRemoveOutermostDoubleQuote}
@function_brief{Cellular_ATRemoveOutermostDoubleQuote}
- @function_name{Cellular_ATRemoveAllDoubleQuote}
@function_brief{Cellular_ATRemoveAllDoubleQuote}
- @function_name{Cellular_ATGetNextTok}
@function_brief{Cellular_ATGetNextTok}
- @function_name{Cellular_ATGetSpecificNextTok}
@function_brief{Cellular_ATGetSpecificNextTok}
- @function_name{Cellular_ATHexStrToHex}
@function_brief{Cellular_ATHexStrToHex}
- @function_name{Cellular_ATIsStrDigit}
@function_brief{Cellular_ATIsStrDigit}
- @function_name{Cellular_ATIsPrefixPresent}
@function_brief{Cellular_ATIsPrefixPresent}
- @function_name{Cellular_ATStrDup}
@function_brief{Cellular_ATStrDup}
- @function_name{Cellular_ATStrStartWith}
@function_brief{Cellular_ATStrStartWith}
- @function_name{Cellular_ATcheckErrorCode}
@function_brief{Cellular_ATcheckErrorCode}
- @function_name{Cellular_ATStrtoi}
@function_brief{Cellular_ATStrtoi}
<b>Cellular common library helper functions</b><br>
- @function_name{_Cellular_LibInit}
@function_brief{_Cellular_LibInit}
- @function_name{_Cellular_LibCleanup}
@function_brief{_Cellular_LibCleanup}
- @function_name{_Cellular_CheckLibraryStatus}
@function_brief{_Cellular_CheckLibraryStatus}
- @function_name{_Cellular_TranslatePktStatus}
@function_brief{_Cellular_TranslatePktStatus}
- @function_name{_Cellular_CreateSocketData}
@function_brief{_Cellular_CreateSocketData}
- @function_name{_Cellular_RemoveSocketData}
@function_brief{_Cellular_RemoveSocketData}
- @function_name{_Cellular_IsValidSocket}
@function_brief{_Cellular_IsValidSocket}
- @function_name{_Cellular_IsValidPdn}
@function_brief{_Cellular_IsValidPdn}
- @function_name{_Cellular_ConvertCsqSignalRssi}
@function_brief{_Cellular_ConvertCsqSignalRssi}
- @function_name{_Cellular_ConvertCsqSignalBer}
@function_brief{_Cellular_ConvertCsqSignalBer}
- @function_name{_Cellular_GetModuleContext}
@function_brief{_Cellular_GetModuleContext}
- @function_name{_Cellular_ComputeSignalBars}
@function_brief{_Cellular_ComputeSignalBars}
- @function_name{_Cellular_GetCurrentRat}
@function_brief{_Cellular_GetCurrentRat}
- @function_name{_Cellular_TranslatePktStatus}
@function_brief{_Cellular_TranslatePktStatus}
- @function_name{_Cellular_TranslateAtCoreStatus}
@function_brief{_Cellular_TranslateAtCoreStatus}
- @function_name{_Cellular_AtcmdRequestWithCallback}
@function_brief{_Cellular_AtcmdRequestWithCallback}
- @function_name{_Cellular_TimeoutAtcmdRequestWithCallback}
@function_brief{_Cellular_TimeoutAtcmdRequestWithCallback}
- @function_name{_Cellular_TimeoutAtcmdDataRecvRequestWithCallback}
@function_brief{_Cellular_TimeoutAtcmdDataRecvRequestWithCallback}
- @function_name{_Cellular_TimeoutAtcmdDataSendRequestWithCallback}
@function_brief{_Cellular_TimeoutAtcmdDataSendRequestWithCallback}
- @function_name{_Cellular_AtcmdDataSend}
@function_brief{_Cellular_AtcmdDataSend}
- @function_name{_Cellular_TimeoutAtcmdDataSendSuccessToken}
@function_brief{_Cellular_TimeoutAtcmdDataSendSuccessToken}
*/

View File

@ -0,0 +1,132 @@
/*
* Stylesheet for Doxygen HTML output.
*
* This file defines styles for custom elements in the header/footer and
* overrides some of the default Doxygen styles.
*
* Styles in this file do not affect the treeview sidebar.
*/
/* Set the margins to place a small amount of whitespace on the left and right
* side of the page. */
div.contents {
margin-left:4em;
margin-right:4em;
}
/* Justify text in paragraphs. */
p {
text-align: justify;
}
/* Style of section headings. */
h1 {
border-bottom: 1px solid #879ECB;
color: #354C7B;
font-size: 160%;
font-weight: normal;
padding-bottom: 4px;
padding-top: 8px;
}
/* Style of subsection headings. */
h2:not(.memtitle):not(.groupheader) {
font-size: 125%;
margin-bottom: 0px;
margin-top: 16px;
padding: 0px;
}
/* Style of paragraphs immediately after subsection headings. */
h2 + p {
margin: 0px;
padding: 0px;
}
/* Style of subsection headings. */
h3 {
font-size: 100%;
margin-bottom: 0px;
margin-left: 2em;
margin-right: 2em;
}
/* Style of paragraphs immediately after subsubsection headings. */
h3 + p {
margin-top: 0px;
margin-left: 2em;
margin-right: 2em;
}
/* Style of the prefix "AWS IoT Device SDK C" that appears in the header. */
#csdkprefix {
color: #757575;
}
/* Style of the "Return to main page" link that appears in the header. */
#returntomain {
padding: 0.5em;
}
/* Style of the dividers on Configuration Settings pages. */
div.configpagedivider {
margin-left: 0px !important;
margin-right: 0px !important;
margin-top: 20px !important;
}
/* Style of configuration setting names. */
dl.section.user ~ h1 {
border-bottom: none;
color: #000000;
font-family: monospace, fixed;
font-size: 16px;
margin-bottom: 0px;
margin-left: 2em;
margin-top: 1.5em;
}
/* Style of paragraphs on a configuration settings page. */
dl.section.user ~ * {
margin-bottom: 10px;
margin-left: 4em;
margin-right: 4em;
margin-top: 0px;
}
/* Hide the configuration setting marker. */
dl.section.user {
display: none;
}
/* Overrides for code fragments and lines. */
div.fragment {
background: #ffffff;
border: none;
padding: 5px;
}
div.line {
color: #3a3a3a;
}
/* Overrides for code syntax highlighting colors. */
span.comment {
color: #008000;
}
span.keyword, span.keywordtype, span.keywordflow {
color: #0000ff;
}
span.preprocessor {
color: #50015a;
}
span.stringliteral, span.charliteral {
color: #800c0c;
}
a.code, a.code:visited, a.line, a.line:visited {
color: #496194;
}

View File

@ -0,0 +1,22 @@
@startuml
Title FreeRTOS Cellular Library URC handler implementation
participant Application
participant Cellular_modules_porting
participant Cellular_common
participant Cellular_modem
note over Cellular_modules_porting : Create variable CellularUrcHandlerTable\n\nCellularAtParseTokenMap_t CellularUrcHandlerTable[] =\n{\n { "CEREG", Cellular_CommonUrcProcessCereg },\n { "CGREG", Cellular_CommonUrcProcessCgreg },\n { "CREG", Cellular_CommonUrcProcessCreg },\n { "NORMAL POWER DOWN", _Cellular_ProcessPowerDown }\n}\nuint32_t CellularUrcHandlerTableSize = 4;
Cellular_modem ->Cellular_common : "NORMAL POWER DOWN"
Cellular_common -> Cellular_modules_porting : Call the callback function\n_Cellular_ProcessPowerDown( pContext, "NORMAL POWER DOWN" )
Cellular_modules_porting ->Application : Call the callback function registered in\nCellular_RegisterModemEventCallback()
Cellular_modem ->Cellular_common : "+CREG: 2,0"
Cellular_common -> Cellular_common : Call the callback function\nCellular_CommonUrcProcessCreg( pContext, "+CREG: 2,0" )
Cellular_common->Application : callback function registered in\nCellular_RegisterUrcNetworkRegistrationEventCallback()
@enduml

View File

@ -0,0 +1,31 @@
@startuml
Title FreeRTOS Cellular Library API implementation
participant Application
participant "FreeRTOS Cellular Library"
participant Cellular_modules_porting
participant Cellular_common
participant Cellular_modem
Application ->"FreeRTOS Cellular Library" : Cellular_GetSimCardStatus()
"FreeRTOS Cellular Library"->Cellular_modules_porting :Cellular_GetSimCardStatus()
Cellular_modules_porting->Cellular_common:Get module context passed in Cellular_ModuleInt() :\n_Cellular_GetModuleContext()
Cellular_modules_porting->Cellular_modules_porting:Setup AT commnand request:\nCellularAtReq_t = \n{\n pAtCmd = "AT+QSIMSTAT?"\n atCmdType = CELLULAR_AT_WITH_PREFIX\n pAtRspPrefix = "+QSIMSTAT"\n respCallback = _Cellular_RecvFuncGetSimCardStatus\n pData = &simCardState\n dataLen = sizeof( CellularSimCardState_t )\n};\n
Cellular_modules_porting->Cellular_common:Send AT command with cellular common APIs:\n _Cellular_AtcmdRequestWithCallback( CellularAtReq_t )
Cellular_common ->Cellular_modem : AT+QSIMSTAT?
Cellular_modem -> Cellular_common : +QSIMSTAT: ....
Cellular_modem -> Cellular_common : OK
Cellular_common ->Cellular_modules_porting : Call the callback function with corresponding data field \n_Cellular_RecvFuncGetSimCardStatus( pData, dataLen )
Cellular_modules_porting ->Application : Return parsing status and data
@enduml

View File

@ -0,0 +1,35 @@
@startuml
Title FreeRTOS Cellular Library interaction with cellular module porting APIs
participant Application
participant "FreeRTOS Cellular Library"
participant Cellular_common
participant Cellular_modules_porting
Application ->"FreeRTOS Cellular Library" : Cellular_Init()
"FreeRTOS Cellular Library" -> Cellular_common : Cellular_CommonInit()
Cellular_common -> Cellular_modules_porting : Cellular_moduleInit()
Cellular_common -> Cellular_modules_porting : Cellular_moduleEnableUE()
Cellular_common -> Cellular_modules_porting : Cellular_moduleEnableUrc
Cellular_common --> "FreeRTOS Cellular Library" :
"FreeRTOS Cellular Library" --> Application :
Application ->"FreeRTOS Cellular Library" : Cellular_CleanUp()
"FreeRTOS Cellular Library" -> Cellular_common : Cellular_CommonCleanUp()
Cellular_common -> Cellular_modules_porting : Cellular_moduleCleanUp()
Cellular_common --> "FreeRTOS Cellular Library" :
"FreeRTOS Cellular Library" --> Application :
@enduml

View File

@ -0,0 +1,74 @@
@startuml
Title FreeRTOS Cellular Library interaction with com interface
participant Application
participant "FreeRTOS Cellular Library"
participant cellular_comm_interface
participant cellular_modem
note over Application : Application needs cellular connecitvity.\nCellular_Init() is called to open FreeRTOS \nCellular Library. Communication interface\n, pCommInterface, is provided by\napplication to "FreeRTOS Cellular Library".
Application -> "FreeRTOS Cellular Library" : Cellular_Init( pCommInterface )
activate Application
"FreeRTOS Cellular Library" ->cellular_comm_interface : pCommInterface->Open( receiveCallback )
cellular_comm_interface->cellular_modem : Register receive callback\nOpen and setup communication device driver\nPower on and enable device
cellular_comm_interface-->"FreeRTOS Cellular Library":
"FreeRTOS Cellular Library"-->Application:
deactivate Application
note over Application : "FreeRTOS Cellular Library" APIs ready.\nApplication get network time with\nCellular_GetNetworkTime() function
Application -> "FreeRTOS Cellular Library" : Cellular_GetNetworkTime()
activate Application
"FreeRTOS Cellular Library"->cellular_comm_interface : pCommInterface->Send()
cellular_comm_interface->cellular_modem : AT+CCLK?
cellular_modem->cellular_comm_interface : +CCLK: "20/06/09,12:06:33+32"
cellular_comm_interface->cellular_comm_interface : Store `+CCLK: "20/06/09,12:06:33+32"` in buffer
cellular_comm_interface->"FreeRTOS Cellular Library" : receiveCallback
"FreeRTOS Cellular Library"->cellular_comm_interface : pCommInterface->recv()
cellular_comm_interface-->"FreeRTOS Cellular Library" : Return data in buffer
cellular_modem->cellular_comm_interface : OK
cellular_comm_interface->cellular_comm_interface : Store `OK` in buffer
cellular_comm_interface->"FreeRTOS Cellular Library" : receiveCallback
cellular_comm_interface-->"FreeRTOS Cellular Library" : Return data in buffer
"FreeRTOS Cellular Library"->Application : Return network time
deactivate Application
note over Application : Applicaton no longer need cellular\nconnectivity. Cellular_Cleanup() is \ncalled to close FreeRTOS Cellular Library.
Application -> "FreeRTOS Cellular Library" : Cellular_Cleanup()
activate Application
"FreeRTOS Cellular Library"->cellular_comm_interface : pCommInterface->Close()
cellular_comm_interface->cellular_modem : Power off device\nClose communication device driver\n
cellular_comm_interface-->"FreeRTOS Cellular Library":
"FreeRTOS Cellular Library"-->Application:
deactivate Application
@enduml

Binary file not shown.

After

Width:  |  Height:  |  Size: 42 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 58 KiB

View File

@ -0,0 +1,43 @@
<?xml version="1.0" encoding="utf-8" standalone="yes"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.1//EN" "http://www.w3.org/Graphics/SVG/1.1/DTD/svg11.dtd">
<svg version="1.1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" width="9in" height="7in" class="slides-canvas" viewBox="0 0 648 504">
<defs>
<linearGradient id="lg_b1cbe9_I0a3c1e5_92b9e4_90_4a_740a2" x1="0" y1="33" x2="0" y2="91" spreadMethod="reflect" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#B1CBE9" />
<stop offset="0.5" stop-color="#A3C1E5" />
<stop offset="1" stop-color="#92B9E4" />
</linearGradient>
<linearGradient id="lg_b1cbe9_I0a3c1e5_92b9e4_90_65_798b5" x1="0" y1="47" x2="0" y2="107" spreadMethod="reflect" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#B1CBE9" />
<stop offset="0.5" stop-color="#A3C1E5" />
<stop offset="1" stop-color="#92B9E4" />
</linearGradient>
<linearGradient id="lg_ffdd9c_I0ffd78e_ffd479_90_f9_d0275" x1="0" y1="202" x2="0" y2="306" spreadMethod="reflect" gradientUnits="userSpaceOnUse">
<stop offset="0" stop-color="#FFDD9C" />
<stop offset="0.5" stop-color="#FFD78E" />
<stop offset="1" stop-color="#FFD479" />
</linearGradient>
<marker id="ah1" markerUnits="userSpaceOnUse" markerWidth="36" markerHeight="21" viewBox="-18 -10.5 36 21" orient="auto">
<path d="M-9 5.25L0 0-9-5.25" fill="none" stroke="#000000" stroke-width="3" stroke-linecap="round" />
</marker>
</defs>
<g text-rendering="geometricPrecision" transform="scale(1, 1)">
<rect x="0" y="0" width="648" height="504" fill="#FFFFFF" />
<path fill="url(#lg_b1cbe9_I0a3c1e5_92b9e4_90_4a_740a2)" d="M13.75 381.88L623.4 381.88 623.4 439.9 13.75 439.9z" />
<path stroke-width="0.5" stroke="#5B9BD5" fill="none" d="M13.75 381.88L623.4 381.88 623.4 439.9 13.75 439.9z" />
<g transform="matrix(1, 0, 0, 1, 20.952362, 385.47693)"><text font-family="Noto Sans" font-style="normal" font-weight="normal" font-stretch="normal" font-size="18pt" fill="#000000" x="206.31061" y="33.614155"><tspan x="206.80165" y="34.1052" id="tp_0_shadow" fill="#000000" fill-opacity="0.27">Comm Interface</tspan><tspan x="206.31061" y="33.614155" id="tp_0">Comm Interface</tspan></text></g>
<path fill="url(#lg_b1cbe9_I0a3c1e5_92b9e4_90_65_798b5)" d="M13.75 48.12L623.4 48.12 623.4 108.89 13.75 108.89z" />
<path stroke-width="0.5" stroke="#5B9BD5" fill="none" d="M13.75 48.12L623.4 48.12 623.4 108.89 13.75 108.89z" />
<g transform="matrix(1, 0, 0, 1, 20.952362, 51.7163)"><text font-family="Noto Sans" font-style="normal" font-weight="normal" font-stretch="normal" font-size="18pt" fill="#000000" x="234.31061" y="34.990295"><tspan x="234.80165" y="35.481342" id="tp_1_shadow" fill="#000000" fill-opacity="0.27">Application</tspan><tspan x="234.31061" y="34.990295" id="tp_1">Application</tspan></text></g>
<g transform="matrix(1, 0, 0, 1, 338.37567, 109.73605)"><text font-family="Noto Sans" font-style="normal" font-weight="normal" font-stretch="normal" font-size="15pt" fill="#000000" x="0" y="42.83686"><tspan x="0" y="18.836859">FreeRTOS Cellular Interface</tspan><tspan xml:space="preserve" x="257.48438" y="18.836859"> </tspan><tspan x="0" y="42.83686">APIs request</tspan></text></g>
<path fill="#FFE699" fill-opacity="0.5" d="M13.75 161.67L623.4 161.67 623.4 349.85 13.75 349.85z" />
<path fill="url(#lg_ffdd9c_I0ffd78e_ffd479_90_f9_d0275)" d="M59.93 202.83L299.01 202.83 299.01 306.91 59.93 306.91z" />
<path stroke-width="0.5" stroke="#FFC000" fill="none" d="M59.93 202.83L299.01 202.83 299.01 306.91 59.93 306.91z" />
<g transform="matrix(1, 0, 0, 1, 67.13109, 206.43106)"><text font-family="Noto Sans" font-style="normal" font-weight="normal" font-stretch="normal" font-size="18pt" fill="#000000" x="22.080612" y="71.0426"><tspan x="7.376346" y="42.733643" id="tp_2_shadow" fill="#000000" fill-opacity="0.27">FreeRTOS-Cellular-</tspan><tspan x="6.8852997" y="42.242596" id="tp_2">FreeRTOS-Cellular-</tspan><tspan x="22.57166" y="71.533646" id="tp_3_shadow" fill="#000000" fill-opacity="0.27">Interface library</tspan><tspan x="22.080612" y="71.0426" id="tp_3">Interface library</tspan></text></g>
<path fill="url(#lg_ffdd9c_I0ffd78e_ffd479_90_f9_d0275)" d="M348.12 202.83L587.19 202.83 587.19 306.91 348.12 306.91z" />
<path stroke-width="0.5" stroke="#FFC000" fill="none" d="M348.12 202.83L587.19 202.83 587.19 306.91 348.12 306.91z" />
<g transform="matrix(1, 0, 0, 1, 355.31573, 206.43106)"><text font-family="Noto Sans" font-style="normal" font-weight="normal" font-stretch="normal" font-size="18pt" fill="#000000" x="22.088425" y="71.0426"><tspan x="24.079472" y="42.733643" id="tp_4_shadow" fill="#000000" fill-opacity="0.27">Cellular Module</tspan><tspan x="23.588425" y="42.242596" id="tp_4">Cellular Module</tspan><tspan xml:space="preserve" x="201.08842" y="42.242596"> </tspan><tspan x="22.579472" y="71.533646" id="tp_5_shadow" fill="#000000" fill-opacity="0.27">implementation</tspan><tspan x="22.088425" y="71.0426" id="tp_5">implementation</tspan></text></g>
<path marker-end="url(#ah1)" stroke-width="3" stroke="#000000" fill="none" d="M318.58 108.89L318.58 156.09 318.58 157.59" />
<path marker-end="url(#ah1)" stroke-width="3" stroke="#000000" fill="none" d="M318.58 349.85L318.58 376.29 318.58 377.79" />
</g>
</svg>

Binary file not shown.

After

Width:  |  Height:  |  Size: 164 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 61 KiB