hilink_device.c 12 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341
  1. /*
  2. * Copyright (c) Huawei Technologies Co., Ltd. 2019-2021. All rights reserved.
  3. * Description: HiLink��Ʒ����ʵ��Դ�ļ�
  4. * Notes: ���ļ��еĽӿ���Ҫ�����ṩ������������ʹ�ã�Ϊ��ǰ�����ݣ������Ͻӿ��ݲ������±����淶����.
  5. */
  6. #include "hilink_device.h"
  7. #include <stdlib.h>
  8. #include "hilink.h"
  9. //#include "hilink_log.h"
  10. #include "hilink_bt_api.h"
  11. //#include "ql_api_dev.h"
  12. #include "ql_log.h"
  13. //#include "ql_fs.h"
  14. #define HILINK_DEV_LOG_LEVEL QL_LOG_LEVEL_INFO
  15. #define HILINK_DEV_LOG(msg, ...) QL_LOG(HILINK_DEV_LOG_LEVEL, "hilink_dev", msg, ##__VA_ARGS__)
  16. /* �豸���Ͷ��� */
  17. typedef struct {
  18. const char *sn; /* �豸Ψһ��ʶ������sn�ţ����ȷ�Χ��0,40] */
  19. const char *prodId; /* �豸HiLink��֤�ţ����ȷ�Χ��0,5] */
  20. const char *model; /* �豸�ͺţ����ȷ�Χ��0,32] */
  21. const char *dev_t; /* �豸���ͣ����ȷ�Χ��0,4] */
  22. const char *manu; /* �豸�����̣����ȷ�Χ��0,4] */
  23. const char *mac; /* �豸MAC��ַ���̶�32�ֽ� */
  24. const char *btMac; /* ����MAC��ַ���̶�32�ֽ� */
  25. const char *hiv; /* �豸HilinkЭ���汾�����ȷ�Χ��0,32] */
  26. const char *fwv; /* �豸�̼��汾�����ȷ�Χ[0,64] */
  27. const char *hwv; /* �豸Ӳ���汾�����ȷ�Χ[0,64] */
  28. const char *swv; /* �豸�����汾�����ȷ�Χ[0,64] */
  29. int prot_t; /* �豸Э�����ͣ�ȡֵ��Χ[1,3] */
  30. } dev_info_t;
  31. /* �豸����Ӣ�����ͳ���Ӣ��������֮�Ͳ��ܳ���17�ֽ� */
  32. typedef struct {
  33. const char *devTypeName; /* �豸����Ӣ������ */
  34. const char *manuName; /* ����Ӣ������ */
  35. } DevNameEn;
  36. /* �������Ͷ��� */
  37. typedef struct {
  38. const char *st; /* �������ͣ����ȷ�Χ��0,32] */
  39. const char *svc_id; /* ����ID�����ȷ�Χ��0,64] */
  40. } svc_info_t;
  41. /* �豸��Ϣ���� */
  42. dev_info_t dev_info = {
  43. "Device SN",
  44. PRODUCT_ID,
  45. DEVICE_MODEL,
  46. DEVICE_TYPE,
  47. MANUAFACTURER,
  48. "Device Mac",
  49. "Device BtMac",
  50. "1.0.0",
  51. "1.0.0",
  52. "1.0.0",
  53. "1.0.0",
  54. PROTOCOL_TYPE
  55. };
  56. /* �豸���ƶ���, ��ȷ���豸����Ӣ�����ͳ���Ӣ��������֮�Ͳ�����17�ֽ� */
  57. DevNameEn g_devNameEn = {
  58. DEVICE_TYPE_NAME,
  59. MANUAFACTURER_NAME
  60. };
  61. /* ������Ϣ���� */
  62. int gSvcNum = 1;
  63. svc_info_t gSvcInfo[] = {
  64. { "binarySwitch", "switch" }
  65. };
  66. /* AC���� */
  67. unsigned char A_C[48] = {
  68. 0x49, 0x3F, 0x45, 0x4A, 0x3A, 0x72, 0x38, 0x7B, 0x36, 0x32, 0x50, 0x3C, 0x49, 0x39, 0x62, 0x38,
  69. 0x72, 0xCB, 0x6D, 0xC5, 0xAE, 0xE5, 0x4A, 0x82, 0xD3, 0xE5, 0x6D, 0xF5, 0x36, 0x82, 0x62, 0xEB,
  70. 0x89, 0x30, 0x6C, 0x88, 0x32, 0x56, 0x23, 0xFD, 0xB8, 0x67, 0x90, 0xA7, 0x7B, 0x61, 0x1E, 0xAE
  71. };
  72. /* BI���� */
  73. char *bi_rsacipher = "";
  74. static HILINK_BT_DevInfo g_btDevInfo;
  75. /* ��ȡ���� AC ���� */
  76. unsigned char *hilink_get_auto_ac(void)
  77. {
  78. return A_C;
  79. }
  80. /* ��ȡ���� BI ���� */
  81. char *hilink_get_auto_bi_rsa_cipher(void)
  82. {
  83. return bi_rsacipher;
  84. }
  85. /*
  86. * �޸ķ�����ǰ�ֶ�ֵ
  87. * svcIdΪ������ID��payloadΪ���յ���Ҫ�޸ĵ�Json��ʽ���ֶ�����ֵ��lenΪpayload�ij���
  88. * ����0��ʾ����״ֵ̬�޸ijɹ�������Ҫ�ײ��豸�����ϱ�����Hilink Device SDK�ϱ���
  89. * ����-101��ʾ���ñ��IJ�����Ҫ����
  90. * ����-111��ʾ����״ֵ̬�����޸��У��޸ijɹ����ײ��豸���������ϱ���
  91. */
  92. int hilink_put_char_state(const char *svcId, const char *payload, unsigned int len)
  93. {
  94. return 0;
  95. }
  96. /*
  97. * ��ȡ�����ֶ�ֵ
  98. * svcId��ʾ����ID������ʵ�ָú���ʱ����Ҫ��svcId�����жϣ�
  99. * in��ʾ���յ���Json��ʽ���ֶ�����ֵ��
  100. * inLen��ʾ���յ���in�ij��ȣ�
  101. * out��ʾ���������ֶ�ֵ���ݵ�ָ��,�ڴ��ɳ��̿��٣�ʹ�����ɺ�����Hilink Device SDK�ͷţ�
  102. * outLen��ʾ��ȡ����payload�ij��ȣ�
  103. * ����0��ʾ����״̬�ֶ�ֵ��ȡ�ɹ������ط�0��ʾ��ȡ����״̬�ֶ�ֵ���ɹ���
  104. */
  105. int hilink_get_char_state(const char *svcId, const char *in, unsigned int inLen, char **out, unsigned int *outLen)
  106. {
  107. return 0;
  108. }
  109. /*
  110. * ��ȡ�豸sn��
  111. * ����len��ʾsn�����󳤶�,39�ֽ�
  112. * ����sn��ʾ�豸sn
  113. * snָ�����ַ�������Ϊ0ʱ��ʹ���豸mac��ַ��Ϊsn
  114. */
  115. void HilinkGetDeviceSn(unsigned int len, char *sn)
  116. {
  117. /* �ڴ˴�����ʵ�ִ���, ��sn��ֵ��*sn�ش� */
  118. return;
  119. }
  120. /*
  121. * ��ȡ�豸���ذ汾��
  122. * ����0��ʾ�汾�Ż�ȡ�ɹ�������������ʾ�汾�Ż�ȡʧ��
  123. * ע�⣬�˽ӿ�ΪHiLink�ڲ����ú���
  124. */
  125. int getDeviceVersion(char **firmwareVer, char **softwareVer, char **hardwareVer)
  126. {
  127. *firmwareVer = FIRMWARE_VER;
  128. *softwareVer = SOFTWARE_VER;
  129. *hardwareVer = HARDWARE_VER;
  130. return 0;
  131. }
  132. /*
  133. * ��ȡSoftAp����PIN��
  134. * ����ֵΪ8λ����PIN��, ����-1��ʾʹ��HiLink SDK��Ĭ��PIN��
  135. * �ýӿ����豸������ʵ��
  136. */
  137. int HiLinkGetPinCode(void)
  138. {
  139. /* ����ʱ���������ֿ��������ģ�ֻҪ��8λ���ּ��� */
  140. return -1;
  141. }
  142. /*
  143. * ��ѯ��ǰ�豸�����Ա�ʶ
  144. * ����0Ϊ�������豸������1Ϊ�����豸
  145. */
  146. int HILINK_IsSensitiveDevice(void)
  147. {
  148. return 0;
  149. }
  150. /*
  151. * ֪ͨ�豸��״̬
  152. * status��ʾ�豸��ǰ��״̬
  153. * ע�⣬�˺������豸���̸��ݲ�Ʒҵ��ѡ����ʵ��
  154. */
  155. void hilink_notify_devstatus(int status)
  156. {
  157. switch (status) {
  158. case HILINK_M2M_CLOUD_OFFLINE:
  159. /* �豸���ƶ����ӶϿ������ڴ˴�����ʵ�� */
  160. break;
  161. case HILINK_M2M_CLOUD_ONLINE:
  162. /* �豸�����ƶ˳ɹ������ڴ˴�����ʵ�� */
  163. break;
  164. case HILINK_M2M_LONG_OFFLINE:
  165. /* �豸���ƶ����ӳ�ʱ���Ͽ������ڴ˴�����ʵ�� */
  166. break;
  167. case HILINK_M2M_LONG_OFFLINE_REBOOT:
  168. /* �豸���ƶ����ӳ�ʱ���Ͽ����������������ڴ˴�����ʵ�� */
  169. break;
  170. case HILINK_UNINITIALIZED:
  171. /* HiLink�߳�δ���������ڴ˴�����ʵ�� */
  172. break;
  173. case HILINK_LINK_UNDER_AUTO_CONFIG:
  174. /* �豸��������ģʽ�����ڴ˴�����ʵ�� */
  175. break;
  176. case HILINK_LINK_CONFIG_TIMEOUT:
  177. /* �豸����10���ӳ�ʱ״̬�����ڴ˴�����ʵ�� */
  178. break;
  179. case HILINK_LINK_CONNECTTING_WIFI:
  180. /* �豸��������·���������ڴ˴�����ʵ�� */
  181. break;
  182. case HILINK_LINK_CONNECTED_WIFI:
  183. /* �豸�Ѿ�����·���������ڴ˴�����ʵ�� */
  184. break;
  185. case HILINK_M2M_CONNECTTING_CLOUD:
  186. /* �豸���������ƶˣ����ڴ˴�����ʵ�� */
  187. break;
  188. case HILINK_M2M_CLOUD_DISCONNECT:
  189. /* �豸��·���������ӶϿ������ڴ˴�����ʵ�� */
  190. break;
  191. case HILINK_DEVICE_REGISTERED:
  192. /* �豸��ע�ᣬ���ڴ˴�����ʵ�� */
  193. break;
  194. case HILINK_DEVICE_UNREGISTER:
  195. /* �豸�����������ڴ˴�����ʵ�� */
  196. break;
  197. case HILINK_REVOKE_FLAG_SET:
  198. /* �豸����λ������λ�����ڴ˴�����ʵ�� */
  199. break;
  200. case HILINK_NEGO_REG_INFO_FAIL:
  201. /* �豸Э��������Ϣʧ�� */
  202. break;
  203. default:
  204. break;
  205. }
  206. return;
  207. }
  208. /*
  209. * ʵ��ģ������ǰ���豸����
  210. * flagΪ0��ʾHiLink SDK �߳̿��Ź�����ģ������; Ϊ1��ʾAPPɾ���豸����ģ������
  211. * ����0��ʾ�����ɹ�, ϵͳ����������ʹ��Ӳ����; ����1��ʾ�����ɹ�, ϵͳ����������ʹ��������;
  212. * ���ظ�ֵ��ʾ����ʧ��, ϵͳ��������
  213. * ע�⣬�˺������豸����ʵ�֣���APPɾ���豸����ģ������ʱ���豸���������ط���0�������ᵼ��ɾ���豸�쳣
  214. */
  215. int hilink_process_before_restart(int flag)
  216. {
  217. /* HiLink SDK�߳̿��Ź���ʱ����ģ������ */
  218. if (flag == HILINK_REBOOT_WATCHDOG) {
  219. /* ʵ��ģ������ǰ�IJ���(��:����ϵͳ״̬��) */
  220. return -1;
  221. }
  222. /* APPɾ���豸����ģ������ */
  223. if (flag == HILINK_REBOOT_DEVDELETE) {
  224. /* ʵ��ģ������ǰ�IJ���(��:����ϵͳ״̬��) */
  225. return 0;
  226. }
  227. return -1;
  228. }
  229. /*
  230. * ��ȡ�豸�����룬��֪ͨAPP
  231. * status��ʾ�Ƿ����͹��ϣ�0��ʾ�����ͣ�1��ʾ���ͣ�code��ʾ������
  232. * ����0��ʾ�ɹ������ط�0ʧ��
  233. */
  234. int get_faultDetection_state(int *status, int *code)
  235. {
  236. /* ���豸����ʵ�֣�������faultDetection���Ե�ǰֵ�������� */
  237. return 0;
  238. }
  239. /*
  240. * ��ȡ�豸�����ͺţ����ȹ̶������ֽ�
  241. * subProdIdΪ�������ͺŵĻ�������lenΪ�������ij���
  242. * ������Ʒ���������ͺţ����������ֽ����ͺţ�����'\0'����, ����0
  243. * û�ж������ͺţ��򷵻�-1
  244. * �ýӿ����豸������ʵ��
  245. */
  246. int HILINK_GetSubProdId(char *subProdId, int len)
  247. {
  248. return -1;
  249. }
  250. int HILINK_BT_GetDevSurfacePower(char *power)
  251. {
  252. if (power == NULL) {
  253. return -1;
  254. }
  255. *power = 0xF8;
  256. return 0;
  257. }
  258. HILINK_BT_DevInfo *HILINK_BT_GetDevInfo(void)
  259. {
  260. g_btDevInfo.manuName = (char *)g_devNameEn.manuName;
  261. g_btDevInfo.devName = (char *)g_devNameEn.devTypeName;
  262. g_btDevInfo.productId = (char *)dev_info.prodId;
  263. g_btDevInfo.mac = (char *)dev_info.mac;
  264. return &g_btDevInfo;
  265. }
  266. /*
  267. * д�ļ�
  268. * key:�ļ���
  269. * value:��Ҫд��������
  270. * len:��Ҫд�������ݳ���
  271. * sync:�Ƿ���Ҫͬ��(Ĭ��Ϊ 1)
  272. * ����ֵ:0 �ɹ� -1 ʧ��
  273. */
  274. int duet_flash_kv_set(const char *key, const void *value, int len, int sync)
  275. {
  276. return 0;
  277. }
  278. /*��ȡ�ļ�
  279. *key:�ļ���
  280. *buffer:��ȡ���ݵĻ�����
  281. *buffer_len:��Ҫ��ȡ�����ݳ���
  282. *����ֵ:0 �ɹ� -1 ʧ��
  283. */
  284. int duet_flash_kv_get(const char *key, void *buffer, int *buffer_len)
  285. {
  286. return 0;
  287. }
  288. /*ɾ���ļ�
  289. *key:�ļ���
  290. *����ֵ:0 �ɹ� -1 ʧ��
  291. */
  292. int duet_flash_kv_del(const char *key)
  293. {
  294. return 0;
  295. }
  296. int GetBtNetworkState(void)
  297. {
  298. return 0;
  299. }
  300. int HILINK_ql_printf(const char *format, ...)
  301. {
  302. return 0;
  303. }
  304. int HILINK_BT_GetNetworkState()
  305. {
  306. return 0;
  307. }