1 /* 2 * Copyright (c) 2022 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16 #ifndef OHOS_HDI_LOCATION_LOCATION_VENDOR_LIB_H 17 #define OHOS_HDI_LOCATION_LOCATION_VENDOR_LIB_H 18 19 #include <cstdint> 20 #include <sys/socket.h> 21 22 namespace OHOS { 23 namespace HDI { 24 namespace Location { 25 26 #define SATELLITE_NUM_MAXIMUM 128 27 #define APN_LENGTH_MAXIMUM 64 28 #define GNSS_NI_SUPPLICANT_INFO_LENGTH_MAXIMUM 256 29 #define GNSS_NI_NOTIFICATION_TEXT_LENGTH_MAXIMUM 2048 30 31 enum class GnssLocationValidity { 32 GNSS_LOCATION_LAT_VALID = (1 << 0), 33 GNSS_LOCATION_LONG_VALID = (1 << 1), 34 GNSS_LOCATION_ALTITUDE_VALID = (1 << 2), 35 GNSS_LOCATION_SPEED_VALID = (1 << 3), 36 GNSS_LOCATION_BEARING_VALID = (1 << 4), 37 GNSS_LOCATION_HORIZONTAL_ACCURACY_VALID = (1 << 5), 38 GNSS_LOCATION_VERTICAL_ACCURACY_VALID = (1 << 6), 39 GNSS_LOCATION_SPEED_ACCURACY_VALID = (1 << 7), 40 GNSS_LOCATION_BEARING_ACCURACY_VALID = (1 << 8), 41 GNSS_LOCATION_TIME_VALID = (1 << 9), 42 GNSS_LOCATION_TIME_SINCE_BOOT_VALID = (1 << 10), 43 GNSS_LOCATION_TIME_UNCERTAINTY_VALID = (1 << 11), 44 }; 45 46 enum class AgnssSetidCategory { 47 AGNSS_SETID_CATEGORY_NULL = 0, 48 AGNSS_SETID_CATEGORY_IMSI = 1, 49 AGNSS_SETID_CATEGORY_MSISDN = 2, 50 }; 51 52 enum class AgnssRefInfoCategory { 53 AGNSS_REF_INFO_CATEGORY_CELLID = 1, 54 AGNSS_REF_INFO_CATEGORY_MAC = 2, 55 }; 56 57 enum class GnssStartCategory { 58 GNSS_START_CATEGORY_NORMAL = 1, 59 GNSS_START_CATEGORY_GNSS_CACHE = 2, 60 }; 61 62 enum class CellIdCategory { 63 CELLID_CATEGORY_GSM = 1, 64 CELLID_CATEGORY_UMTS = 2, 65 CELLID_CATEGORY_LTE = 3, 66 CELLID_CATEGORY_NR = 4, 67 }; 68 69 enum class AgnssDataConnectionSetUpCategory { 70 ESTABLISH_DATA_CONNECTION = 1, 71 RELEASE_DATA_CONNECTION = 2 72 }; 73 74 enum class DataConnectionState { 75 DATA_CONNECTION_DISCONNECTED = 1, 76 DATA_CONNECTION_CONNECTED = 2, 77 }; 78 79 enum class AgnssCategory { 80 AGNSS_CATEGORY_SUPL = 1, 81 AGNSS_CATEGORY_C2K = 2 82 }; 83 84 enum class ApnIpCategory { 85 APN_CATEGORY_INVALID = 0, 86 APN_CATEGORY_IPV4 = 1, 87 APN_CATEGORY_IPV6 = 2, 88 APN_CATEGORY_IPV4V6 = 3 89 }; 90 91 enum class ConstellationCategory { 92 CONSTELLATION_CATEGORY_UNKNOWN = 0, 93 CONSTELLATION_CATEGORY_GPS = 1, 94 CONSTELLATION_CATEGORY_SBAS = 2, 95 CONSTELLATION_CATEGORY_GLONASS = 3, 96 CONSTELLATION_CATEGORY_QZSS = 4, 97 CONSTELLATION_CATEGORY_BEIDOU = 5, 98 CONSTELLATION_CATEGORY_GALILEO = 6, 99 CONSTELLATION_CATEGORY_IRNSS = 7, 100 CONSTELLATION_CATEGORY_MAXIMUM = 8, 101 }; 102 103 enum class GnssWorkingStatus { 104 GNSS_WORKING_STATUS_NULL = 0, 105 GNSS_WORKING_STATUS_NAVIGATING_BEGIN = 1, 106 GNSS_WORKING_STATUS_NAVIGATING_END = 2, 107 GNSS_WORKING_STATUS_POWER_ON = 3, 108 GNSS_WORKING_STATUS_POWER_OFF = 4 109 }; 110 111 enum class GnssCapabilities { 112 GNSS_CAP_SUPPORT_MSB = (1 << 0), 113 GNSS_CAP_SUPPORT_MSA = (1 << 1), 114 GNSS_CAP_SUPPORT_GEOFENCING = (1 << 2), 115 GNSS_CAP_SUPPORT_MEASUREMENTS = (1 << 3), 116 GNSS_CAP_SUPPORT_NAV_MESSAGES = (1 << 4), 117 GNSS_CAP_SUPPORT_GNSS_CACHE = (1 << 5), 118 }; 119 120 enum class SatelliteAdditionalInfo { 121 SATELLITES_ADDITIONAL_INFO_NULL = 0, 122 SATELLITES_ADDITIONAL_INFO_EPHEMERIS_DATA_EXIST = (1 << 0), 123 SATELLITES_ADDITIONAL_INFO_ALMANAC_DATA_EXIST = (1 << 1), 124 SATELLITES_ADDITIONAL_INFO_USED_IN_FIX = (1 << 2), 125 SATELLITES_ADDITIONAL_INFO_CARRIER_FREQUENCY_EXIST = (1 << 3), 126 }; 127 128 enum class GnssWorkingMode { 129 GNSS_WORKING_MODE_STANDALONE = 1, 130 GNSS_WORKING_MODE_MS_BASED = 2, 131 GNSS_WORKING_MODE_MS_ASSISTED = 3 132 }; 133 134 enum class GnssRefInfoCategory { 135 GNSS_REF_INFO_CATEGORY_TIME = 1, 136 GNSS_REF_INFO_CATEGORY_GNSS_LOCATION = 2, 137 GNSS_REF_INFO_CATEGORY_BEST_LOCATION = 3, 138 GNSS_REF_INFO_CATEGORY_GNSS_LOCATION_EMERGENCY = 4, 139 GNSS_REF_INFO_CATEGORY_BEST_LOCATION_EMERGENCY = 5, 140 }; 141 142 enum class GnssAuxiliaryDataCategory { 143 GNSS_AUXILIARY_DATA_CATEGORY_EPHEMERIS = (1 << 0), 144 GNSS_AUXILIARY_DATA_CATEGORY_ALMANAC = (1 << 1), 145 GNSS_AUXILIARY_DATA_CATEGORY_POSITION = (1 << 2), 146 GNSS_AUXILIARY_DATA_CATEGORY_TIME = (1 << 3), 147 GNSS_AUXILIARY_DATA_CATEGORY_IONO = (1 << 4), 148 GNSS_AUXILIARY_DATA_CATEGORY_UTC = (1 << 5), 149 GNSS_AUXILIARY_DATA_CATEGORY_HEALTH = (1 << 6), 150 GNSS_AUXILIARY_DATA_CATEGORY_SVDIR = (1 << 7), 151 GNSS_AUXILIARY_DATA_CATEGORY_SVSTEER = (1 << 8), 152 GNSS_AUXILIARY_DATA_CATEGORY_SADATA = (1 << 9), 153 GNSS_AUXILIARY_DATA_CATEGORY_RTI = (1 << 10), 154 GNSS_AUXILIARY_DATA_CATEGORY_CELLDB_INFO = (1 << 11), 155 GNSS_AUXILIARY_DATA_CATEGORY_ALL = 0xFFFF, 156 }; 157 158 enum class GnssModuleIfaceCategory { 159 AGNSS_MODULE_INTERFACE = 1, 160 GNSS_GEOFENCING_MODULE_INTERFACE = 2, 161 GNSS_NET_INITIATED_MODULE_INTERFACE = 3, 162 GNSS_MEASUREMENT_MODULE_INTERFACE = 4, 163 }; 164 165 enum class GeofenceEvent { 166 GEOFENCE_EVENT_UNCERTAIN = (1 << 0), 167 GEOFENCE_EVENT_ENTERED = (1 << 1), 168 GEOFENCE_EVENT_EXITED = (1 << 2), 169 }; 170 171 enum class GeofenceOperateCategory { 172 GEOFENCE_ADD = 1, 173 GEOFENCE_DELETE = 2, 174 }; 175 176 enum class GeofenceOperateResult { 177 GEOFENCE_OPERATION_SUCCESS = 0, 178 GEOFENCE_OPERATION_ERROR_UNKNOWN = -1, 179 GEOFENCE_OPERATION_ERROR_TOO_MANY_GEOFENCES = -2, 180 GEOFENCE_OPERATION_ERROR_GEOFENCE_ID_EXISTS = -3, 181 GEOFENCE_OPERATION_ERROR_PARAMS_INVALID = -4, 182 }; 183 184 enum class GnssClockValidity { 185 GNSS_CLOCK_FLAG_LEAP_SECOND_VALID = (1 << 0), 186 GNSS_CLOCK_FLAG_TIME_UNCERTAINTY_VALID = (1 << 1), 187 GNSS_CLOCK_FLAG_FULL_BIAS_VALID = (1 << 2), 188 GNSS_CLOCK_FLAG_BIAS_VALID = (1 << 3), 189 GNSS_CLOCK_FLAG_BIAS_UNCERTAINTY_VALID = (1 << 4), 190 GNSS_CLOCK_FLAG_DRIFT_VALID = (1 << 5), 191 GNSS_CLOCK_FLAG_DRIFT_UNCERTAINTY_VALID = (1 << 6), 192 GNSS_CLOCK_FLAG_CLOCK_JUMP_VALID = (1 << 7), 193 GNSS_CLOCK_FLAG_CLOCK_FREQ_BIAS_VALID = (1 << 8), 194 GNSS_CLOCK_FLAG_CLOCK_FREQ_DRIFT_VALID = (1 << 9), 195 }; 196 197 enum class GnssMeasurementValidity { 198 GNSS_MEASUREMENT_SNR_VALID = (1 << 0), 199 GNSS_MEASUREMENT_CARRIER_FREQUENCY_VALID = (1 << 1), 200 GNSS_MEASUREMENT_CARRIER_CYCLES_VALID = (1 << 2), 201 GNSS_MEASUREMENT_CARRIER_PHASE_VALID = (1 << 3), 202 GNSS_MEASUREMENT_CARRIER_PHASE_UNCERTAINTY_VALID = (1 << 4), 203 GNSS_MEASUREMENT_AUTOMATIC_GAIN_CONTROL_VALID = (1 << 5), 204 GNSS_MEASUREMENT_IONO_CORRECT_VALID = (1 << 6), 205 GNSS_MEASUREMENT_TROP_CORRECT_VALID = (1 << 7), 206 GNSS_MEASUREMENT_SVCLOCK_BIAS_VALID = (1 << 8), 207 GNSS_MEASUREMENT_SVCLOCK_DRIFT_VALID = (1 << 9), 208 }; 209 210 enum class SatelliteSyncState { 211 SATELLITE_SYNC_STATE_UNKNOWN = 0, 212 SATELLITE_SYNC_STATE_CODE_LOCK = (1 << 0), 213 SATELLITE_SYNC_STATE_BIT_SYNC = (1 << 1), 214 SATELLITE_SYNC_STATE_SUBFRAME_SYNC = (1 << 2), 215 SATELLITE_SYNC_STATE_TOW_DECODED = (1 << 3), 216 SATELLITE_SYNC_STATE_MSEC_AMBIGUOUS = (1 << 4), 217 SATELLITE_SYNC_STATE_SYMBOL_SYNC = (1 << 5), 218 SATELLITE_SYNC_STATE_GLO_STRING_SYNC = (1 << 6), 219 SATELLITE_SYNC_STATE_GLO_TOD_DECODED = (1 << 7), 220 SATELLITE_SYNC_STATE_BDS_D2_BIT_SYNC = (1 << 8), 221 SATELLITE_SYNC_STATE_BDS_D2_SUBFRAME_SYNC = (1 << 9), 222 SATELLITE_SYNC_STATE_GAL_E1BC_CODE_LOCK = (1 << 10), 223 SATELLITE_SYNC_STATE_GAL_E1C_2ND_CODE_LOCK = (1 << 11), 224 SATELLITE_SYNC_STATE_GAL_E1B_PAGE_SYNC = (1 << 12), 225 SATELLITE_SYNC_STATE_SBAS_SYNC = (1 << 13), 226 SATELLITE_SYNC_STATE_TOW_KNOWN = (1 << 14), 227 SATELLITE_SYNC_STATE_GLO_TOD_KNOWN = (1 << 15), 228 SATELLITE_SYNC_STATE_2ND_CODE_LOCK = (1 << 16), 229 }; 230 231 enum class GnssMeasurementTrackedCodeCategory { 232 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_UNKNOWN = 0, 233 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_A = 1, 234 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_B = 2, 235 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_C = 3, 236 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_I = 4, 237 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_L = 5, 238 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_M = 6, 239 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_N = 7, 240 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_P = 8, 241 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_Q = 9, 242 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_S = 10, 243 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_W = 11, 244 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_X = 12, 245 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_Y = 13, 246 GNSS_MEASUREMENT_TRACKED_CODE_CATEGORY_Z = 14, 247 }; 248 249 enum class GnssAccumulatedDeltaRangeFlag { 250 GNSS_ADR_FLAG_UNKNOWN = 0, 251 GNSS_ADR_FLAG_VALID = (1 << 0), 252 GNSS_ADR_FLAG_RESET = (1 << 1), 253 GNSS_ADR_FLAG_CYCLE_SLIP = (1 << 2), 254 GNSS_ADR_FLAG_HALF_CYCLE_RESOLVED = (1 << 3), 255 }; 256 257 enum class GnssMultipathFlag { 258 GNSS_MULTIPATH_FLAG_UNKNOWN = 0, 259 GNSS_MULTIPATH_FLAG_PRESENT = 1, 260 GNSS_MULTIPATH_FLAG_NOT_PRESENT = 2, 261 }; 262 263 enum class GnssNiRequestCategory { 264 GNSS_NI_REQUEST_CATEGORY_EMERGENCY_SUPL = 1, 265 GNSS_NI_REQUEST_CATEGORY_VOICE = 2, 266 GNSS_NI_REQUEST_CATEGORY_UMTS_CONTROL_PLANE = 3, 267 GNSS_NI_REQUEST_CATEGORY_UMTS_SUPL = 4, 268 }; 269 270 enum class GnssNiResponseCmd { 271 GNSS_NI_RESPONSE_CMD_ACCEPT = 1, 272 GNSS_NI_RESPONSE_CMD_NO_RESPONSE = 2, 273 GNSS_NI_RESPONSE_CMD_REJECT = 3, 274 }; 275 276 enum class GnssNiNotificationCategory { 277 GNSS_NI_NOTIFICATION_REQUIRE_NOTIFY = (1 << 0), 278 GNSS_NI_NOTIFICATION_REQUIRE_VERIFY = (1 << 1), 279 GNSS_NI_NOTIFICATION_REQUIRE_PRIVACY_OVERRIDE = (1 << 2), 280 }; 281 282 enum class GnssNiRequestEncodingFormat { 283 GNSS_NI_ENCODING_FORMAT_NULL = 1, 284 GNSS_NI_ENCODING_FORMAT_SUPL_GSM_DEFAULT = 2, 285 GNSS_NI_ENCODING_FORMAT_SUPL_UCS2 = 3, 286 GNSS_NI_ENCODING_FORMAT_SUPL_UTF8 = 4, 287 }; 288 289 enum class ClockHWFreBiasState { 290 UNKNOWN = 0, 291 NORMAL = 1, 292 ABNORMAL = 2, 293 }; 294 295 enum class ClockHWFreDriftState { 296 UNKNOWN = 0, 297 NORMAL = 1, 298 ABNORMAL = 2, 299 }; 300 301 /* 302 * Definition of Cell ID structure. 303 */ 304 typedef struct { 305 size_t size; 306 307 /* See CellIdCategory for the definition of category. */ 308 uint16_t category; 309 310 /* Mobile Country Code. */ 311 uint16_t mcc; 312 313 /* Mobile Network Code. */ 314 uint16_t mnc; 315 316 /* Location Area Code. */ 317 uint16_t lac; 318 319 /* 2G:Cell id. 3G:Utran Cell id. LTE:Cell Global Id EUTRA. */ 320 uint32_t cid; 321 322 /* Tracking Area Code. */ 323 uint16_t tac; 324 325 /* Physical Cell id. */ 326 uint16_t pcid; 327 328 /* NR cell id */ 329 uint64_t nci; 330 } CellId; 331 332 /* 333 * WiFi MAC information. 334 */ 335 typedef struct { 336 size_t size; 337 uint8_t mac[6]; 338 } MacInfo; 339 340 /* 341 * AGNSS reference information. 342 */ 343 typedef struct { 344 size_t size; 345 346 /* See AgnssRefInfoCategory for the definition of category. */ 347 uint32_t category; 348 349 union { 350 CellId cellId; 351 MacInfo mac; 352 } u; 353 } AgnssReferenceInfo; 354 355 /* 356 * Data service network state. 357 */ 358 typedef struct { 359 size_t size; 360 361 uint32_t netId; 362 363 /* See ApnIpCategory for the definition of state. */ 364 uint32_t apnIpCategory; 365 366 char apn[APN_LENGTH_MAXIMUM]; 367 368 /* See DataConnectionState for the definition of state. */ 369 uint8_t state; 370 } NetworkState; 371 372 /* 373 * GNSS location structure. 374 */ 375 typedef struct { 376 size_t size; 377 378 /* See GnssLocationValidity for the definition of fieldValidity. */ 379 uint32_t fieldValidity; 380 381 double latitude; 382 383 double longitude; 384 385 /* Altitude in meters. */ 386 double altitude; 387 388 /* Speed in meters per second. */ 389 float speed; 390 391 /* Heading in degrees. */ 392 float bearing; 393 394 /* Horizontal position accuracy in meters. */ 395 float horizontalAccuracy; 396 397 /* Vertical position accuracy in meters. */ 398 float verticalAccuracy; 399 400 /* Speed accuracy in meter per seconds. */ 401 float speedAccuracy; 402 403 /* Bearing accuracy in degrees. */ 404 float bearingAccuracy; 405 406 /* Timestamp for the location fix. Number of milliseconds since January 1, 1970. */ 407 int64_t timeForFix; 408 409 /* Time since the system was booted, and include deep sleep. The unit is nanosecond. */ 410 uint64_t timeSinceBoot; 411 412 /* Time uncertainty in nanosecond. */ 413 uint64_t timeUncertainty; 414 } GnssLocation; 415 416 /* 417 * Configuration of the GNSS caching function. 418 */ 419 typedef struct { 420 size_t size; 421 422 /* Minimus interval between locations in millisecond. */ 423 uint32_t interval; 424 425 /* 426 * If the value is true, the cached locations 427 * are reported and the AP is woken up after the FIFO is full. 428 */ 429 bool fifoFullNotify; 430 } GnssCachingConfig; 431 432 /* 433 * Status information of a single satellite. 434 */ 435 typedef struct { 436 size_t size; 437 438 /* Satellite ID number for the satellite. */ 439 int16_t satelliteId; 440 441 /* 442 * Defines the constellation category. 443 * See ConstellationCategory for the definition of constellationCategory. 444 */ 445 uint8_t constellationCategory; 446 447 /* Carrier-to-noise density in dB-Hz. */ 448 float cn0; 449 450 /* Elevation of satellite in degrees. */ 451 float elevation; 452 453 /* Azimuth of satellite in degrees. */ 454 float azimuth; 455 456 /* Carrier frequency of the signal tracked. The unit is Hz. */ 457 float carrierFrequency; 458 459 /* See SatelliteAdditionalInfo for the definition of satelliteAdditionalInfo. */ 460 uint32_t satelliteAdditionalInfo; 461 } SatelliteStatusInfo; 462 463 /* 464 * Status informations of all satellites. 465 */ 466 typedef struct { 467 size_t size; 468 469 /* Number of all satellites that can be viewed. */ 470 uint32_t satellitesNum; 471 472 /* Array of all satellites information. */ 473 SatelliteStatusInfo satellitesList[SATELLITE_NUM_MAXIMUM]; 474 } GnssSatelliteStatus; 475 476 /* 477 * Callback for location reporting. 478 */ 479 typedef void (*OnLocationChange)(GnssLocation* location); 480 481 /* 482 * Callback for GNSS working status reporting. 483 * Parameters: 484 * status - Working status of GNSS chip. 485 * See GnssWorkingStatus for the definition of status. 486 */ 487 typedef void (*OnGnssWorkingStatusChange)(uint16_t* status); 488 489 /* 490 * Callback for satellite status reporting. 491 */ 492 typedef void (*OnSatelliteStatusChange)(GnssSatelliteStatus* status); 493 494 /* 495 * Callback for NMEA info reporting. 496 * Parameters: 497 * time - Timestamp when the nmea was reported. Milliseconds since January 1, 1970. 498 * nmea - NMEA string. 499 * length - Length of NMEA string. 500 */ 501 typedef void (*OnGnssNmeaChange)(int64_t time, const char* nmea, int length); 502 503 /* 504 * Callback for GNSS capabilities reporting. 505 * Parameters: 506 * capabilities - GNSS capabilities. See GnssCapabilities for the definition of capabilities. 507 */ 508 typedef void (*OnCapabilitiesChange)(uint32_t capabilities); 509 510 /* 511 * Request to delivery GNSS reference information. 512 * Parameters: 513 * category - Category of GNSS reference information, See GnssRefInfoCategory for the definition of category. 514 */ 515 typedef void (*RequestGnssReferenceInfo)(int category); 516 517 /* 518 * GNSS basic config structure. 519 */ 520 typedef struct { 521 size_t size; 522 523 /* Minimus interval between locations in ms */ 524 uint32_t minInterval; 525 526 /* See GnssWorkingMode for the definition of gnssMode */ 527 int gnssMode; 528 } GnssBasicConfigPara; 529 530 /* 531 * GNSS config structure. 532 */ 533 typedef struct { 534 size_t size; 535 536 /* 537 * Indicates the method of location reporting, 538 * whether to report immediately or after caching for a 539 * period of time. See GnssStartCategory for the definition of startCategory. 540 */ 541 uint32_t startCategory; 542 543 union { 544 GnssBasicConfigPara gnssBasicConfig; 545 GnssCachingConfig gnssCacheConfig; 546 } u; 547 } GnssConfigParameter; 548 549 /* 550 * GNSS reference time. 551 */ 552 typedef struct { 553 size_t size; 554 555 /* UTC time received from the NTP server, Milliseconds since January 1, 1970. */ 556 int64_t time; 557 558 /* Time since the system was booted, and include deep sleep. The unit is milliseconds. */ 559 int64_t elapsedRealtime; 560 561 /* This is uncertainty of time. The unit is milliseconds. */ 562 int uncertaintyOfTime; 563 } GnssRefTime; 564 565 /* 566 * GNSS reference information structure. 567 */ 568 typedef struct { 569 size_t size; 570 571 /* 572 * Category of GNSS reference information, 573 * See GnssRefInfoCategory for the definition of category. 574 */ 575 int category; 576 577 union { 578 GnssRefTime time; 579 GnssLocation gnssLocation; 580 GnssLocation bestLocation; 581 } u; 582 } GnssReferenceInfo; 583 584 /* 585 * Request the client to download extended ephemeris data. 586 */ 587 typedef void (*RequestExtendedEphemeris)(void); 588 589 /* 590 * Callback for GNSS cache location information reporting. 591 */ 592 typedef void (*OnCachedLocationsChange)(const GnssLocation** locationArray, size_t arrayLength); 593 594 /* 595 * GNSS basic callback functions. 596 */ 597 typedef struct { 598 size_t size; 599 OnLocationChange locationUpdate; 600 OnGnssWorkingStatusChange gnssWorkingStatusUpdate; 601 OnSatelliteStatusChange satelliteStatusUpdate; 602 OnGnssNmeaChange nmeaUpdate; 603 OnCapabilitiesChange capabilitiesUpdate; 604 RequestGnssReferenceInfo requestRefInfo; 605 RequestExtendedEphemeris requestExtendedEphemeris; 606 } GnssBasicCallbackIfaces; 607 608 /* 609 * GNSS cached location callback functions. 610 */ 611 typedef struct { 612 size_t size; 613 OnCachedLocationsChange cachedLocationUpdate; 614 } GnssCacheCallbackIfaces; 615 616 /* 617 * GNSS callback structure. 618 */ 619 typedef struct { 620 size_t size; 621 GnssBasicCallbackIfaces gnssCallback; 622 GnssCacheCallbackIfaces gnssCacheCallback; 623 } GnssCallbackStruct; 624 625 /* 626 * GNSS vendor interface definition. 627 */ 628 typedef struct { 629 size_t size; 630 631 /* Enable the GNSS function. Initializing the GNSS Chip. */ 632 int (*enableGnss)(GnssCallbackStruct* callbacks); 633 634 /* Disables the GNSS function. */ 635 int (*disableGnss)(void); 636 637 /* Start navigating. See GnssStartCategory for the definition of category. */ 638 int (*startGnss)(uint32_t category); 639 640 /* Stops navigating. See GnssStartCategory for the definition of category. */ 641 int (*stopGnss)(uint32_t category); 642 643 /* Inject reference information into the GNSS chip. 644 * See GnssRefInfoCategory for the definition of category. */ 645 int (*injectsGnssReferenceInfo)(int category, GnssReferenceInfo* info); 646 647 /* Set GNSS configuration parameters. */ 648 int (*setGnssConfigPara)(GnssConfigParameter* para); 649 650 /* 651 * This function is used to delete the assistance data, 652 * which will not be used in the next GNSS positioning. 653 * See GnssAuxiliaryDataCategory for the definition of flags. 654 */ 655 void (*removeAuxiliaryData)(uint16_t flags); 656 657 /* Injects extended ephemeris data into the GNSS. */ 658 int (*injectExtendedEphemeris)(char* data, int length); 659 660 /* Return the cached locations size. */ 661 int (*getCachedLocationsSize)(); 662 663 /* Retrieve all cached locations currently stored and clear the buffer. */ 664 void (*flushCachedGnssLocations)(); 665 666 /* Get a pointer to GNSS module interface. See GnssModuleIfaceCategory for the definition of iface. */ 667 const void* (*getGnssModuleIface)(int iface); 668 } GnssVendorInterface; 669 670 /* 671 * GNSS vendor device definition. 672 */ 673 struct GnssVendorDevice { 674 size_t size; 675 const GnssVendorInterface* (*getGnssInterface)(); 676 }; 677 678 /* 679 * Defines the structure of the request for operating the AGNSS data link. 680 */ 681 typedef struct { 682 size_t size; 683 684 /* See AgnssCategory for the definition of agnssCategory */ 685 uint16_t agnssCategory; 686 687 /* See AgnssDataConnectionSetUpCategory for the definition of requestCategory. */ 688 uint16_t requestCategory; 689 690 /* IPv4 address. */ 691 uint32_t ipaddr; 692 693 /* IPv6 address. */ 694 struct sockaddr_storage sockAddr; 695 } AgnssDataConnectionRequest; 696 697 /* 698 * Request to setup the AGNSS data link. 699 */ 700 typedef void (*RequestSetupAgnssDataConnection)(const AgnssDataConnectionRequest* request); 701 702 /* 703 * Callback function for requesting setid. 704 * Parameters: 705 * category - Category of setid, See enum class AgnssSetidCategory for the definition of setidCategory. 706 */ 707 typedef void (*RequestDeliverySetid)(uint16_t setidCategory); 708 709 /* 710 * Callback function for requesting AGNSS reference information. 711 * Parameters: 712 * category - Category of AGNSS reference information, 713 * See enum class AgnssRefInfoCategory for the definition of category. 714 */ 715 typedef void (*RequestDeliveryReferenceInfo)(uint32_t category); 716 717 /* 718 * Definition of the AGNSS callback interfaces. 719 */ 720 typedef struct { 721 size_t size; 722 RequestSetupAgnssDataConnection requestSetupDataLink; 723 RequestDeliverySetid requestSetid; 724 RequestDeliveryReferenceInfo requestRefInfo; 725 } AgnssCallbackIfaces; 726 727 /* 728 * Interface for AGNSS functions. 729 */ 730 typedef struct { 731 size_t size; 732 733 /* Set AGNSS callback interfaces. */ 734 bool (*setAgnssCallback)(AgnssCallbackIfaces* callbacks); 735 736 /* Sets the AGNSS reference information. */ 737 bool (*setAgnssReferenceInfo)(const AgnssReferenceInfo* refInfo); 738 739 /* 740 * Set the set ID. 741 * Parameters: 742 * category - Category of setid, See enum class AgnssSetidCategory for the definition of category. 743 * setid - Setid string. 744 * length - Length of setid string. 745 */ 746 bool (*setSetid)(uint16_t category, const char* setid, size_t length); 747 748 /* 749 * Set the AGNSS Server Information. 750 * Parameters: 751 * category - Category of AGNSS. See AgnssCategory for the definition of category. 752 * server - AGNSS server information. 753 * length - Length of server string. 754 * port - Port of AGNSS server. 755 */ 756 bool (*setAgnssServer)(uint16_t category, const char* server, size_t length, int32_t port); 757 758 /* Used to receive network state changes. */ 759 void (*onNetworkStateChange)(const NetworkState* state); 760 } AgnssModuleInterface; 761 762 /* 763 * Callback for geofence event reporting. 764 * Parameters: 765 * geofenceId - The id of geofence. 766 * location - The current GNSS location. 767 * event - Current geofencing event. See GeofenceEvent for the definition of event. 768 * timestamp - Timestamp when the transition was detected. Milliseconds since January 1, 1970. 769 */ 770 typedef void (*OnGeofenceEventChange)(int32_t geofenceId, GnssLocation* location, 771 int32_t event, int64_t timestamp); 772 773 /* 774 * Callback function that indicates whether the geofence service is available. 775 * 776 * Parameters: 777 * isAvailable is true when GNSS geofence service is available. 778 */ 779 typedef void (*OnGeofenceAvailabilityChange)(bool isAvailable); 780 781 /* 782 * Callback function indicating the result of the geofence operation. 783 * 784 * geofenceId - Id of the geofence. 785 * operateCategory - Geofence operate category. 786 See GeofenceOperateCategory for the definition of operateCategory. 787 * result - Operation result. See GeofenceOperateResult for the definition of result. 788 */ 789 typedef void (*OnGeofenceOperateResultChange)(int32_t geofenceId, int32_t operateCategory, 790 int32_t result); 791 792 /* 793 * Callbacks for geofence informations reporting. 794 */ 795 typedef struct { 796 size_t size; 797 OnGeofenceAvailabilityChange geofenceAvailabilityUpdate; 798 OnGeofenceEventChange geofenceEventUpdate; 799 OnGeofenceOperateResultChange geofenceOperateResultUpdate; 800 } GeofenceCallbackIfaces; 801 802 /* 803 * Interface for GNSS Geofence. 804 */ 805 typedef struct { 806 size_t size; 807 808 /* 809 * Set the geofence callback interfaces. 810 */ 811 bool (*setCallback)(GeofenceCallbackIfaces* callbacks); 812 813 /* 814 * Add a GNSS geofence. 815 * Parameters: 816 * geofenceId - The id of the geofence. 817 * latitude, longtitude - Center of a circular geofence. 818 * radius - Radius of a circular geofence. 819 * monitorEvent - Which geofence event to monitor. 820 * See GeofenceEvent for the definition of monitorEvent. 821 */ 822 bool (*addGnssGeofence)(int32_t geofenceId, double latitude, double longitude, 823 double radius, int32_t monitorEvent); 824 825 /* 826 * Delete a GNSS geofence. 827 * geofenceId - The id of the geofence. 828 */ 829 bool (*deleteGnssGeofence)(int32_t geofenceId); 830 } GeofenceModuleInterface; 831 832 /* 833 * Definition of the GNSS clock information structure. 834 */ 835 typedef struct { 836 size_t size; 837 838 /* 839 * Identifies which field is valid. 840 * See GnssClockValidity for the definition of fieldValidFlags. 841 */ 842 uint16_t fieldValidFlags; 843 844 /* 845 * Leap second data. 846 */ 847 int16_t leapSecond; 848 849 /* 850 * Indicates the clock time of the GNSS receiver, the unit is nanosecond. 851 * This is a mandatory value. 852 */ 853 int64_t receiverClockTime; 854 855 /* 856 * Uncertainty of the receiverClockTime, the unit is nanosecond. 857 */ 858 double timeUncertainty; 859 860 /* 861 * The difference between receiverClockTime and the true GPS time since 0000Z, January 6, 1980. 862 * the unit is nanosecond. 863 */ 864 int64_t rcvClockFullBias; 865 866 /* 867 * Sub-nanosecond bias of receiverClockTime. 868 */ 869 double rcvClockSubBias; 870 871 /* 872 * Uncertainty of the local estimate of GPS time (clock bias 'rcvClockFullBias' and 'rcvClockSubBias' feild) 873 * in nanoseconds. 874 */ 875 double biasUncertainty; 876 877 /* 878 * The clock's drift of receiver clock. the unit is nanosecond (per second). 879 */ 880 double clockDrift; 881 882 /* 883 * The uncertainty of clockDrift. the unit is nanosecond (per second). 884 */ 885 double clockDriftUncertainty; 886 887 /* 888 * Indicates hardware clock discontinuity count. 889 * This is a mandatory value. 890 */ 891 uint32_t clockInterruptCnt; 892 893 /* 894 * Indicates clockJump threshold of hardware clock. the unit is nanosecond. 895 * the clock bias ('rcvClockFullBias' + 'rcvClockSubBias' should be less than clockJumpThreshold) 896 */ 897 double clockJumpThreshold; 898 899 /* 900 * Indicates clockHWFreBias event, If the crystal oscillator(XO) has a frequency offset exception event, 901 * this enumeration field reports the state. 902 * If this field is frequently reported, check the environment or hardware status of the XO. 903 * See ClockHWFreBiasState for the definition of clockHWFreBiasIndicator. 904 */ 905 uint32_t clockHWFreBiasIndicator; 906 907 /* 908 * Indicates clockHWFreDrift event, If the crystal oscillator(XO) has a frequency drift exception event, 909 * this enumeration field reports the state. 910 * If this field is frequently reported, check the environment or hardware status of the XO. 911 * See clockHWFreDriftState for the definition of clockHWFreDriftIndicator. 912 */ 913 uint32_t clockHWFreDriftIndicator; 914 } GnssClockInfo; 915 916 /* 917 * Definition of the GNSS measurement information. 918 */ 919 typedef struct { 920 size_t size; 921 922 /* 923 * Identifies which field is valid. 924 * See GnssMeasurementValidity for the definition of fieldValidFlags. 925 */ 926 uint32_t fieldValidflags; 927 928 /* 929 * Satellite ID number. 930 * This is a mandatory value. 931 */ 932 int16_t satelliteId; 933 934 /* 935 * Defines the constellation category. 936 * See ConstellationCategory for the definition of constellationCategory. 937 */ 938 int16_t constellationCategory; 939 940 /* 941 * Measurement generation time offset in nanoseconds. 942 * This is a mandatory value. 943 * The formula for calculating the measurement time is as follows: 944 * measurement time = GnssClockInfo::receiverClockTime + timeOffset 945 */ 946 double timeOffset; 947 948 /* 949 * Satellite sync state. See SatelliteSyncState for the definition of syncState. 950 * This is a mandatory value. 951 */ 952 uint32_t syncState; 953 954 /* 955 * The received satellite Time-of-Week in nanoseconds. 956 */ 957 int64_t receivedSatelliteTime; 958 959 /* 960 * Uncertainty of the received satellite Time-of-Week in nanoseconds. 961 */ 962 int64_t receivedSatelliteTimeUncertainty; 963 964 /* 965 * Carrier-to-noise density. The unit is dB-Hz. 966 * This is a mandatory value. 967 */ 968 double cn0; 969 970 /* 971 * Pseudorange rate. The unit is m/s. 972 */ 973 double pseudorangeRate; 974 975 /* 976 * Uncertainty of the pseudorangeRate. The unit is m/s. 977 * This is a mandatory value. 978 */ 979 double pseudorangeRateUncertainty; 980 981 /* 982 * Accumulated delta range's state. 983 * See GnssAccumulatedDeltaRangeFlag for the definition. 984 * This is a mandatory value. 985 */ 986 uint32_t accumulatedDeltaRangeFlag; 987 988 /* 989 * Accumulated delta range since the last channel reset. The unit is meters. 990 */ 991 double accumulatedDeltaRange; 992 993 /* 994 * Uncertainty of the accumulated delta range. The unit is meters. 995 */ 996 double accumulatedDeltaRangeUncertainty; 997 998 /* 999 * Carrier frequency at which codes and messages are modulated. The unit is Hz. 1000 */ 1001 float carrierFrequency; 1002 1003 /* 1004 * The count of carrier cycles between satellite and receiver. 1005 */ 1006 int64_t carrierCyclesCount; 1007 1008 /* 1009 * Carrier phase, in the range [0.0, 1.0]. 1010 */ 1011 double carrierPhase; 1012 1013 /* 1014 * Uncertainty of the carrierPhase. 1015 */ 1016 double carrierPhaseUncertainty; 1017 1018 /* 1019 * Indicates the 'multipath' flag. 1020 * See GnssMultipathFlag for the definition of multipathFlag. 1021 */ 1022 uint32_t multipathFlag; 1023 1024 /* 1025 * Automatic gain control (AGC) level in dB. 1026 */ 1027 double agcGain; 1028 1029 /* 1030 * The category of code that is currently being tracked in the GNSS measurement. 1031 * See GnssMeasurementTrackedCodeCategory for the definition of codeCategory. 1032 */ 1033 uint32_t codeCategory; 1034 1035 /* 1036 * Iono-correct value in meters. 1037 */ 1038 double ionoCorrect; 1039 1040 /* 1041 * Trop-correct value in meters. 1042 */ 1043 double tropCorrect; 1044 1045 /* 1046 * Satellite clock bias value in meters. 1047 */ 1048 double satelliteClockBias; 1049 1050 /* 1051 * Satellite clock drift bias value in meters. 1052 */ 1053 double satelliteClockDriftBias; 1054 } GnssMeasurement; 1055 1056 /* 1057 * Definition of the GNSS measurement informations. 1058 */ 1059 typedef struct { 1060 size_t size; 1061 1062 GnssClockInfo gnssClock; 1063 1064 /* Time since the system was booted, and include deep sleep. The unit is nanoseconds. */ 1065 uint64_t elapsedRealtime; 1066 1067 /* This is uncertainty of elapsedRealtime. The unit is nanoseconds. */ 1068 uint64_t uncertainty; 1069 1070 /* Number of measurements. */ 1071 size_t measurementCount; 1072 1073 /* The array of measurements. */ 1074 GnssMeasurement measurements[SATELLITE_NUM_MAXIMUM]; 1075 } GnssMeasurementInfo; 1076 1077 /* 1078 * Callback for reporting the GNSS measurement informations. 1079 */ 1080 typedef void (*OnGnssMeasurementChange)(GnssMeasurementInfo* data); 1081 1082 /* 1083 * Definition of the GNSS measurement callback interface. 1084 */ 1085 typedef struct { 1086 size_t size; 1087 OnGnssMeasurementChange gnssMeasurementUpdate; 1088 } GnssMeasurementCallbackIfaces; 1089 1090 /* 1091 * Definition of the GNSS measurement interface. 1092 */ 1093 typedef struct { 1094 size_t size; 1095 1096 /* 1097 * Enable measurement information reporting and register callback. 1098 */ 1099 bool (*enable)(GnssMeasurementCallbackIfaces* callbacks); 1100 1101 /* 1102 * Disable measurement information reporting and unregister callback. 1103 */ 1104 void (*disable)(); 1105 } GnssMeasurementInterface; 1106 1107 /* 1108 * Definition of the GNSS NI notification request structure. 1109 */ 1110 typedef struct { 1111 size_t size; 1112 1113 /* 1114 * An ID of GNSS NI notifications. 1115 */ 1116 int16_t gnssNiNotificationId; 1117 1118 /* 1119 * Category of GNSS NI Request. See GnssNiRequestCategory for the definition of gnssNiRequestCategory. 1120 */ 1121 int16_t gnssNiRequestCategory; 1122 1123 /* 1124 * Category of notification. See GnssNiNotificationCategory for the definition of gnssNiCategory. 1125 */ 1126 int32_t notificationCategory; 1127 1128 /* 1129 * Timeout to wait for user response. The unit is seconds. 1130 */ 1131 int32_t requestTimeout; 1132 1133 /* 1134 * Default response command when timeout. 1135 */ 1136 int32_t defaultResponseCmd; 1137 1138 /* 1139 * Supplicant information. 1140 */ 1141 char supplicantInfo[GNSS_NI_SUPPLICANT_INFO_LENGTH_MAXIMUM]; 1142 1143 /* 1144 * Notification message text. 1145 */ 1146 char notificationText[GNSS_NI_NOTIFICATION_TEXT_LENGTH_MAXIMUM]; 1147 1148 /* 1149 * See GnssNiRequestEncodingFormat for the definition of supplicantInfoEncoding. 1150 */ 1151 int16_t supplicantInfoEncoding; 1152 1153 /* 1154 * See GnssNiRequestEncodingFormat for the definition of notificationTextEncoding. 1155 */ 1156 int16_t notificationTextEncoding; 1157 } GnssNiNotificationRequest; 1158 1159 /* 1160 * Callback for GNSS NI notification reporting. 1161 */ 1162 typedef void (*OnGnssNiNotificationChange)(GnssNiNotificationRequest *notification); 1163 1164 /* 1165 * Definition of GNSS NI callback structure. 1166 */ 1167 typedef struct { 1168 OnGnssNiNotificationChange reportNiNotification; 1169 } GnssNetInitiatedCallbacks; 1170 1171 /* 1172 * Definition of GNSS NI interface. 1173 */ 1174 typedef struct { 1175 size_t size; 1176 1177 /* Set callbacks. */ 1178 void (*setCallback)(GnssNetInitiatedCallbacks *callbacks); 1179 1180 /* 1181 * Sends user response command. 1182 * Parameters: 1183 * gnssNiNotificationId - The id of GNSS NI notifications. 1184 * userResponse - User reponse command. 1185 * See GnssNiResponseCmd for the definition of userResponse. 1186 */ 1187 void (*sendUserResponse)(int32_t gnssNiNotificationId, int32_t userResponse); 1188 1189 /* 1190 * Send network initiated message. 1191 */ 1192 void (*sendNetworkInitiatedMsg)(uint8_t *msg, size_t length); 1193 } GnssNetInitiatedInterface; 1194 } // namespace Location 1195 } // namespace HDI 1196 } // namespace OHOS 1197 1198 #endif /* OHOS_HDI_LOCATION_LOCATION_VENDOR_LIB_H */ 1199