/**************************************************************************** * arch/arm/include/cxd56xx/gnss.h * * Copyright 2018,2019 Sony Semiconductor Solutions Corporation * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * 1. Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * 2. Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in * the documentation and/or other materials provided with the * distribution. * 3. Neither the name of Sony Semiconductor Solutions Corporation nor * the names of its contributors may be used to endorse or promote * products derived from this software without specific prior written * permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE * POSSIBILITY OF SUCH DAMAGE. * ****************************************************************************/ #ifndef __ARCH_ARM_INCLUDE_CXD56XX_GNSS_H #define __ARCH_ARM_INCLUDE_CXD56XX_GNSS_H #ifdef __cplusplus #define EXTERN extern "C" extern "C" { #else #define EXTERN extern #endif /**************************************************************************** * include files ****************************************************************************/ #include /* Start the positioning. * This command is used to start the positioning. * * param arg * Start mode value of uint32_t. Not address pointer. * One of #CXD56_GNSS_STMOD_COLD, #CXD56_GNSS_STMOD_WARM, #CXD56_GNSS_STMOD_HOT */ #define CXD56_GNSS_IOCTL_START 1 /* Stop the positioning. * This command is used to stop the positioning. GNSS will transition to idle * mode. * * param arg * Parameter is Unnecessary. Set Zero. */ #define CXD56_GNSS_IOCTL_STOP 2 /* Select the satellite systems. * This command is used to select the satellite systems to be used for * positioning. * The satellite system is defined as a bit, and you can select multiple * satellites using OR value. * Do not specify zero, please select at least one system. * This command must be issued in idle mode. * * param[in] arg * Satellite system bitmap value of uint32_t. Not address pointer. * Bit OR of #CXD56_GNSS_SAT_GPS, #CXD56_GNSS_SAT_GLONASS, * #CXD56_GNSS_SAT_SBAS, #CXD56_GNSS_SAT_QZ_L1CA, #CXD56_GNSS_SAT_QZ_L1S. */ #define CXD56_GNSS_IOCTL_SELECT_SATELLITE_SYSTEM 3 /* Get satellite system to be used for measurement GNSS. * The satellite system setting of the subscriber that a * SF_COMMAND_COMMON_START command was published is acquired. * * param[out] arg * Address pinting to of uint32_t object. * Bit OR of #CXD56_GNSS_SAT_GPS, #CXD56_GNSS_SAT_GLONASS, * #CXD56_GNSS_SAT_SBAS, #CXD56_GNSS_SAT_QZ_L1CA, #CXD56_GNSS_SAT_QZ_L1S. */ #define CXD56_GNSS_IOCTL_GET_SATELLITE_SYSTEM 4 /* Set the receiver approximate position. * The receiver position is set using ellipsoidal coordinates (latitude, * longitude, altitude). * If ellipsoidal coordinates setting, north latitude and east longitude * direction as positive. * When specifying south latitude or west longitude, set it to a negative * value. * * The receiver position, current time and TCXO offset value, ephemeris data * are required in order to initiate a hot start * so the position must have been set to GNSS using this command prior to hot * start. * Set GNSS configure with this command before hot start if receiver position * is not stored in the memory. * This command must be issued in idle mode. * * param[in] arg * Address pointing to struct #cxd56_gnss_ellipsoidal_position_s object. */ #define CXD56_GNSS_IOCTL_SET_RECEIVER_POSITION_ELLIPSOIDAL 5 /* Set the receiver approximate position. * The receiver position is set using orthogonal coordinates (x, y, z). * The receiver position, current time and TCXO offset value, ephemeris data * are required in order to initiate a hot start. * Set the position with this command before hot start if no position * information in GNSS. * This command must be issued in idle mode. * * param[in] arg * Address pointing to struct #cxd56_gnss_orthogonal_position_s object. */ #define CXD56_GNSS_IOCTL_SET_RECEIVER_POSITION_ORTHOGONAL 6 /* Set receiver operation mode. * Can set operation mode and measurement cycle. * The cycle data is 1000msec aligned only and cannot set 0msec. * * param[in] arg * Address pointing to struct #cxd56_gnss_ope_mode_param_s object. */ #define CXD56_GNSS_IOCTL_SET_OPE_MODE 7 /* Get receiver operation mode. * * param[out] arg * Address pointing to struct #cxd56_gnss_ope_mode_param_s object. */ #define CXD56_GNSS_IOCTL_GET_OPE_MODE 8 /* Set receiver TCXO offset value to GNSS. * Receiver TCXO offset value set in "Hz". It can specify positive direction * or negative direction by a sign int the argument. * The receiver position, current time and TCXO offset value, ephemeris data * are required in order to initiate a hot start. * Set the offset with this command before hot start if no offset information * in GNSS. * This command must be issued in idle mode. * * param[in] arg * TCXO offset value of uint32_t. Not address pointer. * Address pointing to a offset value(int32_t) object. */ #define CXD56_GNSS_IOCTL_SET_TCXO_OFFSET 9 /* Get receiver TCXO offset value. * * param[out] arg * Address pointing to int32_t object. */ #define CXD56_GNSS_IOCTL_GET_TCXO_OFFSET 10 /* Set receiver time to GNSS. * The UTC time standard is used for the receiver time stored in a argument of * cxd56_gnss_datetime type. * The receiver position, current time and TCXO offset value, ephemeris data * are required in order to initiate a hot start. * Set the time with this command before hot start if GPS time is not counted * in RTC. * This command must be issued in idle mode. * * param[in] arg * Address pointing to struct #cxd56_gnss_datetime_s object. */ #define CXD56_GNSS_IOCTL_SET_TIME 11 /* Get the latest almanac data extracted from the satellite signal. * Almanac data size is 2048(GPS) or 576(GLONASS) bytes. * This command must be issued in idle mode. * * param[out] arg * Address pointing to struct #cxd56_gnss_orbital_param_s object. */ #define CXD56_GNSS_IOCTL_GET_ALMANAC 12 /* Set almanac data. * Almanac data size is 2048(GPS) or 576(GLONASS) bytes. * This command must be issued in idle mode. * * param[in] arg * Address pointing to struct #cxd56_gnss_orbital_param_s object. */ #define CXD56_GNSS_IOCTL_SET_ALMANAC 13 /* Get the latest ephemeris data extracted from the satellite signal. * Ephemeris data size is 3072(GPS) or 1152(GLONASS) bytes. * This command must be issued in idle mode. * * param[out] arg * Address pointing to struct #cxd56_gnss_orbital_param_s object. */ #define CXD56_GNSS_IOCTL_GET_EPHEMERIS 14 /* Set ephemeris data. * Ephemeris data size is 3072(GPS) or 1152(GLONASS) bytes. * This command must be issued in idle mode. * * param[in] arg * Address pointing to struct #cxd56_gnss_orbital_param_s object. */ #define CXD56_GNSS_IOCTL_SET_EPHEMERIS 15 /* This command is used to save the backup data. The backup data contents are * saved in the flash memory. * The backup data saved in the flash memory is automatically restored at * boot-up of GNSS. * The receiver position, ephemeris, almanac, TCXO offset and other * information required * for hot start are included in the backup data. * By saving it with this command, you can restore the information necessary * for starting except time at boot time. * This command must be issued in idle mode. * * param arg * Parameter is Unnecessary. Set Zero. */ #define CXD56_GNSS_IOCTL_SAVE_BACKUP_DATA 16 /* Erase backup data on flash memory. * This command must be issued in idle mode. * * param arg * Parameter is Unnecessary. Set Zero. */ #define CXD56_GNSS_IOCTL_ERASE_BACKUP_DATA 17 /* Open CEP data file for GNSS device. * * Open the CEP data file and make the data available from the device. * The file name to be opened is specified by Kconfig. * This command must be issued in idle mode, between calling open function * for GNSS device and issuing the command CXD56_GNSS_IOCTL_START. * * param[in] arg * Parameter is Unnecessary. Set Zero. */ #define CXD56_GNSS_IOCTL_OPEN_CEP_DATA 18 /* Close the CEP data file opened with the command * CXD56_GNSS_IOCTL_OPEN_CEP_DATA. * This command must be issued in idle mode. * * param arg * Parameter is Unnecessary. Set Zero. */ #define CXD56_GNSS_IOCTL_CLOSE_CEP_DATA 19 /* Check the validity of the CEP assist data. * Return error code if the data file dose not exist or data is invalid. * * param arg * Parameter is Unnecessary. Set Zero. */ #define CXD56_GNSS_IOCTL_CHECK_CEP_DATA 20 /* Get age(lifetime) information of assist data. * Age includes start date and time represented by the Julian date(MJD), and * validity period. * Conversion MJD to YMD is following formula. * (Assist data start time must 0:00 (GPS time))\n * If the data file dose not exist, an error will be returned. * * JD12 = floor(MJD + 2400001) * e = floor((JD12 - 1867216.25) / 36524.25) * f = JD12 + (e - floor(e / 4) + 1) * g = f + 1524 * h = floor((g - 122.1) / 365.25) * i = floor(365.25 * h) * j = floor((g - i) / 30.6001) * * d = g - i - floor(30.6001 * j) * m = j - 12 * floor(j / 14) - 1 * w = h - 4716 + floor((14 - m) / 12) * * if w > 0 then y = w else y = w - 1 * * param[in] arg * Address pointing to struct #cxd56_gnss_cep_age_s object. */ #define CXD56_GNSS_IOCTL_GET_CEP_AGE 21 /* Reset CEP assist data init flag & valid flag. * This command for notifying that the data has been updated. * Execute this command before measurement if assist data updated. * * param arg * Parameter is Unnecessary. Set Zero. */ #define CXD56_GNSS_IOCTL_RESET_CEP_FLAG 22 /* Currently version not supported. */ #define CXD56_GNSS_IOCTL_RTK_START 23 /* Currently version not supported. */ #define CXD56_GNSS_IOCTL_RTK_STOP 24 /* Currently version not supported. */ #define CXD56_GNSS_IOCTL_RTK_SET_INTERVAL 25 /* Currently version not supported. */ #define CXD56_GNSS_IOCTL_RTK_GET_INTERVAL 26 /* Currently version not supported. */ #define CXD56_GNSS_IOCTL_RTK_SELECT_SATELLITE_SYSTEM 27 /* Currently version not supported. */ #define CXD56_GNSS_IOCTL_RTK_GET_SATELLITE_SYSTEM 28 /* Currently version not supported. */ #define CXD56_GNSS_IOCTL_RTK_SET_EPHEMERIS_ENABLER 29 /* Currently version not supported. */ #define CXD56_GNSS_IOCTL_RTK_GET_EPHEMERIS_ENABLER 30 /* Set acquist data. * * param[in] arg * Address pointing to struct #cxd56_gnss_agps_acquist_s object. */ #define CXD56_GNSS_IOCTL_AGPS_SET_ACQUIST 31 /* Set frame time. * * param[in] arg * Address pointing to struct #cxd56_gnss_agps_frametime_s object. */ #define CXD56_GNSS_IOCTL_AGPS_SET_FRAMETIME 32 /* Set tau_GPS(τGPS: Differnece of system time between GPS and Glonass * system). * * param[in] arg * Address pointing to tau GPS value(τGPS, double) object. */ #define CXD56_GNSS_IOCTL_AGPS_SET_TAU_GPS 33 /* Set high precision receiver time. * * param arg * Address pointing to struct #cxd56_gnss_agps_time_gps_s object. */ #define CXD56_GNSS_IOCTL_AGPS_SET_TIME_GPS 34 /* Clear info(s) for hot start. * * param arg * Bit OR of #CXD56_GNSS_GCLR_EPH, #CXD56_GNSS_GCLR_ALM, #CXD56_GNSS_GCLR_PV, * #CXD56_GNSS_GCLR_TIME, #CXD56_GNSS_GCLR_TCXO, #CXD56_GNSS_GCLR_ALL. */ #define CXD56_GNSS_IOCTL_AGPS_CLEAR_RECEIVER_INFO 35 /* Set acquist data. * * param[in] arg * Address pointing to struct #cxd56_gnss_agps_tow_assist_s object. */ #define CXD56_GNSS_IOCTL_AGPS_SET_TOW_ASSIST 36 /* Set acquist data. * * param[in] arg * Address pointing to struct #cxd56_gnss_agps_utc_model_s object. */ #define CXD56_GNSS_IOCTL_AGPS_SET_UTC_MODEL 37 /* Enable or not to output spectrum data of GNSS signal. * * param arg * Address pointing to struct #cxd56_gnss_spectrum_control_s object. */ #define CXD56_GNSS_IOCTL_SPECTRUM_CONTROL 38 /* Start GPS factory test. * Test results can get by CXD56_GNSS_IOCTL_FACTORY_GET_TEST_RESULT command * after execute this command and waiting 1 second. * This command execute during measurement stop. * After executing this command, it is not accepted except for * CXD56_GNSS_IOCTL_FACTORY_GET_TEST_RESULT and * CXD56_GNSS_IOCTL_FACTORY_STOP_TEST. * * param[in] arg * Address pointing to struct #cxd56_gnss_test_info_s object. */ #define CXD56_GNSS_IOCTL_FACTORY_START_TEST 39 /* Stop GPS factory test. * * param arg * Parameter is Unnecessary. Set Zero. */ #define CXD56_GNSS_IOCTL_FACTORY_STOP_TEST 40 /* Get GPS factory test result. * * param[out] arg * Address pointing to struct #cxd56_gnss_test_result_s object. */ #define CXD56_GNSS_IOCTL_FACTORY_GET_TEST_RESULT 41 /* Set signal information for GNSS events from GNSS device driver. * The field 'enable' of struct #cxd56_gnss_signal_setting_s to be given * as a parameter must be specified as 1 when setting and 0 when unsetting. * param[out] arg * Address pointing to struct #cxd56_gnss_signal_setting_s object. */ #define CXD56_GNSS_IOCTL_SIGNAL_SET 42 /* Start PVTLOG. * Automatically saves the PVT log in the GNSS core. * * param arg * Address pointing to #cxd56_pvtlog_setting_s object. */ #define CXD56_GNSS_IOCTL_PVTLOG_START 43 /* Stop PVTLOG. * param arg * Parameter is Unnecessary. Set Zero. */ #define CXD56_GNSS_IOCTL_PVTLOG_STOP 44 /* Delete PVTlog data. * Delete the log data saved in the GNSS core. * param arg * Parameter is Unnecessary. Set Zero. */ #define CXD56_GNSS_IOCTL_PVTLOG_DELETE_LOG 45 /* Get PVTLOG status. * This command is for getting the log stored status. * The status data include stored log data count and logging time. * * param arg * Address pointing to #cxd56_pvtlog_status_s. */ #define CXD56_GNSS_IOCTL_PVTLOG_GET_STATUS 46 /* Currently version not supported. */ #define CXD56_GNSS_IOCTL_NAVMSG_START 47 /* Set ephemeris data. * Only satellites with data are output. * Ephemeris data size is variable. * Ephemeris data max size is 3072(GPS) or 1152(GLONASS) bytes. * This command must be issued in idle mode. * * param[in] arg * Address pointing to struct #cxd56_gnss_set_var_ephemeris_s object. */ #define CXD56_GNSS_IOCTL_SET_VAR_EPHEMERIS 48 /* Get the latest ephemeris data extracted from the satellite signal. * Only satellites with data are output. * Ephemeris data size is variable. * Ephemeris data max size is 3072(GPS) or 1152(GLONASS) bytes. * This command must be issued in idle mode. * * param[out] arg * Address pointing to struct #cxd56_gnss_get_var_ephemeris_s object. */ #define CXD56_GNSS_IOCTL_GET_VAR_EPHEMERIS 49 /* check macros for GNSS commands */ #define CXD56_GNSS_IOCTL_INVAL 0 #define CXD56_GNSS_IOCTL_MAX 50 /* Same value to GD Start mode CXD56_GNSS_STMOD_XXXX for GD_Start */ #define CXD56_GNSS_STMOD_COLD 0 /* Cold Start */ #define CXD56_GNSS_STMOD_WARM 1 /* Warm Start */ #define CXD56_GNSS_STMOD_WARM_ACC2 2 /* Warm Start, better accuracy, less TTFF than WARM */ #define CXD56_GNSS_STMOD_HOT 3 /* Hot Start */ #define CXD56_GNSS_STMOD_HOT_ACC 4 /* Hot Start, better accuracy, less TTFF than HOT */ #define CXD56_GNSS_STMOD_HOT_ACC2 5 /* Hot Start, better accuracy, less TTFF than ACC */ #define CXD56_GNSS_STMOD_HOT_ACC3 6 /* Optimized hot start, better TTFF than HOT */ #define CXD56_GNSS_STMOD_GSPQ CXD56_GNSS_STMOD_HOT_ACC3 #define CXD56_GNSS_GPS_ALMANAC_SIZE 2048 /* GPS Almanac Size */ #define CXD56_GNSS_GPS_EPHEMERIS_SIZE 3072 /* GPS Ephemeris Size */ #define CXD56_GNSS_GLONASS_ALMANAC_SIZE 576 /* GLONASS Almanac Size */ #define CXD56_GNSS_GLONASS_EPHEMERIS_SIZE 1152 /* GLONASS Ephemeris Size */ #define CXD56_GNSS_QZSSL1CA_ALMANAC_SIZE 640 /* GPS Almanac Size */ #define CXD56_GNSS_QZSSL1CA_EPHEMERIS_SIZE 960 /* GPS Ephemeris Size */ /* PVTLOG notify threshold of the stored data. */ #define CXD56_GNSS_PVTLOG_THRESHOLD_FULL 0 /* Limit of the storage size */ #define CXD56_GNSS_PVTLOG_THRESHOLD_HALF 1 /* 1/2 of the Storage size */ #define CXD56_GNSS_PVTLOG_THRESHOLD_ONE_DATA 2 /* Each log stored */ /* Offset for last GNSS data */ #define CXD56_GNSS_READ_OFFSET_LAST_GNSS 0x0000 /* Offset for GNSS data */ #define CXD56_GNSS_READ_OFFSET_GNSS(N) (0x1000 + 0x800 * (N)) /* Offset for AGPS data */ #define CXD56_GNSS_READ_OFFSET_AGPS 0x5000 /* Offset for RTK data */ #define CXD56_GNSS_READ_OFFSET_RTK 0x6000 /* Offset for RTK GPS Ephemeris data */ #define CXD56_GNSS_READ_OFFSET_GPSEPHEMERIS 0x7000 /* Offset for RTK GLONASS Ephemeris data */ #define CXD56_GNSS_READ_OFFSET_GLNEPHEMERIS 0x8000 /* Offset for SBAS data */ #define CXD56_GNSS_READ_OFFSET_SBAS 0x9000 /* Offset for DC report */ #define CXD56_GNSS_READ_OFFSET_DCREPORT 0x9800 /* Offset for Spectrum data */ #define CXD56_GNSS_READ_OFFSET_SPECTRUM 0xa000 /* Offset for GNSS info */ #define CXD56_GNSS_READ_OFFSET_INFO 0xf000 /* Offset for PVTLOG data */ #define CXD56_GNSS_READ_OFFSET_PVTLOG 0x10000 /* Signal types from GNSS */ /* Signal type is GNSS */ #define CXD56_GNSS_SIG_GNSS 0 /* Signal type is PVTLog */ #define CXD56_GNSS_SIG_PVTLOG 2 /* Signal type is AGPS */ #define CXD56_GNSS_SIG_AGPS 3 /* Signal type is RTK Career Phase */ #define CXD56_GNSS_SIG_RTK 4 /* Signal type is Soectrum */ #define CXD56_GNSS_SIG_SPECTRUM 5 /* Signal type is RTK GPS Ephemeris */ #define CXD56_GNSS_SIG_GPSEPHEMERIS 11 /* Signal type is RTK GLONASS Ephemeris */ #define CXD56_GNSS_SIG_GLNEPHEMERIS 12 /* Signal type is SBAS */ #define CXD56_GNSS_SIG_SBAS 14 /* Signal type is QZSS DC report */ #define CXD56_GNSS_SIG_DCREPORT 15 /**************************************************************************** * Public Types ****************************************************************************/ /* GNSS operation mode and cycle */ struct cxd56_gnss_ope_mode_param_s { /* receiver operation mode * 0: No Change Operation * 1: Normal(default) */ uint32_t mode; /* Positioning cycle[ms] * The cycle data is 1000msec aligned only and * cannot set 0msec. * (Init value 1000) */ uint32_t cycle; }; /* Sattelite almanac, ephemeris data */ struct cxd56_gnss_orbital_param_s { uint32_t type; /* One of #CXD56_GNSS_DATA_GPS, * #CXD56_GNSS_DATA_GLONASS or * #CXD56_GNSS_DATA_QZSSL1CA. */ FAR uint32_t *data; /* Address pointing to almanac or ephemeris data buffer */ }; /* date and time */ struct cxd56_gnss_datetime_s { struct cxd56_gnss_date_s date; /* date */ struct cxd56_gnss_time_s time; /* time */ }; /* ellipsoidal position */ struct cxd56_gnss_ellipsoidal_position_s { double latitude; /* latitude[degree] */ double longitude; /* longitude[degree] */ double altitude; /* altitude[meter] */ }; /* ellipsoidal position */ struct cxd56_gnss_orthogonal_position_s { int32_t x; /* x[meter] */ int32_t y; /* y[meter] */ int32_t z; /* z[meter] */ }; /* Currently version not supported. */ struct cxd56_gnss_cep_data_s { FAR uint32_t *data; uint32_t size; uint32_t counter; }; /* CEP age info */ struct cxd56_gnss_cep_age_s { float age; /* age */ float cepi; /* cepi */ }; /* acquist data and size for AGPS */ struct cxd56_gnss_agps_acquist_s { FAR uint8_t *data; /* Address pointing to aquist data buffer */ uint16_t size; /* Aquist data size */ }; /* tow assist data and size for AGPS */ struct cxd56_gnss_agps_tow_assist_s { FAR uint8_t *data; /* Address pointing to tow assist data buffer */ uint16_t size; /* assist data size */ }; /* utc model data and size for AGPS */ struct cxd56_gnss_agps_utc_model_s { FAR uint8_t *data; /* Address pointing to utc model data buffer */ uint16_t size; /* utc model data size */ }; /* Time from frame start[sec]. */ struct cxd56_gnss_agps_frametime_s { uint16_t sec; /* Integer part */ uint32_t frac; /* Fraction part */ }; /* High precision receiver time */ struct cxd56_gnss_agps_time_gps_s { struct cxd56_gnss_date_s date; /* Date */ struct cxd56_gnss_time_s time; /* Time */ }; /* different time between AGPS and GLONASS Time */ struct cxd56_gnss_agps_tau_gps_s { double taugps; /* tau Time */ }; /* Signal spectrum output control parameter */ struct cxd56_gnss_spectrum_control_s { uint8_t enable; /* Spectrum data output enable */ uint32_t time; /* Passed Time */ uint8_t point1; /* Monitor point1 (7-9) */ uint8_t point2; /* Monitor point2 (7-9) */ uint8_t step1; /* Sampling step1 (0-7) */ uint8_t step2; /* Sampling step2 (0-7) */ }; struct cxd56_gnss_test_info_s { uint32_t satellite; /* Specify satellite by svID */ uint32_t reserve1; /* Reserve (always specify 0) */ uint32_t reserve2; /* Reserve (always specify 0) */ uint32_t reserve3; /* Reserve (always specify 0) */ }; struct cxd56_gnss_test_result_s { float cn; /* CN ratio [dB-Hz] */ float doppler; /* Doppler [Hz] */ }; /* signal setting for reading data asychronously * The field 'enable' of struct #cxd56_gnss_signal_setting_s to be given as a * parameter must be specified as 1 when setting and 0 when unsetting. * Field 'gnsssig' specifies the value of 'Signal types from GNSS', * this is not POSIX signal. * Field 'signo' is application specific number of POSIX signal. * 'data' will be passed as an argument to the handler. */ struct cxd56_gnss_signal_setting_s { int fd; /* The descriptor for signal handler */ uint8_t enable; /* 1 when set this setting, 0 is clear */ uint8_t gnsssig; /* GNSS signal as CXD56_GNSS_SIG_GNSS, _AGPS, etc. */ int signo; /* system signal number to notify read completion */ FAR void *data; /* user data */ }; /* Information for use after being signaled to read data asychronously */ struct cxd56_gnss_signal_info_s { int fd; /* The file descriptor to use in signal handler */ uint8_t gnsssig; /* GNSS signal as CXD56_GNSS_SIG_GNSS, _AGPS, etc. */ int signo; /* system signal number to notify read completion */ FAR void *data; /* user data */ }; /* PVTLOG setting Parameter. * If the log interval(cycle) is smaller than the positioning interval, * it is logged every positioning interval. * The output timing is specified by the ratio to the log buffer in the * GNSS device by threshold. Possible values are * #CXD56_GNSS_PVTLOG_THRESHOLD_FULL, #CXD56_GNSS_PVTLOG_THRESHOLD_HALF, * and #CXD56_GNSS_PVTLOG_THRESHOLD_ONE_DATA. */ struct cxd56_pvtlog_setting_s { uint32_t cycle; /* PVT log interval in seconds */ uint32_t threshold; /* Notification threshold of log storage amount */ }; struct cxd56_pvtlog_status_s { struct cxd56_gnss_status_s status; /* The stored logs status */ }; struct cxd56_rtk_setting_s { int interval; /* RTK data output interval */ uint32_t gnss; /* RTK satellite setting */ int ephout; /* Ephemeris notify enable setting */ uint64_t sbasout; /* sbas notify enable setting */ }; struct cxd56_gnss_set_var_ephemeris_s { uint32_t *data; /* Address pointing to ephemeris data buffer */ uint32_t size; /* ephemeris data buffer size */ }; struct cxd56_gnss_get_var_ephemeris_s { uint32_t type; /* One of #CXD56_GNSS_DATA_GPS, #CXD56_GNSS_DATA_GLONASS. */ uint32_t *data; /* Address pointing to ephemeris data buffer */ uint32_t size; /* ephemeris data buffer size */ }; #undef EXTERN #ifdef __cplusplus } #endif #endif /* __ARCH_ARM_INCLUDE_CXD56XX_GNSS_H */