ql_api_sim.h 18 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555
  1. /*============================================================================
  2. Copyright (c) 2020 Quectel Wireless Solution, Co., Ltd. All Rights Reserved.
  3. Quectel Wireless Solution Proprietary and Confidential.
  4. =============================================================================*/
  5. /*===========================================================================
  6. EDIT HISTORY FOR MODULE
  7. This section contains comments describing changes made to the module.
  8. Notice that changes are listed in reverse chronological order.
  9. WHEN WHO WHAT, WHERE, WHY
  10. ---------- ------------ ----------------------------------------------------
  11. =============================================================================*/
  12. #ifndef QL_API_SIM_H
  13. #define QL_API_SIM_H
  14. #include <stddef.h>
  15. #include "ql_api_common.h"
  16. #include "ql_gpio.h"
  17. #ifdef __cplusplus
  18. extern "C" {
  19. #endif
  20. /*========================================================================
  21. * Marco Definition
  22. *========================================================================*/
  23. #define QL_SIM_ERRCODE_BASE (QL_COMPONENT_SIM<<16)
  24. #define QL_SIM_PIN_LEN_MAX 8 // Maximum length of PIN data.
  25. #define QL_PBK_ITEM_COUNT_MAX 20
  26. #define QL_PBK_USERNAME_LEN_MAX 32
  27. #define QL_PBK_PHONENUM_LEN_MAX 24
  28. /*========================================================================
  29. * Enumeration Definition
  30. *========================================================================*/
  31. //SIM componant detail errcode, 4 bytes
  32. typedef enum
  33. {
  34. QL_SIM_SUCCESS = 0,
  35. QL_SIM_EXECUTE_ERR = 1|QL_SIM_ERRCODE_BASE,
  36. QL_SIM_MEM_ADDR_NULL_ERR,
  37. QL_SIM_INVALID_PARAM_ERR,
  38. QL_SIM_NO_MEMORY_ERR,
  39. QL_SIM_SEMAPHORE_CREATE_ERR = 5|QL_SIM_ERRCODE_BASE,
  40. QL_SIM_SEMAPHORE_TIMEOUT_ERR,
  41. QL_SIM_NOT_INSERTED_ERR,
  42. QL_SIM_CFW_IMSI_GET_REQUEST_ERR,
  43. QL_SIM_CFW_IMSI_GET_RSP_ERR,
  44. QL_SIM_CFW_ICCID_GET_REQUEST_ERR = 10|QL_SIM_ERRCODE_BASE,
  45. QL_SIM_CFW_PHONE_NUM_GET_REQUEST_ERR,
  46. QL_SIM_CFW_PHONE_NUM_GET_RSP_NULL_ERR,
  47. QL_SIM_CFW_STATUS_GET_REQUEST_ERR,
  48. QL_SIM_CFW_PIN_ENABLE_REQUEST_ERR,
  49. QL_SIM_CFW_PIN_DISABLE_REQUEST_ERR = 15|QL_SIM_ERRCODE_BASE,
  50. QL_SIM_CFW_PIN_VERIFY_REQUEST_ERR,
  51. QL_SIM_CFW_PIN_CHANGE_REQUEST_ERR,
  52. QL_SIM_CFW_PIN_UNBLOCK_REQUEST_ERR,
  53. QL_SIM_OPERATION_NOT_ALLOWED_ERR,
  54. QL_PBK_NOT_EXIT_ERR = 100|QL_SIM_ERRCODE_BASE,
  55. QL_PBK_NOT_INIT_ERR,
  56. QL_PBK_ITEM_NOT_FOUND_ERR,
  57. } ql_sim_errcode_e;
  58. typedef enum
  59. {
  60. QL_SIM_STATUS_READY = 0,
  61. QL_SIM_STATUS_PIN1_READY,
  62. QL_SIM_STATUS_SIMPIN,
  63. QL_SIM_STATUS_SIMPUK,
  64. QL_SIM_STATUS_PHONE_TO_SIMPIN,
  65. QL_SIM_STATUS_PHONE_TO_FIRST_SIMPIN = 5,
  66. QL_SIM_STATUS_PHONE_TO_FIRST_SIMPUK,
  67. QL_SIM_STATUS_SIMPIN2,
  68. QL_SIM_STATUS_SIMPUK2,
  69. QL_SIM_STATUS_NETWORKPIN,
  70. QL_SIM_STATUS_NETWORKPUK = 10,
  71. QL_SIM_STATUS_NETWORK_SUBSETPIN,
  72. QL_SIM_STATUS_NETWORK_SUBSETPUK,
  73. QL_SIM_STATUS_PROVIDERPIN,
  74. QL_SIM_STATUS_PROVIDERPUK,
  75. QL_SIM_STATUS_CORPORATEPIN = 15,
  76. QL_SIM_STATUS_CORPORATEPUK,
  77. QL_SIM_STATUS_NOSIM,
  78. QL_SIM_STATUS_PIN1BLOCK,
  79. QL_SIM_STATUS_PIN2BLOCK,
  80. QL_SIM_STATUS_PIN1_DISABLE = 20,
  81. QL_SIM_STATUS_SIM_PRESENT,
  82. QL_SIM_STATUS_UNKNOW,
  83. }ql_sim_status_e;
  84. typedef enum
  85. {
  86. QL_SIM_PBK_STORAGE_FD, // (U)SIM fix dialing-phone book
  87. QL_SIM_PBK_STORAGE_LD, // (U)SIM last-dialing-phone book
  88. QL_SIM_PBK_STORAGE_ME, // Mobile equipment phonebook
  89. QL_SIM_PBK_STORAGE_ON, // SIM (or MT) own numbers (MSISDNs) list
  90. QL_SIM_PBK_STORAGE_SM, // SIM/UICC phonebook
  91. QL_SIM_PBK_STORAGE_MAX,
  92. } ql_sim_pbk_storage_e;
  93. typedef enum
  94. {
  95. QL_SIM_PBK_GSM,
  96. QL_SIM_PBK_HEX,
  97. QL_SIM_PBK_UCS2,
  98. QL_SIM_PBK_GBK,
  99. QL_SIM_PBK_IRA,
  100. QL_SIM_PBK_ENCODE_MAX,
  101. } ql_sim_pbk_encoding_e;
  102. typedef enum{
  103. QL_SIM_HOTPLUG_DISABLE = 0,
  104. QL_SIM_HOTPLUG_ENABLE = 1,
  105. }ql_sim_hotplug_e;
  106. typedef enum{
  107. QL_SIM_HOTPLUG_STATUS_OUT = 0,
  108. QL_SIM_HOTPLUG_STATUS_IN = 1,
  109. }ql_sim_hotplug_status_e;
  110. /*========================================================================
  111. * Type Definition
  112. *========================================================================*/
  113. typedef struct
  114. {
  115. uint8_t pin_value[QL_SIM_PIN_LEN_MAX+1]; /* Value of the PIN */
  116. }ql_sim_verify_pin_info_s;
  117. typedef struct
  118. {
  119. uint8_t old_pin_value[QL_SIM_PIN_LEN_MAX+1]; /**< Value of the old PIN as a sequence of ASCII characters. */
  120. uint8_t new_pin_value[QL_SIM_PIN_LEN_MAX+1]; /**< Value of the new PIN as a sequence of ASCII characters. */
  121. }ql_sim_change_pin_info_s;
  122. typedef struct
  123. {
  124. uint8_t puk_value[QL_SIM_PIN_LEN_MAX+1]; /**< Value of the PUK as a sequence of ASCII characters. */
  125. uint8_t new_pin_value[QL_SIM_PIN_LEN_MAX+1]; /**< Value of the new PIN as a sequence of ASCII characters. */
  126. }ql_sim_unblock_pin_info_s;
  127. typedef struct
  128. {
  129. int index; /**< the item index in phone book */
  130. uint8_t username[QL_PBK_USERNAME_LEN_MAX]; /**< user name */
  131. uint8_t phonenum[QL_PBK_PHONENUM_LEN_MAX]; /**< phone number, it can include '+'. when write, if phonenum is empty, it means to delete this item specified by index*/
  132. uint8_t username_len; /**< user name len*/
  133. } ql_sim_pbk_item_info_s;
  134. typedef struct
  135. {
  136. int item_count; /**< the count of items */
  137. ql_sim_pbk_item_info_s item[QL_PBK_ITEM_COUNT_MAX]; /**< the list of items */
  138. } ql_sim_pbk_itemset_info_s;
  139. typedef struct
  140. {
  141. ql_GpioNum gpio_num;
  142. ql_LvlMode gpio_level;
  143. }ql_sim_hotplug_gpio_s;
  144. /*========================================================================
  145. * Callback Definition
  146. *========================================================================*/
  147. typedef void (*ql_pbk_event_handler_t)(uint8_t nSim, int event_id, void *ctx);
  148. extern ql_pbk_event_handler_t ql_pbk_call_callback;
  149. typedef void (*ql_sim_hotplug_cb_t)(uint8_t nSim, ql_sim_hotplug_status_e status);
  150. /*========================================================================
  151. * function Definition
  152. *========================================================================*/
  153. /*****************************************************************
  154. * Function: ql_sim_get_imsi
  155. *
  156. * Description:
  157. * 获取 SIM 卡的 IMSI。
  158. *
  159. * Parameters:
  160. * nSim [in] SIM卡索引,取值:0-1
  161. * imsi [out] SIM 卡的 IMSI,字符串。
  162. * imsi_len [in] imsi 数组的长度。
  163. *
  164. * Return:
  165. * QL_SIM_SUCCESS 成功。
  166. * other 错误码。
  167. *
  168. *****************************************************************/
  169. ql_sim_errcode_e ql_sim_get_imsi(uint8_t nSim, char *imsi, size_t imsi_len);
  170. /*****************************************************************
  171. * Function: ql_sim_get_iccid
  172. *
  173. * Description:
  174. * 获取 SIM 卡的 ICCID。
  175. *
  176. * Parameters:
  177. * nSim [in] SIM卡索引,取值:0-1
  178. * iccid [out] SIM 卡的 ICCID,字符串。
  179. * iccid_len [in] iccid 数组的长度。
  180. *
  181. * Return:
  182. * QL_SIM_SUCCESS 成功。
  183. * other 错误码。
  184. *
  185. *****************************************************************/
  186. ql_sim_errcode_e ql_sim_get_iccid(uint8_t nSim, char *iccid, size_t iccid_len);
  187. /*****************************************************************
  188. * Function: ql_sim_get_phonenumber
  189. *
  190. * Description:
  191. * 获取 SIM 卡本机号码。
  192. *
  193. * Parameters:
  194. * nSim [in] SIM卡索引,取值:0-1
  195. * phonenumber [out] SIM 卡本机号码,字符串。
  196. * phonenumber_len [in] phonenumber 数组的长度。
  197. *
  198. * Return:
  199. * QL_SIM_SUCCESS 成功。
  200. * other 错误码。
  201. *
  202. *****************************************************************/
  203. ql_sim_errcode_e ql_sim_get_phonenumber(uint8_t nSim, char *phonenumber,size_t phonenumber_len);
  204. /*****************************************************************
  205. * Function: ql_sim_get_card_status_phy
  206. *
  207. * Description:
  208. * 获取 SIM 卡实时状态信息。
  209. *
  210. * Parameters:
  211. * nSim [in] SIM卡索引,取值:0-1
  212. * card_status [out] 返回 SIM 卡类型信息,见 ql_sim_status_e
  213. *
  214. * Return:
  215. * QL_SIM_SUCCESS 成功。
  216. * other 错误码。
  217. *
  218. *****************************************************************/
  219. ql_sim_errcode_e ql_sim_get_card_status_phy(uint8_t nSim, ql_sim_status_e *card_status);
  220. /*****************************************************************
  221. * Function: ql_sim_get_card_status
  222. *
  223. * Description:
  224. * 获取 SIM 卡缓存状态信息。
  225. *
  226. * Parameters:
  227. * nSim [in] SIM卡索引,取值:0-1
  228. * card_status [out] 返回 SIM 卡类型信息,见 ql_sim_status_e
  229. *
  230. * Return:
  231. * QL_SIM_SUCCESS 成功。
  232. * other 错误码。
  233. *
  234. *****************************************************************/
  235. ql_sim_errcode_e ql_sim_get_card_status(uint8_t nSim, ql_sim_status_e *card_status);
  236. /*****************************************************************
  237. * Function: ql_sim_enable_pin
  238. *
  239. * Description:
  240. * 启用 SIM 卡 PIN 码验证,重启生效。
  241. *
  242. * Parameters:
  243. * nSim [in] SIM卡索引,取值:0-1
  244. * pt_info [in] 输入 PIN 码,见 ql_sim_verify_pin_info_s
  245. *
  246. * Return:
  247. * QL_SIM_SUCCESS 成功。
  248. * other 错误码。
  249. *
  250. *****************************************************************/
  251. ql_sim_errcode_e ql_sim_enable_pin(uint8_t nSim, ql_sim_verify_pin_info_s *pt_info);
  252. /*****************************************************************
  253. * Function: ql_sim_disable_pin
  254. *
  255. * Description:
  256. * 关闭 SIM 卡 PIN 码验证。
  257. *
  258. * Parameters:
  259. * nSim [in] SIM卡索引,取值:0-1
  260. * pt_info [in] 输入 PIN 码,见 ql_sim_verify_pin_info_s
  261. *
  262. * Return:
  263. * QL_SIM_SUCCESS 成功。
  264. * other 错误码。
  265. *
  266. *****************************************************************/
  267. ql_sim_errcode_e ql_sim_disable_pin(uint8_t nSim, ql_sim_verify_pin_info_s *pt_info);
  268. /*****************************************************************
  269. * Function: ql_sim_verify_pin
  270. *
  271. * Description:
  272. * 当 SIM 状态为请求 PIN/PIN2,输入 PIN/PIN2 码,进行验证。
  273. *
  274. * Parameters:
  275. * nSim [in] SIM卡索引,取值:0-1
  276. * pt_info [in] 输入 PIN 码,见 ql_sim_verify_pin_info_s
  277. *
  278. * Return:
  279. * QL_SIM_SUCCESS 成功。
  280. * other 错误码。
  281. *
  282. *****************************************************************/
  283. ql_sim_errcode_e ql_sim_verify_pin(uint8_t nSim, ql_sim_verify_pin_info_s *pt_info);
  284. /*****************************************************************
  285. * Function: ql_sim_change_pin
  286. *
  287. * Description:
  288. * 启用 SIM 卡 PIN 码验证后,更改 SIM 卡的 PIN 码。
  289. *
  290. * Parameters:
  291. * nSim [in] SIM卡索引,取值:0-1
  292. * pt_info [in] 输入旧的 PIN 和新的 PIN,见 ql_sim_change_pin_info_s
  293. *
  294. * Return:
  295. * QL_SIM_SUCCESS 成功。
  296. * other 错误码。
  297. *
  298. *****************************************************************/
  299. ql_sim_errcode_e ql_sim_change_pin(uint8_t nSim, ql_sim_change_pin_info_s *pt_info);
  300. /*****************************************************************
  301. * Function: ql_sim_change_pin
  302. *
  303. * Description:
  304. * 当多次错误输入 PIN/PIN2 码后,SIM 卡状态为请求 PUK/PUK2 时,输入 PUK/PUK2 码和新的PIN/PIN2 码进行解锁,
  305. * 解PUK锁成功后,SIM卡会自动启用PIN 码验证,用户需再次调用ql_sim_disable_pin()关闭 SIM 卡 PIN 码验证。
  306. *
  307. * Parameters:
  308. * nSim [in] SIM卡索引,取值:0-1
  309. * pt_info [in] 输入 PUK/PUK2 码和新的 PIN/PIN2 码,见 ql_sim_unblock_pin_info_s
  310. *
  311. * Return:
  312. * QL_SIM_SUCCESS 成功。
  313. * other 错误码。
  314. *
  315. *****************************************************************/
  316. ql_sim_errcode_e ql_sim_unblock_pin(uint8_t nSim, ql_sim_unblock_pin_info_s *pt_info);
  317. /*****************************************************************
  318. * Function: ql_sim_set_operate_id
  319. *
  320. * Description:
  321. * 设置需要操作的SIM卡卡槽ID,默认值为0;仅适用于双卡单待应用,以切换操作的物理卡槽。
  322. *
  323. * Parameters:
  324. * nSim [in] SIM卡卡槽ID,取值:0-1
  325. *
  326. * Return:
  327. * QL_SIM_SUCCESS 成功。
  328. * other 错误码。
  329. *
  330. *****************************************************************/
  331. ql_sim_errcode_e ql_sim_set_operate_id(uint8_t nSim);
  332. /*****************************************************************
  333. * Function: ql_sim_get_operate_id
  334. *
  335. * Description:
  336. * 获取当前操作的SIM卡卡槽ID;仅适用于双卡单待应用。
  337. *
  338. * Parameters:
  339. * NULL
  340. *
  341. * Return:
  342. * SIM ID。
  343. *
  344. *****************************************************************/
  345. uint8_t ql_sim_get_operate_id(void);
  346. /*****************************************************************
  347. * Function: ql_sim_set_hotplug
  348. *
  349. * Description:
  350. * SIM卡热插拔使能函数
  351. *
  352. * Parameters:
  353. * nSim [in] SIM卡卡槽ID,取值:0-1
  354. * status [in] SIM卡热插拔是否使能,取值: 1 ENABLE,0 DISABLE
  355. * gpio_cfg [in] SIM卡热插拔GPIO配置结构体,ENABLE时必须传入有效值,DISABLE时必须传入NULL
  356. *
  357. * Return:
  358. * QL_SIM_SUCCESS 成功。
  359. * other 错误码。
  360. *
  361. *****************************************************************/
  362. ql_sim_errcode_e ql_sim_set_hotplug(uint8_t nSim, ql_sim_hotplug_e status, ql_sim_hotplug_gpio_s* gpio_cfg);
  363. /*****************************************************************
  364. * Function: ql_sim_hotplug_register_cb
  365. *
  366. * Description:
  367. * 注册SIM卡热插拔回调函数
  368. *
  369. * Parameters:
  370. * cb [in] SIM卡热插拔回调函数
  371. *
  372. * Return:
  373. * QL_SIM_SUCCESS 成功。
  374. * other 错误码。
  375. *
  376. *****************************************************************/
  377. ql_sim_errcode_e ql_sim_hotplug_register_cb(ql_sim_hotplug_cb_t cb);
  378. /*****************************************************************
  379. * Function: ql_sim_get_ds_feature
  380. *
  381. * Description:
  382. * 获取当前应用的双卡类型
  383. *
  384. * Parameters:
  385. * None
  386. *
  387. * Return:
  388. * ql_dsim_feature_e 卡类型
  389. *
  390. *****************************************************************/
  391. uint8_t ql_sim_get_ds_feature(void);
  392. /*****************************************************************
  393. * Function: ql_sim_set_ds_feature
  394. *
  395. * Description:
  396. * 设置应用的双卡类型, 重启后生效.
  397. *
  398. * Parameters:
  399. * ds_feature [in] 卡类型:
  400. * DSIM_SINGLE:单卡单待
  401. * DSIM_DSSS:双卡单待
  402. * DSIM_DSDS:双卡双待
  403. *
  404. * Return:
  405. * QL_SIM_SUCCESS 成功。
  406. * other 错误码。
  407. *
  408. *****************************************************************/
  409. ql_sim_errcode_e ql_sim_set_ds_feature(uint8_t ds_feature);
  410. #ifdef CONFIG_QUEC_PROJECT_FEATURE_PBK
  411. /*****************************************************************
  412. * Function: ql_sim_read_pbk_item
  413. *
  414. * Description:
  415. * 获取SIM卡上指定电话本中的一条或多电话号码记录。
  416. *
  417. * Parameters:
  418. * nSim [in] SIM卡索引,取值:0-1
  419. * storage [in] 需要读取电话号码记录的电话本存储位置,见 ql_sim_pbk_storage_e
  420. * start_index [in] 需要读取电话号码记录的起始编号,start_index 为 0 表示不使用编号获取电话号码记录
  421. * end_index [in] 需要读取电话号码记录的结束编号
  422. * username [in] 当 start_index 为 0 时有效,电话号码中的用户名
  423. * username_len [in] 当 start_index 为 0 时有效,电话号码中的用户名的长度
  424. * itemset [out] 返回电话号码记录列表,见 ql_sim_pbk_itemset_info_s
  425. *
  426. * Return:
  427. * QL_SIM_SUCCESS 成功。
  428. * other 错误码。
  429. *
  430. *****************************************************************/
  431. ql_sim_errcode_e ql_sim_read_pbk_item(uint8_t nSim,
  432. ql_sim_pbk_storage_e storage,
  433. int start_index,
  434. int end_index,
  435. uint8_t *username,
  436. uint8_t username_len,
  437. ql_sim_pbk_itemset_info_s *itemset);
  438. /*****************************************************************
  439. * Function: ql_sim_write_pbk_item
  440. *
  441. * Description:
  442. * 写入SIM卡上指定电话本中的一条电话号码记录。
  443. *
  444. * Parameters:
  445. * nSim [in] SIM卡索引,取值:0-1
  446. * storage [in] 需要读取电话号码记录的电话本存储位置
  447. * item [in] 需要写入的电话号码记录,见 ql_sim_pbk_item_info_s
  448. *
  449. * Return:
  450. * QL_SIM_SUCCESS 成功。
  451. * other 错误码。
  452. *
  453. *****************************************************************/
  454. ql_sim_errcode_e ql_sim_write_pbk_item(uint8_t nSim,
  455. ql_sim_pbk_storage_e storage,
  456. ql_sim_pbk_item_info_s *item);
  457. /*****************************************************************
  458. * Function: ql_sim_set_pbk_encoding
  459. *
  460. * Description:
  461. * 设置电话簿字符集,重启后恢复为QL_SIM_PBK_GSM
  462. *
  463. * Parameters:
  464. * encoding [in] 字符集, 见ql_sim_pbk_encoding_e
  465. *
  466. * Return:
  467. * QL_SIM_SUCCESS 成功。
  468. * other 错误码。
  469. *
  470. *****************************************************************/
  471. ql_sim_errcode_e ql_sim_set_pbk_encoding(ql_sim_pbk_encoding_e encoding);
  472. /*****************************************************************
  473. * Function: ql_sim_get_pbk_encoding
  474. *
  475. * Description:
  476. * 获取电话簿字符集,默认为QL_SIM_PBK_GSM
  477. *
  478. * Parameters:
  479. * encoding [out] 字符集, 见ql_sim_pbk_encoding_e
  480. *
  481. * Return:
  482. * QL_SIM_SUCCESS 成功。
  483. * other 错误码。
  484. *
  485. *****************************************************************/
  486. ql_sim_errcode_e ql_sim_get_pbk_encoding(ql_sim_pbk_encoding_e *encoding);
  487. /*****************************************************************
  488. * Function: ql_pbk_callback_register
  489. *
  490. * Description:
  491. * 注册电话簿回调函数
  492. *
  493. * Parameters:
  494. * cb [in] 回调函数
  495. *
  496. *****************************************************************/
  497. void ql_pbk_callback_register(ql_pbk_event_handler_t cb);
  498. #endif
  499. #ifdef __cplusplus
  500. }/*"C" */
  501. #endif
  502. #endif /*QL_API_SIM_H*/