Zephyr Project API 4.4.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
hl78xx_apis.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2025 Netfeasa Ltd.
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6#ifndef ZEPHYR_INCLUDE_DRIVERS_HL78XX_APIS_H_
7#define ZEPHYR_INCLUDE_DRIVERS_HL78XX_APIS_H_
8
9#include <zephyr/types.h>
10#include <zephyr/device.h>
11#include <errno.h>
12#include <stddef.h>
13#include <zephyr/modem/chat.h>
16#ifdef __cplusplus
17extern "C" {
18#endif
19
24/* clang-format off */
26#define CSQ_RSSI_UNKNOWN (99)
28#define CESQ_RSRP_UNKNOWN (255)
30#define CESQ_RSRQ_UNKNOWN (255)
31
37#define CSQ_RSSI_TO_DB(v) (-113 + (2 * (v)))
43#define CESQ_RSRP_TO_DB(v) (-140 + (v))
49#define CESQ_RSRQ_TO_DB(v) (-20 + ((v) / 2))
50
52#define PAUSED 1
54#define ACTIVE 0
56#define MDM_MANUFACTURER_LENGTH 20
58#define MDM_MODEL_LENGTH 32
60#define MDM_REVISION_LENGTH 64
62#define MDM_IMEI_LENGTH 16
64#define MDM_IMSI_LENGTH 23
66#define MDM_ICCID_LENGTH 22
68#define MDM_APN_MAX_LENGTH 64
70#define MDM_MAX_CERT_LENGTH 4096
72#define MDM_MAX_HOSTNAME_LEN 128
74#define MDM_SERIAL_NUMBER_LENGTH 32
75
77
84#define HL78XX_MONITOR_ACTIVE false
85
92#define HL78XX_MONITOR_PAUSED true
93
103#define HL78XX_MONITOR_INITIAL_PAUSED(...) \
104 COND_CODE_1(IS_EMPTY(__VA_ARGS__), (false), (__VA_ARGS__))
105
106/* clang-format on */
107
116#define HL78XX_EVT_MONITOR(name, _handler, ...) \
117 static STRUCT_SECTION_ITERABLE(hl78xx_evt_monitor_entry, name) = { \
118 .handler = _handler, \
119 .next = NULL, \
120 .flags = { \
121 .direct = false, \
122 .paused = HL78XX_MONITOR_INITIAL_PAUSED(__VA_ARGS__), \
123 }}
124
126#define HL78XX_AT_MONITOR_ANY NULL
127
139#define HL78XX_AT_MONITOR(name, _filter, _handler, ...) \
140 static STRUCT_SECTION_ITERABLE(hl78xx_at_monitor_entry, name) = { \
141 .filter = _filter, \
142 .handler = _handler, \
143 .next = NULL, \
144 .flags = { \
145 .direct = false, \
146 .paused = HL78XX_MONITOR_INITIAL_PAUSED(__VA_ARGS__), \
147 }}
148
163#define HL78XX_AT_MONITOR_DIRECT(name, _filter, _handler, ...) \
164 static STRUCT_SECTION_ITERABLE(hl78xx_at_monitor_entry, name) = { \
165 .filter = _filter, \
166 .handler = _handler, \
167 .next = NULL, \
168 .flags = { \
169 .direct = true, \
170 .paused = HL78XX_MONITOR_INITIAL_PAUSED(__VA_ARGS__), \
171 }}
172
183#ifdef CONFIG_MODEM_HL78XX_12
185 HL78XX_RAT_GSM,
186#ifdef CONFIG_MODEM_HL78XX_12_FW_R6
188 HL78XX_RAT_NBNTN,
189#endif /* CONFIG_MODEM_HL78XX_12_FW_R6 */
190#endif /* CONFIG_MODEM_HL78XX_12 */
191#ifdef CONFIG_MODEM_HL78XX_AUTORAT
193 HL78XX_RAT_MODE_AUTO,
194#endif
199};
200
214
236
254
278
279#if defined(CONFIG_HL78XX_GNSS_SUPPORT_ASSISTED_MODE) || defined(__DOXYGEN__)
291
312
329#endif /* CONFIG_HL78XX_GNSS_SUPPORT_ASSISTED_MODE */
330
331#ifdef CONFIG_MODEM_HL78XX_LOW_POWER_MODE
332#ifdef CONFIG_MODEM_HL78XX_POWER_DOWN
338enum power_down_event {
340 POWER_DOWN_EVENT_ENTER = 0,
342 POWER_DOWN_EVENT_EXIT,
344 POWER_DOWN_EVENT_NONE,
345};
346#endif /* CONFIG_MODEM_HL78XX_POWER_DOWN */
347
348#ifdef CONFIG_MODEM_HL78XX_EDRX
354enum hl78xx_edrx_event {
356 HL78XX_EDRX_EVENT_IDLE_EXIT = 0,
358 HL78XX_EDRX_EVENT_IDLE_ENTER,
360 HL78XX_EDRX_EVENT_IDLE_NONE,
361};
362#endif /* CONFIG_MODEM_HL78XX_EDRX */
363#ifdef CONFIG_MODEM_HL78XX_PSM
369enum hl78xx_psmev_event {
371 HL78XX_PSM_EVENT_EXIT = 0,
373 HL78XX_PSM_EVENT_ENTER,
375 HL78XX_PSM_EVENT_NONE,
376};
377#endif /* CONFIG_MODEM_HL78XX_PSM */
378#endif /* CONFIG_MODEM_HL78XX_LOW_POWER_MODE */
379
390
407
424#ifdef CONFIG_HL78XX_GNSS
426 HL78XX_GNSS_ENGINE_READY,
428 HL78XX_GNSS_EVENT_INIT,
430 HL78XX_GNSS_EVENT_START,
432 HL78XX_GNSS_EVENT_STOP,
434 HL78XX_GNSS_EVENT_POSITION,
436 HL78XX_GNSS_EVENT_START_BLOCKED,
438 HL78XX_GNSS_EVENT_SEARCH_TIMEOUT,
440 HL78XX_GNSS_EVENT_MODE_EXITED,
441#endif /* CONFIG_HL78XX_GNSS */
442#ifdef CONFIG_MODEM_HL78XX_LOW_POWER_MODE
443#ifdef CONFIG_MODEM_HL78XX_EDRX
445 HL78XX_EDRX_IDLE_UPDATE,
446#endif /* CONFIG_MODEM_HL78XX_EDRX */
447#ifdef CONFIG_MODEM_HL78XX_PSM
449 HL78XX_LTE_PSMEV_UPDATE,
450#endif /* CONFIG_MODEM_HL78XX_PSM */
451#ifdef CONFIG_MODEM_HL78XX_POWER_DOWN
453 HL78XX_POWER_DOWN_UPDATE,
454#endif /* CONFIG_MODEM_HL78XX_POWER_DOWN */
455#endif /* CONFIG_MODEM_HL78XX_LOW_POWER_MODE */
460};
461#ifdef CONFIG_MODEM_HL78XX_AIRVANTAGE
467enum wdsi_indication {
469 WDSI_BOOTSTRAP_CREDENTIALS_PRESENT = 0,
471 WDSI_USER_AGREEMENT_REQUEST = 1,
473 WDSI_FIRMWARE_DOWNLOAD_REQUEST = 2,
475 WDSI_FIRMWARE_INSTALL_REQUEST = 3,
477 WDSI_AUTHENTICATION_START = 4,
479 WDSI_AUTHENTICATION_FAILED = 5,
481 WDSI_AUTHENTICATION_SUCCESS = 6,
483 WDSI_CONNECTION_DENIED = 7,
485 WDSI_DM_SESSION_CLOSED = 8,
487 WDSI_FIRMWARE_AVAILABLE = 9,
489 WDSI_FIRMWARE_DOWNLOADED = 10,
491 WDSI_FIRMWARE_DOWNLOAD_ISSUE = 11,
493 WDSI_PACKAGE_VERIFIED_CERTIFIED = 12,
495 WDSI_PACKAGE_VERIFIED_NOT_CERTIFIED = 13,
497 WDSI_FIRMWARE_UPDATE_START = 14,
499 WDSI_FIRMWARE_UPDATE_FAILED = 15,
501 WDSI_FIRMWARE_UPDATE_SUCCESS = 16,
503 WDSI_DOWNLOAD_IN_PROGRESS = 18,
505 WDSI_SESSION_STARTED = 23
506};
507#endif /* CONFIG_MODEM_HL78XX_AIRVANTAGE */
508
509#ifdef CONFIG_HL78XX_GNSS
515enum hl78xx_gnss_event_type {
517 HL78XX_GNSSEV_INITIALISATION = 0,
519 HL78XX_GNSSEV_START = 1,
521 HL78XX_GNSSEV_STOP = 2,
523 HL78XX_GNSSEV_POSITION = 3
524};
530enum hl78xx_event_status {
532 HL78XX_STATUS_FAILED = 0,
534 HL78XX_STATUS_SUCCESS = 1
535};
541enum gnss_position_events {
543 GNSS_FIX_LOST_OR_UNAVAILABLE = 0,
545 GNSS_ESTIMATED_POSITION_AVAILABLE = 1,
547 GNSS_2D_POSITION_AVAILABLE = 2,
549 GNSS_3D_POSITION_AVAILABLE = 3,
551 GNSS_FIX_CHANGED_TO_INVALID = 4
552};
553#endif /* CONFIG_HL78XX_GNSS */
554
564
566 union {
571#ifdef CONFIG_MODEM_HL78XX_AIRVANTAGE
573 enum wdsi_indication wdsi_indication;
574#endif /* CONFIG_MODEM_HL78XX_AIRVANTAGE */
575#ifdef CONFIG_HL78XX_GNSS
577 enum hl78xx_event_status event_status;
579 enum gnss_position_events position_event;
580#endif /* CONFIG_HL78XX_GNSS */
581#ifdef CONFIG_MODEM_HL78XX_LOW_POWER_MODE
582#ifdef CONFIG_MODEM_HL78XX_PSM
583 /* PSM event */
584 enum hl78xx_psmev_event psm_event;
585#endif /* CONFIG_MODEM_HL78XX_PSM */
586#ifdef CONFIG_MODEM_HL78XX_EDRX
587 /* eDRX event */
588 enum hl78xx_edrx_event edrx_event;
589#endif /* CONFIG_MODEM_HL78XX_EDRX */
590#ifdef CONFIG_MODEM_HL78XX_POWER_DOWN
591 /* Power-down event */
592 enum power_down_event power_down_event;
593#endif /* CONFIG_MODEM_HL78XX_POWER_DOWN */
594#endif /* CONFIG_MODEM_HL78XX_LOW_POWER_MODE */
598 bool status;
600 int value;
602};
603
604#if defined(CONFIG_HL78XX_GNSS_AUX_DATA_PARSER) || defined(__DOXYGEN__)
621
648
680
695
703typedef void (*hl78xx_gnss_aux_data_callback_t)(const struct device *dev,
704 const struct hl78xx_gnss_nmea_aux_data *aux_data,
705 uint16_t size);
706
718
725#define GNSS_AUX_DATA_CALLBACK_DEFINE(_dev, _callback) \
726 static const STRUCT_SECTION_ITERABLE(hl78xx_gnss_aux_data_callback, \
727 _hl78xx_gnss_aux_data_callback__##_callback) = { \
728 .dev = _dev, \
729 .callback = _callback, \
730 }
731
737#define GNSS_DT_AUX_DATA_CALLBACK_DEFINE(_node_id, _callback) \
738 static const STRUCT_SECTION_ITERABLE(hl78xx_gnss_aux_data_callback, \
739 _CONCAT_4(_hl78xx_gnss_aux_data_callback_, \
740 DT_DEP_ORD(_node_id), _, _callback)) = { \
741 .dev = DEVICE_DT_GET(_node_id), \
742 .callback = _callback, \
743 }
744#else
751#define GNSS_AUX_DATA_CALLBACK_DEFINE(_dev, _callback)
758#define GNSS_DT_AUX_DATA_CALLBACK_DEFINE(_node_id, _callback)
759#endif
768typedef int (*hl78xx_api_configure_networks)(const struct device *dev,
769 const struct hl78xx_network *networks, uint8_t size);
770
779typedef int (*hl78xx_api_get_supported_networks)(const struct device *dev,
780 const struct hl78xx_network **networks,
781 uint8_t *size);
782
784typedef int (*hl78xx_api_get_signal)(const struct device *dev, const enum cellular_signal_type type,
785 int16_t *value);
786
796typedef int (*hl78xx_api_get_modem_info)(const struct device *dev,
797 const enum cellular_modem_info_type type, char *info,
798 size_t size);
799
801typedef int (*hl78xx_api_get_registration_status)(const struct device *dev,
803 enum cellular_registration_status *status);
804
813typedef int (*hl78xx_api_set_phone_functionality)(const struct device *dev,
814 enum hl78xx_phone_functionality functionality,
815 bool reset);
816
818typedef int (*hl78xx_api_get_phone_functionality)(const struct device *dev,
819 enum hl78xx_phone_functionality *functionality);
820
822typedef int (*hl78xx_api_send_at_cmd)(const struct device *dev, const char *cmd, uint16_t cmd_size,
823 const struct modem_chat_match *response_matches,
824 uint16_t matches_size);
825
835 const char *pattern;
837 const char *const *argv;
840};
841
846
855typedef void (*hl78xx_at_monitor_handler_t)(const struct hl78xx_at_notification *notif,
856 struct hl78xx_at_monitor_entry *mon);
857
866
894
899
907typedef void (*hl78xx_evt_monitor_dispatcher_t)(struct hl78xx_evt *notif);
908
917typedef void (*hl78xx_evt_monitor_handler_t)(struct hl78xx_evt *notif,
918 struct hl78xx_evt_monitor_entry *mon);
919
928
953
966 enum hl78xx_phone_functionality functionality,
967 bool reset);
968
980 enum hl78xx_phone_functionality *functionality);
981
993int hl78xx_api_func_get_signal(const struct device *dev, const enum cellular_signal_type type,
994 int16_t *value);
995
1009 enum hl78xx_modem_info_type type, void *info,
1010 size_t size);
1011
1025int hl78xx_api_func_modem_dynamic_cmd_send(const struct device *dev, const char *cmd,
1026 uint16_t cmd_size,
1027 const struct modem_chat_match *response_matches,
1028 uint16_t matches_size);
1042static inline int hl78xx_get_modem_info(const struct device *dev,
1043 const enum hl78xx_modem_info_type type, void *info,
1044 size_t size)
1045{
1046 return hl78xx_api_func_get_modem_info_vendor(dev, type, info, size);
1047}
1048
1063static inline int hl78xx_set_phone_functionality(const struct device *dev,
1064 enum hl78xx_phone_functionality functionality,
1065 bool reset)
1066{
1067 return hl78xx_api_func_set_phone_functionality(dev, functionality, reset);
1068}
1069
1083static inline int hl78xx_get_phone_functionality(const struct device *dev,
1084 enum hl78xx_phone_functionality *functionality)
1085{
1086 return hl78xx_api_func_get_phone_functionality(dev, functionality);
1087}
1088
1106static inline int hl78xx_modem_cmd_send(const struct device *dev, const char *cmd,
1107 uint16_t cmd_size,
1108 const struct modem_chat_match *response_matches,
1109 uint16_t matches_size)
1110{
1111
1112 return hl78xx_api_func_modem_dynamic_cmd_send(dev, cmd, cmd_size, response_matches,
1113 matches_size);
1114}
1115
1127static inline int hl78xx_parse_rssi(uint8_t rssi, int16_t *value)
1128{
1129 /* AT+CSQ returns a response +CSQ: <rssi>,<ber> where:
1130 * - rssi is a integer from 0 to 31 whose values describes a signal strength
1131 * between -113 dBm for 0 and -51dbM for 31 or unknown for 99
1132 * - ber is an integer from 0 to 7 that describes the error rate, it can also
1133 * be 99 for an unknown error rate
1134 */
1135 if (rssi == CSQ_RSSI_UNKNOWN) {
1136 return -EINVAL;
1137 }
1138
1139 *value = (int16_t)CSQ_RSSI_TO_DB(rssi);
1140 return 0;
1141}
1142
1155static inline int hl78xx_parse_rsrp(uint8_t rsrp, int16_t *value)
1156{
1157 /* AT+CESQ returns a response
1158 * +CESQ: <rxlev>,<ber>,<rscp>,<ecn0>,<rsrq>,<rsrp> where:
1159 * rsrq is a integer from 0 to 34 whose values describes the Reference
1160 * Signal Receive Quality between -20 dB for 0 and -3 dB for 34
1161 * (0.5 dB steps), or unknown for 255
1162 * rsrp is an integer from 0 to 97 that describes the Reference Signal
1163 * Receive Power between -140 dBm for 0 and -44 dBm for 97 (1 dBm steps),
1164 * or unknown for 255
1165 */
1166 if (rsrp == CESQ_RSRP_UNKNOWN) {
1167 return -EINVAL;
1168 }
1169
1170 *value = (int16_t)CESQ_RSRP_TO_DB(rsrp);
1171 return 0;
1172}
1173
1186static inline int hl78xx_parse_rsrq(uint8_t rsrq, int16_t *value)
1187{
1188 if (rsrq == CESQ_RSRQ_UNKNOWN) {
1189 return -EINVAL;
1190 }
1191
1192 *value = (int16_t)CESQ_RSRQ_TO_DB(rsrq);
1193 return 0;
1194}
1195
1203{
1204 mon->flags.paused = true;
1205}
1206
1214{
1215 mon->flags.paused = false;
1216}
1217
1226{
1227 mon->flags.paused = true;
1228}
1229
1238{
1239 mon->flags.paused = false;
1240}
1241
1260
1282
1297
1316
1338
1349#ifdef CONFIG_MODEM_HL78XX_AIRVANTAGE
1359int hl78xx_start_airvantage_dm_session(const struct device *dev);
1360
1369int hl78xx_stop_airvantage_dm_session(const struct device *dev);
1370#endif /* CONFIG_MODEM_HL78XX_AIRVANTAGE */
1371
1372#ifdef CONFIG_MODEM_HL78XX_LOW_POWER_MODE
1395int hl78xx_wakeup_modem(const struct device *dev);
1396
1397#ifdef CONFIG_MODEM_HL78XX_EDRX
1404int hl78xx_edrx_get_time_to_sleep(const struct device *dev);
1405#endif /* CONFIG_MODEM_HL78XX_EDRX */
1406#endif /* CONFIG_MODEM_HL78XX_LOW_POWER_MODE */
1407
1408#ifdef CONFIG_HL78XX_GNSS
1436int hl78xx_enter_gnss_mode(const struct device *dev);
1437
1458int hl78xx_exit_gnss_mode(const struct device *dev);
1459
1469int hl78xx_queue_gnss_search(const struct device *dev);
1470
1478int hl78xx_gnss_set_nmea_output(const struct device *dev, enum nmea_output_port port);
1479
1487int hl78xx_gnss_set_search_timeout(const struct device *dev, uint32_t timeout_ms);
1488
1498int hl78xx_gnss_get_latest_known_fix(const struct device *dev);
1499
1500#ifdef CONFIG_HL78XX_GNSS_SUPPORT_ASSISTED_MODE
1511int hl78xx_gnss_assist_data_get_status(const struct device *dev,
1512 struct hl78xx_agnss_status *status);
1513
1525int hl78xx_gnss_assist_data_download(const struct device *dev, enum hl78xx_agnss_days days);
1526
1536int hl78xx_gnss_assist_data_delete(const struct device *dev);
1537#endif /* CONFIG_HL78XX_GNSS_SUPPORT_ASSISTED_MODE */
1538
1539#endif /* CONFIG_HL78XX_GNSS */
1540
1541#ifdef __cplusplus
1542}
1543#endif
1544
1545#endif /* ZEPHYR_INCLUDE_DRIVERS_HL78XX_APIS_H_ */
Main header file for cellular modem driver API.
System error numbers.
long atomic_t
Atomic integer variable.
Definition atomic_types.h:31
cellular_access_technology
Cellular access technologies (3GPP TS 27.007 AcT).
Definition cellular.h:33
cellular_registration_status
Cellular registration status (3GPP TS 27.007).
Definition cellular.h:109
cellular_signal_type
Cellular signal type.
Definition cellular.h:86
cellular_modem_info_type
Cellular modem info type.
Definition cellular.h:93
static void cmd(uint32_t command)
Execute a display list command by co-processor engine.
Definition ft8xx_reference_api.h:153
#define CESQ_RSRP_UNKNOWN
Unknown RSRP value returned by AT+CESQ command.
Definition hl78xx_apis.h:28
#define CESQ_RSRP_TO_DB(v)
Convert CESQ RSRP value to dBm.
Definition hl78xx_apis.h:43
#define CESQ_RSRQ_TO_DB(v)
Convert CESQ RSRQ value to dB.
Definition hl78xx_apis.h:49
#define CSQ_RSSI_TO_DB(v)
Convert CSQ RSSI value to dBm.
Definition hl78xx_apis.h:37
#define CSQ_RSSI_UNKNOWN
Unknown RSSI value returned by AT+CSQ command.
Definition hl78xx_apis.h:26
#define CESQ_RSRQ_UNKNOWN
Unknown RSRQ value returned by AT+CESQ command.
Definition hl78xx_apis.h:30
#define EINVAL
Invalid argument.
Definition errno.h:60
int(* hl78xx_api_configure_networks)(const struct device *dev, const struct hl78xx_network *networks, uint8_t size)
API function pointer for configuring networks.
Definition hl78xx_apis.h:768
int hl78xx_at_monitor_register(struct hl78xx_at_monitor_entry *mon)
Register an AT monitor.
static int hl78xx_parse_rsrq(uint8_t rsrq, int16_t *value)
Convert raw RSRQ value from the modem to dB.
Definition hl78xx_apis.h:1186
int hl78xx_at_monitor_unregister(struct hl78xx_at_monitor_entry *mon)
Unregister an AT monitor.
static void hl78xx_at_monitor_resume(struct hl78xx_at_monitor_entry *mon)
Resume AT monitor.
Definition hl78xx_apis.h:1237
hl78xx_cell_rat_mode
Cellular radio access technologies.
Definition hl78xx_apis.h:178
@ HL78XX_RAT_MODE_NONE
No RAT mode.
Definition hl78xx_apis.h:196
@ HL78XX_RAT_COUNT
Number of valid RAT modes.
Definition hl78xx_apis.h:198
@ HL78XX_RAT_NB1
NB-IoT radio access technology.
Definition hl78xx_apis.h:182
@ HL78XX_RAT_CAT_M1
LTE Cat-M1 radio access technology.
Definition hl78xx_apis.h:180
hl78xx_phone_functionality
Phone functionality modes.
Definition hl78xx_apis.h:206
@ HL78XX_SIM_POWER_OFF
SIM and modem powered off (minimum functionality).
Definition hl78xx_apis.h:208
@ HL78XX_AIRPLANE
Airplane mode, RF transmitters disabled.
Definition hl78xx_apis.h:212
@ HL78XX_FULLY_FUNCTIONAL
Full functionality, modem operational.
Definition hl78xx_apis.h:210
void(* hl78xx_at_monitor_release_t)(struct hl78xx_at_monitor_entry *mon)
AT monitor release function type.
Definition hl78xx_apis.h:865
int(* hl78xx_api_get_registration_status)(const struct device *dev, enum cellular_access_technology tech, enum cellular_registration_status *status)
API for getting registration status.
Definition hl78xx_apis.h:801
int hl78xx_evt_monitor_register(struct hl78xx_evt_monitor_entry *mon)
Register an event monitor.
int(* hl78xx_api_get_supported_networks)(const struct device *dev, const struct hl78xx_network **networks, uint8_t *size)
API function pointer for getting supported networks.
Definition hl78xx_apis.h:779
void(* hl78xx_evt_monitor_release_t)(struct hl78xx_evt_monitor_entry *mon)
Event monitor release function type.
Definition hl78xx_apis.h:927
int(* hl78xx_api_get_signal)(const struct device *dev, const enum cellular_signal_type type, int16_t *value)
API for getting network signal strength.
Definition hl78xx_apis.h:784
int(* hl78xx_api_set_phone_functionality)(const struct device *dev, enum hl78xx_phone_functionality functionality, bool reset)
API function pointer for setting phone functionality.
Definition hl78xx_apis.h:813
hl78xx_agnss_mode
A-GNSS assistance data validity mode.
Definition hl78xx_apis.h:285
@ HL78XX_AGNSS_MODE_INVALID
Data is not valid (read) / Delete data (write).
Definition hl78xx_apis.h:287
@ HL78XX_AGNSS_MODE_VALID
Data is valid (read) / Download data (write).
Definition hl78xx_apis.h:289
int(* hl78xx_api_send_at_cmd)(const struct device *dev, const char *cmd, uint16_t cmd_size, const struct modem_chat_match *response_matches, uint16_t matches_size)
API for get phone functionality.
Definition hl78xx_apis.h:822
int hl78xx_evt_notif_handler_set(hl78xx_evt_monitor_dispatcher_t handler)
Set the event notification handler for HL78xx modem events.
hl78xx_evt_type
HL78xx event types.
Definition hl78xx_apis.h:413
@ HL78XX_LTE_REGISTRATION_STAT_UPDATE
LTE network registration status changed.
Definition hl78xx_apis.h:417
@ HL78XX_LTE_RAT_UPDATE
LTE Radio Access Technology changed.
Definition hl78xx_apis.h:415
@ HL78XX_EVT_TYPE_COUNT
Event type count.
Definition hl78xx_apis.h:459
@ HL78XX_LTE_FOTA_UPDATE_STATUS
FOTA update status changed.
Definition hl78xx_apis.h:423
@ HL78XX_LTE_MODEM_STARTUP
Modem startup completed.
Definition hl78xx_apis.h:421
@ HL78XX_LTE_SIM_REGISTRATION
SIM registration status changed.
Definition hl78xx_apis.h:419
@ HL78XX_CELLMEAS_UPDATE
Cellular measurement update.
Definition hl78xx_apis.h:457
static int hl78xx_parse_rsrp(uint8_t rsrp, int16_t *value)
Convert raw RSRP value from the modem to dBm.
Definition hl78xx_apis.h:1155
void(* hl78xx_gnss_aux_data_callback_t)(const struct device *dev, const struct hl78xx_gnss_nmea_aux_data *aux_data, uint16_t size)
GNSS auxiliary data callback function type.
Definition hl78xx_apis.h:703
void(* hl78xx_at_monitor_handler_t)(const struct hl78xx_at_notification *notif, struct hl78xx_at_monitor_entry *mon)
AT monitor handler function type.
Definition hl78xx_apis.h:855
static int hl78xx_parse_rssi(uint8_t rssi, int16_t *value)
Convert raw RSSI value from the modem to dBm.
Definition hl78xx_apis.h:1127
void(* hl78xx_evt_monitor_handler_t)(struct hl78xx_evt *notif, struct hl78xx_evt_monitor_entry *mon)
Event monitor handler function type.
Definition hl78xx_apis.h:917
int(* hl78xx_api_get_modem_info)(const struct device *dev, const enum cellular_modem_info_type type, char *info, size_t size)
API function pointer for getting modem information.
Definition hl78xx_apis.h:796
int hl78xx_api_func_set_phone_functionality(const struct device *dev, enum hl78xx_phone_functionality functionality, bool reset)
Set phone functionality mode (internal implementation).
hl78xx_modem_info_type
Cellular modem info type.
Definition hl78xx_apis.h:242
@ HL78XX_MODEM_INFO_CURRENT_BAUD_RATE
Current Baud Rate.
Definition hl78xx_apis.h:252
@ HL78XX_MODEM_INFO_SERIAL_NUMBER
Modem Serial Number.
Definition hl78xx_apis.h:250
@ HL78XX_MODEM_INFO_APN
Access Point Name.
Definition hl78xx_apis.h:244
@ HL78XX_MODEM_INFO_CURRENT_RAT
Current Radio Access Technology.
Definition hl78xx_apis.h:246
@ HL78XX_MODEM_INFO_NETWORK_OPERATOR
Network Operator name.
Definition hl78xx_apis.h:248
static void hl78xx_at_monitor_pause(struct hl78xx_at_monitor_entry *mon)
Pause AT monitor.
Definition hl78xx_apis.h:1225
static void hl78xx_evt_monitor_resume(struct hl78xx_evt_monitor_entry *mon)
Resume monitor.
Definition hl78xx_apis.h:1213
int(* hl78xx_api_get_phone_functionality)(const struct device *dev, enum hl78xx_phone_functionality *functionality)
API for get phone functionality.
Definition hl78xx_apis.h:818
hl78xx_module_status
Module status codes.
Definition hl78xx_apis.h:220
@ HL78XX_MODULE_SIM_NOT_PRESENT
SIM card is not present.
Definition hl78xx_apis.h:226
@ HL78XX_MODULE_READY
Module is ready to receive commands for the TE.
Definition hl78xx_apis.h:222
@ HL78XX_MODULE_UNRECOVERABLE_ERROR
Unrecoverable error.
Definition hl78xx_apis.h:230
@ HL78XX_MODULE_INACTIVE_SIM
Inactive SIM.
Definition hl78xx_apis.h:234
@ HL78XX_MODULE_WAITING_FOR_ACCESS_CODE
Module is waiting for an access code.
Definition hl78xx_apis.h:224
@ HL78XX_MODULE_UNKNOWN_STATE
Unknown state.
Definition hl78xx_apis.h:232
@ HL78XX_MODULE_SIMLOCK
Module is in "SIMlock" state.
Definition hl78xx_apis.h:228
nmea_output_port
NMEA output port options.
Definition hl78xx_apis.h:260
@ NMEA_OUTPUT_CMUX_DLC2
0x06 — NMEA frames are output on CMUX DLC2
Definition hl78xx_apis.h:272
@ NMEA_OUTPUT_CMUX_DLC4
0x08 — NMEA frames are output on CMUX DLC4
Definition hl78xx_apis.h:276
@ NMEA_OUTPUT_SAME_PORT
0x04 — NMEA frames are output on the same port the +GNSSNMEA was received on
Definition hl78xx_apis.h:268
@ NMEA_OUTPUT_NONE
0x00 — NMEA frames are not output
Definition hl78xx_apis.h:262
@ NMEA_OUTPUT_UART1
0x03 — NMEA frames are output on UART1
Definition hl78xx_apis.h:266
@ NMEA_OUTPUT_CMUX_DLC1
0x05 — NMEA frames are output on CMUX DLC1
Definition hl78xx_apis.h:270
@ NMEA_OUTPUT_USB_NMEA_PORT
0x01 — NMEA frames are output on dedicated NMEA port over USB
Definition hl78xx_apis.h:264
@ NMEA_OUTPUT_CMUX_DLC3
0x07 — NMEA frames are output on CMUX DLC3
Definition hl78xx_apis.h:274
static int hl78xx_get_modem_info(const struct device *dev, const enum hl78xx_modem_info_type type, void *info, size_t size)
Get modem info for the device.
Definition hl78xx_apis.h:1042
int hl78xx_api_func_get_phone_functionality(const struct device *dev, enum hl78xx_phone_functionality *functionality)
Get phone functionality mode (internal implementation).
int hl78xx_api_func_get_modem_info_vendor(const struct device *dev, enum hl78xx_modem_info_type type, void *info, size_t size)
Get vendor-specific modem information (internal implementation).
void(* hl78xx_evt_monitor_dispatcher_t)(struct hl78xx_evt *notif)
Event monitor dispatcher function type.
Definition hl78xx_apis.h:907
static void hl78xx_evt_monitor_pause(struct hl78xx_evt_monitor_entry *mon)
Pause monitor.
Definition hl78xx_apis.h:1202
int hl78xx_api_func_modem_dynamic_cmd_send(const struct device *dev, const char *cmd, uint16_t cmd_size, const struct modem_chat_match *response_matches, uint16_t matches_size)
Send dynamic AT command (internal implementation).
int hl78xx_api_func_get_signal(const struct device *dev, const enum cellular_signal_type type, int16_t *value)
Get network signal strength (internal implementation).
static int hl78xx_modem_cmd_send(const struct device *dev, const char *cmd, uint16_t cmd_size, const struct modem_chat_match *response_matches, uint16_t matches_size)
Send an AT command to the modem and wait for a matched response.
Definition hl78xx_apis.h:1106
hl78xx_agnss_days
Number of days of predicted assistance data to download (write command) or number of days before it e...
Definition hl78xx_apis.h:298
@ HL78XX_AGNSS_DAYS_1
Request 1 day of A-GNSS assistance data.
Definition hl78xx_apis.h:300
@ HL78XX_AGNSS_DAYS_3
Request 3 days of A-GNSS assistance data.
Definition hl78xx_apis.h:304
@ HL78XX_AGNSS_DAYS_7
Request 7 days of A-GNSS assistance data.
Definition hl78xx_apis.h:306
@ HL78XX_AGNSS_DAYS_14
Request 14 days of A-GNSS assistance data.
Definition hl78xx_apis.h:308
@ HL78XX_AGNSS_DAYS_28
Request 28 days of A-GNSS assistance data.
Definition hl78xx_apis.h:310
@ HL78XX_AGNSS_DAYS_2
Request 2 days of A-GNSS assistance data.
Definition hl78xx_apis.h:302
static int hl78xx_set_phone_functionality(const struct device *dev, enum hl78xx_phone_functionality functionality, bool reset)
Set the modem phone functionality mode.
Definition hl78xx_apis.h:1063
int hl78xx_evt_monitor_unregister(struct hl78xx_evt_monitor_entry *mon)
Unregister an event monitor.
static int hl78xx_get_phone_functionality(const struct device *dev, enum hl78xx_phone_functionality *functionality)
Get the current phone functionality mode of the modem.
Definition hl78xx_apis.h:1083
enum cellular_access_technology hl78xx_rat_to_access_tech(enum hl78xx_cell_rat_mode rat_mode)
Convert HL78xx RAT mode to standard cellular API.
flags
Definition parser.h:97
__UINT32_TYPE__ uint32_t
Definition stdint.h:90
__INT32_TYPE__ int32_t
Definition stdint.h:74
__UINT8_TYPE__ uint8_t
Definition stdint.h:88
__UINT16_TYPE__ uint16_t
Definition stdint.h:89
__INT64_TYPE__ int64_t
Definition stdint.h:75
__INT16_TYPE__ int16_t
Definition stdint.h:73
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
A-GNSS assistance data status structure.
Definition hl78xx_apis.h:319
uint8_t days
Days remaining before expiry (1-28), valid only when mode=1.
Definition hl78xx_apis.h:323
uint8_t hours
Hours remaining before expiry (0-23), valid only when mode=1.
Definition hl78xx_apis.h:325
uint8_t minutes
Minutes remaining before expiry (0-59), valid only when mode=1.
Definition hl78xx_apis.h:327
enum hl78xx_agnss_mode mode
Validity mode: 0 = invalid/empty, 1 = valid.
Definition hl78xx_apis.h:321
AT monitor entry structure.
Definition hl78xx_apis.h:873
const char * filter
Exact unsolicited AT match pattern to monitor, or NULL for all.
Definition hl78xx_apis.h:875
struct hl78xx_at_monitor_entry * next
Link for runtime list.
Definition hl78xx_apis.h:881
struct hl78xx_at_monitor_entry::@103016176163313070061134333340245207227156107011 flags
Monitor flags.
struct k_work release_work
Work item used to defer release out of unregister/dispatch context.
Definition hl78xx_apis.h:885
uint8_t paused
Monitor is paused.
Definition hl78xx_apis.h:889
const hl78xx_at_monitor_handler_t handler
Monitor callback function.
Definition hl78xx_apis.h:877
atomic_t refcnt
Reference count for list membership and in-flight dispatch snapshots.
Definition hl78xx_apis.h:883
uint8_t direct
Dispatch directly in HL78xx modem RX workqueue context.
Definition hl78xx_apis.h:891
hl78xx_at_monitor_release_t release
Optional callback invoked when the final runtime reference is dropped.
Definition hl78xx_apis.h:879
Parsed unsolicited AT notification payload.
Definition hl78xx_apis.h:833
const char *const * argv
Parsed arguments, where argv[0] is the exact matched token.
Definition hl78xx_apis.h:837
const char * pattern
Canonical unsolicited match pattern from the driver table.
Definition hl78xx_apis.h:835
uint16_t argc
Number of parsed arguments.
Definition hl78xx_apis.h:839
Event monitor entry structure.
Definition hl78xx_apis.h:934
atomic_t refcnt
Reference count for list membership and in-flight dispatch snapshots.
Definition hl78xx_apis.h:942
uint8_t direct
Dispatch in ISR context.
Definition hl78xx_apis.h:950
hl78xx_evt_monitor_release_t release
Optional callback invoked when the final runtime reference is dropped.
Definition hl78xx_apis.h:938
uint8_t paused
Monitor is paused.
Definition hl78xx_apis.h:948
struct hl78xx_evt_monitor_entry * next
Link for runtime list.
Definition hl78xx_apis.h:940
struct k_work release_work
Work item used to defer release callback execution.
Definition hl78xx_apis.h:944
const hl78xx_evt_monitor_handler_t handler
Monitor callback function.
Definition hl78xx_apis.h:936
struct hl78xx_evt_monitor_entry::@057257214263213044053141035213063366342276164211 flags
Monitor flags.
HL78xx event structure.
Definition hl78xx_apis.h:561
enum hl78xx_evt_type type
Event type.
Definition hl78xx_apis.h:563
bool status
Boolean status value.
Definition hl78xx_apis.h:598
struct k_cellmeas_signal_info cellmeas
Cellular measurement event content.
Definition hl78xx_apis.h:596
int value
Integer value.
Definition hl78xx_apis.h:600
enum hl78xx_cell_rat_mode rat_mode
Radio access technology mode (for HL78XX_LTE_RAT_UPDATE).
Definition hl78xx_apis.h:570
union hl78xx_evt::@213261367112170072133125351263244340324115255276 content
Event content (depends on type).
enum cellular_registration_status reg_status
Network registration status (for HL78XX_LTE_REGISTRATION_STAT_UPDATE).
Definition hl78xx_apis.h:568
GNSS auxiliary data callback structure.
Definition hl78xx_apis.h:712
hl78xx_gnss_aux_data_callback_t callback
Callback called when GNSS auxiliary data is published.
Definition hl78xx_apis.h:716
const struct device * dev
Filter callback to GNSS data from this device if not NULL.
Definition hl78xx_apis.h:714
Container for all GNSS auxiliary NMEA data.
Definition hl78xx_apis.h:687
struct nmea_match_epu_data epu
EPU sentence data (HL78xx proprietary position/velocity error).
Definition hl78xx_apis.h:693
struct nmea_match_gsa_data gsa
GSA sentence data (DOP and fix type).
Definition hl78xx_apis.h:689
struct nmea_match_gst_data gst
GST sentence data (pseudorange error statistics).
Definition hl78xx_apis.h:691
Cellular network structure.
Definition hl78xx_apis.h:395
enum hl78xx_cell_rat_mode technology
Cellular access technology.
Definition hl78xx_apis.h:397
uint16_t * bands
List of bands to enable.
Definition hl78xx_apis.h:403
uint16_t size
Size of bands array.
Definition hl78xx_apis.h:405
Cellular measurement signal information.
Definition hl78xx_apis.h:386
int16_t rsrp
Reference Signal Received Power (RSRP) in dBm.
Definition hl78xx_apis.h:388
A structure used to submit work.
Definition kernel.h:4601
Modem chat match.
Definition chat.h:47
Parsed EPU sentence data (HL78xx proprietary position error).
Definition hl78xx_apis.h:656
int64_t vel_east
East velocity error estimate (m/s).
Definition hl78xx_apis.h:674
int64_t vel_hdg
Heading velocity error estimate (m/s).
Definition hl78xx_apis.h:672
int64_t pos_alt
Altitude position error estimate (meters).
Definition hl78xx_apis.h:666
int64_t pos_2d
2D (horizontal) position error estimate (meters)
Definition hl78xx_apis.h:660
int64_t vel_2d
2D (horizontal) velocity error estimate (m/s)
Definition hl78xx_apis.h:670
int64_t vel_north
North velocity error estimate (m/s).
Definition hl78xx_apis.h:676
int64_t pos_lon
Longitude position error estimate (meters).
Definition hl78xx_apis.h:664
int64_t vel_up
Up (vertical) velocity error estimate (m/s).
Definition hl78xx_apis.h:678
int64_t vel_3d
3D velocity error estimate (m/s)
Definition hl78xx_apis.h:668
int64_t pos_3d
3D position error estimate (meters)
Definition hl78xx_apis.h:658
int64_t pos_lat
Latitude position error estimate (meters).
Definition hl78xx_apis.h:662
Parsed GSA sentence data (GNSS DOP and Active Satellites).
Definition hl78xx_apis.h:611
int64_t vdop
Vertical Dilution of Precision (scaled).
Definition hl78xx_apis.h:619
int64_t hdop
Horizontal Dilution of Precision (scaled).
Definition hl78xx_apis.h:617
int64_t pdop
Position Dilution of Precision (scaled).
Definition hl78xx_apis.h:615
int32_t fix_type
Fix type: 1=no fix, 2=2D fix, 3=3D fix.
Definition hl78xx_apis.h:613
Parsed GST sentence data (GNSS Pseudorange Error Statistics).
Definition hl78xx_apis.h:628
int64_t lat_err
Standard deviation of latitude error (meters).
Definition hl78xx_apis.h:642
int64_t alt_err
Standard deviation of altitude error (meters).
Definition hl78xx_apis.h:646
int64_t sd_major
Standard deviation of semi-major axis of error ellipse (meters).
Definition hl78xx_apis.h:636
int64_t lon_err
Standard deviation of longitude error (meters).
Definition hl78xx_apis.h:644
int64_t rms
RMS value of standard deviation of range inputs.
Definition hl78xx_apis.h:634
int64_t orient
Orientation of semi-major axis of error ellipse (degrees from true north).
Definition hl78xx_apis.h:640
uint32_t gst_utc
UTC time of associated position fix (HHMMSS format).
Definition hl78xx_apis.h:632
int64_t sd_minor
Standard deviation of semi-minor axis of error ellipse (meters).
Definition hl78xx_apis.h:638
int32_t i32
Reserved for internal use.
Definition hl78xx_apis.h:630
Macro utilities.