1 /*
2 * Copyright (C) 2015-2018 Alibaba Group Holding Limited
3 */
4 #include "wifi_provision_internal.h"
5
6 #if defined(__cplusplus) /* If this is a C++ compiler, use C linkage */
7 extern "C" {
8 #endif
9
dump_hex(uint8_t * data,int len,int tab_num)10 void dump_hex(uint8_t *data, int len, int tab_num)
11 {
12 int i;
13 for (i = 0; i < len; i++) {
14 HAL_Printf("%02x ", data[i]);
15
16 if (!((i + 1) % tab_num))
17 HAL_Printf("\r\n");
18 }
19
20 HAL_Printf("\r\n");
21 }
22
23 /* for smartconfig with encrypt */
zconfig_checksum_v3(uint8_t * data,uint8_t len)24 uint16_t zconfig_checksum_v3(uint8_t *data, uint8_t len)
25 {
26 uint8_t i;
27 uint16_t sum = 0, res;
28
29 for (i = 0; i < len; i++)
30 sum += data[i];
31
32 res = sum & (0x3F << 0);
33 res |= (sum & (0x3F << 6)) << 2;
34
35 if (!(res & 0x00FF))
36 res |= 0x0001;
37 if (!(res & 0xFF00))
38 res |= 0x0100;
39
40 return res;
41 }
42
zconfig_checksum_v5(uint8_t * data,uint8_t len)43 uint16_t zconfig_checksum_v5(uint8_t *data, uint8_t len)
44 {
45 uint8_t i;
46 uint16_t sum = 0, res;
47
48 for (i = 0; i < len; i++)
49 sum += data[i];
50
51 res = sum;
52 return res;
53 }
54
is_utf8(const char * ansi_str,int length)55 char is_utf8(const char *ansi_str, int length)
56 {
57 int i = 0;
58 char utf8 = 1;
59 while (i < length) {
60 if ((0x80 & ansi_str[i]) == 0) { /* ASCII */
61 i++;
62 continue;
63 } else if ((0xE0 & ansi_str[i]) == 0xC0) { /* 110xxxxx */
64 if (ansi_str[i + 1] == '\0') {
65 utf8 = 0;
66 break;
67 }
68 if ((0xC0 & ansi_str[i + 1]) == 0x80) { /* 10xxxxxx */
69 i += 2;
70 continue;
71 } else {
72 utf8 = 0;
73 break;
74 }
75 } else if ((0xF0 & ansi_str[i]) == 0xE0) { /* 1110xxxx */
76 if (ansi_str[i + 1] == '\0') {
77 utf8 = 0;
78 break;
79 }
80 if (ansi_str[i + 2] == '\0') {
81 utf8 = 0;
82 break;
83 }
84 if (((0xC0 & ansi_str[i + 1]) == 0x80) &&
85 ((0xC0 & ansi_str[i + 2]) == 0x80)) { /* 10xxxxxx 10xxxxxx */
86 i += 3;
87 continue;
88 } else {
89 utf8 = 0;
90 break;
91 }
92 } else {
93 utf8 = 0;
94 break;
95 }
96 }
97 return utf8;
98 }
99
100 #if defined(__cplusplus) /* If this is a C++ compiler, use C linkage */
101 }
102 #endif
103