Zephyr API Documentation 4.3.99
A Scalable Open Source RTOS
Loading...
Searching...
No Matches
gnss.h
Go to the documentation of this file.
1/*
2 * Copyright (c) 2023 Trackunit Corporation
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
12
13#ifndef ZEPHYR_INCLUDE_DRIVERS_GNSS_H_
14#define ZEPHYR_INCLUDE_DRIVERS_GNSS_H_
15
24
25#include <zephyr/kernel.h>
26#include <zephyr/types.h>
27#include <zephyr/device.h>
29#include <errno.h>
30
31#ifdef __cplusplus
32extern "C" {
33#endif
34
46
47
48
60
61
62
82
85
86
87
99
117
131
147
152
154typedef int (*gnss_set_fix_rate_t)(const struct device *dev, uint32_t fix_interval_ms);
155
157typedef int (*gnss_get_fix_rate_t)(const struct device *dev, uint32_t *fix_interval_ms);
158
160typedef int (*gnss_set_navigation_mode_t)(const struct device *dev,
161 enum gnss_navigation_mode mode);
162
164typedef int (*gnss_get_navigation_mode_t)(const struct device *dev,
165 enum gnss_navigation_mode *mode);
166
168typedef int (*gnss_set_enabled_systems_t)(const struct device *dev, gnss_systems_t systems);
169
171typedef int (*gnss_get_enabled_systems_t)(const struct device *dev, gnss_systems_t *systems);
172
174typedef int (*gnss_get_supported_systems_t)(const struct device *dev, gnss_systems_t *systems);
175
177typedef int (*gnss_get_latest_timepulse_t)(const struct device *dev, k_ticks_t *timestamp);
178
216
219
229
231typedef void (*gnss_data_callback_t)(const struct device *dev, const struct gnss_data *data);
232
240
258
260typedef void (*gnss_satellites_callback_t)(const struct device *dev,
261 const struct gnss_satellite *satellites,
262 uint16_t size);
263
271
281__syscall int gnss_set_fix_rate(const struct device *dev, uint32_t fix_interval_ms);
282
283static inline int z_impl_gnss_set_fix_rate(const struct device *dev, uint32_t fix_interval_ms)
284{
285 const struct gnss_driver_api *api = (const struct gnss_driver_api *)dev->api;
286
287 if (api->set_fix_rate == NULL) {
288 return -ENOSYS;
289 }
290
291 return api->set_fix_rate(dev, fix_interval_ms);
292}
293
303__syscall int gnss_get_fix_rate(const struct device *dev, uint32_t *fix_interval_ms);
304
305static inline int z_impl_gnss_get_fix_rate(const struct device *dev, uint32_t *fix_interval_ms)
306{
307 const struct gnss_driver_api *api = (const struct gnss_driver_api *)dev->api;
308
309 if (api->get_fix_rate == NULL) {
310 return -ENOSYS;
311 }
312
313 return api->get_fix_rate(dev, fix_interval_ms);
314}
315
325__syscall int gnss_set_navigation_mode(const struct device *dev,
326 enum gnss_navigation_mode mode);
327
328static inline int z_impl_gnss_set_navigation_mode(const struct device *dev,
329 enum gnss_navigation_mode mode)
330{
331 const struct gnss_driver_api *api = (const struct gnss_driver_api *)dev->api;
332
333 if (api->set_navigation_mode == NULL) {
334 return -ENOSYS;
335 }
336
337 return api->set_navigation_mode(dev, mode);
338}
339
349__syscall int gnss_get_navigation_mode(const struct device *dev,
350 enum gnss_navigation_mode *mode);
351
352static inline int z_impl_gnss_get_navigation_mode(const struct device *dev,
353 enum gnss_navigation_mode *mode)
354{
355 const struct gnss_driver_api *api = (const struct gnss_driver_api *)dev->api;
356
357 if (api->get_navigation_mode == NULL) {
358 return -ENOSYS;
359 }
360
361 return api->get_navigation_mode(dev, mode);
362}
363
373__syscall int gnss_set_enabled_systems(const struct device *dev, gnss_systems_t systems);
374
375static inline int z_impl_gnss_set_enabled_systems(const struct device *dev,
376 gnss_systems_t systems)
377{
378 const struct gnss_driver_api *api = (const struct gnss_driver_api *)dev->api;
379
380 if (api->set_enabled_systems == NULL) {
381 return -ENOSYS;
382 }
383
384 return api->set_enabled_systems(dev, systems);
385}
386
396__syscall int gnss_get_enabled_systems(const struct device *dev, gnss_systems_t *systems);
397
398static inline int z_impl_gnss_get_enabled_systems(const struct device *dev,
399 gnss_systems_t *systems)
400{
401 const struct gnss_driver_api *api = (const struct gnss_driver_api *)dev->api;
402
403 if (api->get_enabled_systems == NULL) {
404 return -ENOSYS;
405 }
406
407 return api->get_enabled_systems(dev, systems);
408}
409
419__syscall int gnss_get_supported_systems(const struct device *dev, gnss_systems_t *systems);
420
421static inline int z_impl_gnss_get_supported_systems(const struct device *dev,
422 gnss_systems_t *systems)
423{
424 const struct gnss_driver_api *api = (const struct gnss_driver_api *)dev->api;
425
426 if (api->get_supported_systems == NULL) {
427 return -ENOSYS;
428 }
429
430 return api->get_supported_systems(dev, systems);
431}
432
446__syscall int gnss_get_latest_timepulse(const struct device *dev, k_ticks_t *timestamp);
447
448static inline int z_impl_gnss_get_latest_timepulse(const struct device *dev,
449 k_ticks_t *timestamp)
450{
451 const struct gnss_driver_api *api = (const struct gnss_driver_api *)dev->api;
452
453 if (api->get_latest_timepulse == NULL) {
454 return -ENOSYS;
455 }
456
457 return api->get_latest_timepulse(dev, timestamp);
458}
459
466#if CONFIG_GNSS
467#define GNSS_DATA_CALLBACK_DEFINE(_dev, _callback) \
468 static const STRUCT_SECTION_ITERABLE(gnss_data_callback, \
469 _gnss_data_callback__##_callback) = { \
470 .dev = _dev, \
471 .callback = _callback, \
472 }
473
474#define GNSS_DT_DATA_CALLBACK_DEFINE(_node_id, _callback) \
475 static const STRUCT_SECTION_ITERABLE( \
476 gnss_data_callback, \
477 CONCAT(_gnss_data_callback_, DT_DEP_ORD(_node_id), _, _callback)) = { \
478 .dev = DEVICE_DT_GET(_node_id), \
479 .callback = _callback, \
480 }
481#else
482#define GNSS_DATA_CALLBACK_DEFINE(_dev, _callback)
483#define GNSS_DT_DATA_CALLBACK_DEFINE(_node_id, _callback)
484#endif
485
492#if CONFIG_GNSS_SATELLITES
493#define GNSS_SATELLITES_CALLBACK_DEFINE(_dev, _callback) \
494 static const STRUCT_SECTION_ITERABLE(gnss_satellites_callback, \
495 _gnss_satellites_callback__##_callback) = { \
496 .dev = _dev, \
497 .callback = _callback, \
498 }
499
500#define GNSS_DT_SATELLITES_CALLBACK_DEFINE(_node_id, _callback) \
501 static const STRUCT_SECTION_ITERABLE( \
502 gnss_satellites_callback, \
503 CONCAT(_gnss_satellites_callback_, DT_DEP_ORD(_node_id), _, _callback)) = { \
504 .dev = DEVICE_DT_GET(_node_id), \
505 .callback = _callback, \
506 }
507#else
508#define GNSS_SATELLITES_CALLBACK_DEFINE(_dev, _callback)
509#define GNSS_DT_SATELLITES_CALLBACK_DEFINE(_node_id, _callback)
510#endif
511
515
516#ifdef __cplusplus
517}
518#endif
519
520#include <zephyr/syscalls/gnss.h>
521
522#endif /* ZEPHYR_INCLUDE_DRIVERS_GNSS_H_ */
System error numbers.
uint32_t k_ticks_t
Tick precision used in timeout APIs.
Definition clock.h:48
int(* gnss_get_fix_rate_t)(const struct device *dev, uint32_t *fix_interval_ms)
API for getting fix rate.
Definition gnss.h:157
int(* gnss_set_fix_rate_t)(const struct device *dev, uint32_t fix_interval_ms)
API for setting fix rate.
Definition gnss.h:154
int(* gnss_set_enabled_systems_t)(const struct device *dev, gnss_systems_t systems)
API for enabling systems.
Definition gnss.h:168
int(* gnss_get_navigation_mode_t)(const struct device *dev, enum gnss_navigation_mode *mode)
API for getting navigation mode.
Definition gnss.h:164
int(* gnss_get_latest_timepulse_t)(const struct device *dev, k_ticks_t *timestamp)
API for getting timestamp of last PPS pulse.
Definition gnss.h:177
int(* gnss_get_enabled_systems_t)(const struct device *dev, gnss_systems_t *systems)
API for getting enabled systems.
Definition gnss.h:171
int(* gnss_set_navigation_mode_t)(const struct device *dev, enum gnss_navigation_mode mode)
API for setting navigation mode.
Definition gnss.h:160
int(* gnss_get_supported_systems_t)(const struct device *dev, gnss_systems_t *systems)
API for getting enabled systems.
Definition gnss.h:174
void(* gnss_data_callback_t)(const struct device *dev, const struct gnss_data *data)
Template for GNSS data callback.
Definition gnss.h:231
int gnss_get_enabled_systems(const struct device *dev, gnss_systems_t *systems)
Get enabled GNSS systems.
gnss_fix_status
GNSS fix status.
Definition gnss.h:89
int gnss_set_fix_rate(const struct device *dev, uint32_t fix_interval_ms)
Set the GNSS fix rate.
gnss_pps_mode
GNSS PPS modes.
Definition gnss.h:36
int gnss_get_supported_systems(const struct device *dev, gnss_systems_t *systems)
Get supported GNSS systems.
uint32_t gnss_systems_t
Type storing bitmask of GNSS systems.
Definition gnss.h:84
void(* gnss_satellites_callback_t)(const struct device *dev, const struct gnss_satellite *satellites, uint16_t size)
Template for GNSS satellites callback.
Definition gnss.h:260
int gnss_set_enabled_systems(const struct device *dev, gnss_systems_t systems)
Set enabled GNSS systems.
int gnss_get_fix_rate(const struct device *dev, uint32_t *fix_interval_ms)
Get the GNSS fix rate.
int gnss_get_latest_timepulse(const struct device *dev, k_ticks_t *timestamp)
Get the timestamp of the latest PPS timepulse.
gnss_system
Systems contained in gnss_systems_t.
Definition gnss.h:64
int gnss_set_navigation_mode(const struct device *dev, enum gnss_navigation_mode mode)
Set the GNSS navigation mode.
gnss_fix_quality
GNSS fix quality.
Definition gnss.h:101
gnss_navigation_mode
GNSS navigation modes.
Definition gnss.h:50
int gnss_get_navigation_mode(const struct device *dev, enum gnss_navigation_mode *mode)
Get the GNSS navigation mode.
@ GNSS_FIX_STATUS_ESTIMATED_FIX
Estimated fix acquired.
Definition gnss.h:97
@ GNSS_FIX_STATUS_DGNSS_FIX
Differential GNSS fix acquired.
Definition gnss.h:95
@ GNSS_FIX_STATUS_NO_FIX
No GNSS fix acquired.
Definition gnss.h:91
@ GNSS_FIX_STATUS_GNSS_FIX
GNSS fix acquired.
Definition gnss.h:93
@ GNSS_PPS_MODE_ENABLED_AFTER_LOCK
PPS output enabled from first lock.
Definition gnss.h:42
@ GNSS_PPS_MODE_DISABLED
PPS output disabled.
Definition gnss.h:38
@ GNSS_PPS_MODE_ENABLED
PPS output always enabled.
Definition gnss.h:40
@ GNSS_PPS_MODE_ENABLED_WHILE_LOCKED
PPS output enabled while locked.
Definition gnss.h:44
@ GNSS_SYSTEM_GALILEO
Galileo.
Definition gnss.h:70
@ GNSS_SYSTEM_BEIDOU
BeiDou Navigation Satellite System.
Definition gnss.h:72
@ GNSS_SYSTEM_SBAS
Satellite-Based Augmentation System (SBAS).
Definition gnss.h:78
@ GNSS_SYSTEM_IMES
Indoor Messaging System (IMES).
Definition gnss.h:80
@ GNSS_SYSTEM_GLONASS
GLObal NAvigation Satellite System (GLONASS).
Definition gnss.h:68
@ GNSS_SYSTEM_IRNSS
Indian Regional Navigation Satellite System (IRNSS).
Definition gnss.h:76
@ GNSS_SYSTEM_GPS
Global Positioning System (GPS).
Definition gnss.h:66
@ GNSS_SYSTEM_QZSS
Quasi-Zenith Satellite System (QZSS).
Definition gnss.h:74
@ GNSS_FIX_QUALITY_GNSS_SPS
Standard positioning service.
Definition gnss.h:105
@ GNSS_FIX_QUALITY_RTK
Real-time kinematic.
Definition gnss.h:111
@ GNSS_FIX_QUALITY_DGNSS
Differential GNSS.
Definition gnss.h:107
@ GNSS_FIX_QUALITY_INVALID
Invalid fix.
Definition gnss.h:103
@ GNSS_FIX_QUALITY_ESTIMATED
Estimated fix.
Definition gnss.h:115
@ GNSS_FIX_QUALITY_GNSS_PPS
Precise positioning service.
Definition gnss.h:109
@ GNSS_FIX_QUALITY_FLOAT_RTK
Floating real-time kinematic.
Definition gnss.h:113
@ GNSS_NAVIGATION_MODE_HIGH_DYNAMICS
High dynamics have higher impact on tracking.
Definition gnss.h:58
@ GNSS_NAVIGATION_MODE_ZERO_DYNAMICS
Dynamics have no impact on tracking.
Definition gnss.h:52
@ GNSS_NAVIGATION_MODE_BALANCED_DYNAMICS
Low and high dynamics have equal impact on tracking.
Definition gnss.h:56
@ GNSS_NAVIGATION_MODE_LOW_DYNAMICS
Low dynamics have higher impact on tracking.
Definition gnss.h:54
#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
#define NULL
Definition iar_missing_defs.h:20
Public kernel APIs.
__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
Runtime device structure (in ROM) per driver instance.
Definition device.h:513
const void * api
Address of the API structure exposed by the device instance.
Definition device.h:519
GNSS callback structure.
Definition gnss.h:234
gnss_data_callback_t callback
Callback called when GNSS data is published.
Definition gnss.h:238
const struct device * dev
Filter callback to GNSS data from this device if not NULL.
Definition gnss.h:236
GNSS data structure.
Definition gnss.h:221
struct navigation_data nav_data
Navigation data acquired.
Definition gnss.h:223
struct gnss_info info
GNSS info when navigation data was acquired.
Definition gnss.h:225
struct gnss_time utc
UTC time when data was acquired.
Definition gnss.h:227
<span class="mlabel">Driver Operations</span> GNSS driver operations
Definition gnss.h:182
gnss_set_fix_rate_t set_fix_rate
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition gnss.h:186
gnss_set_enabled_systems_t set_enabled_systems
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition gnss.h:202
gnss_get_latest_timepulse_t get_latest_timepulse
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition gnss.h:214
gnss_get_navigation_mode_t get_navigation_mode
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition gnss.h:198
gnss_set_navigation_mode_t set_navigation_mode
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition gnss.h:194
gnss_get_enabled_systems_t get_enabled_systems
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition gnss.h:206
gnss_get_fix_rate_t get_fix_rate
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition gnss.h:190
gnss_get_supported_systems_t get_supported_systems
<span class="op-badge op-opt" title="This operation MAY optionally be implemented by the driver....
Definition gnss.h:210
GNSS info data structure.
Definition gnss.h:119
enum gnss_fix_quality fix_quality
The fix quality.
Definition gnss.h:129
uint32_t hdop
Horizontal dilution of precision in 1/1000.
Definition gnss.h:123
int32_t geoid_separation
Geoid separation in millimeters.
Definition gnss.h:125
enum gnss_fix_status fix_status
The fix status.
Definition gnss.h:127
uint16_t satellites_cnt
Number of satellites being tracked.
Definition gnss.h:121
GNSS satellite structure.
Definition gnss.h:242
uint8_t prn
Pseudo-random noise sequence.
Definition gnss.h:244
uint16_t azimuth
Azimuth relative to True North in degrees [0, 359].
Definition gnss.h:250
uint8_t elevation
Elevation in degrees [0, 90].
Definition gnss.h:248
uint8_t is_corrected
True if satellite tracking has RTK corrections.
Definition gnss.h:256
uint8_t snr
Signal-to-noise ratio in dB.
Definition gnss.h:246
enum gnss_system system
System of satellite.
Definition gnss.h:252
uint8_t is_tracked
True if satellite is being tracked.
Definition gnss.h:254
GNSS callback structure.
Definition gnss.h:265
const struct device * dev
Filter callback to GNSS data from this device if not NULL.
Definition gnss.h:267
gnss_satellites_callback_t callback
Callback called when GNSS satellites is published.
Definition gnss.h:269
GNSS time data structure.
Definition gnss.h:133
uint8_t month
Month [1, 12].
Definition gnss.h:143
uint16_t millisecond
Millisecond [0, 60999].
Definition gnss.h:139
uint8_t minute
Minute [0, 59].
Definition gnss.h:137
uint8_t century_year
Year [0, 99].
Definition gnss.h:145
uint8_t hour
Hour [0, 23].
Definition gnss.h:135
uint8_t month_day
Day of month [1, 31].
Definition gnss.h:141
Navigation data structure.
Definition navigation.h:25