source: ReferenceDesigns/w3_802.11/c/wlan_w3_high/w3_high_userio.c

Last change on this file was 6319, checked in by chunter, 5 years ago

1.8.0 release wlan-mac-se

File size: 3.4 KB
Line 
1#include "xgpio.h"
2
3#include "wlan_common_types.h"
4#include "wlan_mac_high.h"
5#include "w3_high_userio.h"
6#include "w3_high.h"
7#include "xparameters.h"
8#include "wlan_platform_common.h"
9#include "wlan_platform_high.h"
10#include "wlan_mac_common.h"
11
12static XGpio Gpio_userio;                  ///< GPIO driver instance for user IO inputs
13static u32 gl_userio_state;
14
15// Private functions
16void _w3_high_userio_gpio_handler(void *InstancePtr);
17
18int w3_high_userio_init(){
19    int return_value;
20
21    gl_userio_state = 0;
22
23    // Initialize the GPIO driver instances
24    return_value = XGpio_Initialize(&Gpio_userio, PLATFORM_DEV_ID_USRIO_GPIO);
25
26    if (return_value != XST_SUCCESS) {
27        wlan_printf(PL_ERROR, "ERROR: Could not initialize GPIO\n");
28        return WLAN_FAILURE;
29    }
30
31    // Set direction of GPIO channels
32    //  User IO GPIO instance has 1 channel, all inputs
33    XGpio_SetDataDirection(&Gpio_userio, GPIO_USERIO_INPUT_CHANNEL, 0xFFFFFFFF);
34
35    return return_value;
36}
37int w3_high_userio_setup_interrupt() {
38    int return_value;
39    // GPIO for User IO inputs
40    return_value = wlan_platform_interrupt_connect(PLATFORM_INT_ID_USRIO_GPIO, (wlan_intr_handler_t)_w3_high_userio_gpio_handler, &Gpio_userio);
41    if (return_value != XST_SUCCESS) {
42        wlan_printf(PL_ERROR, "Failed to set up GPIO interrupt\n");
43        return WLAN_FAILURE;
44    }
45
46    //Update the initial state of the global tracking variable
47    gl_userio_state = wlan_platform_userio_get_state();
48
49    wlan_platform_interrupt_enable(PLATFORM_INT_ID_USRIO_GPIO);
50    XGpio_InterruptEnable(&Gpio_userio, GPIO_USERIO_INPUT_IR_CH_MASK);
51    XGpio_InterruptGlobalEnable(&Gpio_userio);
52    return return_value;
53}
54
55void _w3_high_userio_gpio_handler(void *InstancePtr){
56    XGpio *GpioPtr;
57    u32 curr_userio_state, userio_state_xor;
58
59    GpioPtr = (XGpio*)InstancePtr;
60
61    XGpio_InterruptDisable(GpioPtr, GPIO_USERIO_INPUT_IR_CH_MASK);
62
63    curr_userio_state = wlan_platform_userio_get_state();
64
65    userio_state_xor = curr_userio_state ^ gl_userio_state;
66
67    if(userio_state_xor & USERIO_INPUT_MASK_PB_0) wlan_mac_high_userio_inputs_callback(curr_userio_state & USERIO_INPUT_MASK_PB_0, USERIO_INPUT_MASK_PB_0);
68    if(userio_state_xor & USERIO_INPUT_MASK_PB_1) wlan_mac_high_userio_inputs_callback(curr_userio_state & USERIO_INPUT_MASK_PB_1, USERIO_INPUT_MASK_PB_1);
69    if(userio_state_xor & USERIO_INPUT_MASK_PB_2) wlan_mac_high_userio_inputs_callback(curr_userio_state & USERIO_INPUT_MASK_PB_2, USERIO_INPUT_MASK_PB_2);
70    if(userio_state_xor & USERIO_INPUT_MASK_PB_3) wlan_mac_high_userio_inputs_callback(curr_userio_state & USERIO_INPUT_MASK_PB_3, USERIO_INPUT_MASK_PB_3);
71    if(userio_state_xor & USERIO_INPUT_MASK_SW_0) wlan_mac_high_userio_inputs_callback(curr_userio_state & USERIO_INPUT_MASK_SW_0, USERIO_INPUT_MASK_SW_0);
72    if(userio_state_xor & USERIO_INPUT_MASK_SW_1) wlan_mac_high_userio_inputs_callback(curr_userio_state & USERIO_INPUT_MASK_SW_1, USERIO_INPUT_MASK_SW_1);
73    if(userio_state_xor & USERIO_INPUT_MASK_SW_2) wlan_mac_high_userio_inputs_callback(curr_userio_state & USERIO_INPUT_MASK_SW_2, USERIO_INPUT_MASK_SW_2);
74    if(userio_state_xor & USERIO_INPUT_MASK_SW_3) wlan_mac_high_userio_inputs_callback(curr_userio_state & USERIO_INPUT_MASK_SW_3, USERIO_INPUT_MASK_SW_3);
75
76    gl_userio_state = curr_userio_state;
77
78
79    (void)XGpio_InterruptClear(GpioPtr, GPIO_USERIO_INPUT_IR_CH_MASK);
80    XGpio_InterruptEnable(GpioPtr, GPIO_USERIO_INPUT_IR_CH_MASK);
81    return;
82}
83
84
85
Note: See TracBrowser for help on using the repository browser.