1 /*
2  * Copyright (c) 2006-2023, RT-Thread Development Team
3  *
4  * SPDX-License-Identifier: Apache-2.0
5  *
6  * Change Logs:
7  * Date           Author       Notes
8  * 2018-08-14     tyx          the first version
9  */
10 
11 #ifndef __DEV_WLAN_PROT_H__
12 #define __DEV_WLAN_PROT_H__
13 
14 #ifdef __cplusplus
15 extern "C" {
16 #endif
17 
18 #ifndef RT_WLAN_PROT_NAME_LEN
19 #define RT_WLAN_PROT_NAME_LEN  (8)
20 #endif
21 
22 #ifndef RT_WLAN_PROT_MAX
23 #define RT_WLAN_PROT_MAX       (1)
24 #endif
25 
26 #define RT_LWAN_ID_PREFIX      (0x5054)
27 
28 typedef enum
29 {
30     RT_WLAN_PROT_EVT_INIT_DONE = 0,
31     RT_WLAN_PROT_EVT_CONNECT,
32     RT_WLAN_PROT_EVT_DISCONNECT,
33     RT_WLAN_PROT_EVT_AP_START,
34     RT_WLAN_PROT_EVT_AP_STOP,
35     RT_WLAN_PROT_EVT_AP_ASSOCIATED,
36     RT_WLAN_PROT_EVT_AP_DISASSOCIATED,
37     RT_WLAN_PROT_EVT_MAX,
38 } rt_wlan_prot_event_t;
39 
40 struct rt_wlan_prot;
41 struct rt_wlan_prot_ops
42 {
43     rt_err_t (*prot_recv)(struct rt_wlan_device *wlan, void *buff, int len);
44     struct rt_wlan_prot *(*dev_reg_callback)(struct rt_wlan_prot *prot, struct rt_wlan_device *wlan);
45     void (*dev_unreg_callback)(struct rt_wlan_prot *prot, struct rt_wlan_device *wlan);
46 };
47 
48 struct rt_wlan_prot
49 {
50     char name[RT_WLAN_PROT_NAME_LEN];
51     rt_uint32_t id;
52     const struct rt_wlan_prot_ops *ops;
53 };
54 
55 typedef void (*rt_wlan_prot_event_handler)(struct rt_wlan_prot *port, struct rt_wlan_device *wlan, int event);
56 
57 rt_err_t rt_wlan_prot_attach(const char *dev_name, const char *prot_name);
58 
59 rt_err_t rt_wlan_prot_attach_dev(struct rt_wlan_device *wlan, const char *prot_name);
60 
61 rt_err_t rt_wlan_prot_detach(const char *dev_name);
62 
63 rt_err_t rt_wlan_prot_detach_dev(struct rt_wlan_device *wlan);
64 
65 rt_err_t rt_wlan_prot_regisetr(struct rt_wlan_prot *prot);
66 
67 rt_err_t rt_wlan_prot_transfer_dev(struct rt_wlan_device *wlan, void *buff, int len);
68 
69 rt_err_t rt_wlan_dev_transfer_prot(struct rt_wlan_device *wlan, void *buff, int len);
70 
71 rt_err_t rt_wlan_prot_event_register(struct rt_wlan_prot *prot, rt_wlan_prot_event_t event, rt_wlan_prot_event_handler handler);
72 
73 rt_err_t rt_wlan_prot_event_unregister(struct rt_wlan_prot *prot, rt_wlan_prot_event_t event);
74 
75 int rt_wlan_prot_ready(struct rt_wlan_device *wlan, struct rt_wlan_buff *buff);
76 
77 void rt_wlan_prot_dump(void);
78 
79 #ifdef __cplusplus
80 }
81 #endif
82 
83 #endif
84