ql_api_datacall.h 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559
  1. /**
  2. @file
  3. ql_api_datacall.h
  4. @brief
  5. This file provides the definitions for datacall, and declares the
  6. API functions.
  7. */
  8. /*============================================================================
  9. Copyright (c) 2020 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
  10. Quectel Wireless Solution Proprietary and Confidential.
  11. =============================================================================*/
  12. /*===========================================================================
  13. EDIT HISTORY FOR MODULE
  14. This section contains comments describing changes made to the module.
  15. Notice that changes are listed in reverse chronological order.
  16. WHEN WHO WHAT, WHERE, WHY
  17. ---------- ------------ ----------------------------------------------------
  18. =============================================================================*/
  19. #ifndef QL_API_DATACALL_H
  20. #define QL_API_DATACALL_H
  21. #include <stdint.h>
  22. #include <stdbool.h>
  23. #include "sockets.h"
  24. #include "ql_api_common.h"
  25. #ifdef __cplusplus
  26. extern "C" {
  27. #endif
  28. /*========================================================================
  29. * Marco Definition
  30. *========================================================================*/
  31. #define QL_PDP_TYPE_IP_NONE 0
  32. #define QL_PDP_TYPE_IP 1
  33. #define QL_PDP_TYPE_IPV6 2
  34. #define QL_PDP_TYPE_IPV4V6 3
  35. #define PROFILE_IDX_MIN 1
  36. #define PROFILE_IDX_VOLTE_MAX 5
  37. #define PROFILE_IDX_MAX 7
  38. #define APN_LEN_MAX 99
  39. #define USERNAME_LEN_MAX 64
  40. #define PASSWORD_LEN_MAX 64
  41. #define PROFILE_IDX_NUM (PROFILE_IDX_MAX - PROFILE_IDX_MIN + 1 )
  42. #define QL_PDP_DEACTIVED 0
  43. #define QL_PDP_ACTIVED 1
  44. #define QL_NET_ADDRESS_LEN_MAX 16
  45. #define QL_DATACALL_ERRCODE_BASE (QL_COMPONENT_NETWORK_MANAGE<<16)
  46. /*========================================================================
  47. * Enumeration Definition
  48. *========================================================================*/
  49. typedef enum
  50. {
  51. QL_PDP_AUTH_TYPE_NONE = 0, //no authentication protocol is used for this PDP context. Username and password are removed if previously specified
  52. QL_PDP_AUTH_TYPE_PAP,
  53. QL_PDP_AUTH_TYPE_CHAP,
  54. QL_PDP_AUTH_TYPE_PAP_OR_CHAP,
  55. }ql_pdp_auth_type_e;
  56. typedef enum
  57. {
  58. QL_DATACALL_SUCCESS = 0,
  59. QL_DATACALL_EXECUTE_ERR = 1 | QL_DATACALL_ERRCODE_BASE,
  60. QL_DATACALL_MEM_ADDR_NULL_ERR,
  61. QL_DATACALL_INVALID_PARAM_ERR,
  62. QL_DATACALL_NW_REGISTER_TIMEOUT_ERR,
  63. QL_DATACALL_CFW_ACT_STATE_GET_ERR = 5 | QL_DATACALL_ERRCODE_BASE,
  64. QL_DATACALL_REPEAT_ACTIVE_ERR,
  65. QL_DATACALL_REPEAT_DEACTIVE_ERR,
  66. QL_DATACALL_CFW_PDP_CTX_SET_ERR,
  67. QL_DATACALL_CFW_PDP_CTX_GET_ERR,
  68. QL_DATACALL_CS_CALL_ERR = 10 | QL_DATACALL_ERRCODE_BASE,
  69. QL_DATACALL_CFW_CFUN_GET_ERR,
  70. QL_DATACALL_CFUN_DISABLE_ERR,
  71. QL_DATACALL_NW_STATUS_GET_ERR,
  72. QL_DATACALL_NOT_REGISTERED_ERR,
  73. QL_DATACALL_NO_MEM_ERR = 15 | QL_DATACALL_ERRCODE_BASE,
  74. QL_DATACALL_CFW_ATTACH_STATUS_GET_ERR,
  75. QL_DATACALL_SEMAPHORE_CREATE_ERR,
  76. QL_DATACALL_SEMAPHORE_TIMEOUT_ERR,
  77. QL_DATACALL_CFW_ATTACH_REQUEST_ERR,
  78. QL_DATACALL_CFW_ACTIVE_REQUEST_ERR = 20 | QL_DATACALL_ERRCODE_BASE,
  79. QL_DATACALL_ACTIVE_FAIL_ERR,
  80. QL_DATACALL_CFW_DEACTIVE_REQUEST_ERR,
  81. QL_DATACALL_NO_DFTPDN_CFG_CONTEXT,
  82. QL_DATACALL_NO_DFTPDN_INFO_CONTEXT,
  83. }ql_datacall_errcode_e;
  84. /*========================================================================
  85. * Type Definition
  86. *========================================================================*/
  87. struct v4_address_status
  88. {
  89. ip4_addr_t ip;
  90. ip4_addr_t pri_dns;
  91. ip4_addr_t sec_dns;
  92. };
  93. struct v4_info
  94. {
  95. int state; //dial status
  96. struct v4_address_status addr; //IPv4 address information
  97. };
  98. struct v6_address_status
  99. {
  100. ip6_addr_t ip;
  101. ip6_addr_t pri_dns;
  102. ip6_addr_t sec_dns;
  103. };
  104. struct v6_info
  105. {
  106. int state; //dial status
  107. struct v6_address_status addr; //IPv6 address information
  108. };
  109. typedef struct
  110. {
  111. int profile_idx;
  112. int ip_version;
  113. struct v4_info v4;
  114. struct v6_info v6;
  115. }ql_data_call_info_s;
  116. typedef struct
  117. {
  118. int ip_version;
  119. char apn_name[APN_LEN_MAX+1];
  120. char username[USERNAME_LEN_MAX+1];
  121. char password[PASSWORD_LEN_MAX+1];
  122. int auth_type;
  123. }ql_data_call_conf_s;
  124. typedef struct
  125. {
  126. uint8_t ip_version;
  127. ip4_addr_t ipv4;
  128. ip6_addr_t ipv6;
  129. char apn_name[APN_LEN_MAX];
  130. }ql_data_call_default_pdn_info_s;
  131. typedef ql_data_call_conf_s ql_data_call_default_pdn_cfg_s;
  132. typedef struct
  133. {
  134. char subnet_addr[QL_NET_ADDRESS_LEN_MAX];
  135. char subnet_mask[QL_NET_ADDRESS_LEN_MAX];
  136. }ql_nat_subnet_config_s;
  137. typedef struct
  138. {
  139. u8_t type;
  140. ip4_addr_t ip4;
  141. ip6_addr_t ip6;
  142. }ql_datacall_dns_info_s;
  143. typedef struct
  144. {
  145. uint8_t status;
  146. uint8_t ip_ver;
  147. ip4_addr_t ip_addr;
  148. ip4_addr_t dns_server;
  149. ip4_addr_t virt_dns_server;
  150. }ql_datacall_qdmz_cfg_s;
  151. extern ql_datacall_qdmz_cfg_s ql_qdmz_cfg;
  152. /*========================================================================
  153. * function Definition
  154. *========================================================================*/
  155. /*****************************************************************
  156. * Description: datacall callback
  157. *
  158. * Parameters:
  159. * ind_type [in] 事件类型
  160. * profile_idx [in] PDP索引
  161. * result [in] 执行结果
  162. *
  163. *****************************************************************/
  164. typedef void (*ql_datacall_callback)(uint8_t nSim, unsigned int ind_type, int profile_idx, bool result, void *ctx);
  165. /*****************************************************************
  166. * Function: ql_network_register_wait
  167. *
  168. * Description:
  169. * 等待网络注册
  170. *
  171. * Parameters:
  172. * nSim [in] SIM卡索引,取值0-1。
  173. * timeout_s [in] 超时时间,单位秒。
  174. *
  175. * Return:
  176. * 0 注册成功。
  177. * other 错误码。
  178. *
  179. *****************************************************************/
  180. ql_datacall_errcode_e ql_network_register_wait(uint8_t nSim, unsigned int timeout_s);
  181. /*****************************************************************
  182. * Function: ql_set_data_call_asyn_mode
  183. *
  184. * Description:
  185. * 设置ql_start_data_call和ql_stop_data_call接口的执行模式,并设置异步模式的回调函数,
  186. *
  187. * Parameters:
  188. * nSim [in] SIM卡索引,取值0-1。
  189. * deactive_cb [in] PDP索引,取值1-7。
  190. * enable [in] 1:使能异步模式;0:不使能异步模式
  191. *
  192. * Return:
  193. * 0 成功。
  194. * other 错误码。
  195. *
  196. *****************************************************************/
  197. ql_datacall_errcode_e ql_set_data_call_asyn_mode(uint8_t nSim, int profile_idx, bool enable);
  198. /*****************************************************************
  199. * Function: ql_start_data_call
  200. *
  201. * Description:
  202. * 启动拨号。默认为同步模式,可由ql_set_data_call_asyn_mode设置为异步模式
  203. *
  204. * Parameters:
  205. * nSim [in] SIM卡索引,取值0-1。
  206. * profile_idx [in] PDP索引,取值1-7。
  207. * ip_version [in] IP类型:1 为IPv4,2 为IPv6,3 为IPv4v6。
  208. * apn_name [in] apn名称。
  209. * username [in] 用户名称。
  210. * password [in] 用户密码。
  211. * auth_type [in] 认证类型: 0 NONE
  212. * 1 PAP
  213. * 2 CHAP
  214. *
  215. * Return:
  216. * 0 成功。
  217. * other 错误码。
  218. *
  219. *****************************************************************/
  220. ql_datacall_errcode_e ql_start_data_call(uint8_t nSim, int profile_idx, int ip_version, char *apn_name, char *username, char *password, int auth_type);
  221. /*****************************************************************
  222. * Function: ql_get_data_call_info
  223. *
  224. * Description:
  225. * 获取拨号信息。
  226. *
  227. * Parameters:
  228. * nSim [in] SIM卡索引,取值0-1。
  229. * profile_idx [in] PDP索引,取值1-7。
  230. * info [out] 获取拨号信息。
  231. *
  232. * Return:
  233. * 0 成功。
  234. * other 错误码。
  235. *
  236. *****************************************************************/
  237. ql_datacall_errcode_e ql_get_data_call_info(uint8_t nSim, int profile_idx, ql_data_call_info_s *info);
  238. /*****************************************************************
  239. * Function: ql_stop_data_call
  240. *
  241. * Description:
  242. * 关闭拨号。 默认为同步模式,可由ql_set_data_call_asyn_mode设置为异步模式
  243. *
  244. * Parameters:
  245. * nSim [in] SIM卡索引,取值0-1。
  246. * profile_idx [in] PDP索引,取值1-7。
  247. *
  248. * Return:
  249. * 0 成功。
  250. * other 错误码。
  251. *
  252. *****************************************************************/
  253. ql_datacall_errcode_e ql_stop_data_call(uint8_t nSim, int profile_idx);
  254. /*****************************************************************
  255. * Function: ql_datacall_register_cb
  256. *
  257. * Description: 注册数据拨号的回调函数
  258. *
  259. * Parameters:
  260. * nSim [in] SIM卡索引,取值0-1。
  261. * profile_idx [in] PDP索引,取值1-7。
  262. * datacall_cb [in] 需要注册的回调函数
  263. * ctx [in] 回调函数的参数
  264. *
  265. * Return:
  266. * 0 注册成功。
  267. * other 错误码。
  268. *
  269. *****************************************************************/
  270. ql_datacall_errcode_e ql_datacall_register_cb(uint8_t nSim, int profile_idx, ql_datacall_callback datacall_cb, void *ctx);
  271. /*****************************************************************
  272. * Function: ql_datacall_unregister_cb
  273. *
  274. * Description: 取消已注册的数据拨号回调函数
  275. *
  276. * Parameters:
  277. * nSim [in] SIM卡索引,取值0-1。
  278. * profile_idx [in] PDP索引,取值1-7。
  279. * datacall_cb [in] 需要取消注册的回调函数
  280. * ctx [in] 回调函数的参数
  281. *
  282. * Return:
  283. * 0 取消注册成功。
  284. * other 错误码。
  285. *
  286. *****************************************************************/
  287. ql_datacall_errcode_e ql_datacall_unregister_cb(uint8_t nSim, int profile_idx, ql_datacall_callback datacall_cb, void *ctx);
  288. /*****************************************************************
  289. * Function: ql_datacall_get_sim_profile_is_active
  290. *
  291. * Description: 获取当前PDP是否激活
  292. *
  293. * Parameters:
  294. * nSim [in] SIM卡索引,取值0-1。
  295. * profile_idx [in] PDP索引,取值1-7。
  296. *
  297. * Return:
  298. * 0 未激活
  299. * 1 已激活
  300. *
  301. *****************************************************************/
  302. bool ql_datacall_get_sim_profile_is_active(uint8_t nSim, int profile_idx);
  303. /*****************************************************************
  304. * Function: ql_bind_sim_and_profile
  305. *
  306. * Description:
  307. * bind sim_id and profile_id to get sim_cid
  308. *
  309. * Parameters:
  310. * nSim [in] SIM卡索引,取值0-1。
  311. * profile_idx [in] PDP索引,取值1-7。
  312. * sim_cid [out] nSim << 5 | profile_idx
  313. *
  314. * Return:
  315. * 0 成功。
  316. * other 错误码。
  317. *
  318. *****************************************************************/
  319. ql_datacall_errcode_e ql_bind_sim_and_profile(uint8_t nSim, int profile_idx, uint16_t *sim_cid);
  320. /*****************************************************************
  321. * Function: ql_get_sim_and_profile
  322. *
  323. * Description:
  324. * get sim_id and profile_id from sim_cid
  325. *
  326. * Parameters:
  327. * sim_cid [in] nSim << 5 | profile_idx
  328. * nSim [out] SIM卡索引,取值0-1。
  329. * profile_idx [out] PDP索引,取值1-7。
  330. *
  331. * Return:
  332. * 0 成功。
  333. * other 错误码。
  334. *
  335. *****************************************************************/
  336. ql_datacall_errcode_e ql_get_sim_and_profile(uint16_t sim_cid, uint8_t *nSim, int *profile_idx);
  337. /*****************************************************************
  338. * Function: ql_datacall_set_nat
  339. *
  340. * Description:
  341. * Enable NAT function for sim id and profile id, reboot to take effect
  342. *
  343. * Parameters:
  344. * sim_profile_list [in] A list of combinations of SIM and profile, the low 16 bits represent SIM 0 and the
  345. * high 16 bits represent SIM 1。 Each bit represents a corresponding profile id.
  346. *
  347. * example: 0x10005 ===》0001 0000 0000 0000 0101 profile 1 and 3 of SIM 0 and profile 1 of SIM 1 are enabled
  348. * ---- -------------------
  349. * SIM1 SIM0
  350. *
  351. * Return:
  352. * 0 success
  353. * other error code
  354. *
  355. *****************************************************************/
  356. ql_datacall_errcode_e ql_datacall_set_nat(uint32_t sim_profile_list);
  357. /*****************************************************************
  358. * Function: ql_datacall_get_nat
  359. *
  360. * Description:
  361. * get sim id and profile id that enabled NAT function
  362. *
  363. * Parameters:
  364. * sim_profile_list [out] A list of combinations of SIM and profile
  365. *
  366. * Return:
  367. * 0 success
  368. * other error code
  369. *
  370. *****************************************************************/
  371. ql_datacall_errcode_e ql_datacall_get_nat(uint32_t *sim_profile_list);
  372. /*****************************************************************
  373. * Function: ql_datacall_set_subnet
  374. *
  375. * Description:
  376. * If NAT function is enabled, the network address and subnet mask can be set through this API,
  377. * configuration parameters are not lost when power is down
  378. *
  379. * Parameters:
  380. * nSim [in] SIM index,range: 0-1
  381. * profile_idx [in] PDP context index, range: 1-7
  382. * config [in] subnet config, When equal to NULL, the record will be removed from NV
  383. *
  384. * Return:
  385. * 0 success
  386. * other error code
  387. *
  388. *****************************************************************/
  389. ql_datacall_errcode_e ql_datacall_set_subnet(uint8_t nSim, int profile_idx, ql_nat_subnet_config_s *config);
  390. /*****************************************************************
  391. * Function: ql_datacall_get_subnet
  392. *
  393. * Description:
  394. * get the saved network address and subnet mask
  395. *
  396. * Parameters:
  397. * nSim [in] SIM index,range: 0-1
  398. * profile_idx [in] PDP context index, range: 1-7
  399. * config [out] subnet config
  400. *
  401. * Return:
  402. * 0 success
  403. * other error code
  404. *
  405. *****************************************************************/
  406. ql_datacall_errcode_e ql_datacall_get_subnet(uint8_t nSim, int profile_idx, ql_nat_subnet_config_s *config);
  407. /*****************************************************************
  408. * Function: ql_datacall_set_dns_addr
  409. *
  410. * Description:
  411. * set dns address
  412. *
  413. * Parameters:
  414. * nSim [in] SIM index,range: 0-1
  415. * profile_idx [in] PDP context index, range: 1-7
  416. * new_pri [in] first dns address
  417. * new_sec [in] second dns address
  418. *
  419. * Return:
  420. * 0 success
  421. * other error code
  422. *
  423. *****************************************************************/
  424. ql_datacall_errcode_e ql_datacall_set_dns_addr(uint8_t nSim, int profile_idx, ql_datacall_dns_info_s *new_pri, ql_datacall_dns_info_s *new_sec);
  425. /*****************************************************************
  426. * Function: ql_datacall_get_dns_addr
  427. *
  428. * Description:
  429. * get dns address
  430. *
  431. * Parameters:
  432. * nSim [in] SIM index,range: 0-1
  433. * profile_idx [in] PDP context index, range: 1-7
  434. * new_pri [out] first dns address
  435. * new_sec [out] second dns address
  436. *
  437. * Return:
  438. * 0 success
  439. * other error code
  440. *
  441. *****************************************************************/
  442. ql_datacall_errcode_e ql_datacall_get_dns_addr(uint8_t nSim, int profile_idx, ql_datacall_dns_info_s *new_pri, ql_datacall_dns_info_s *new_sec);
  443. /*****************************************************************
  444. * Function: ql_datacall_set_default_pdn_cfg
  445. *
  446. * Description:
  447. * set default pdn config
  448. *
  449. * Parameters:
  450. * nSim [in] SIM index,range: 0-1
  451. * ctx [in] pdn config
  452. *
  453. * Return:
  454. * 0 success
  455. * other error code
  456. *
  457. *****************************************************************/
  458. ql_datacall_errcode_e ql_datacall_set_default_pdn_cfg(uint8_t nSim, ql_data_call_default_pdn_cfg_s* ctx);
  459. /*****************************************************************
  460. * Function: ql_datacall_get_default_pdn_cfg
  461. *
  462. * Description:
  463. * get default pdn config
  464. *
  465. * Parameters:
  466. * nSim [in] SIM index,range: 0-1
  467. * ctx [out] pdn config
  468. *
  469. * Return:
  470. * 0 success
  471. * other error code
  472. *
  473. *****************************************************************/
  474. ql_datacall_errcode_e ql_datacall_get_default_pdn_cfg(uint8_t nSim, ql_data_call_default_pdn_cfg_s* ctx);
  475. /*****************************************************************
  476. * Function: ql_datacall_get_default_pdn_info
  477. *
  478. * Description:
  479. * get default pdn info
  480. *
  481. * Parameters:
  482. * nSim [in] SIM index,range: 0-1
  483. * ctx [out] pdn info
  484. *
  485. * Return:
  486. * 0 success
  487. * other error code
  488. *
  489. *****************************************************************/
  490. ql_datacall_errcode_e ql_datacall_get_default_pdn_info(uint8_t nSim, ql_data_call_default_pdn_info_s* ctx);
  491. #ifdef __cplusplus
  492. }/*"C" */
  493. #endif
  494. #endif /*QL_API_DATACALL_H*/