ql_lbs_client.h 5.9 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147
  1. /*================================================================
  2. Copyright (c) 2021, Quectel Wireless Solutions Co., Ltd. All rights reserved.
  3. Quectel Wireless Solutions Proprietary and Confidential.
  4. =================================================================*/
  5. #ifndef QL_LBS_CLIENT_H
  6. #define QL_LBS_CLIENT_H
  7. #define lbs_print(msg, ...) custom_log_tag("LBS_CLI", QUEC_LOG_TAG_LBS, msg, ##__VA_ARGS__)
  8. #define LBS_MAX_CELL_NUM 6
  9. #define LBS_MAX_POS_NUM 6
  10. #define LBS_MAX_WIFI_NUM 6
  11. #define LBS_SINGLE_CELL_LOC_METHOD 1
  12. #define LBS_CELL_LOC_METHOD 4
  13. #define LBS_CELL_WIFI_LOC_METHOD 5
  14. #define LBS_WIFI_LOC_METHOD 6
  15. typedef struct{
  16. uint8_t type;// 类型 01表示定位,02表示上报
  17. uint8_t encrypt;//加密方案,01表示异或
  18. uint8_t key_index;// 01的加密方案中该参数表示"加扰KEY编号",本地随机生成,范围在0-7
  19. uint8_t pos_format;//回应数据包类型01 不需要地址信息, 02 需要地址信息
  20. uint8_t loc_method;//01-普通基站轮询,02-多基站分别轮询(废弃), 03-服务端三角定位,04-第三方接口/模块端三角定位,05-cell+wifi定位,06-仅wifi定位。
  21. }lbs_basic_info_t;
  22. typedef struct{
  23. char user_name[64];//用户名
  24. char user_pwd[64];//密码
  25. char token[128];//定位访问凭证
  26. char imei[64];//国际移动设备识别码
  27. uint16_t rand;//随机数
  28. }lbs_auth_info_t;
  29. typedef struct{
  30. uint8_t radio;//发射类型
  31. uint16_t mcc;//移动国家号码
  32. uint16_t mnc;// 移动网络号码
  33. int lac_id;//区域码
  34. int cell_id;//基站码
  35. int16_t signal;//信号强度
  36. uint16_t tac;//跟踪区编码
  37. uint16_t bcch;//BCCH信道的绝对无线频道编号
  38. uint8_t bsic;//基站识别码/基站色码,GSM用
  39. uint16_t uarfcndl;//下行频率,WCDMA 用
  40. uint16_t psc;//主扰码,WCDMA用
  41. int16_t rsrq;//参考信号接收质量,LTE用
  42. uint16_t pci;//物理小区标识,LTE用
  43. uint16_t earfcn;//绝对频点号,LTE用
  44. uint16_t reserve;//保留
  45. }lbs_cell_info_t;
  46. typedef struct{
  47. char wifi_mac[18];
  48. int wifi_rssi;
  49. char wifi_ssid[32];
  50. }lbs_wifi_mac_info_t;
  51. typedef struct{
  52. int pdp_cid;
  53. int sim_id;
  54. int req_timeout;
  55. lbs_basic_info_t *basic_info;
  56. lbs_auth_info_t *auth_info;
  57. int cell_num;
  58. lbs_cell_info_t *cell_info;
  59. int wifi_num;
  60. lbs_wifi_mac_info_t *wifi_info;
  61. }lbs_option_t;
  62. typedef struct{
  63. float longitude;//经度
  64. float latitude;//纬度
  65. uint16_t accuracy;//精度
  66. uint8_t flag;//0 - 正常基站 1 – 无效基站
  67. }lbs_postion_info_t;
  68. typedef enum{
  69. QL_LBS_OK = 0,
  70. QL_LBS_LOC_FAIL = (QL_COMPONENT_LWIP_LBS << 16) | 10000, /* 定位失败 */
  71. QL_LBS_IMEI_ILLEGAL = (QL_COMPONENT_LWIP_LBS << 16) | 10001, /* 非法imei号 */
  72. QL_LBS_TOKEN_NOT_EXIST = (QL_COMPONENT_LWIP_LBS << 16) | 10002, /* token不存在 */
  73. QL_LBS_TOKEN_LOC_EXCEED_MAX = (QL_COMPONENT_LWIP_LBS << 16) | 10003, /* token的定位次数超过最大值 */
  74. QL_LBS_IMEI_LOC_EXCEED_DAY_MAX = (QL_COMPONENT_LWIP_LBS << 16) | 10004, /* 设备的每天定位次数超过最大值 */
  75. QL_LBS_IMEI_LOC_VISIT_EXCEED_MAX = (QL_COMPONENT_LWIP_LBS << 16) | 10005, /* token连接设备数超过最大值 */
  76. QL_LBS_TOKEN_EXPIRED = (QL_COMPONENT_LWIP_LBS << 16) | 10006, /* token过期 */
  77. QL_LBS_IMEI_NO_AUTHORITY = (QL_COMPONENT_LWIP_LBS << 16) | 10007, /* 该imei号设备不可访问服务 */
  78. QL_LBS_TOKEN_LOC_VISIT_EXCEED_MAX = (QL_COMPONENT_LWIP_LBS << 16) | 10008, /* token每天定位次数超过最大值 */
  79. QL_LBS_TOKEN_LOC_EXCEED_PERIOD_MAX = (QL_COMPONENT_LWIP_LBS << 16) | 10009, /* token周期内定位次数超过最大值 */
  80. QL_LBS_DNS_FAIL = (QL_COMPONENT_LWIP_LBS << 16) | 10101,
  81. QL_LBS_MD5_FAIL = (QL_COMPONENT_LWIP_LBS << 16) | 10102,
  82. QL_LBS_MEMORY_FAIL = (QL_COMPONENT_LWIP_LBS << 16) | 10103,
  83. QL_LBS_NET_FAIL = (QL_COMPONENT_LWIP_LBS << 16) | 10104,
  84. QL_LBS_PARAM_FORMAT_FAIL = (QL_COMPONENT_LWIP_LBS << 16) | 10105,
  85. }lbs_result_code_e;
  86. typedef int lbs_client_hndl;
  87. typedef struct{
  88. lbs_client_hndl hndl; /* LBS客户端句柄。由ql_lbs_get_position获取 */
  89. lbs_result_code_e result; /* 定位结果,对应lbs_result_code_e */
  90. int pos_num; /* LBS定位成功后,得到位置信息的个数 */
  91. lbs_postion_info_t *pos_info; /* BS得到的位置信息 */
  92. char *date; /* 服务器返回的时间 */
  93. void *arg; /* 用户自定义参数,由ql_lbs_get_position传入 */
  94. }lbs_response_data_t;
  95. /*****************************************************************
  96. * Function: ql_lbs_response_callback
  97. *
  98. * Description:
  99. * LBS的定位结果,通过该函数告知应用程序。
  100. *
  101. * Parameters:
  102. * response_data [in] 定位响应数据,对应lbs_response_data_t
  103. *
  104. * Return: void
  105. *
  106. *****************************************************************/
  107. typedef void(*ql_lbs_response_callback)(lbs_response_data_t *response_data);
  108. /*****************************************************************
  109. * Function: ql_lbs_get_position
  110. *
  111. * Description:
  112. * 基于基站信息/wifi信息,查询设备所在的位置信息。
  113. *
  114. * Parameters:
  115. * lbs_hndl [out] 创建的LBS客户端句柄
  116. * host [in] 服务器地址
  117. * user_opts [in] LBS请求的参数
  118. * cb [in] LBS请求结果的回调函数
  119. * arg [in] 用户自定义参数
  120. *
  121. * Return:结果码,参考lbs_result_code_e
  122. *
  123. *****************************************************************/
  124. lbs_result_code_e ql_lbs_get_position(lbs_client_hndl *lbs_hndl, char *host, lbs_option_t *user_opts, ql_lbs_response_callback cb, void *arg);
  125. #endif