C API Documentation
The C API is very simple and consist of these two basic parts:
The Typical application workflow is to:
Create a DCE instance (using
esp_modem_new()
)Call specific functions to issue AT commands (Modem commands)
Switch to the data mode (using
esp_modem_set_mode()
)Perform desired network operations (using standard networking API, unrelated to ESP-MODEM)
Optionally switch back to command mode (again
esp_modem_set_mode()
)Destroy the DCE handle (sing
esp_modem_destroy()
)
Note the configuration structures for DTE and DCE, needed for creating the DCE instance, is documented in Configuration structures
Lifecycle API
These functions are used to create, destroy and set modem working mode.
- group ESP_MODEM_C_API
Set of basic C API for ESP-MODEM.
Typedefs
-
typedef enum esp_modem_dce_mode esp_modem_dce_mode_t
DCE mode: This enum is used to set desired operation mode of the DCE.
-
typedef enum esp_modem_dce_device esp_modem_dce_device_t
DCE devices: Enum list of supported devices.
-
typedef enum esp_modem_terminal_error esp_modem_terminal_error_t
Terminal errors.
-
typedef void (*esp_modem_terminal_error_cbt)(esp_modem_terminal_error_t)
Terminal error callback.
Enums
-
enum esp_modem_dce_mode
DCE mode: This enum is used to set desired operation mode of the DCE.
Values:
-
enumerator ESP_MODEM_MODE_COMMAND
Default mode after modem startup, used for sending AT commands
-
enumerator ESP_MODEM_MODE_DATA
Used for switching to PPP mode for the modem to connect to a network
-
enumerator ESP_MODEM_MODE_CMUX
Multiplexed terminal mode
-
enumerator ESP_MODEM_MODE_CMUX_MANUAL
CMUX manual mode
-
enumerator ESP_MODEM_MODE_CMUX_MANUAL_EXIT
Exit CMUX manual mode
-
enumerator ESP_MODEM_MODE_CMUX_MANUAL_SWAP
Swap terminals in CMUX manual mode
-
enumerator ESP_MODEM_MODE_CMUX_MANUAL_DATA
Set DATA mode in CMUX manual mode
-
enumerator ESP_MODEM_MODE_CMUX_MANUAL_COMMAND
Set COMMAND mode in CMUX manual mode
-
enumerator ESP_MODEM_MODE_DETECT
Detect the mode and resume it (if sucessfully detected)
-
enumerator ESP_MODEM_MODE_UNDEF
-
enumerator ESP_MODEM_MODE_COMMAND
-
enum esp_modem_dce_device
DCE devices: Enum list of supported devices.
Values:
-
enumerator ESP_MODEM_DCE_GENERIC
The most generic device
-
enumerator ESP_MODEM_DCE_SIM7600
-
enumerator ESP_MODEM_DCE_SIM7070
-
enumerator ESP_MODEM_DCE_SIM7000
-
enumerator ESP_MODEM_DCE_BG96
-
enumerator ESP_MODEM_DCE_EC20
-
enumerator ESP_MODEM_DCE_SIM800
-
enumerator ESP_MODEM_DCE_SQNGM02S
-
enumerator ESP_MODEM_DCE_CUSTOM
-
enumerator ESP_MODEM_DCE_GENERIC
Functions
-
esp_modem_dce_t *esp_modem_new(const esp_modem_dte_config_t *dte_config, const esp_modem_dce_config_t *dce_config, esp_netif_t *netif)
Create a generic DCE handle for new modem API.
- Parameters:
dte_config – DTE configuration (UART config for now)
dce_config – DCE configuration
netif – Network interface handle for the data mode
- Returns:
DCE pointer on success, NULL on failure
-
esp_modem_dce_t *esp_modem_new_dev(esp_modem_dce_device_t module, const esp_modem_dte_config_t *dte_config, const esp_modem_dce_config_t *dce_config, esp_netif_t *netif)
Create a DCE handle using the supplied device.
- Parameters:
module – Specific device for creating this DCE
dte_config – DTE configuration (UART config for now)
dce_config – DCE configuration
netif – Network interface handle for the data mode
- Returns:
DCE pointer on success, NULL on failure
-
void esp_modem_destroy(esp_modem_dce_t *dce)
Destroys modem’s DCE handle.
- Parameters:
dce – DCE to destroy
-
esp_err_t esp_modem_set_error_cb(esp_modem_dce_t *dce, esp_modem_terminal_error_cbt err_cb)
Set DTE’s error callback.
- Parameters:
dce – Modem DCE handle
err_cb – [in] Error callback
- Returns:
ESP_OK on success, ESP_FAIL on failure
-
esp_err_t esp_modem_set_mode(esp_modem_dce_t *dce, esp_modem_dce_mode_t mode)
Set operation mode for this DCE.
- Parameters:
dce – Modem DCE handle
mode – Desired MODE
- Returns:
ESP_OK on success, ESP_FAIL on failure
-
esp_err_t esp_modem_command(esp_modem_dce_t *dce, const char *command, esp_err_t (*got_line_cb)(uint8_t *data, size_t len), uint32_t timeout_ms)
Convenient function to run arbitrary commands from C-API.
- Parameters:
dce – Modem DCE handle
command – Command to send
got_line_cb – Callback function which is called whenever we receive a line
timeout_ms – Command timeout
- Returns:
ESP_OK on success, ESP_FAIL on failure
-
esp_err_t esp_modem_set_apn(esp_modem_dce_t *dce, const char *apn)
Sets the APN and configures it into the modem’s PDP context.
- Parameters:
dce – Modem DCE handle
apn – Access Point Name
- Returns:
ESP_OK on success
-
esp_err_t esp_modem_sqn_gm02s_connect(esp_modem_dce_t *dce, const esp_modem_PdpContext_t *pdp_context)
-
esp_err_t esp_modem_pause_net(esp_modem_dce_t *dce, bool pause)
This API provides support for temporarily pausing networking in order to send/receive AT commands and resume networking afterwards.
Note
This function does not switch modes, the modem is still in data mode.
- Parameters:
dce – Modem DCE handle
pause – true to pause the network interface, false to resume networking
- Returns:
ESP_OK on success
-
esp_modem_dce_mode_t esp_modem_get_mode(esp_modem_dce_t *dce)
-
typedef enum esp_modem_dce_mode esp_modem_dce_mode_t
Modem commands
These functions are the actual commands to communicate with the modem using AT command interface.
Note that the functions which implement AT commands returning textual values use plain char *
pointer as the return value. The API expects the output data to point to user allocated space of at least
CONFIG_ESP_MODEM_C_API_STR_MAX
(128 by default) bytes, it also truncates the output data to this size.
Functions
-
command_result esp_modem_sync()
Sends the initial AT sequence to sync up with the device.
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_get_operator_name(char *name, int *act)
Reads the operator name.
- Parameters:
name – [out] operator name
act – [out] access technology
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_store_profile()
Stores current user profile.
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_pin(const char *pin)
Sets the supplied PIN code.
- Parameters:
pin – [in] Pin
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_at_raw(const char *cmd, char *out, const char *pass, const char *fail, int timeout)
Execute the supplied AT command in raw mode (doesn’t append ‘\r’ to command, returns everything)
- Parameters:
cmd – [in] String command that’s send to DTE
out – [out] Raw output from DTE
pass – [in] Pattern in response for the API to return OK
fail – [in] Pattern in response for the API to return FAIL
timeout – [in] AT command timeout in milliseconds
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_at(const char *cmd, char *out, int timeout)
Execute the supplied AT command.
- Parameters:
cmd – [in] AT command
out – [out] Command output string
timeout – [in] AT command timeout in milliseconds
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_read_pin(bool *pin_ok)
Checks if the SIM needs a PIN.
- Parameters:
pin_ok – [out] true if the SIM card doesn’t need a PIN to unlock
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_echo(const bool echo_on)
Sets echo mode.
- Parameters:
echo_on – [in] true if echo mode on (repeats the commands)
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_sms_txt_mode(const bool txt)
Sets the Txt or Pdu mode for SMS (only txt is supported)
- Parameters:
txt – [in] true if txt mode
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_sms_character_set()
Sets the default (GSM) character set.
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_send_sms(const char *number, const char *message)
Sends SMS message in txt mode.
- Parameters:
number – [in] Phone number to send the message to
message – [in] Text message to be sent
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_resume_data_mode()
Resumes data mode (Switches back to the data mode, which was temporarily suspended)
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_pdp_context(esp_modem_PdpContext_t *pdp)
Sets php context.
- Parameters:
p1 – [in] PdP context struct to setup modem cellular connection
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_command_mode()
Switches to the command mode.
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_cmux()
Switches to the CMUX mode.
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_get_imsi(char *imsi)
Reads the IMSI number.
- Parameters:
imsi – [out] Module’s IMSI number
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_get_imei(char *imei)
Reads the IMEI number.
- Parameters:
imei – [out] Module’s IMEI number
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_get_module_name(char *name)
Reads the module name.
- Parameters:
name – [out] module name
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_data_mode()
Sets the modem to data mode.
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_get_signal_quality(int *rssi, int *ber)
Get Signal quality.
- Parameters:
rssi – [out] signal strength indication
ber – [out] channel bit error rate
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_flow_control(int dce_flow, int dte_flow)
Sets HW control flow.
- Parameters:
dce_flow – [in] 0=none, 2=RTS hw flow control of DCE
dte_flow – [in] 0=none, 2=CTS hw flow control of DTE
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_hang_up()
Hangs up current data call.
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_get_battery_status(int *voltage, int *bcs, int *bcl)
Get voltage levels of modem power up circuitry.
- Parameters:
voltage – [out] Current status in mV
bcs – [out] charge status (-1-Not available, 0-Not charging, 1-Charging, 2-Charging done)
bcl – [out] 1-100% battery capacity, -1-Not available
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_power_down()
Power down the module.
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_reset()
Reset the module.
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_baud(int baud)
Configures the baudrate.
- Parameters:
baud – [in] Desired baud rate of the DTE
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_operator(int mode, int format, const char *oper)
Force an attempt to connect to a specific operator.
- Parameters:
mode – [in] mode of attempt mode=0 - automatic mode=1 - manual mode=2 - deregister mode=3 - set format for read operation mode=4 - manual with fallback to automatic
format – [in] what format the operator is given in format=0 - long format format=1 - short format format=2 - numeric
oper – [in] the operator to connect to
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_network_attachment_state(int state)
Attach or detach from the GPRS service.
- Parameters:
state – [in] 1-attach 0-detach
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_get_network_attachment_state(int *state)
Get network attachment state.
- Parameters:
state – [out] 1-attached 0-detached
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_radio_state(int state)
What mode the radio should be set to.
- Parameters:
state – [in] state 1-full 0-minimum …
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_get_radio_state(int *state)
Get current radio state.
- Parameters:
state – [out] 1-full 0-minimum …
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_network_mode(int mode)
Set network mode.
- Parameters:
mode – [in] preferred mode
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_preferred_mode(int mode)
Preferred network mode (CAT-M and/or NB-IoT)
- Parameters:
mode – [in] preferred selection
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_network_bands(const char *mode, const int *bands, int size)
Set network bands for CAT-M or NB-IoT.
- Parameters:
mode – [in] CAT-M or NB-IoT
bands – [in] bitmap in hex representing bands
size – [in] size of teh bands bitmap
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_get_network_system_mode(int *mode)
Show network system mode.
- Parameters:
mode – [out] current network mode
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_set_gnss_power_mode(int mode)
GNSS power control.
- Parameters:
mode – [out] power mode (0 - off, 1 - on)
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_get_gnss_power_mode(int *mode)
GNSS power control.
- Parameters:
mode – [out] power mode (0 - off, 1 - on)
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_config_psm(int mode, const char *tau, const char *active_time)
Configure PSM.
- Parameters:
mode – [in] psm mode (0 - off, 1 - on, 2 - off & discard stored params)
- Returns:
OK, FAIL or TIMEOUT
-
command_result esp_modem_config_network_registration_urc(int value)
Configure CEREG urc.
- Parameters:
value – [in] value = 0 - Disable network URC value = 1 - Enable network URC value = 2 - Enable network URC with location information value = 3 - Enable network URC with location information and EMM cause value = 4 - Enable network URC with location information and PSM value value = 5 - Enable network URC with location information and PSM value, EMM cause
-
command_result esp_modem_get_network_registration_state(int *state)
Gets the current network registration state.
- Parameters:
state – [out] The current network registration state state = 0 - Not registered, MT is not currently searching an operator to register to state = 1 - Registered, home network state = 2 - Not registered, but MT is currently trying to attach or searching an operator to register to state = 3 - Registration denied state = 4 - Unknown state = 5 - Registered, Roaming state = 6 - Registered, for SMS only, home network (NB-IoT only) state = 7 - Registered, for SMS only, roaming (NB-IoT only) state = 8 - Attached for emergency bearer services only state = 9 - Registered for CSFB not preferred, home network state = 10 - Registered for CSFB not preferred, roaming
-
command_result esp_modem_config_mobile_termination_error(int mode)
Configures the mobile termination error (+CME ERROR)
- Parameters:
mode – [in] The form of the final result code mode = 0 - Disable, use and send ERROR instead mode = 1 - Enable, use numeric error values mode = 2 - Enable, result code and use verbose error values
-
command_result esp_modem_config_edrx(int mode, int access_technology, const char *edrx_value)
Configure eDRX.
- Parameters:
mode – [in] mode = 0 - Disable mode = 1 - Enable mode = 2 - Enable + URC mode = 3 - Disable + Reset parameter.
access_technology – [in] act = 0 - ACT is not using eDRX (used in URC) act = 1 - EC-GSM-IoT (A/Gb mode) act = 2 - GSM (A/Gb mode) act = 3 - UTRAN (Iu mode) act = 4 - E-UTRAN (WB-S1 mode) act = 5 - E-UTRAN (NB-S1 mode)
edrx_value – [in] nible string containing encoded eDRX time
ptw_value – [in] nible string containing encoded Paging Time Window
Configuration structures
- group ESP_MODEM_CONFIG
Configuration structures for DTE and DCE.
Defines
-
ESP_MODEM_DEFAULT_UART_CLK
-
ESP_MODEM_DTE_DEFAULT_CONFIG()
ESP Modem DTE Default Configuration.
-
ESP_MODEM_DCE_DEFAULT_CONFIG(APN)
ESP Modem DCE Default Configuration.
Typedefs
-
typedef struct esp_modem_dte_config esp_modem_dte_config_t
-
typedef struct esp_modem_dce_config esp_modem_dce_config_t
Enums
-
struct esp_modem_uart_term_config
- #include <esp_modem_config.h>
UART configuration structure.
Public Members
-
uart_port_t port_num
UART port number
-
uart_word_length_t data_bits
Data bits of UART
-
uart_stop_bits_t stop_bits
Stop bits of UART
-
uart_parity_t parity
Parity type
-
esp_modem_flow_ctrl_t flow_control
Flow control type
-
uart_sclk_t source_clk
UART source clock selection
-
int baud_rate
Communication baud rate
-
int tx_io_num
TXD Pin Number
-
int rx_io_num
RXD Pin Number
-
int rts_io_num
RTS Pin Number
-
int cts_io_num
CTS Pin Number
-
int rx_buffer_size
UART RX Buffer Size
-
int tx_buffer_size
UART TX Buffer Size
-
int event_queue_size
UART Event Queue Size, set to 0 if no event queue needed
-
uart_port_t port_num
-
struct esp_modem_vfs_term_config
- #include <esp_modem_config.h>
VFS configuration structure.
-
struct esp_modem_dte_config
- #include <esp_modem_config.h>
Complete DTE configuration structure.
Note that the generic part is common for DTE and its SW resources The following portions for config is dedicated to the chosen HW resource used as a communication terminal for this DTE
Public Members
-
size_t dte_buffer_size
DTE buffer size
-
uint32_t task_stack_size
Terminal task stack size
-
unsigned task_priority
Terminal task priority
-
struct esp_modem_uart_term_config uart_config
Configuration for UART Terminal
-
struct esp_modem_vfs_term_config vfs_config
Configuration for VFS Terminal
-
void *extension_config
Configuration for app specific Terminal
-
size_t dte_buffer_size
-
ESP_MODEM_DEFAULT_UART_CLK