luat_mobile.h 39 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697989910010110210310410510610710810911011111211311411511611711811912012112212312412512612712812913013113213313413513613713813914014114214314414514614714814915015115215315415515615715815916016116216316416516616716816917017117217317417517617717817918018118218318418518618718818919019119219319419519619719819920020120220320420520620720820921021121221321421521621721821922022122222322422522622722822923023123223323423523623723823924024124224324424524624724824925025125225325425525625725825926026126226326426526626726826927027127227327427527627727827928028128228328428528628728828929029129229329429529629729829930030130230330430530630730830931031131231331431531631731831932032132232332432532632732832933033133233333433533633733833934034134234334434534634734834935035135235335435535635735835936036136236336436536636736836937037137237337437537637737837938038138238338438538638738838939039139239339439539639739839940040140240340440540640740840941041141241341441541641741841942042142242342442542642742842943043143243343443543643743843944044144244344444544644744844945045145245345445545645745845946046146246346446546646746846947047147247347447547647747847948048148248348448548648748848949049149249349449549649749849950050150250350450550650750850951051151251351451551651751851952052152252352452552652752852953053153253353453553653753853954054154254354454554654754854955055155255355455555655755855956056156256356456556656756856957057157257357457557657757857958058158258358458558658758858959059159259359459559659759859960060160260360460560660760860961061161261361461561661761861962062162262362462562662762862963063163263363463563663763863964064164264364464564664764864965065165265365465565665765865966066166266366466566666766866967067167267367467567667767867968068168268368468568668768868969069169269369469569669769869970070170270370470570670770870971071171271371471571671771871972072172272372472572672772872973073173273373473573673773873974074174274374474574674774874975075175275375475575675775875976076176276376476576676776876977077177277377477577677777877978078178278378478578678778878979079179279379479579679779879980080180280380480580680780880981081181281381481581681781881982082182282382482582682782882983083183283383483583683783883984084184284384484584684784884985085185285385485585685785885986086186286386486586686786886987087187287387487587687787887988088188288388488588688788888989089189289389489589689789889990090190290390490590690790890991091191291391491591691791891992092192292392492592692792892993093193293393493593693793893994094194294394494594694794894995095195295395495595695795895996096196296396496596696796896997097197297397497597697797897998098198298398498598698798898999099199299399499599699799899910001001
  1. /*
  2. * Copyright (c) 2022 OpenLuat & AirM2M
  3. *
  4. * Permission is hereby granted, free of charge, to any person obtaining a copy of
  5. * this software and associated documentation files (the "Software"), to deal in
  6. * the Software without restriction, including without limitation the rights to
  7. * use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of
  8. * the Software, and to permit persons to whom the Software is furnished to do so,
  9. * subject to the following conditions:
  10. *
  11. * The above copyright notice and this permission notice shall be included in all
  12. * copies or substantial portions of the Software.
  13. *
  14. * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
  16. * FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
  17. * COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
  18. * IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
  19. * CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
  20. */
  21. #ifndef __LUAT_MOBILE_H__
  22. #define __LUAT_MOBILE_H__
  23. #include "luat_base.h"
  24. /**
  25. * @defgroup luatos_mobile 移动网络相关接口
  26. * @{
  27. */
  28. /**
  29. * @brief 获取IMEI
  30. *
  31. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  32. * @param buff[OUT] IMEI数据
  33. * @param buf_len 用户传入缓存的大小,如果底层数据量大于buf_len,只会传出buf_len大小的数据
  34. * @return int <= 0错误 >0实际传出的大小
  35. */
  36. int luat_mobile_get_imei(int sim_id, char* buff, size_t buf_len);
  37. /**
  38. * @brief 获取SN,如果用户没有调用luat_mobile_set_sn接口写过SN,默认值为空
  39. *
  40. * @param buff[OUT] SN数据
  41. * @param buf_len 用户传入缓存的大小,EC618平台底层支持的最大长度为32字节,如果底层数据量大于buf_len,只会传出buf_len大小的数据
  42. * @return int <= 0错误 >0实际传出的大小
  43. */
  44. int luat_mobile_get_sn(char* buff, size_t buf_len);
  45. /**
  46. * @brief 设置SN
  47. *
  48. * @param buff SN数据,必须是ascii值大于等于0x21小于等于0x7e的可见ascii字符
  49. * @param buf_len SN数据长度;EC618平台底层支持的最大长度为32字节,如果buf_len大于32,只会保存前32字节的数据
  50. * @return int = 0成功, = -1失败
  51. */
  52. int luat_mobile_set_sn(char* buff, uint8_t buf_len);
  53. /**
  54. * @brief 获取MUID,并不一定存在
  55. *
  56. * @param buff[OUT] MUID数据
  57. * @param buf_len 用户传入缓存的大小,如果底层数据量大于buf_len,只会传出buf_len大小的数据
  58. * @return int <= 0错误 >0实际传出的大小
  59. */
  60. int luat_mobile_get_muid(char* buff, size_t buf_len);
  61. /**
  62. * @brief 获取SIM卡的ICCID
  63. *
  64. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  65. * @param buff[OUT] ICCID数据
  66. * @param buf_len 用户传入缓存的大小,如果底层数据量大于buf_len,只会传出buf_len大小的数据
  67. * @return int <= 0错误 >0实际传出的大小
  68. */
  69. int luat_mobile_get_iccid(int sim_id, char* buff, size_t buf_len);
  70. /**
  71. * @brief 获取SIM卡的IMSI
  72. *
  73. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  74. * @param buff[OUT] IMSI数据
  75. * @param buf_len 用户传入缓存的大小,如果底层数据量大于buf_len,只会传出buf_len大小的数据
  76. * @return int <= 0错误 >0实际传出的大小
  77. */
  78. int luat_mobile_get_imsi(int sim_id, char* buff, size_t buf_len);
  79. /**
  80. * @brief 当前使用的SIM卡的手机号,注意,只有写入了手机号才能读出,因此有可能读出来是空的
  81. *
  82. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  83. * @param buff[OUT] sim_number数据
  84. * @param buf_len 用户传入缓存的大小,如果底层数据量大于buf_len,只会传出buf_len大小的数据
  85. * @return int <= 0错误 >0实际传出的大小
  86. */
  87. int luat_mobile_get_sim_number(int sim_id, char* buff, size_t buf_len);
  88. /**
  89. * @brief 当前使用的SIM卡的位置,并不一定支持
  90. *
  91. * @param id[OUT] sim位置,对于双卡双待的设备,输出0或者1,其他设备输出0
  92. * @return int =0成功,其他失败
  93. */
  94. int luat_mobile_get_sim_id(int *id);
  95. /**
  96. * @brief 改变使用的SIM卡的位置,并不一定支持
  97. *
  98. * @param id sim位置,对于双卡的设备,选0或者1,其他为自动选择模式。非双卡的设备不支持
  99. * @return int =0成功,其他失败
  100. */
  101. int luat_mobile_set_sim_id(int id);
  102. typedef enum LUAT_MOBILE_SIM_PIN_OP
  103. {
  104. LUAT_SIM_PIN_VERIFY = 0, /* verify pin code */
  105. LUAT_SIM_PIN_CHANGE, /* change pin code */
  106. LUAT_SIM_PIN_ENABLE, /* enable the pin1 state for verification */
  107. LUAT_SIM_PIN_DISABLE, /* disable the pin1 state */
  108. LUAT_SIM_PIN_UNBLOCK, /* unblock pin code */
  109. // LUAT_SIM_PIN_QUERY, /* query pin1 state, enable or disable */
  110. }LUAT_MOBILE_SIM_PIN_OP_E;
  111. /**
  112. * @brief 对SIM卡的pin码做操作
  113. *
  114. * @param id sim位置,对于双卡的设备,选0或者1,其他为自动选择模式,但是0和1的优先级是一致的。非双卡的设备不支持
  115. * @param operation 操作码,见LUAT_MOBILE_SIM_PIN_OP_E
  116. * @param pin1 旧的pin码,或者验证的pin码,解锁pin码时的PUK,参考手机操作
  117. * @param pin2 更换pin码操作时的新的pin码,解锁pin码时的新PIN,参考手机操作
  118. * @return int =0成功,其他失败
  119. */
  120. int luat_mobile_set_sim_pin(int id, uint8_t operation, char pin1[9], char pin2[9]);
  121. /**
  122. * @brief 检查SIM卡是否准备好
  123. *
  124. * @param id sim位置,对于双卡双待的设备,选0或者1,其他设备忽略
  125. * @return =1准备好,其他未准备好,或者SIM卡不在位
  126. */
  127. uint8_t luat_mobile_get_sim_ready(int id);
  128. /**
  129. * @brief 在自动选择模式时,开机后优先用sim0
  130. *
  131. */
  132. void luat_mobile_set_sim_detect_sim0_first(void);
  133. /**
  134. * @brief 设置默认PDN激活时是否要IPV6网络,现在默认情况下不开
  135. * @param onoff 1开 0关
  136. * @return uint8_t 1开 0关
  137. */
  138. void luat_mobile_set_default_pdn_ipv6(uint8_t onoff);
  139. /**
  140. * @brief 设置默认PDN激活时是否只支持IPV6网络,现在默认情况下不开
  141. * @param onoff 1开 0关
  142. * @return uint8_t 1开 0关
  143. */
  144. void luat_mobile_set_default_pdn_only_ipv6(uint8_t onoff);
  145. /**
  146. * @brief 返回默认PDN激活时是否要IPV6网络
  147. * @return uint8_t 1开 0关
  148. */
  149. uint8_t luat_mobile_get_default_pdn_ipv6(void);
  150. /**
  151. * @brief 获取配置的apn name,并不一定支持
  152. *
  153. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  154. * @param cid cid位置 1~6
  155. * @param buff[OUT] apn name
  156. * @param buf_len 用户传入缓存的大小,如果底层数据量大于buf_len,只会传出buf_len大小的数据
  157. * @return int <= 0错误 >0实际传出的大小
  158. */
  159. int luat_mobile_get_apn(int sim_id, int cid, char* buff, size_t buf_len);
  160. /**
  161. * @brief 用户控制APN激活过程。只有使用了本函数后,才能通过手动激活用户的APN并加装网卡。只有EC618/EC7XX支持
  162. */
  163. void luat_mobile_user_ctrl_apn(void);
  164. /**
  165. * @brief 解除用户控制APN激活过程
  166. */
  167. void luat_mobile_user_ctrl_apn_stop(void);
  168. /**
  169. * @brief 手动设置APN激活所需的最小信息,如果需要更详细的设置,可以自行修改本函数。,只有EC618/EC7XX支持
  170. *
  171. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  172. * @param cid cid位置 2~6
  173. * @param type 激活类型 1 IPV4 2 IPV6 3 IPV4V6
  174. * @param apn_name apn name
  175. * @param name_len apn name 长度
  176. * @return int <= 0错误 >0实际传出的大小
  177. */
  178. int luat_mobile_set_apn_base_info(int sim_id, int cid, uint8_t type, uint8_t* apn_name, uint8_t name_len);
  179. /**
  180. * @brief 手动设置APN激活所需的加密信息,如果需要更详细的设置,可以自行修改本函数。大部分情况下不需要加密信息,定向卡可能需要。只有EC618/EC7XX支持
  181. *
  182. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  183. * @param cid cid位置 2~6
  184. * @param protocol 加密协议 1~3,0和0xff表示不需要
  185. * @param user_name 用户名
  186. * @param user_name_len 用户名长度
  187. * @param password 密码
  188. * @param password_len 密码长度
  189. * @return int <= 0错误 >0实际传出的大小
  190. */
  191. int luat_mobile_set_apn_auth_info(int sim_id, int cid, uint8_t protocol, uint8_t *user_name, uint8_t user_name_len, uint8_t *password, uint8_t password_len);
  192. /**
  193. * @brief 手动激活/去激活APN。只有EC618/EC7XX支持
  194. *
  195. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  196. * @param cid cid位置 2~6
  197. * @param state 1激活 0去激活
  198. * @return int <= 0错误 >0实际传出的大小
  199. */
  200. int luat_mobile_active_apn(int sim_id, int cid, uint8_t state);
  201. /**
  202. * @brief 手动激活网卡。只有EC618支持
  203. *
  204. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  205. * @param cid cid位置 2~6
  206. * @return int <= 0错误 >0实际传出的大小
  207. */
  208. int luat_mobile_active_netif(int sim_id, int cid);
  209. /**
  210. * @brief 用户设置APN的基本信息,并且自动激活,注意不能和上述手动操作APN的API共用,专网卡如果不能用公网apn激活默认承载的必须用这个
  211. *
  212. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  213. * @param cid cid位置 1~6
  214. * @param ip_type 激活类型 1 IPV4 2 IPV6 3 IPV4V6
  215. * @param protocol 加密协议 1~3,0和0xff表示不需要
  216. * @param apn_name apn name,如果留空则使用默认APN
  217. * @param apn_name_len apn name 长度
  218. * @param user_name 用户名
  219. * @param user_name_len 用户名长度
  220. * @param password 密码
  221. * @param password_len 密码长度
  222. * @return 无
  223. */
  224. void luat_mobile_user_apn_auto_active(int sim_id, uint8_t cid,
  225. uint8_t ip_type,
  226. uint8_t protocol_type,
  227. uint8_t *apn_name, uint8_t apn_name_len,
  228. uint8_t *user, uint8_t user_len,
  229. uint8_t *password, uint8_t password_len);
  230. /**
  231. * @brief 获取默认CID的apn name,并不一定支持
  232. *
  233. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  234. * @param buff[OUT] apn name
  235. * @param buf_len 用户传入缓存的大小,如果底层数据量大于buf_len,只会传出buf_len大小的数据
  236. * @return int <= 0错误 >0实际传出的大小
  237. */
  238. int luat_mobile_get_default_apn(int sim_id, char* buff, size_t buf_len);
  239. /**
  240. * @brief 删除定义好的apn
  241. *
  242. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  243. * @param cid cid位置 1~6
  244. * @param is_dedicated 是否是专用的,不清楚的写0
  245. * @return int =0成功,其他失败
  246. */
  247. int luat_mobile_del_apn(int sim_id, uint8_t cid, uint8_t is_dedicated);
  248. /**
  249. * @brief 进出飞行模式
  250. *
  251. * @param index sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  252. * @param mode 飞行模式,1进入,0退出
  253. * @return int =0成功,其他失败
  254. */
  255. int luat_mobile_set_flymode(int index, int mode);
  256. /**
  257. * @brief 飞行模式当前状态
  258. *
  259. * @param index sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  260. * @return int <0 异常 =0飞行模式 =1正常工作 =4射频关闭
  261. */
  262. int luat_mobile_get_flymode(int index);
  263. #if (!defined __LUATOS__) || ((defined __LUATOS__) && (defined LUAT_USE_LWIP))
  264. #include "lwip/opt.h"
  265. #include "lwip/netif.h"
  266. #include "lwip/inet.h"
  267. /**
  268. * @brief 获取已激活承载分配的本地ip地址
  269. *
  270. * @param sim_id sim位置,对于双卡双待的设备,选0或者1,其他设备随意
  271. * @param cid cid位置 1~6,没有使用专网APN的话,就是用1
  272. * @param ip_v4, ipv4的IP地址
  273. * @param ip_v6, ipv6的IP地址
  274. * @return int =0成功,其他失败
  275. */
  276. int luat_mobile_get_local_ip(int sim_id, int cid, ip_addr_t *ip_v4, ip_addr_t *ip_v6);
  277. #endif
  278. /* -------------------------------------------------- cell info begin -------------------------------------------------- */
  279. #define LUAT_MOBILE_CELL_MAX_NUM 21
  280. typedef struct luat_mobile_gsm_service_cell_info
  281. {
  282. int cid; /**< Cell ID, (0 indicates information is not represent).*/
  283. int mcc; /**< This field should be ignored when cid is not present*/
  284. int mnc; /**< This field should be ignored when cid is not present*/
  285. int lac; /**< Location area code.(This field should be ignord when cid is not present). */
  286. int arfcn; /**< Absolute RF channel number. */
  287. int bsic; /**< Base station identity code. (0 indicates information is not present). */
  288. int rssi; /**< Receive signal strength, Value range: rxlev-111 for dbm format */
  289. }luat_mobile_gsm_service_cell_info_t;
  290. typedef struct luat_mobile_gsm_cell_info
  291. {
  292. int cid; /**Cell ID, (0 indicates information is not represent).*/
  293. int mcc; /**This field should be ignored when cid is not present*/
  294. int mnc; /**This field should be ignored when cid is not present*/
  295. int lac; /**Location area code.(This field should be ignord when cid is not present). */
  296. int arfcn; /**Absolute RF channel number. */
  297. int bsic; /**Base station identity code. (0 indicates information is not present). */
  298. int rssi; /**< Receive signal strength, Value range: rxlev-111 for dbm format */
  299. }luat_mobile_gsm_cell_info_t;
  300. typedef struct luat_mobile_lte_service_cell_info
  301. {
  302. uint32_t cid; /**<Cell ID, (0 indicates information is not represent).*/
  303. uint16_t mcc; /**This field should be ignored when cid is not present*/
  304. uint16_t mnc; /**This field should be ignored when cid is not present*/
  305. uint16_t tac; /**Tracing area code (This field should be ignored when cid is not present). */
  306. uint16_t pci; /**Physical cell ID. Range: 0 to 503. */
  307. uint32_t earfcn; /**E-UTRA absolute radio frequency channel number of the cell. RANGE: 0 TO 65535. */
  308. int16_t rssi; /**< Receive signal strength, Value range: rsrp-140 for dbm format */
  309. int16_t rsrp;
  310. int16_t rsrq;
  311. int16_t snr;
  312. uint8_t is_tdd;
  313. uint8_t band;
  314. uint8_t ulbandwidth;
  315. uint8_t dlbandwidth;
  316. }luat_mobile_lte_service_cell_info_t;
  317. typedef struct luat_mobile_lte_cell_info
  318. {
  319. uint32_t cid; /**<Cell ID, (0 indicates information is not represent).*/
  320. uint16_t mcc; /**This field should be ignored when cid is not present*/
  321. uint16_t mnc; /**This field should be ignored when cid is not present*/
  322. uint16_t tac; /**Tracing area code (This field should be ignored when cid is not present). */
  323. uint16_t pci; /**Physical cell ID. Range: 0 to 503. */
  324. union
  325. {
  326. uint32_t earfcn; /**E-UTRA absolute radio frequency channel number of the cell. RANGE: 0 TO 65535. */
  327. uint32_t frequency;
  328. };
  329. uint16_t bandwidth;
  330. uint16_t celltype; /*0:intra lte ncell, 1:inter lte ncell */
  331. int16_t rsrp;
  332. int16_t rsrq;
  333. int16_t snr;
  334. int16_t rssi;
  335. }luat_mobile_lte_cell_info_t;
  336. typedef struct luat_mobile_cell_info
  337. {
  338. luat_mobile_gsm_service_cell_info_t gsm_service_info; /**< GSM cell information (Serving). */
  339. luat_mobile_gsm_cell_info_t gsm_info[LUAT_MOBILE_CELL_MAX_NUM]; /**< GSM cell information (neighbor). */
  340. luat_mobile_lte_service_cell_info_t lte_service_info; /**< LTE cell information (Serving). */
  341. luat_mobile_lte_cell_info_t lte_info[LUAT_MOBILE_CELL_MAX_NUM]; /**< LTE cell information (neighbor). */
  342. uint32_t version;
  343. uint8_t gsm_info_valid; /**< Must be set to TRUE if gsm_info is being passed. */
  344. uint8_t gsm_neighbor_info_num; /**< Must be set to the number of elements in entry*/
  345. uint8_t lte_info_valid; /**< Must be set to TRUE if lte_info is being passed. */
  346. uint8_t lte_neighbor_info_num; /**< Must be set to the number of elements in entry*/
  347. }luat_mobile_cell_info_t;
  348. /**
  349. * @brief 立刻搜索一次周围小区基站信息,并同步返回结果
  350. *
  351. * @param info 当前移动网络信号状态详细信息
  352. * @return int =0成功,其他失败
  353. */
  354. int luat_mobile_get_cell_info(luat_mobile_cell_info_t *info);
  355. /**
  356. * @brief 立刻搜索一次周围小区基站信息,通过LUAT_MOBILE_CELL_INFO_UPDATE返回搜索完成消息,luat_mobile_get_last_notify_cell_info获取详细信息
  357. *
  358. * @param max_time 搜索的最大时间,单位秒
  359. * @return int =0成功,其他失败
  360. */
  361. int luat_mobile_get_cell_info_async(uint8_t max_time);
  362. /**
  363. * @brief 双卡双待设备,立刻搜索一次周围小区基站信息,通过LUAT_MOBILE_CELL_INFO_UPDATE返回搜索完成消息,luat_mobile_get_last_notify_cell_info获取详细信息
  364. *
  365. * @param sim_id sim卡槽
  366. * @return int =0成功,其他失败
  367. */
  368. int luat_mobile_get_cell_info_async_with_sim_id(uint8_t sim_id);
  369. /**
  370. * @brief 获取上一次异步搜索周围小区基站信息,包括周期性搜索和异步搜索,在LUAT_MOBILE_CELL_INFO_UPDATE到来后用本函数获取信息
  371. *
  372. * @param info 当前移动网络信号状态详细信息
  373. * @return int =0成功,其他失败
  374. */
  375. int luat_mobile_get_last_notify_cell_info(luat_mobile_cell_info_t *info);
  376. /**
  377. * @brief 双卡双待设备,获取上一次异步搜索周围小区基站信息,包括周期性搜索和异步搜索,在LUAT_MOBILE_CELL_INFO_UPDATE到来后用本函数获取信息
  378. *
  379. * @param sim_id sim卡槽
  380. * @param info 当前移动网络信号状态详细信息
  381. * @param max_time 搜索的最大时间
  382. * @return int =0成功,其他失败
  383. */
  384. int luat_mobile_get_last_notify_cell_info_with_sim_id(uint8_t sim_id, luat_mobile_cell_info_t *info);
  385. /**
  386. * @brief 打印指定sim卡槽搜索到的详细基站信息,与平台有关
  387. *
  388. * @param sim_id sim卡槽
  389. * @return
  390. */
  391. void luat_mobile_print_last_notify_cell_info_with_sim_id(uint8_t sim_id);
  392. typedef struct luat_mobile_gw_signal_strength_info
  393. {
  394. int rssi;
  395. int bitErrorRate;
  396. int rscp;
  397. int ecno;
  398. }luat_mobile_gw_signal_strength_info_t;
  399. typedef struct luat_mobile_lte_signal_strength_info
  400. {
  401. int16_t rssi; /**< Receive signal strength, Value range: rsrp-140 for dbm format */
  402. int16_t rsrp;
  403. int16_t rsrq;
  404. int16_t snr;
  405. }luat_mobile_lte_signal_strength_info_t;
  406. typedef struct luat_mobile_signal_strength_info
  407. {
  408. luat_mobile_gw_signal_strength_info_t gw_signal_strength;
  409. luat_mobile_lte_signal_strength_info_t lte_signal_strength;
  410. uint8_t luat_mobile_gw_signal_strength_vaild;
  411. uint8_t luat_mobile_lte_signal_strength_vaild;
  412. }luat_mobile_signal_strength_info_t;
  413. /**
  414. * @brief 从RSSI转换到CSQ,RSSI只能作为天线口状态的一个参考,而不能作为LTE网络信号状态的参考
  415. *
  416. * @param rssi RSSI值
  417. * @return uint8_t CSQ值
  418. */
  419. uint8_t luat_mobile_rssi_to_csq(int8_t rssi);
  420. /**
  421. * @brief 获取当前移动网络信号状态详细信息
  422. *
  423. * @param info 当前移动网络信号状态详细信息
  424. * @return int =0成功,其他失败
  425. */
  426. int luat_mobile_get_signal_strength_info(luat_mobile_signal_strength_info_t *info);
  427. /**
  428. * @brief 获取CSQ值 CSQ从RSSI转换而来,只能作为天线口状态的一个参考,而不能作为LTE网络信号状态的参考
  429. *
  430. * @param csq CSQ值
  431. * @return int =0成功,其他失败
  432. */
  433. int luat_mobile_get_signal_strength(uint8_t *csq);
  434. /**
  435. * @brief 获取最近一次网络信号状态更新通知后的网络信号状态详细信息
  436. *
  437. * @param info 网络信号状态详细信息
  438. * @return int =0成功,其他失败
  439. */
  440. int luat_mobile_get_last_notify_signal_strength_info(luat_mobile_signal_strength_info_t *info);
  441. /**
  442. * @brief 获取最近一次网络信号状态更新通知后的CSQ值
  443. *
  444. * @param info CSQ值
  445. * @return int =0成功,其他失败
  446. */
  447. int luat_mobile_get_last_notify_signal_strength(uint8_t *csq);
  448. /**
  449. * @brief 获取当前服务小区的ECI
  450. *
  451. * @param eci
  452. * @return int =0成功,其他失败
  453. */
  454. int luat_mobile_get_service_cell_identifier(uint32_t *eci);
  455. /**
  456. * @brief 获取当前服务小区的TAC或LAC
  457. *
  458. * @param tac
  459. * @return int =0成功,其他失败
  460. */
  461. int luat_mobile_get_service_tac_or_lac(uint16_t *tac);
  462. /* --------------------------------------------------- cell info end --------------------------------------------------- */
  463. /* ------------------------------------------------ mobile status begin ----------------------------------------------- */
  464. /**
  465. * @brief 网络状态及相关功能状态发生更换的消息
  466. *
  467. */
  468. typedef enum LUAT_MOBILE_EVENT
  469. {
  470. LUAT_MOBILE_EVENT_CFUN = 0, /**< CFUN消息 */
  471. LUAT_MOBILE_EVENT_SIM, /**< SIM卡消息*/
  472. LUAT_MOBILE_EVENT_REGISTER_STATUS, /**< 移动网络注册消息*/
  473. LUAT_MOBILE_EVENT_CELL_INFO, /**< 小区基站信息和网络信号变更消息*/
  474. LUAT_MOBILE_EVENT_PDP, /**< PDP状态消息*/
  475. LUAT_MOBILE_EVENT_NETIF, /**< internet状态*/
  476. LUAT_MOBILE_EVENT_TIME_SYNC, /**< 通过基站同步时间完成*/
  477. LUAT_MOBILE_EVENT_CSCON, /**< RRC状态,0 idle 1 active*/
  478. LUAT_MOBILE_EVENT_BEARER,/**< PDP承载状态*/
  479. LUAT_MOBILE_EVENT_SMS, /**< SMS短信 >*/
  480. LUAT_MOBILE_EVENT_NAS_ERROR,/**< NAS异常消息,air780exxx系列有效*/
  481. LUAT_MOBILE_EVENT_IMS_REGISTER_STATUS, /**< IMS注册状态,volte必须在注册成功情况下使用*/
  482. LUAT_MOBILE_EVENT_CC, /**< 通话相关消息*/
  483. LUAT_MOBILE_EVENT_USB_ETH_ON,
  484. LUAT_MOBILE_EVENT_FATAL_ERROR = 0xff,/**< 网络遇到严重故障*/
  485. }LUAT_MOBILE_EVENT_E;
  486. typedef enum LUAT_MOBILE_CFUN_STATUS
  487. {
  488. LUAT_MOBILE_CFUN_OFF = 0,
  489. LUAT_MOBILE_CFUN_ON,
  490. LUAT_MOBILE_CFUN_NO_RF = 4,
  491. }LUAT_MOBILE_CFUN_STATUS_E;
  492. typedef enum LUAT_MOBILE_SIM_STATUS
  493. {
  494. LUAT_MOBILE_SIM_READY = 0, /**< SIM卡已准备好*/
  495. LUAT_MOBILE_NO_SIM, /**< 无SIM卡*/
  496. LUAT_MOBILE_SIM_NEED_PIN, /**< 需要输入PIN码*/
  497. LUAT_MOBILE_SIM_ENTER_PIN_RESULT, /**< PIN码输入结果*/
  498. LUAT_MOBILE_SIM_NUMBER, /**< 获取到电话号码(不一定有值)*/
  499. LUAT_MOBILE_SIM_WC /**< SIM卡的写入次数统计,掉电归0*/
  500. }LUAT_MOBILE_SIM_STATUS_E;
  501. typedef enum LUAT_MOBILE_REGISTER_STATUS
  502. {
  503. LUAT_MOBILE_STATUS_UNREGISTER, /**< 网络未注册*/
  504. LUAT_MOBILE_STATUS_REGISTERED, /**< 网络已注册*/
  505. LUAT_MOBILE_STATUS_SEARCHING, /**< 网络搜索中*/
  506. LUAT_MOBILE_STATUS_DENIED, /**< 网络注册被拒绝*/
  507. LUAT_MOBILE_STATUS_UNKNOW, /**< 网络状态未知*/
  508. LUAT_MOBILE_STATUS_REGISTERED_ROAMING, /**< 网络已注册,漫游*/
  509. LUAT_MOBILE_STATUS_SMS_ONLY_REGISTERED,
  510. LUAT_MOBILE_STATUS_SMS_ONLY_REGISTERED_ROAMING,
  511. LUAT_MOBILE_STATUS_EMERGENCY_REGISTERED,
  512. LUAT_MOBILE_STATUS_CSFB_NOT_PREFERRED_REGISTERED,
  513. LUAT_MOBILE_STATUS_CSFB_NOT_PREFERRED_REGISTERED_ROAMING,
  514. }LUAT_MOBILE_REGISTER_STATUS_E;
  515. typedef enum LUAT_MOBILE_CELL_INFO_STATUS
  516. {
  517. LUAT_MOBILE_CELL_INFO_UPDATE = 0, /**< 小区基站信息变更,只有设置了周期性搜索小区基站时才会有*/
  518. LUAT_MOBILE_SIGNAL_UPDATE, /**< 网络信号状态变更,但是不一定是有变化*/
  519. LUAT_MOBILE_PLMN_UPDATE, /**< 搜索到新的plmn*/
  520. LUAT_MOBILE_SERVICE_CELL_UPDATE, /**< 服务小区信息变更*/
  521. }LUAT_MOBILE_CELL_INFO_STATUS_E;
  522. typedef enum LUAT_MOBILE_PDP_STATUS
  523. {
  524. LUAT_MOBILE_PDP_ACTIVED = 0,
  525. LUAT_MOBILE_PDP_DEACTIVING,
  526. LUAT_MOBILE_PDP_DEACTIVED,
  527. }LUAT_MOBILE_PDP_STATUS_E;
  528. typedef enum LUAT_MOBILE_NETIF_STATUS
  529. {
  530. LUAT_MOBILE_NETIF_LINK_ON = 0, /**< 已联网*/
  531. LUAT_MOBILE_NETIF_LINK_OFF, /**< 断网*/
  532. LUAT_MOBILE_NETIF_LINK_OOS, /**< 失去网络连接,尝试恢复中,等同于LUAT_MOBILE_NETIF_LINK_OFF*/
  533. }LUAT_MOBILE_NETIF_STATUS_E;
  534. typedef enum LUAT_MOBILE_BEARER_STATUS
  535. {
  536. LUAT_MOBILE_BEARER_GET_DEFAULT_APN = 0,/**< 获取到默认APN*/
  537. LUAT_MOBILE_BEARER_APN_SET_DONE,/**< 设置APN信息完成*/
  538. LUAT_MOBILE_BEARER_AUTH_SET_DONE,/**< 设置APN加密状态完成*/
  539. LUAT_MOBILE_BEARER_DEL_DONE,/**< 删除APN信息完成*/
  540. LUAT_MOBILE_BEARER_SET_ACT_STATE_DONE,/**< APN激活/去激活完成*/
  541. }LUAT_MOBILE_BEARER_STATUS_E;
  542. typedef enum LUAT_MOBILE_SMS_STATUS
  543. {
  544. LUAT_MOBILE_SMS_READY = 0, /**< 短信功能初始化完成*/
  545. LUAT_MOBILE_NEW_SMS, /**< 接收到新的短信*/
  546. LUAT_MOBILE_SMS_SEND_DONE, /**< 短信发送到运营商*/
  547. LUAT_MOBILE_SMS_ACK, /**< 短信已经被接收*/
  548. }LUAT_MOBILE_SMS_STATUS_E;
  549. typedef enum LUAT_MOBILE_IMS_REGISTER_STATUS
  550. {
  551. LUAT_MOBILE_IMS_READY = 0, /**< IMS网络已注册*/
  552. }LUAT_MOBILE_IMS_REGISTER_STATUS_E;
  553. typedef enum LUAT_MOBILE_CC_STATUS
  554. {
  555. LUAT_MOBILE_CC_READY = 0, /**< 通话准备完成,可以拨打电话了*/
  556. LUAT_MOBILE_CC_INCOMINGCALL, /**< 有来电*/
  557. LUAT_MOBILE_CC_CALL_NUMBER, /**< 有来电号码*/
  558. LUAT_MOBILE_CC_CONNECTED_NUMBER, /**< 已接通电话号码*/
  559. LUAT_MOBILE_CC_CONNECTED, /**< 电话已经接通*/
  560. LUAT_MOBILE_CC_DISCONNECTED, /**< 电话被对方挂断*/
  561. LUAT_MOBILE_CC_SPEECH_START, /**< 通话开始*/
  562. LUAT_MOBILE_CC_MAKE_CALL_OK, /**< 拨打电话请求成功*/
  563. LUAT_MOBILE_CC_MAKE_CALL_FAILED, /**< 拨打电话请求失败*/
  564. LUAT_MOBILE_CC_ANSWER_CALL_DONE, /**< 接听电话请求完成*/
  565. LUAT_MOBILE_CC_HANGUP_CALL_DONE, /**< 挂断电话请求完成*/
  566. LUAT_MOBILE_CC_LIST_CALL_RESULT, /**< 电话列表,未实现*/
  567. LUAT_MOBILE_CC_PLAY, /**< 电话功能相关音频控制*/
  568. }LUAT_MOBILE_CC_STATUS_E;
  569. typedef enum LUAT_MOBILE_CC_MAKE_CALL_RESULT
  570. {
  571. LUAT_MOBILE_CC_MAKE_CALL_RESULT_OK = 0, /**< 电话相关请求成功*/
  572. LUAT_MOBILE_CC_MAKE_CALL_RESULT_NO_CARRIER, /**< 拨打电话无人接听或者已挂断*/
  573. LUAT_MOBILE_CC_MAKE_CALL_RESULT_BUSY, /**< 拨打电话对方正忙*/
  574. LUAT_MOBILE_CC_MAKE_CALL_RESULT_ERROR, /**< 拨打电话请求发生未知错误*/
  575. }LUAT_MOBILE_CC_MAKE_CALL_RESULT_E;
  576. typedef enum LUAT_MOBILE_CC_PLAY_IND
  577. {
  578. LUAT_MOBILE_CC_PLAY_STOP, /**< 音频关闭*/
  579. LUAT_MOBILE_CC_PLAY_DIAL_TONE, /**< 播放dial音*/
  580. LUAT_MOBILE_CC_PLAY_RINGING_TONE, /**< 播放振铃*/
  581. LUAT_MOBILE_CC_PLAY_CONGESTION_TONE, /**< 播放振铃*/
  582. LUAT_MOBILE_CC_PLAY_BUSY_TONE, /**< 播放振铃*/
  583. LUAT_MOBILE_CC_PLAY_CALL_WAITING_TONE, /**< 播放振铃*/
  584. LUAT_MOBILE_CC_PLAY_MULTI_CALL_PROMPT_TONE, /**< 播放振铃*/
  585. LUAT_MOBILE_CC_PLAY_CALL_INCOMINGCALL_RINGING, /**< 播放来电铃声*/
  586. }LUAT_MOBILE_CC_PLAY_IND_E;
  587. /**
  588. * @brief 获取当前SIM卡状态
  589. *
  590. * @return 见@enum LUAT_MOBILE_SIM_STATUS_E
  591. */
  592. LUAT_MOBILE_SIM_STATUS_E luat_mobile_get_sim_status(void);
  593. /**
  594. * @brief 获取当前移动网络注册状态
  595. *
  596. * @return 见@enum LUAT_MOBILE_REGISTER_STATUS_E
  597. */
  598. LUAT_MOBILE_REGISTER_STATUS_E luat_mobile_get_register_status(void);
  599. /**
  600. * @brief 网络状态及相关功能状态发生更换时的回调函数,event是消息,index是CID,SIM卡号之类的序号,status是变更后的状态或者更具体的ENUM
  601. *
  602. */
  603. typedef void (*luat_mobile_event_callback_t)(LUAT_MOBILE_EVENT_E event, uint8_t index, uint8_t status);
  604. /**
  605. * @brief 底层短信消息回调函数,event是消息,param是具体数据指针,暂时不同的平台需要独自处理
  606. *
  607. */
  608. typedef void (*luat_mobile_sms_event_callback_t)(uint32_t event, void *param);
  609. /**
  610. * @brief 注册网络状态及相关功能状态发生更换时的回调函数
  611. *
  612. * @param callback_fun 网络状态及相关功能状态发生更换时的回调函数
  613. * @return int =0成功,其他失败
  614. */
  615. int luat_mobile_event_register_handler(luat_mobile_event_callback_t callback_fun);
  616. /**
  617. * @brief 注销网络状态及相关功能状态发生更换时的回调函数
  618. *
  619. * @return int =0成功,其他失败
  620. */
  621. int luat_mobile_event_deregister_handler(void);
  622. /**
  623. * @brief 注册底层短信消息回调函数,后续改为统一消息处理
  624. *
  625. * @param callback_fun 短信消息回调函数,如果为NULL,则是注销
  626. * @return int =0成功,其他失败
  627. */
  628. int luat_mobile_sms_sdk_event_register_handler(luat_mobile_sms_event_callback_t callback_fun);
  629. /**
  630. * @brief 注册底层短信消息回调函数,后续改为统一消息处理(和luat_mobile_sms_sdk_event_register_handler一样,只是为了兼容老的BSP)
  631. *
  632. * @param callback_fun 短信消息回调函数,如果为NULL,则是注销
  633. * @return int =0成功,其他失败
  634. */
  635. int luat_mobile_sms_event_register_handler(luat_mobile_sms_event_callback_t callback_fun);
  636. /* ------------------------------------------------- mobile status end ------------------------------------------------ */
  637. /**
  638. * @brief 设置RRC自动释放时间,在RRC active(见LUAT_MOBILE_EVENT_CSCON)后经过一段时间在适当的时机释放RRC
  639. *
  640. * @param s 超时时间,单位秒,如果为0则是关闭功能
  641. * @note 没有在Air724上使用过AT*RTIME的,或者不明白RRC的含义,请不要使用RRC相关API
  642. */
  643. void luat_mobile_set_rrc_auto_release_time(uint8_t s);
  644. //实验性质API,请勿使用
  645. void luat_mobile_set_auto_rrc(uint8_t s1, uint32_t s2);
  646. void luat_mobile_set_auto_rrc_default(void);
  647. /**
  648. * @brief RRC自动释放暂停/恢复
  649. *
  650. * @param onoff 1暂停 0恢复
  651. * @note 没有在Air724上使用过AT*RTIME的,或者不明白RRC的含义,请不要使用RRC相关API
  652. */
  653. void luat_mobile_rrc_auto_release_pause(uint8_t onoff);
  654. /**
  655. * @brief RRC立刻释放一次,不能在luat_mobile_event_callback里使用
  656. * @note 没有在Air724上使用过AT*RTIME的,或者不明白RRC的含义,请不要使用RRC相关API
  657. */
  658. void luat_mobile_rrc_release_once(void);
  659. /**
  660. * @brief 重新底层网络协议栈,本质是快速的进出飞行模式,注意和设置飞行模式是冲突的,一定时间内只能用一个。
  661. *
  662. * @return int =0成功,其他失败
  663. */
  664. int luat_mobile_reset_stack(void);
  665. /**
  666. * @brief 遇到网络严重错误时允许自动重启协议栈
  667. * @param onoff 0关闭 其他开启
  668. * @return void
  669. */
  670. void luat_mobile_fatal_error_auto_reset_stack(uint8_t onoff);
  671. /**
  672. * @brief 设置周期性辅助工作,包括周期性搜索小区基站,SIM卡短时间脱离卡槽后周期性尝试恢复,这个功能和luat_mobile_reset_stack是有可能冲突的。所有功能默认都是关闭的
  673. *
  674. * @param get_cell_period 周期性搜索小区基站的时间间隔,单位ms,这个会增加低功耗,尽量的长,或者写0关闭这个功能,用上面的手段搜索
  675. * @param check_sim_period SIM卡短时间脱离卡槽后尝试恢复的时间间隔,单位ms,建议在5000~10000,或者写0,当SIM卡移除的消息上来后手动重启协议栈
  676. * @param search_cell_time 启动周期性搜索小区基站后,每次搜索的最大时间,单位s,1~8
  677. * @return int
  678. */
  679. int luat_mobile_set_period_work(uint32_t get_cell_period, uint32_t check_sim_period, uint8_t search_cell_time);
  680. /**
  681. * @brief 设置SIM卡短时间脱离卡槽后周期性尝试恢复,luat_mobile_set_period_work的简化版本
  682. *
  683. * @param check_sim_period SIM卡短时间脱离卡槽后尝试恢复的时间间隔,单位ms,建议在5000~10000,或者写0,当SIM卡移除的消息上来后手动重启协议栈
  684. * @return int
  685. */
  686. int luat_mobile_set_check_sim(uint32_t check_sim_period);
  687. /**
  688. * @brief 设置定时检测网络是否正常并且在检测到长时间无网时通过重启协议栈来恢复,但是不能保证一定成功,这个功能和luat_mobile_reset_stack是有可能冲突的。所有功能默认都是关闭的
  689. *
  690. * @param period 无网时长,单位ms,不可以太短,建议60000以上,为网络搜索网络保留足够的时间
  691. * @return void
  692. */
  693. void luat_mobile_set_check_network_period(uint32_t period);
  694. /**
  695. * @brief 获取累计的IP流量数据
  696. * @param uplink 上行流量
  697. * @param downlink 下行流量
  698. * @return 无
  699. */
  700. void luat_mobile_get_ip_data_traffic(uint64_t *uplink, uint64_t *downlink);
  701. /**
  702. * @brief 清除IP流量数据
  703. * @param clear_uplink 清除上行流量
  704. * @param clear_downlink 清除下行流量
  705. * @return 无
  706. */
  707. void luat_mobile_clear_ip_data_traffic(uint8_t clear_uplink, uint8_t clear_downlink);
  708. /**
  709. * @brief 获取模块能支持的频段
  710. * @param band 存放输出频段值的缓存,至少需要CMI_DEV_SUPPORT_MAX_BAND_NUM字节的空间
  711. * @param total_num 频段数量
  712. * @return 成功返回0,其他失败
  713. */
  714. int luat_mobile_get_support_band(uint8_t *band, uint8_t *total_num);
  715. /**
  716. * @brief 获取模块当前设置使用的频段
  717. * @param band 存放输出频段值的缓存,至少需要CMI_DEV_SUPPORT_MAX_BAND_NUM字节的空间
  718. * @param total_num 频段数量
  719. * @return 成功返回0,其他失败
  720. */
  721. int luat_mobile_get_band(uint8_t *band, uint8_t *total_num);
  722. /**
  723. * @brief 设置模块使用的频段
  724. * @param band 设置的频段,需要至少total_num数量的空间
  725. * @param total_num 频段数量
  726. * @return 成功返回0,其他失败
  727. */
  728. int luat_mobile_set_band(uint8_t *band, uint8_t total_num);
  729. /**
  730. * @brief LTE协议栈功能特殊配置
  731. * @param item 见MOBILE_CONF_XXX
  732. * @param value 配置值
  733. * @return 成功返回0,其他失败
  734. */
  735. int luat_mobile_config(uint8_t item, uint32_t value);
  736. /**
  737. * @brief RF测试模式
  738. * @param uart_id 测试结果输出的串口ID
  739. * @param on_off 进出测试模式,0退出 其他进入
  740. * @return 无
  741. */
  742. void luat_mobile_rf_test_mode(uint8_t uart_id, uint8_t on_off);
  743. /**
  744. * @brief RF测试的指令或者数据输入
  745. * @param data 数据,可以为空,只有为空的时候才会真正开始处理指令
  746. * @param data_len 数据长度,可以为0,只有为0的时候才会真正开始处理指令
  747. * @return 无
  748. */
  749. void luat_mobile_rf_test_input(char *data, uint32_t data_len);
  750. enum
  751. {
  752. MOBILE_CONF_RESELTOWEAKNCELL = 1,
  753. MOBILE_CONF_STATICCONFIG,
  754. MOBILE_CONF_QUALITYFIRST,
  755. MOBILE_CONF_USERDRXCYCLE,
  756. MOBILE_CONF_T3324MAXVALUE,
  757. MOBILE_CONF_PSM_MODE,
  758. MOBILE_CONF_CE_MODE,
  759. MOBILE_CONF_SIM_WC_MODE,
  760. MOBILE_CONF_FAKE_CELL_BARTIME,
  761. MOBILE_CONF_RESET_TO_FACTORY,
  762. MOBILE_CONF_USB_ETHERNET,
  763. MOBILE_CONF_DISABLE_NCELL_MEAS,
  764. MOBILE_CONF_MAX_TX_POWER,
  765. };
  766. uint32_t luat_mobile_sim_write_counter(void);
  767. enum
  768. {
  769. LUAT_MOBILE_ISP_UNKNOW,
  770. LUAT_MOBILE_ISP_CMCC, /*中国移动*/
  771. LUAT_MOBILE_ISP_CTCC, /*中国电信*/
  772. LUAT_MOBILE_ISP_CUCC, /*中国联通*/
  773. LUAT_MOBILE_ISP_CRCC, /*中国广电*/
  774. };
  775. /**
  776. * @brief 通过PLMN判断运营商,目前只支持国内三大运营商及广电
  777. * @param mcc MCC码,3位10进制数字,目前只有中国460是支持的
  778. * @param mnc MNC码,2位10进制数字
  779. * @return < 0 发生错误,其他见LUAT_MOBILE_ISP_XXX
  780. */
  781. int luat_mobile_get_isp_from_plmn(uint16_t mcc, uint8_t mnc);
  782. /**
  783. * @brief 通过IMSI提取PLMN
  784. * @param imsi IMSI号码
  785. * @param mcc MCC码,3位10进制数字
  786. * @param mnc MNC码,2位10进制数字
  787. * @return =0成功,其他错误
  788. */
  789. int luat_mobile_get_plmn_from_imsi(char *imsi, uint16_t *mcc, uint8_t *mnc);
  790. /**
  791. * @brief 获取最近一次来电号码
  792. * @param buf 存放号码的缓存
  793. * @param buf_len 存放号码的缓存长度,推荐80
  794. * @return 无
  795. */
  796. void luat_mobile_get_last_call_num(char *buf, uint8_t buf_len);
  797. /**
  798. * @brief 主动拨打打电话
  799. * @param sim_id sim卡槽
  800. * @param number 字符串形式的电话号码
  801. * @param len 电话号码长度
  802. * @return =0成功,其他错误
  803. */
  804. int luat_mobile_make_call(uint8_t sim_id, char *number, uint8_t len);
  805. /**
  806. * @brief 主动挂断电话
  807. * @param sim_id sim卡槽
  808. * @return 无
  809. */
  810. void luat_mobile_hangup_call(uint8_t sim_id);
  811. /**
  812. * @brief 接听电话
  813. * @param sim_id sim卡槽
  814. * @return =0成功,其他错误
  815. */
  816. int luat_mobile_answer_call(uint8_t sim_id);
  817. /**
  818. * @brief 初始化电话功能
  819. * @param multimedia_id multimedia_id 多媒体通道,目前只有0
  820. * @param callback 下行通话数据回调函数
  821. * @return =0成功,其他错误
  822. */
  823. int luat_mobile_speech_init(uint8_t multimedia_id,void *callback);
  824. /**
  825. * @brief 上行通话数据
  826. * @param data 录音数据
  827. * @param len 录音数据长度
  828. * @return =0成功,其他错误
  829. */
  830. int luat_mobile_speech_upload(uint8_t *data, uint32_t len);
  831. /**
  832. * @brief 是否允许基站时间同步给本地时间
  833. * @param on_off 0不允许,其他允许
  834. */
  835. void luat_mobile_set_sync_time(uint8_t on_off);
  836. /**
  837. * @brief 查看当前是否允许基站时间同步给本地时间
  838. * @return =0不允许,其他允许
  839. */
  840. uint8_t luat_mobile_get_sync_time(void);
  841. int luat_mobile_softsim_onoff(uint8_t on_off);
  842. int luat_mobile_sim_detect_onoff(uint8_t on_off);
  843. void luat_mobile_softsim_init_default(void);
  844. enum
  845. {
  846. LUAT_MOBILE_LOCK_CELL_OP_UNLOCK_EARFCN,
  847. LUAT_MOBILE_LOCK_CELL_OP_LOCK_EARFCN,
  848. LUAT_MOBILE_LOCK_CELL_OP_LOCK_CELL,
  849. LUAT_MOBILE_LOCK_CELL_OP_UNLOCK_CELL,
  850. };
  851. int luat_mobile_lock_cell(uint32_t op, uint32_t earfcn, uint16_t pci);
  852. typedef struct
  853. {
  854. uint32_t earfcn;
  855. uint16_t pci;
  856. uint16_t mcc;
  857. uint16_t mnc;
  858. }luat_mobile_scell_extern_info_t;
  859. int luat_mobile_get_extern_service_cell_info(luat_mobile_scell_extern_info_t *info);
  860. void luat_mobile_vsim_user_heartbeat_once(void);
  861. uint32_t luat_mobile_get_search_plmn(void);
  862. void luat_mobile_data_ip_mode(uint8_t on_off);
  863. void luat_mobile_init_auto_apn_by_plmn(void);
  864. void luat_mobile_init_auto_apn(void);
  865. typedef struct
  866. {
  867. char *data; //包含apn name,user,password信息
  868. uint8_t ip_type;
  869. uint8_t protocol;
  870. uint8_t name_len;
  871. uint8_t user_len;
  872. uint8_t password_len;
  873. }apn_info_t;
  874. /**
  875. * 添加一条APN信息到全球APN列表,列表每次重启后都需要重建
  876. * @param mcc
  877. * @param mnc
  878. * @param ip_type 激活的IP类型,以下参数参考luat_mobile_user_apn_auto_active
  879. * @param protocol
  880. * @param name
  881. * @param name_len
  882. * @param user
  883. * @param user_len
  884. * @param password
  885. * @param password_len
  886. * @param task_safe 是否做task安全保护,如果只输入一条写1,如果输入N条,可在开始和结束自行进行保护处理,这里写0
  887. */
  888. void luat_mobile_add_auto_apn_item(uint16_t mcc, uint16_t mnc, uint8_t ip_type, uint8_t protocol, char *name, uint8_t name_len, char *user, uint8_t user_len, char *password, uint8_t password_len, uint8_t task_safe);
  889. /**
  890. * 通过MCC,MNC查询APN信息
  891. * @param mcc
  892. * @param mnc
  893. * @param apn APN信息
  894. * @return =0找到匹配的信息,其他未找到
  895. */
  896. int luat_mobile_find_apn_by_mcc_mnc(uint16_t mcc, uint16_t mnc, apn_info_t *apn);
  897. /**
  898. * 通过MCC,MNC打印APN信息
  899. * @param mcc
  900. * @param mnc
  901. * @return
  902. */
  903. void luat_mobile_print_apn_by_mcc_mnc(uint16_t mcc, uint16_t mnc);
  904. /** @}*/
  905. #endif