Zephyr Project API 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
29
30#include <zephyr/types.h>
31#include <zephyr/device.h>
32#include <errno.h>
33
34#ifdef __cplusplus
35extern "C" {
36#endif
37
77
90
97
113
141
155
156/* Opaque bit-mask large enough for all current & future events */
158
163
168
173
175#define CELLULAR_EUTRAN_CELL_ID_MAX 0xFFFFFFFU
177#define CELLULAR_EUTRAN_CELL_ID_INVALID UINT32_MAX
178
197
219
232typedef void (*cellular_event_cb_t)(const struct device *dev, enum cellular_event event,
233 const void *payload, void *user_data);
234
240
242typedef int (*cellular_api_configure_networks)(const struct device *dev,
243 const struct cellular_network *networks,
244 uint8_t size);
245
247typedef int (*cellular_api_get_supported_networks)(const struct device *dev,
248 const struct cellular_network **networks,
249 uint8_t *size);
250
252typedef int (*cellular_api_get_signal)(const struct device *dev,
253 const enum cellular_signal_type type, int16_t *value);
254
256typedef int (*cellular_api_get_modem_info)(const struct device *dev,
257 const enum cellular_modem_info_type type, char *info,
258 size_t size);
259
261typedef int (*cellular_api_get_registration_status)(const struct device *dev,
263 enum cellular_registration_status *status);
264
266typedef int (*cellular_api_get_network_status)(const struct device *dev,
268
270typedef int (*cellular_api_set_apn)(const struct device *dev, const char *apn);
271
273typedef int (*cellular_api_set_callback)(const struct device *dev, cellular_event_mask_t mask,
274 cellular_event_cb_t cb, void *user_data);
275
277typedef const struct cellular_stats *(*cellular_api_get_stats)(const struct device *dev);
278
302
304
325static inline int cellular_configure_networks(const struct device *dev,
326 const struct cellular_network *networks, uint8_t size)
327{
328 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
329
330 if (api->configure_networks == NULL) {
331 return -ENOSYS;
332 }
333
334 return api->configure_networks(dev, networks, size);
335}
336
347static inline int cellular_get_supported_networks(const struct device *dev,
348 const struct cellular_network **networks,
349 uint8_t *size)
350{
351 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
352
353 if (api->get_supported_networks == NULL) {
354 return -ENOSYS;
355 }
356
357 return api->get_supported_networks(dev, networks, size);
358}
359
371static inline int cellular_get_signal(const struct device *dev,
372 const enum cellular_signal_type type, int16_t *value)
373{
374 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
375
376 if (api->get_signal == NULL) {
377 return -ENOSYS;
378 }
379
380 return api->get_signal(dev, type, value);
381}
382
395static inline int cellular_get_modem_info(const struct device *dev,
396 const enum cellular_modem_info_type type, char *info,
397 size_t size)
398{
399 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
400
401 if (api->get_modem_info == NULL) {
402 return -ENOSYS;
403 }
404
405 return api->get_modem_info(dev, type, info, size);
406}
407
419static inline int cellular_get_registration_status(const struct device *dev,
421 enum cellular_registration_status *status)
422{
423 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
424
425 if (api->get_registration_status == NULL) {
426 return -ENOSYS;
427 }
428
429 return api->get_registration_status(dev, tech, status);
430}
431
447static inline int cellular_get_network_status(const struct device *dev,
448 struct cellular_evt_network_status *status)
449{
450 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
451
452 if (api->get_network_status == NULL) {
453 return -ENOSYS;
454 }
455
456 return api->get_network_status(dev, status);
457}
458
474static inline int cellular_set_apn(const struct device *dev, const char *apn)
475{
476 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
477
478 if (api->set_apn == NULL) {
479 return -ENOSYS;
480 }
481
482 return api->set_apn(dev, apn);
483}
484
498static inline int cellular_set_callback(const struct device *dev, cellular_event_mask_t mask,
499 cellular_event_cb_t cb, void *user_data)
500{
501 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
502
503 if (api->set_callback == NULL) {
504 return -ENOSYS;
505 }
506
507 return api->set_callback(dev, mask, cb, user_data);
508}
509
518static inline const struct cellular_stats *cellular_get_stats(const struct device *dev)
519{
520 const struct cellular_driver_api *api = DEVICE_API_GET(cellular, dev);
521
522 if (api->get_stats == NULL) {
523 return NULL;
524 }
525
526 return api->get_stats(dev);
527}
528
529#ifdef __cplusplus
530}
531#endif
532
536
537#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:1461
System error numbers.
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:371
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:256
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:261
static const struct cellular_stats * cellular_get_stats(const struct device *dev)
Read operational statistics from the cellular device.
Definition cellular.h:518
cellular_access_technology
Cellular access technologies (3GPP TS 27.007 AcT).
Definition cellular.h:39
cellular_event
Events emitted asynchronously by a cellular driver.
Definition cellular.h:143
int(* cellular_api_get_network_status)(const struct device *dev, struct cellular_evt_network_status *status)
API for getting the last reported network (serving cell) status.
Definition cellular.h:266
static int cellular_set_apn(const struct device *dev, const char *apn)
Set the APN used for PDP context.
Definition cellular.h:474
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:247
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:347
int(* cellular_api_configure_networks)(const struct device *dev, const struct cellular_network *networks, uint8_t size)
@def_driverbackendgroup{Cellular,cellular_interface}
Definition cellular.h:242
cellular_registration_status
Cellular registration status (3GPP TS 27.007).
Definition cellular.h:115
cellular_signal_type
Cellular signal type.
Definition cellular.h:92
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:395
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:252
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:498
uint32_t cellular_event_mask_t
Definition cellular.h:157
const struct cellular_stats *(* cellular_api_get_stats)(const struct device *dev)
API for reading operational statistics.
Definition cellular.h:277
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:325
int(* cellular_api_set_apn)(const struct device *dev, const char *apn)
API for programming APN.
Definition cellular.h:270
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:232
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:273
static int cellular_get_network_status(const struct device *dev, struct cellular_evt_network_status *status)
Get the last reported network (serving cell) status.
Definition cellular.h:447
cellular_modem_info_type
Cellular modem info type.
Definition cellular.h:99
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:419
@ CELLULAR_ACCESS_TECHNOLOGY_EC_GSM_IOT
Extended Coverage GSM for IoT (2G, 3GPP Rel 13).
Definition cellular.h:57
@ CELLULAR_ACCESS_TECHNOLOGY_UTRAN
UMTS Terrestrial Radio Access Network (3G, 3GPP Rel 99).
Definition cellular.h:45
@ CELLULAR_ACCESS_TECHNOLOGY_E_UTRA_NR_DUAL
LTE/E-UTRA & NR dual connectivity (5G, 3GPP Rel 15).
Definition cellular.h:67
@ CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN_NB_S1
EUTRAN Narrowband-IoT (4G, 3GPP Rel 13).
Definition cellular.h:59
@ CELLULAR_ACCESS_TECHNOLOGY_NG_RAN
Next Generation RAN (5G, 3GPP Rel 15).
Definition cellular.h:65
@ CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN
Evolved UTRAN (4G, 3GPP Rel 8).
Definition cellular.h:55
@ CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN_NB_S1_SAT
Narrowband-IoT over Satellite (4G, 3GPP Rel 17).
Definition cellular.h:69
@ CELLULAR_ACCESS_TECHNOLOGY_UTRAN_HSDPA_HSUPA
UTRAN with HSDPA and HSUDP (HSPA) (3.75G, 3GPP Rel 6).
Definition cellular.h:53
@ CELLULAR_ACCESS_TECHNOLOGY_UTRAN_HSUPA
UTRAN with High Speed Uplink Packet Access (3.75G, 3GPP Rel 6).
Definition cellular.h:51
@ CELLULAR_ACCESS_TECHNOLOGY_GSM
Global System for Mobile communications (2G, 3GPP Rel 99).
Definition cellular.h:41
@ CELLULAR_ACCESS_TECHNOLOGY_UNKNOWN
Unknown access technology.
Definition cellular.h:75
@ CELLULAR_ACCESS_TECHNOLOGY_GSM_EGPRS
GSM Enhanced General Packet Radio Service (2.5G, 3GPP Rel 99).
Definition cellular.h:47
@ CELLULAR_ACCESS_TECHNOLOGY_E_UTRAN_WB_S1_SAT
LTE (wideband) over Satellite (4G, 3GPP Rel 17).
Definition cellular.h:71
@ CELLULAR_ACCESS_TECHNOLOGY_NR_5G_CN
New Radio with 5G Core Network (5G, 3GPP Rel 15).
Definition cellular.h:63
@ CELLULAR_ACCESS_TECHNOLOGY_E_UTRA_5G_CN
LTE/E-UTRA connected to 5G Core Network (5G, 3GPP Rel 15).
Definition cellular.h:61
@ CELLULAR_ACCESS_TECHNOLOGY_NG_RAN_SAT
Next Generation RAN over Satellite (5G, 3GPP Rel 17).
Definition cellular.h:73
@ CELLULAR_ACCESS_TECHNOLOGY_GSM_COMPACT
Bandwidth & Spectrum limited variant of GSM (2G, 3GPP Rel 99).
Definition cellular.h:43
@ CELLULAR_ACCESS_TECHNOLOGY_UTRAN_HSDPA
UTRAN with High Speed Downlink Packet Access (3.5G, 3GPP Rel 5).
Definition cellular.h:49
@ CELLULAR_EVENT_MODEM_COMMS_CHECK_RESULT
Result of a communications link check to the modem.
Definition cellular.h:149
@ CELLULAR_EVENT_MODEM_SUSPENDED
Cellular modem suspension callback.
Definition cellular.h:153
@ CELLULAR_EVENT_MODEM_INFO_CHANGED
One or more modem-info field changed (e.g.
Definition cellular.h:145
@ CELLULAR_EVENT_REGISTRATION_STATUS_CHANGED
Cellular network registration status changed.
Definition cellular.h:147
@ CELLULAR_EVENT_NETWORK_STATUS_CHANGED
Cellular network status changed.
Definition cellular.h:151
@ CELLULAR_REGISTRATION_UNKNOWN
Unknown (e.g.
Definition cellular.h:125
@ CELLULAR_REGISTRATION_CSFB_NOT_PREFERRED_ROAMING
Registered for "CSFB not preferred", roaming network.
Definition cellular.h:137
@ CELLULAR_REGISTRATION_SEARCHING
Not registered, searching for an operator.
Definition cellular.h:121
@ CELLULAR_REGISTRATION_DENIED
Registration denied.
Definition cellular.h:123
@ CELLULAR_REGISTRATION_SMS_ONLY_HOME
Registered for "SMS only", home network.
Definition cellular.h:129
@ CELLULAR_REGISTRATION_SMS_ONLY_ROAMING
Registered for "SMS only", roaming network.
Definition cellular.h:131
@ CELLULAR_REGISTRATION_REGISTERED_HOME
Registered, home network.
Definition cellular.h:119
@ CELLULAR_REGISTRATION_NOT_REGISTERED
Not registered, not searching.
Definition cellular.h:117
@ CELLULAR_REGISTRATION_CSFB_NOT_PREFERRED_HOME
Registered for "CSFB not preferred", home network.
Definition cellular.h:135
@ CELLULAR_REGISTRATION_RLOS
Attached for access to "Restricted Local Operator Services".
Definition cellular.h:139
@ CELLULAR_REGISTRATION_EMERGENCY_ONLY
Attached for emergency bearer services only.
Definition cellular.h:133
@ CELLULAR_REGISTRATION_REGISTERED_ROAMING
Registered, roaming.
Definition cellular.h:127
@ CELLULAR_SIGNAL_RSRQ
Definition cellular.h:95
@ CELLULAR_SIGNAL_RSRP
Definition cellular.h:94
@ CELLULAR_SIGNAL_RSSI
Definition cellular.h:93
@ CELLULAR_MODEM_INFO_SIM_IMSI
International Mobile Subscriber Identity.
Definition cellular.h:109
@ CELLULAR_MODEM_INFO_MANUFACTURER
Modem manufacturer.
Definition cellular.h:105
@ CELLULAR_MODEM_INFO_MODEL_ID
Modem model ID.
Definition cellular.h:103
@ CELLULAR_MODEM_INFO_SIM_ICCID
Integrated Circuit Card Identification Number (SIM).
Definition cellular.h:111
@ CELLULAR_MODEM_INFO_FW_VERSION
Modem fw version.
Definition cellular.h:107
@ CELLULAR_MODEM_INFO_IMEI
International Mobile Equipment Identity.
Definition cellular.h:101
#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:83
#define NULL
Definition iar_missing_defs.h:20
__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
@driver_ops{Cellular}
Definition cellular.h:282
cellular_api_get_stats get_stats
@driver_ops_optional Read operational statistics from the cellular device.
Definition cellular.h:300
cellular_api_get_network_status get_network_status
@driver_ops_optional Get the last reported network (serving cell) status.
Definition cellular.h:294
cellular_api_get_supported_networks get_supported_networks
@driver_ops_optional Get supported cellular networks for the device.
Definition cellular.h:286
cellular_api_set_apn set_apn
@driver_ops_optional Set the APN used for PDP context.
Definition cellular.h:296
cellular_api_set_callback set_callback
@driver_ops_optional Subscribe to asynchronous cellular events.
Definition cellular.h:298
cellular_api_get_registration_status get_registration_status
@driver_ops_optional Get network registration status for the device.
Definition cellular.h:292
cellular_api_get_signal get_signal
@driver_ops_optional Get signal for the device.
Definition cellular.h:288
cellular_api_get_modem_info get_modem_info
@driver_ops_optional Get modem info for the device.
Definition cellular.h:290
cellular_api_configure_networks configure_networks
@driver_ops_optional Configure cellular networks for the device.
Definition cellular.h:284
Payload for CELLULAR_EVENT_MODEM_COMMS_CHECK_RESULT.
Definition cellular.h:170
bool success
Communications to modem checked successfully.
Definition cellular.h:171
Payload for CELLULAR_EVENT_MODEM_INFO_CHANGED.
Definition cellular.h:160
enum cellular_modem_info_type field
Which field changed.
Definition cellular.h:161
Payload for CELLULAR_EVENT_NETWORK_STATUS_CHANGED.
Definition cellular.h:180
enum cellular_registration_status status
Registration status.
Definition cellular.h:181
uint16_t phys_cell_id
Physical cell ID.
Definition cellular.h:190
uint16_t mnc
Mobile Network Code.
Definition cellular.h:186
int8_t rsrq
Received signal quality (dB).
Definition cellular.h:193
uint16_t band
Band number (from 3GPP TS 36.101).
Definition cellular.h:191
uint32_t tac
Tracking Area Code.
Definition cellular.h:187
uint32_t gci
E-UTRAN cell ID (0 - CELLULAR_EUTRAN_CELL_ID_MAX).
Definition cellular.h:189
enum cellular_access_technology access_tech
Access technology.
Definition cellular.h:182
struct cellular_evt_network_status::@155246040041051105311337306002150227270062150001::@173061253052122215206374174146313020245021256172 lte
LTE Cell information.
int16_t rsrp
Received signal power (dBm).
Definition cellular.h:192
union cellular_evt_network_status::@155246040041051105311337306002150227270062150001 cell
Generic Cell information.
uint16_t mcc
Mobile Country Code.
Definition cellular.h:185
uint32_t earfcn
E-UTRAN assigned radio channel.
Definition cellular.h:188
Payload for CELLULAR_EVENT_REGISTRATION_STATUS_CHANGED.
Definition cellular.h:165
enum cellular_registration_status status
New registration status.
Definition cellular.h:166
Cellular network structure.
Definition cellular.h:79
uint16_t * bands
List of bands, as defined by the specified cellular access technology, to enables.
Definition cellular.h:86
uint16_t size
Size of bands.
Definition cellular.h:88
enum cellular_access_technology technology
Cellular access technology.
Definition cellular.h:81
Cellular link operational statistics.
Definition cellular.h:203
uint32_t command_errors_cme
+CME ERROR responses.
Definition cellular.h:213
uint32_t command_failures
Control-channel command failures.
Definition cellular.h:211
uint32_t outage_ms
Cumulative time the modem was not registered, in milliseconds.
Definition cellular.h:205
uint32_t cmux_disconnects
CMUX desync/disconnect events.
Definition cellular.h:217
uint32_t link_drops
Data-link carrier losses.
Definition cellular.h:209
uint32_t deregistrations
Registered to not-registered transitions.
Definition cellular.h:207
uint32_t recoveries
Recovery transitions entered.
Definition cellular.h:215
Runtime device structure (in ROM) per driver instance.
Definition device.h:525