VSF Documented
vsf_gpio_74hc595.h
Go to the documentation of this file.
1/*****************************************************************************
2 * Copyright(C)2009-2022 by VSF Team *
3 * *
4 * Licensed under the Apache License, Version 2.0 (the "License"); *
5 * you may not use this file except in compliance with the License. *
6 * You may obtain a copy of the License at *
7 * *
8 * http://www.apache.org/licenses/LICENSE-2.0 *
9 * *
10 * Unless required by applicable law or agreed to in writing, software *
11 * distributed under the License is distributed on an "AS IS" BASIS, *
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. *
13 * See the License for the specific language governing permissions and *
14 * limitations under the License. *
15 * *
16 ****************************************************************************/
17
18#ifndef __VSF_74HC595_GPIO_H__
19#define __VSF_74HC595_GPIO_H__
20
21/* Implement GPIO device driver on 74HC595
22 connection:
23 control api <==> signal(pin) <==> signal(pin) shared with 74HC165
24 oe_control <==> nOE(13)
25 latch_control <==> ST_CP(12) <==> nPL(1)
26 clock_control <==> SH_CP(11) <==> CP(2)
27 serial_output <==> DS(14)
28 */
29
30/*============================ INCLUDES ======================================*/
31
32#include "hal/vsf_hal_cfg.h"
33
34#if VSF_HAL_USE_GPIO == ENABLED && VSF_HAL_USE_74HC595_GPIO == ENABLED
35
36#if defined(__VSF_HAL_74HC595_GPIO_CLASS_IMPLEMENT)
37# define __VSF_CLASS_IMPLEMENT__
38#endif
39
40#include "utilities/ooc_class.h"
41
42#ifdef __cplusplus
43extern "C" {
44#endif
45
46/*============================ MACROS ========================================*/
47
48#ifndef VSF_74HC595_GPIO_CFG_MULTI_CLASS
49# define VSF_74HC595_GPIO_CFG_MULTI_CLASS VSF_GPIO_CFG_MULTI_CLASS
50#endif
51
52#if VSF_74HC595_GPIO_CFG_MULTI_CLASS == ENABLED
53# define __VSF_74HC595_GPIO_HALOP .vsf_gpio.op = &vsf_74hc595_gpio_op,
54#else
55# define __VSF_74HC595_GPIO_HALOP
56#endif
57
58#define __VSF_74HC595_GPIO_INIT(__CASCADE_NUM, __OP, __PARAM) \
59 __VSF_74HC595_GPIO_HALOP \
60 .op = (vsf_74hc595_op_t *)(__OP), \
61 .param = (__PARAM), \
62 .cascade_num = (__CASCADE_NUM),
63#define VSF_74HC595_GPIO_INIT(__CASCADE_NUM, __OP, __PARAM) \
64 __VSF_74HC595_GPIO_INIT((__CASCADE_NUM), (__OP), (__PARAM))
65
66#define __describe_74hc595_gpio(__name, __cascade_num, __param, __oe_control, \
67 __latch_control, __clock_control, __serial_output) \
68 static const vsf_74hc595_op_t VSF_MCONNECT3(__, __name, _op) = { \
69 .oe_control = (__oe_control), \
70 .latch_control = (__latch_control), \
71 .clock_control = (__clock_control), \
72 .serial_output = (__serial_output), \
73 }; \
74 vsf_74hc595_gpio_t __name = { \
75 __VSF_74HC595_GPIO_INIT((__cascade_num), \
76 &VSF_MCONNECT3(__, __name, _op), (__param)) \
77 };
78
79#define describe_74hc595_gpio(__name, __cascade_num, __param, __oe_control, \
80 __latch_control, __clock_control, __serial_output) \
81 __describe_74hc595_gpio(__name, (__cascade_num), (__param), \
82 (__oe_control), (__latch_control), (__clock_control), (__serial_output))
83
84/*============================ MACROFIED FUNCTIONS ===========================*/
85/*============================ TYPES =========================================*/
86
87typedef struct vsf_74hc595_op_t {
88 void (*oe_control)(void *param, uint_fast8_t bit);
89 void (*latch_control)(void *param, uint_fast8_t bit);
90 void (*clock_control)(void *param, uint_fast8_t bit);
91 void (*serial_output)(void *param, uint_fast8_t bit);
93
95 public_member(
97 vsf_gpio_t vsf_gpio;
98#endif
100 void *param;
101 uint32_t output_value;
102 uint8_t cascade_num;
103 bool output;
104 )
105};
106
107/*============================ GLOBAL VARIABLES ==============================*/
108
109#if VSF_74HC595_GPIO_CFG_MULTI_CLASS == ENABLED
111#endif
112
113/*============================ PROTOTYPES ====================================*/
114
115extern void vsf_74hc595_gpio_init(vsf_74hc595_gpio_t *gpio_ptr);
126extern void vsf_74hc595_gpio_toggle(vsf_74hc595_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
127
128#ifdef __cplusplus
129}
130# endif
131
132#endif
133#endif
#define ENABLED
Definition __type.h:28
Definition vsf_gpio_74hc595.h:94
#define vsf_class(__name)
Definition ooc_class.h:48
unsigned char uint_fast8_t
Definition stdint.h:23
unsigned uint32_t
Definition stdint.h:9
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_gpio_74hc595.h:87
void(* clock_control)(void *param, uint_fast8_t bit)
Definition vsf_gpio_74hc595.h:90
void(* latch_control)(void *param, uint_fast8_t bit)
Definition vsf_gpio_74hc595.h:89
void(* serial_output)(void *param, uint_fast8_t bit)
Definition vsf_gpio_74hc595.h:91
void(* oe_control)(void *param, uint_fast8_t bit)
Definition vsf_gpio_74hc595.h:88
gpio channel configuration
Definition vsf_template_gpio.h:394
Definition vsf_template_gpio.h:455
Definition vsf_template_gpio.h:471
vk_av_control_value_t value
Definition vsf_audio.h:171
vsf_gpio_pin_mask_t vsf_74hc595_gpio_read(vsf_74hc595_gpio_t *gpio_ptr)
Definition vsf_gpio_74hc595.c:87
vsf_gpio_pin_mask_t vsf_74hc595_gpio_get_direction(vsf_74hc595_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Definition vsf_gpio_74hc595.c:82
void vsf_74hc595_gpio_set_direction(vsf_74hc595_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t direction_mask)
Definition vsf_gpio_74hc595.c:65
void vsf_74hc595_gpio_toggle(vsf_74hc595_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Definition vsf_gpio_74hc595.c:113
void vsf_74hc595_gpio_switch_direction(vsf_74hc595_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
void vsf_74hc595_gpio_init(vsf_74hc595_gpio_t *gpio_ptr)
Definition vsf_gpio_74hc595.c:44
void vsf_74hc595_gpio_port_config_pins(vsf_74hc595_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_cfg_t *cfg_ptr)
Definition vsf_gpio_74hc595.c:60
#define VSF_74HC595_GPIO_CFG_MULTI_CLASS
Definition vsf_gpio_74hc595.h:49
void vsf_74hc595_gpio_set_input(vsf_74hc595_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
void vsf_74hc595_gpio_clear(vsf_74hc595_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
const vsf_gpio_op_t vsf_74hc595_gpio_op
void vsf_74hc595_gpio_set(vsf_74hc595_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
void vsf_74hc595_gpio_set_output(vsf_74hc595_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
void vsf_74hc595_gpio_write(vsf_74hc595_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t value)
Definition vsf_gpio_74hc595.c:94
#define vsf_gpio_pin_mask_t
Definition vsf_template_gpio.h:187