nuttx/arch/arm/include/cxd56xx/gnss.h
Alin Jerpelea 077ef70b0c cxd56xx improvements (#48)
* arch: cxd56xx: Add size limitation for I2C SCU xfer

This is a fw restriction, unroll loop because it can be transfer
up to 16 bytes.

* arch: cxd56xx: Fix lack of leave_critical_section

add the missing leave_critical_section

* arch: cxd56xx: Remove unnecessary file

this header is duplicate and we can remove it

* arch: cxd56xx: Cosmetic change

remove space after function

* arch: cxd56xx: update topreg registers

the topreg registers are updated to match the cxd5602 HW

* arch: cxd56xx: Add voltage setting for low battery notification

Add voltage setting for low battery notification

* arch: cxd56xx: Improve perfomance of SD card

Improve a problem that the clock of SD Host Controller is lower than the
expected value in SDR25 transfer mode.

* arch: cxd56xx: Cosmetic changes

cleanup to comply with coding standard

* boards: cxd56xx: Cosmetic changes

updates to comply with coding standard

* boards: cxd56xx: Fix SD card cannot mount issue

SD card cannot mount when connecting and disconnecting three times
or more due to wrong state of parameter 'initialized'.

This change enables to skip swtching initialized state when mount
failed.
2020-01-07 11:21:58 -03:00

870 lines
24 KiB
C

/****************************************************************************
* 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 <arch/chip/gnss_type.h>
/* 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(&tau;GPS: Differnece of system time between GPS and Glonass
* system).
*
* param[in] arg
* Address pointing to tau GPS value(&tau;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 */