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