VSF Documented
vsf_hal_distbus_gpio.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_HAL_DISTBUS_GPIO_H__
19#define __VSF_HAL_DISTBUS_GPIO_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "hal/vsf_hal_cfg.h"
24
25#if VSF_HAL_USE_GPIO == ENABLED && VSF_HAL_DISTBUS_USE_GPIO == ENABLED
26
27#if defined(__VSF_HAL_DISTBUS_GPIO_CLASS_IMPLEMENT)
28# define __VSF_CLASS_IMPLEMENT__
29#elif defined(__VSF_HAL_DISTBUS_GPIO_CLASS_INHERIT__)
30# define __VSF_CLASS_INHERIT__
31#endif
32
33#include "utilities/ooc_class.h"
34
35#ifdef __cplusplus
36extern "C" {
37#endif
38
39/*============================ MACROS ========================================*/
40
41#ifndef VSF_HAL_DISTBUS_GPIO_CFG_MULTI_CLASS
42# define VSF_HAL_DISTBUS_GPIO_CFG_MULTI_CLASS VSF_GPIO_CFG_MULTI_CLASS
43#endif
44
45#ifdef VSF_HAL_DISTBUS_AS_REAL_DRIVER
46# define VSF_GPIO_CFG_REIMPLEMENT_TYPE_MODE ENABLED
47#endif
48
49/*============================ MACROFIED FUNCTIONS ===========================*/
50/*============================ TYPES =========================================*/
51
52#if defined(__VSF_HAL_DISTBUS_GPIO_CLASS_IMPLEMENT) || defined(__VSF_HAL_DISTBUS_GPIO_CLASS_INHERIT__)
53enum {
54 // commands to slave
55 VSF_HAL_DISTBUS_GPIO_CMD_PORT_CONFIG_PINS = 0,
56 VSF_HAL_DISTBUS_GPIO_CMD_SET_DIRECTION,
57 VSF_HAL_DISTBUS_GPIO_CMD_WRITE,
58 VSF_HAL_DISTBUS_GPIO_CMD_SET,
59 VSF_HAL_DISTBUS_GPIO_CMD_CLEAR,
60 VSF_HAL_DISTBUS_GPIO_CMD_TOGGLE,
61 VSF_HAL_DISTBUS_GPIO_CMD_OUTPUT_AND_SET,
62 VSF_HAL_DISTBUS_GPIO_CMD_OUTPUT_AND_CLEAR,
63
64 // commands to host
65 VSF_HAL_DISTBUS_GPIO_CMD_SYNC,
66
67 VSF_HAL_DISTBUS_GPIO_CMD_ADDR_RANGE,
68};
69
70typedef struct vsf_hal_distbus_gpio_port_config_pins_t {
71 uint64_t pin_mask;
72 uint32_t mode;
73 uint16_t alternate_function;
74} VSF_CAL_PACKED vsf_hal_distbus_gpio_port_config_pins_t;
75
76typedef struct vsf_hal_distbus_gpio_set_direction_t {
77 uint64_t pin_mask;
78 uint64_t direction_mask;
79} VSF_CAL_PACKED vsf_hal_distbus_gpio_set_direction_t;
80
81typedef struct vsf_hal_distbus_gpio_write_t {
82 uint64_t pin_mask;
84} VSF_CAL_PACKED vsf_hal_distbus_gpio_write_t;
85
86typedef struct vsf_hal_distbus_gpio_pin_mask_t {
87 uint64_t pin_mask;
88} VSF_CAL_PACKED vsf_hal_distbus_gpio_pin_mask_t;
89
90typedef struct vsf_hal_distbus_gpio_sync_t {
92} VSF_CAL_PACKED vsf_hal_distbus_gpio_sync_t;
93#endif
94
95typedef enum VSF_MCONNECT(VSF_HAL_DISTBUS_PREFIX, gpio_mode_t) {
96 // mode: 3 bits
103
104 // pull: 2 bits
108
109 // exti_mode: 3 bits
116
117 // drive_strength: 2 bits
123
124 // speed: 2 bits
130
131#ifdef VSF_HAL_DISTBUS_AS_REAL_DRIVER
137
143#else
153
160
166#endif
168
174
179
180/*============================ INCLUDES ======================================*/
181
182#ifdef VSF_HAL_DISTBUS_AS_REAL_DRIVER
184#endif
185
186/*============================ TYPES =========================================*/
187
189#if VSF_HAL_DISTBUS_GPIO_CFG_MULTI_CLASS == ENABLED
190 public_member(
191 implement(vsf_gpio_t)
192 )
193#endif
194 protected_member(
195 vsf_distbus_service_t service;
196 struct {
198 void *target;
199 uint32_t enabled_mask;
200 uint32_t triggered_mask;
201 uint16_t no;
202 } irq;
204 private_member(
205 vsf_distbus_t *distbus;
207 )
208};
209
210/*============================ GLOBAL VARIABLES ==============================*/
211/*============================ INCLUDES ======================================*/
212/*============================ PROTOTYPES ====================================*/
213
215
216#ifdef __cplusplus
217}
218#endif
219
220#undef __VSF_HAL_DISTBUS_GPIO_CLASS_IMPLEMENT
221#undef __VSF_HAL_DISTBUS_GPIO_CLASS_INHERIT__
222
223#endif
224#endif
225/* EOF */
226
@ VSF_GPIO_NO_PULL_UP_DOWN
Definition gpio.h:39
@ VSF_GPIO_EXTI_MODE_HIGH_LEVEL
Definition gpio.h:50
@ VSF_GPIO_OUTPUT_PUSH_PULL
Definition gpio.h:43
@ VSF_GPIO_EXTI
Definition gpio.h:45
@ VSF_GPIO_EXTI_MODE_LOW_LEVEL
Definition gpio.h:49
@ VSF_GPIO_EXTI_MODE_NONE
Definition gpio.h:48
@ VSF_GPIO_EXTI_MODE_RISING
Definition gpio.h:51
@ VSF_GPIO_EXTI_MODE_RISING_FALLING
Definition gpio.h:53
@ VSF_GPIO_PULL_UP
Definition gpio.h:37
@ VSF_GPIO_AF
Definition gpio.h:46
@ VSF_GPIO_INPUT
Definition gpio.h:41
@ VSF_GPIO_ANALOG
Definition gpio.h:44
@ VSF_GPIO_EXTI_MODE_FALLING
Definition gpio.h:52
@ VSF_GPIO_OUTPUT_OPEN_DRAIN
Definition gpio.h:42
@ VSF_GPIO_PULL_DOWN
Definition gpio.h:38
#define VSF_GPIO_SPEED_MEDIUM
Definition gpio.h:83
#define VSF_GPIO_SPEED_HIGH
Definition gpio.h:84
#define VSF_GPIO_SPEED_MASK
Definition gpio.h:86
#define VSF_GPIO_SPEED_VERY_HIGH
Definition gpio.h:85
#define VSF_GPIO_SPEED_LOW
Definition gpio.h:82
#define VSF_GPIO_DRIVE_STRENGTH_MEDIUM
Definition gpio.h:113
#define VSF_GPIO_DRIVE_STRENGTH_HIGH
Definition gpio.h:114
#define VSF_GPIO_DRIVE_STRENGTH_VERY_HIGH
Definition gpio.h:115
#define VSF_GPIO_DRIVE_STRENGTH_LOW
Definition gpio.h:112
@ VSF_GPIO_DRIVE_STRENGTH_MASK
Definition gpio.h:111
Definition vsf_distbus.h:87
Definition vsf_distbus.h:120
Definition vsf_hal_distbus_gpio.h:188
#define VSF_HAL_DISTBUS_PREFIX
Definition driver.h:35
#define VSF_HAL_DISTBUS_ENUM(__ELEMENT)
Definition driver.h:34
#define vsf_class(__name)
Definition ooc_class.h:48
unsigned short uint16_t
Definition stdint.h:7
unsigned uint32_t
Definition stdint.h:9
unsigned long long uint64_t
Definition stdint.h:11
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_template_gpio.h:732
Definition vsf_hal_distbus_gpio.h:169
uint64_t output_value
Definition vsf_hal_distbus_gpio.h:177
uint64_t direction
Definition vsf_hal_distbus_gpio.h:175
uint64_t value
Definition vsf_hal_distbus_gpio.h:176
uint8_t support_output_and_set
Definition vsf_hal_distbus_gpio.h:170
uint64_t pin_mask
Definition vsf_hal_distbus_gpio.h:173
uint8_t support_output_and_clear
Definition vsf_hal_distbus_gpio.h:171
uint8_t pin_count
Definition vsf_hal_distbus_gpio.h:172
vk_av_control_value_t value
Definition vsf_audio.h:171
enum VSF_MCONNECT(VSF_HAL_DISTBUS_PREFIX, gpio_mode_t)
Definition vsf_hal_distbus_gpio.h:95
uint32_t vsf_hal_distbus_gpio_register_service(vsf_distbus_t *distbus, vsf_hal_distbus_gpio_t *gpio, void *info, uint32_t infolen)
Definition vsf_hal_distbus_gpio.c:88
struct vk_romfs_header_t VSF_CAL_PACKED
void vsf_gpio_exti_isr_handler_t(void *target_ptr, vsf_gpio_t *gpio_ptr, vsf_gpio_pin_mask_t pin_mask)
External interrupt callback function for gpio.
Definition vsf_template_gpio.h:592
@ VSF_GPIO_EXTI_MODE_MASK
Definition vsf_template_gpio.h:566
@ VSF_GPIO_MODE_MASK
Definition vsf_template_gpio.h:554
@ VSF_GPIO_PULL_UP_DOWN_MASK
Definition vsf_template_gpio.h:562
@ VSF_GPIO_MODE_ALL_BITS_MASK
Definition vsf_template_gpio.h:573
Generated from commit: vsfteam/vsf@3857ca3