hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
#ifndef __WIFI_H__
#define __WIFI_H__
 
#include <syslog.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <stdbool.h>
#include <string.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <sys/ioctl.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <linux/if.h>
#include <linux/if_arp.h>
#include <sys/time.h>
#include <ctype.h>
#include <errno.h>
#include <assert.h>
#include <paths.h>
#include <sys/wait.h>
#include <linux/sockios.h>
#include <net/route.h>
 
#ifdef SYSLOG_DEBUG
#define pr_debug(fmt, ...)              syslog(LOG_DEBUG, fmt, ##__VA_ARGS__)
#define pr_info(fmt, ...)               syslog(LOG_INFO, fmt, ##__VA_ARGS__)
#define pr_warning(fmt, ...)            syslog(LOG_WARNING, fmt, ##__VA_ARGS__)
#define pr_err(fmt, ...)                syslog(LOG_ERR, fmt, ##__VA_ARGS__)
#else
#define pr_debug        printf
#define pr_info printf
#define pr_warning printf
#define pr_err printf
#endif
 
#define DEFAULT_IFNAME                    "wlan0"
#define JOIN_AP_RETRIES                    1
#define MAX_SAME_AP_NUM                    5
#define MAX_SCAN_NUM                    10
#define TCP_CONNECT_RETRIES                3
 
#define TCPKA_INTERVAL                    60
#define TCPKA_RETRY_INTERVAL            4
#define TCPKA_RETRY_COUNT                15
#define ETHERNET_HEADER_LEN                14
#define IPV4_HEADER_FIXED_LEN            20
#define TCP_HEADER_FIXED_LEN            20
#define TCP_OPTIONS_LEN                    12
#define WOWL_PATTERN_MATCH_OFFSET      \
                       (ETHERNET_HEADER_LEN + IPV4_HEADER_FIXED_LEN + TCP_HEADER_FIXED_LEN + TCP_OPTIONS_LEN)
#define CUSTOM_LISTEN_INTERVAL            1000
 
#define SOL_TCP                            6
#define TCP_EXT_INFO                    37
 
struct tcp_ext_info {
       uint16_t ip_id;
       uint16_t dummy;
       uint32_t snd_nxt;
       uint32_t rcv_nxt;
       uint32_t window;
       uint32_t tsval;
       uint32_t tsecr;
};
 
extern const char tcpka_payload[];
extern const char wowl_pattern[];
 
int WIFI_Suspend(int sock, bool is_connected);
int WIFI_Resume(void);
 
int rk_build_tcpka_param(wl_tcpka_param_t* param, char* ifname, int sock);
void rk_system_return(const char cmdline[], char recv_buff[], int len);
int rk_system(const char *cmd);
int rk_obtain_ip_from_vendor(char * ifname);
int rk_obtain_ip_from_udhcpc(char* ifname);
 
 
typedef struct
{
   uint32_t ssid_len;
    char ssid[32];
    uint8_t bssid[6];
    uint32_t security;
    uint16_t channel;
    int16_t rssi;
} wifi_ap_info_t;
 
/*
 * ¹¦ÄÜ   : wifiÄ£¿é³õʼ»¯.
 * ²ÎÊý   : ÎÞ
 * ·µ»ØÖµ : ÎÞ
 */
int WIFI_Init(void);
 
/*
 * ¹¦ÄÜ   : wifiÄ£¿éÍ˳ö.
 * ²ÎÊý   : ÎÞ
 * ·µ»ØÖµ : ÎÞ
 */
void WIFI_Deinit(void);
 
/*
 * ¹¦ÄÜ   : WIFI¶Ï¿ª.
 * ²ÎÊý   : ÎÞ
 * ·µ»ØÖµ : ÎÞ
 */
void WIFI_Disconnect(void);
 
/*
 * ¹¦ÄÜ   : Á¬½ÓÖ¸¶¨ÍøÂç[¾²Ì¬/¶¯Ì¬/OPEN].
 * ²ÎÊý   :
 *          ssid : Ä¿±êSSID.
            pass : ÃÜÂë.
           useip: 0/¾²Ì¬  1/¶¯Ì¬  2/OPEN
 * ·µ»ØÖµ : ÎÞ
 */
int WIFI_Connect(char *ssid, char *pass, int  useip);
 
/*
 * ¹¦ÄÜ   : »ñÈ¡ÍøÂçÁ¬½Ó״̬.
 * ²ÎÊý   : ÎÞ
 * ·µ»ØÖµ : ÎÞ
 */
int WIFI_GetStatus(void);
 
/*
 * ¹¦ÄÜ   : »ñÈ¡WIFIÁ¬½ÓÐŵÀ.
 * ²ÎÊý   : ÎÞ
 * ·µ»ØÖµ : [0-13]/WIFIÁ¬½ÓÐŵÀ.
 */
int WIFI_GetChannel(void);
 
/*
 * ¹¦ÄÜ   : »ñÈ¡WIFI»½ÐÑ·½Ê½.
 * ²ÎÊý   : ÎÞ
 * ·µ»ØÖµ : WIFIÆô¶¯Ô­ÒòÂë.
 */
int WIFI_GetWakupReason(void);
/*
 * ¹¦ÄÜ   : »ñÈ¡WIFIÐźÅÇ¿¶È.
 * ²ÎÊý   : ÎÞ
 * ·µ»ØÖµ : WIFIÐźÅÇ¿¶È.
 */
int WIFI_GetSignal(void);
 
/*
 * ¹¦ÄÜ   : ÉèÖÃWIFI¾²Ì¬IPÐÅÏ¢.
 * ²ÎÊý   :
             ipAddr      :    IPµØÖ·ÐÅÏ¢.
           netmask     :    ×ÓÍøÑÚÂë.
           gateway     :    Íø¹Ø.
 
 * ·µ»ØÖµ :   0/³É¹¦
 *          ·Ç0/ʧ°Ü
 */
int WIFI_SetNetInfo(char *ipAddr, char *netmask, char *gateway, char *dns);
 
/*
 * ¹¦ÄÜ   : »ñÈ¡WIFIÆô¶¯·½Ê½.
 * ²ÎÊý   : ÎÞ
 * ·µ»ØÖµ : 0/ÖØÆô  1/PIR´¥·¢»½ÐÑ  2/WIFI»½ÐÑ  3/ÆäËû
 */
int WIFI_StartUpMode(void);
 
/*
 * ¹¦ÄÜ   : Íø¹ØÀëÏßÅäÖÃSSID»½ÐÑ.
 * ²ÎÊý   :
            ssid         : Ä¿±êSSID.
           channel_num  : É¨ÃèͨµÀÊý,0/È«ÐŵÀɨÃè [1-12]/µ¥ÐŵÀɨÃè.
           interval     : É¨ÃèÖÜÆÚ.
 * ·µ»ØÖµ :   0/³É¹¦
 *          ·Ç0/ʧ°Ü
 */
int WIFI_SetWakeupBySsid(char *ssid, char channelNum, unsigned short interval);
/*
 * ¹¦ÄÜ   : Íø¹ØÉÏÏߺóÇå³ýSSID»½ÐÑ.
 * ²ÎÊý   : ÎÞ
 * ·µ»ØÖµ :   0/³É¹¦
 *          ·Ç0/ʧ°Ü
 */
int WIFI_ClearWakeupSsid(void);
 
/*
 * ¹¦ÄÜ   : ÉèÖÃWIFIÆô¶¯·½Ê½.
 * ²ÎÊý   :
 *            WakeupFlag : 0/ÂýÆô¶¯
 *                           1/¿ìÆô¶¯
 * ·µ»ØÖµ : ÎÞ
 */
int WIFI_SetQuickStartWay(int WakeupFlag);
 
/*
 * ¹¦ÄÜ   : É¨ÃèÖܱßÍøÂç.
 * ²ÎÊý   : ÎÞ
 * ·µ»ØÖµ : ÎÞ
 */
int WIFI_ClientScan(void);
 
/*
 * ¹¦ÄÜ   : »ñȡɨÃè½á¹û.
 * ²ÎÊý   :
 *                pstResults : É¨Ãè½á¹û.
 *             num        : AP×ÜÊý.
 * ·µ»ØÖµ :   0/³É¹¦
 *          ·Ç0/ʧ°Ü
 */
int WIFI_GetClientScanResults(wifi_ap_info_t *pstResults, uint32_t num);
 
/*
 * ¹¦ÄÜ   : ½øÈëÐÝÃß±£»î״̬.
 * ²ÎÊý   : ÎÞ
 * ·µ»ØÖµ :   0/³É¹¦
 *          ·Ç0/ʧ°Ü
 */
 
#endif /* __WIFI_H__ */