Zephyr API Documentation 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
cellular.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2023 Bjarki Arge Andreasen
3 * Copyright (c) 2023 Lucas Denefle
4 *
5 * SPDX-License-Identifier: Apache-2.0
6 */
7
13
14#ifndef ZEPHYR_INCLUDE_DRIVERS_CELLULAR_H_
15#define ZEPHYR_INCLUDE_DRIVERS_CELLULAR_H_
16
27
28#include <zephyr/types.h>
29#include <zephyr/device.h>
30#include <errno.h>
31
32#ifdef __cplusplus
33extern "C" {
34#endif
35
75
88
95
111
139
151
152/* Opaque bit-mask large enough for all current & future events */
154
159
164
169
171#define CELLULAR_EUTRAN_CELL_ID_MAX 0xFFFFFFFU
173#define CELLULAR_EUTRAN_CELL_ID_INVALID UINT32_MAX
174
193
215
228typedef void (*cellular_event_cb_t)(const struct device *dev, enum cellular_event event,
229 const void *payload, void *user_data);
230
236
238typedef int (*cellular_api_configure_networks)(const struct device *dev,
239 const struct cellular_network *networks,
240 uint8_t size);
241
243typedef int (*cellular_api_get_supported_networks)(const struct device *dev,
244 const struct cellular_network **networks,
245 uint8_t *size);
246
248typedef int (*cellular_api_get_signal)(const struct device *dev,
249 const enum cellular_signal_type type, int16_t *value);
250
252typedef int (*cellular_api_get_modem_info)(const struct device *dev,
253 const enum cellular_modem_info_type type, char *info,
254 size_t size);
255
257typedef int (*cellular_api_get_registration_status)(const struct device *dev,
259 enum cellular_registration_status *status);
260
262typedef int (*cellular_api_set_apn)(const struct device *dev, const char *apn);
263
265typedef int (*cellular_api_set_callback)(const struct device *dev, cellular_event_mask_t mask,
266 cellular_event_cb_t cb, void *user_data);
267
269typedef const struct cellular_stats *(*cellular_api_get_stats)(const struct device *dev);
270
292
294
315static inline int cellular_configure_networks(const struct device *dev,
316 const struct cellular_network *networks, uint8_t size)
317{
318 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
319
320 if (api->configure_networks == NULL) {
321 return -ENOSYS;
322 }
323
324 return api->configure_networks(dev, networks, size);
325}
326
337static inline int cellular_get_supported_networks(const struct device *dev,
338 const struct cellular_network **networks,
339 uint8_t *size)
340{
341 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
342
343 if (api->get_supported_networks == NULL) {
344 return -ENOSYS;
345 }
346
347 return api->get_supported_networks(dev, networks, size);
348}
349
361static inline int cellular_get_signal(const struct device *dev,
362 const enum cellular_signal_type type, int16_t *value)
363{
364 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
365
366 if (api->get_signal == NULL) {
367 return -ENOSYS;
368 }
369
370 return api->get_signal(dev, type, value);
371}
372
385static inline int cellular_get_modem_info(const struct device *dev,
386 const enum cellular_modem_info_type type, char *info,
387 size_t size)
388{
389 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
390
391 if (api->get_modem_info == NULL) {
392 return -ENOSYS;
393 }
394
395 return api->get_modem_info(dev, type, info, size);
396}
397
409static inline int cellular_get_registration_status(const struct device *dev,
411 enum cellular_registration_status *status)
412{
413 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
414
415 if (api->get_registration_status == NULL) {
416 return -ENOSYS;
417 }
418
419 return api->get_registration_status(dev, tech, status);
420}
421
437static inline int cellular_set_apn(const struct device *dev, const char *apn)
438{
439 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
440
441 if (api->set_apn == NULL) {
442 return -ENOSYS;
443 }
444
445 return api->set_apn(dev, apn);
446}
447
461static inline int cellular_set_callback(const struct device *dev, cellular_event_mask_t mask,
462 cellular_event_cb_t cb, void *user_data)
463{
464 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
465
466 if (api->set_callback == NULL) {
467 return -ENOSYS;
468 }
469
470 return api->set_callback(dev, mask, cb, user_data);
471}
472
481static inline const struct cellular_stats *cellular_get_stats(const struct device *dev)
482{
483 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
484
485 if (api->get_stats == NULL) {
486 return NULL;
487 }
488
489 return api->get_stats(dev);
490}
491
492#ifdef __cplusplus
493}
494#endif
495
499
500#endif /* ZEPHYR_INCLUDE_DRIVERS_CELLULAR_H_ */
#define DEVICE_API_GET(_class, _dev)
Expands to the pointer of a device's API for a given class.
Definition device.h:1425
System error numbers.
int(* cellular_api_get_modem_info)(const struct device *dev, const enum cellular_modem_info_type type, char *info, size_t size)
API for getting modem information.
Definition cellular.h:252
int(* cellular_api_get_registration_status)(const struct device *dev, enum cellular_access_technology tech, enum cellular_registration_status *status)
API for getting registration status.
Definition cellular.h:257
int(* cellular_api_get_supported_networks)(const struct device *dev, const struct cellular_network **networks, uint8_t *size)
API for getting supported networks.
Definition cellular.h:243
int(* cellular_api_configure_networks)(const struct device *dev, const struct cellular_network *networks, uint8_t size)
API for configuring networks.
Definition cellular.h:238
int(* cellular_api_get_signal)(const struct device *dev, const enum cellular_signal_type type, int16_t *value)
API for getting network signal strength.
Definition cellular.h:248
const struct cellular_stats *(* cellular_api_get_stats)(const struct device *dev)
API for reading operational statistics.
Definition cellular.h:269
int(* cellular_api_set_apn)(const struct device *dev, const char *apn)
API for programming APN.
Definition cellular.h:262
int(* cellular_api_set_callback)(const struct device *dev, cellular_event_mask_t mask, cellular_event_cb_t cb, void *user_data)
API for registering an asynchronous callback.
Definition cellular.h:265
static int cellular_get_signal(const struct device *dev, const enum cellular_signal_type type, int16_t *value)
Get signal for the device.
Definition cellular.h:361
static const struct cellular_stats * cellular_get_stats(const struct device *dev)
Read operational statistics from the cellular device.
Definition cellular.h:481
cellular_access_technology
Cellular access technologies (3GPP TS 27.007 AcT).
Definition cellular.h:37
cellular_event
Events emitted asynchronously by a cellular driver.
Definition cellular.h:141
static int cellular_set_apn(const struct device *dev, const char *apn)
Set the APN used for PDP context.
Definition cellular.h:437
static int cellular_get_supported_networks(const struct device *dev, const struct cellular_network **networks, uint8_t *size)
Get supported cellular networks for the device.
Definition cellular.h:337
cellular_registration_status
Cellular registration status (3GPP TS 27.007).
Definition cellular.h:113
cellular_signal_type
Cellular signal type.
Definition cellular.h:90
static int cellular_get_modem_info(const struct device *dev, const enum cellular_modem_info_type type, char *info, size_t size)
Get modem info for the device.
Definition cellular.h:385
static int cellular_set_callback(const struct device *dev, cellular_event_mask_t mask, cellular_event_cb_t cb, void *user_data)
Subscribe to asynchronous cellular events.
Definition cellular.h:461
uint32_t cellular_event_mask_t
Definition cellular.h:153
static int cellular_configure_networks(const struct device *dev, const struct cellular_network *networks, uint8_t size)
Configure cellular networks for the device.
Definition cellular.h:315
void(* cellular_event_cb_t)(const struct device *dev, enum cellular_event event, const void *payload, void *user_data)
Prototype for cellular event callbacks.
Definition cellular.h:228
cellular_modem_info_type
Cellular modem info type.
Definition cellular.h:97
static int cellular_get_registration_status(const struct device *dev, enum cellular_access_technology tech, enum cellular_registration_status *status)
Get network registration status for the device.
Definition cellular.h:409
@ CELLULAR_ACCESS_TECHNOLOGY_EC_GSM_IOT
Extended Coverage GSM for IoT (2G, 3GPP Rel 13).
Definition cellular.h:55
@ CELLULAR_ACCESS_TECHNOLOGY_UTRAN
UMTS Terrestrial Radio Access Network (3G, 3GPP Rel 99).
Definition cellular.h:43
@ CELLULAR_ACCESS_TECHNOLOGY_E_UTRA_NR_DUAL
LTE/E-UTRA & NR dual connectivity (5G, 3GPP Rel 15).
Definition cellular.h:65
@ CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN_NB_S1
EUTRAN Narrowband-IoT (4G, 3GPP Rel 13).
Definition cellular.h:57
@ CELLULAR_ACCESS_TECHNOLOGY_NG_RAN
Next Generation RAN (5G, 3GPP Rel 15).
Definition cellular.h:63
@ CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN
Evolved UTRAN (4G, 3GPP Rel 8).
Definition cellular.h:53
@ CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN_NB_S1_SAT
Narrowband-IoT over Satellite (4G, 3GPP Rel 17).
Definition cellular.h:67
@ CELLULAR_ACCESS_TECHNOLOGY_UTRAN_HSDPA_HSUPA
UTRAN with HSDPA and HSUDP (HSPA) (3.75G, 3GPP Rel 6).
Definition cellular.h:51
@ CELLULAR_ACCESS_TECHNOLOGY_UTRAN_HSUPA
UTRAN with High Speed Uplink Packet Access (3.75G, 3GPP Rel 6).
Definition cellular.h:49
@ CELLULAR_ACCESS_TECHNOLOGY_GSM
Global System for Mobile communications (2G, 3GPP Rel 99).
Definition cellular.h:39
@ CELLULAR_ACCESS_TECHNOLOGY_UNKNOWN
Unknown access technology.
Definition cellular.h:73
@ CELLULAR_ACCESS_TECHNOLOGY_GSM_EGPRS
GSM Enhanced General Packet Radio Service (2.5G, 3GPP Rel 99).
Definition cellular.h:45
@ CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN_WB_S1_SAT
LTE (wideband) over Satellite (4G, 3GPP Rel 17).
Definition cellular.h:69
@ CELLULAR_ACCESS_TECHNOLOGY_NR_5G_CN
New Radio with 5G Core Network (5G, 3GPP Rel 15).
Definition cellular.h:61
@ CELLULAR_ACCESS_TECHNOLOGY_E_UTRA_5G_CN
LTE/E-UTRA connected to 5G Core Network (5G, 3GPP Rel 15).
Definition cellular.h:59
@ CELLULAR_ACCESS_TECHNOLOGY_NG_RAN_SAT
Next Generation RAN over Satellite (5G, 3GPP Rel 17).
Definition cellular.h:71
@ CELLULAR_ACCESS_TECHNOLOGY_GSM_COMPACT
Bandwidth & Spectrum limited variant of GSM (2G, 3GPP Rel 99).
Definition cellular.h:41
@ CELLULAR_ACCESS_TECHNOLOGY_UTRAN_HSDPA
UTRAN with High Speed Downlink Packet Access (3.5G, 3GPP Rel 5).
Definition cellular.h:47
@ CELLULAR_EVENT_MODEM_COMMS_CHECK_RESULT
Result of a communications link check to the modem.
Definition cellular.h:147
@ CELLULAR_EVENT_MODEM_INFO_CHANGED
One or more modem-info field changed (e.g.
Definition cellular.h:143
@ CELLULAR_EVENT_REGISTRATION_STATUS_CHANGED
Cellular network registration status changed.
Definition cellular.h:145
@ CELLULAR_EVENT_NETWORK_STATUS_CHANGED
Cellular network status changed.
Definition cellular.h:149
@ CELLULAR_REGISTRATION_UNKNOWN
Unknown (e.g.
Definition cellular.h:123
@ CELLULAR_REGISTRATION_CSFB_NOT_PREFERRED_ROAMING
Registered for "CSFB not preferred", roaming network.
Definition cellular.h:135
@ CELLULAR_REGISTRATION_SEARCHING
Not registered, searching for an operator.
Definition cellular.h:119
@ CELLULAR_REGISTRATION_DENIED
Registration denied.
Definition cellular.h:121
@ CELLULAR_REGISTRATION_SMS_ONLY_HOME
Registered for "SMS only", home network.
Definition cellular.h:127
@ CELLULAR_REGISTRATION_SMS_ONLY_ROAMING
Registered for "SMS only", roaming network.
Definition cellular.h:129
@ CELLULAR_REGISTRATION_REGISTERED_HOME
Registered, home network.
Definition cellular.h:117
@ CELLULAR_REGISTRATION_NOT_REGISTERED
Not registered, not searching.
Definition cellular.h:115
@ CELLULAR_REGISTRATION_CSFB_NOT_PREFERRED_HOME
Registered for "CSFB not preferred", home network.
Definition cellular.h:133
@ CELLULAR_REGISTRATION_RLOS
Attached for access to "Restricted Local Operator Services".
Definition cellular.h:137
@ CELLULAR_REGISTRATION_EMERGENCY_ONLY
Attached for emergency bearer services only.
Definition cellular.h:131
@ CELLULAR_REGISTRATION_REGISTERED_ROAMING
Registered, roaming.
Definition cellular.h:125
@ CELLULAR_SIGNAL_RSRQ
Definition cellular.h:93
@ CELLULAR_SIGNAL_RSRP
Definition cellular.h:92
@ CELLULAR_SIGNAL_RSSI
Definition cellular.h:91
@ CELLULAR_MODEM_INFO_SIM_IMSI
International Mobile Subscriber Identity.
Definition cellular.h:107
@ CELLULAR_MODEM_INFO_MANUFACTURER
Modem manufacturer.
Definition cellular.h:103
@ CELLULAR_MODEM_INFO_MODEL_ID
Modem model ID.
Definition cellular.h:101
@ CELLULAR_MODEM_INFO_SIM_ICCID
Integrated Circuit Card Identification Number (SIM).
Definition cellular.h:109
@ CELLULAR_MODEM_INFO_FW_VERSION
Modem fw version.
Definition cellular.h:105
@ CELLULAR_MODEM_INFO_IMEI
International Mobile Equipment Identity.
Definition cellular.h:99
#define BIT(n)
Unsigned integer with bit position n set (signed in assembly language).
Definition util_macro.h:44
#define ENOSYS
Function not implemented.
Definition errno.h:82
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
__INT8_TYPE__ int8_t
Definition stdint.h:72
__INT16_TYPE__ int16_t
Definition stdint.h:73
<span class="mlabel">Driver Operations</span> Cellular driver operations
Definition cellular.h:274
cellular_api_get_stats get_stats
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition cellular.h:290
cellular_api_get_supported_networks get_supported_networks
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition cellular.h:278
cellular_api_set_apn set_apn
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition cellular.h:286
cellular_api_set_callback set_callback
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition cellular.h:288
cellular_api_get_registration_status get_registration_status
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition cellular.h:284
cellular_api_get_signal get_signal
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition cellular.h:280
cellular_api_get_modem_info get_modem_info
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition cellular.h:282
cellular_api_configure_networks configure_networks
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition cellular.h:276
Payload for CELLULAR_EVENT_MODEM_COMMS_CHECK_RESULT.
Definition cellular.h:166
bool success
Communications to modem checked successfully.
Definition cellular.h:167
Payload for CELLULAR_EVENT_MODEM_INFO_CHANGED.
Definition cellular.h:156
enum cellular_modem_info_type field
Which field changed.
Definition cellular.h:157
Payload for CELLULAR_EVENT_NETWORK_STATUS_CHANGED.
Definition cellular.h:176
enum cellular_registration_status status
Registration status.
Definition cellular.h:177
uint16_t phys_cell_id
Physical cell ID.
Definition cellular.h:186
uint16_t mnc
Mobile Network Code.
Definition cellular.h:182
int8_t rsrq
Received signal quality (dB).
Definition cellular.h:189
struct cellular_evt_network_status::@150331017227312054123027032261144033315032011003::@303376020136156326235373225142223153065252167310 lte
LTE Cell information.
uint16_t band
Band number (from 3GPP TS 36.101).
Definition cellular.h:187
uint32_t tac
Tracking Area Code.
Definition cellular.h:183
uint32_t gci
E-UTRAN cell ID (0 - CELLULAR_EUTRAN_CELL_ID_MAX).
Definition cellular.h:185
enum cellular_access_technology access_tech
Access technology.
Definition cellular.h:178
int16_t rsrp
Received signal power (dBm).
Definition cellular.h:188
union cellular_evt_network_status::@150331017227312054123027032261144033315032011003 cell
Generic Cell information.
uint16_t mcc
Mobile Country Code.
Definition cellular.h:181
uint32_t earfcn
E-UTRAN assigned radio channel.
Definition cellular.h:184
Payload for CELLULAR_EVENT_REGISTRATION_STATUS_CHANGED.
Definition cellular.h:161
enum cellular_registration_status status
New registration status.
Definition cellular.h:162
Cellular network structure.
Definition cellular.h:77
uint16_t * bands
List of bands, as defined by the specified cellular access technology, to enables.
Definition cellular.h:84
uint16_t size
Size of bands.
Definition cellular.h:86
enum cellular_access_technology technology
Cellular access technology.
Definition cellular.h:79
Cellular link operational statistics.
Definition cellular.h:199
uint32_t command_errors_cme
+CME ERROR responses.
Definition cellular.h:209
uint32_t command_failures
Control-channel command failures.
Definition cellular.h:207
uint32_t outage_ms
Cumulative time the modem was not registered, in milliseconds.
Definition cellular.h:201
uint32_t cmux_disconnects
CMUX desync/disconnect events.
Definition cellular.h:213
uint32_t link_drops
Data-link carrier losses.
Definition cellular.h:205
uint32_t deregistrations
Registered to not-registered transitions.
Definition cellular.h:203
uint32_t recoveries
Recovery transitions entered.
Definition cellular.h:211
Runtime device structure (in ROM) per driver instance.
Definition device.h:513