VSF Documented
vsf_gpio_74hc165.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_74HC165_GPIO_H__
19#define __VSF_74HC165_GPIO_H__
20
21/* Implement GPIO device driver on 74HC165
22 connection:
23 control api <==> signal(pin) <==> signal(pin) shared with 74HC595
24 ce_control <==> nCE(15)
25 load_control <==> nPL(1) <==> ST_CP(12)
26 clock_control <==> CP(2) <==> SH_CP(11)
27 serial_input <==> Q7(9)
28
29 note:
30 nCE is optional, can be connect to GND directly, set ce_control to NULL in this case.
31 */
32
33/*============================ INCLUDES ======================================*/
34
35#include "hal/vsf_hal_cfg.h"
36
37#if VSF_HAL_USE_GPIO == ENABLED && VSF_HAL_USE_74HC165_GPIO == ENABLED
38
39#if defined(__VSF_HAL_74HC165_GPIO_CLASS_IMPLEMENT)
40# define __VSF_CLASS_IMPLEMENT__
41#endif
42
43#include "utilities/ooc_class.h"
44
45#ifdef __cplusplus
46extern "C" {
47#endif
48
49/*============================ MACROS ========================================*/
50
51#ifndef VSF_74HC165_GPIO_CFG_MULTI_CLASS
52# define VSF_74HC165_GPIO_CFG_MULTI_CLASS VSF_GPIO_CFG_MULTI_CLASS
53#endif
54
55#if VSF_74HC165_GPIO_CFG_MULTI_CLASS == ENABLED
56# define __VSF_74HC165_GPIO_HALOP .vsf_gpio.op = &vsf_74hc165_gpio_op,
57#else
58# define __VSF_74HC165_GPIO_HALOP
59#endif
60
61#define __VSF_74HC165_GPIO_INIT(__CASCADE_NUM, __OP, __PARAM) \
62 __VSF_74HC165_GPIO_HALOP \
63 .op = (vsf_74hc165_op_t *)(__OP), \
64 .param = (__PARAM), \
65 .cascade_num = (__CASCADE_NUM),
66#define VSF_74HC165_GPIO_INIT(__CASCADE_NUM, __OP, __PARAM) \
67 __VSF_74HC165_GPIO_INIT((__CASCADE_NUM), (__OP), (__PARAM))
68
69#define __describe_74hc165_gpio(__name, __cascade_num, __param, __ce_control, \
70 __load_control, __clock_control, __serial_input) \
71 static const vsf_74hc165_op_t VSF_MCONNECT3(__, __name, _op) = { \
72 .ce_control = (__ce_control), \
73 .load_control = (__load_control), \
74 .clock_control = (__clock_control), \
75 .serial_input = (__serial_input), \
76 }; \
77 vsf_74hc165_gpio_t __name = { \
78 __VSF_74HC165_GPIO_INIT((__cascade_num), \
79 &VSF_MCONNECT3(__, __name, _op), (__param)) \
80 };
81
82#define describe_74hc165_gpio(__name, __cascade_num, __param, __ce_control, \
83 __load_control, __clock_control, __serial_input) \
84 __describe_74hc165_gpio(__name, (__cascade_num), (__param), \
85 (__ce_control), (__load_control), (__clock_control), (__serial_input))
86
87/*============================ MACROFIED FUNCTIONS ===========================*/
88/*============================ TYPES =========================================*/
89
90typedef struct vsf_74hc165_op_t {
91 void (*ce_control)(void *param, uint_fast8_t bit);
92 void (*load_control)(void *param, uint_fast8_t bit);
93 void (*clock_control)(void *param, uint_fast8_t bit);
94 uint_fast8_t (*serial_input)(void *param);
96
98 public_member(
100 vsf_gpio_t vsf_gpio;
101#endif
103 void *param;
104 uint8_t cascade_num;
105 )
106};
107
108/*============================ GLOBAL VARIABLES ==============================*/
109
110#if VSF_74HC165_GPIO_CFG_MULTI_CLASS == ENABLED
112#endif
113
114/*============================ PROTOTYPES ====================================*/
115
116extern void vsf_74hc165_gpio_init(vsf_74hc165_gpio_t *gpio_ptr);
127extern void vsf_74hc165_gpio_toggle(vsf_74hc165_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask);
128
129#ifdef __cplusplus
130}
131#endif
132
133#endif
134#endif
#define ENABLED
Definition __type.h:28
Definition vsf_gpio_74hc165.h:97
#define vsf_class(__name)
Definition ooc_class.h:48
unsigned char uint_fast8_t
Definition stdint.h:23
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_gpio_74hc165.h:90
uint_fast8_t(* serial_input)(void *param)
Definition vsf_gpio_74hc165.h:94
void(* clock_control)(void *param, uint_fast8_t bit)
Definition vsf_gpio_74hc165.h:93
void(* load_control)(void *param, uint_fast8_t bit)
Definition vsf_gpio_74hc165.h:92
void(* ce_control)(void *param, uint_fast8_t bit)
Definition vsf_gpio_74hc165.h:91
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
#define VSF_74HC165_GPIO_CFG_MULTI_CLASS
Definition vsf_gpio_74hc165.h:52
void vsf_74hc165_gpio_init(vsf_74hc165_gpio_t *gpio_ptr)
Definition vsf_gpio_74hc165.c:44
void vsf_74hc165_gpio_set_output(vsf_74hc165_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
void vsf_74hc165_gpio_clear(vsf_74hc165_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
void vsf_74hc165_gpio_port_config_pins(vsf_74hc165_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_cfg_t *cfg)
void vsf_74hc165_gpio_set(vsf_74hc165_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
const vsf_gpio_op_t vsf_74hc165_gpio_op
vsf_gpio_pin_mask_t vsf_74hc165_gpio_get_direction(vsf_74hc165_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Definition vsf_gpio_74hc165.c:68
vsf_gpio_pin_mask_t vsf_74hc165_gpio_read(vsf_74hc165_gpio_t *gpio_ptr)
Definition vsf_gpio_74hc165.c:74
void vsf_74hc165_gpio_switch_direction(vsf_74hc165_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
void vsf_74hc165_gpio_toggle(vsf_74hc165_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
Definition vsf_gpio_74hc165.c:109
void vsf_74hc165_gpio_write(vsf_74hc165_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t value)
Definition vsf_gpio_74hc165.c:103
void vsf_74hc165_gpio_set_input(vsf_74hc165_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
void vsf_74hc165_gpio_set_direction(vsf_74hc165_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask, vsf_gpio_pin_mask_t direction_mask)
Definition vsf_gpio_74hc165.c:63
#define vsf_gpio_pin_mask_t
Definition vsf_template_gpio.h:187