ISKBoard example project
Wenxue
2025-09-02 ce98c87a26c333e87408ebc5bf02640d4f0624dc
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
/**********************************************************************
*   Copyright: (C)2024 LingYun IoT System Studio
*      Author: GuoWenxue<guowenxue@gmail.com>
* Description: ISKBoard Hardware Abstract Layer driver
*
*   ChangeLog:
*        Version    Date       Author            Description
*        V1.0.0  2024.08.29    GuoWenxue      Release initial version
***********************************************************************/
 
#include "miscdev.h"
 
/*
 *+----------------------+
 *|    GPIO Relay API    |
 *+----------------------+
 */
 
gpio_t     relays[RelayMax] =
{
    { "Relay1",   GPIOD, GPIO_PIN_2, OFF },
};
 
int init_relay(void)
{
    int                 which;
 
    /* Turn all relays off */
    for(which=0; which<RelayMax; which++)
    {
        HAL_GPIO_WritePin(relays[which].group, relays[which].pin, GPIO_PIN_RESET);
    }
 
    return 0;
}
 
/* Turn $which relay to ON/OFF */
void turn_relay(int which, int status)
{
    GPIO_PinState       level;
 
    if( which >= RelayMax )
        return ;
 
    level = status==OFF ? GPIO_PIN_RESET : GPIO_PIN_SET;
 
    HAL_GPIO_WritePin(relays[which].group, relays[which].pin, level);
 
    relays[which].status = status;
}
 
/* Get $which relay current status */
int status_relay(int which)
{
    if( which >= RelayMax )
        return 0;
 
    return relays[which].status;
}
 
/*
 *+----------------------+
 *|     GPIO Led API     |
 *+----------------------+
 */
 
gpio_t     leds[LedMax] =
{
    { "RedLed",   GPIOC, GPIO_PIN_9, OFF },
    { "GreenLed", GPIOC, GPIO_PIN_6, OFF },
    { "BlueLed",  GPIOB, GPIO_PIN_2, OFF },
};
 
 
int init_led(void)
{
    int                 which;
 
    /* Turn all Leds off */
    for(which=0; which<LedMax; which++)
    {
        HAL_GPIO_WritePin(leds[which].group, leds[which].pin, GPIO_PIN_SET);
    }
 
    return 0;
}
 
/* Turn $which led to ON/OFF */
void turn_led(int which, int status)
{
    GPIO_PinState       level;
 
    if( which >= LedMax )
        return ;
 
    level = status==OFF ? GPIO_PIN_SET : GPIO_PIN_RESET;
 
    HAL_GPIO_WritePin(leds[which].group, leds[which].pin, level);
 
    leds[which].status = status;
}
 
/* Toggle $which led status */
void toggle_led(int which)
{
 
    if( which >= LedMax )
        return ;
 
    HAL_GPIO_TogglePin(leds[which].group, leds[which].pin);
 
    leds[which].status = !leds[which].status;
}
 
/* Blink $which led */
void blink_led(int which, uint32_t interval)
{
    turn_led(which, ON);
    HAL_Delay(interval);
 
    turn_led(which, OFF);
    HAL_Delay(interval);
}
 
/* Get $which led current status */
int status_led(int which)
{
    if( which >= LedMax )
        return 0;
 
    return leds[which].status;
}