VSF Documented
multiplex_i2c.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 __HAL_DRIVER_COMMON_I2C_MULTIPLEX_H__
19#define __HAL_DRIVER_COMMON_I2C_MULTIPLEX_H__
20
21/*============================ INCLUDES ======================================*/
22
23#include "hal/vsf_hal_cfg.h"
24
25#if (VSF_HAL_USE_I2C == ENABLED) && (VSF_HAL_USE_MULTIPLEX_I2C == ENABLED)
26
27#if defined(__VSF_I2C_MULTIPLEX_CLASS_IMPLEMENT)
28# undef __VSF_I2C_MULTIPLEX_CLASS_IMPLEMENT
29# define __VSF_CLASS_IMPLEMENT__
30#endif
31
32#include "utilities/ooc_class.h"
33
34/*============================ MACROS ========================================*/
35
36#ifndef VSF_MULTIPLEX_I2C_CFG_MULTI_CLASS
37# define VSF_MULTIPLEX_I2C_CFG_MULTI_CLASS VSF_I2C_CFG_MULTI_CLASS
38#endif
39
40#ifndef VSF_MULTIPLEXER_I2C_CFG_MASK_TYPE
41# define VSF_MULTIPLEXER_I2C_CFG_MASK_TYPE uint8_t
42#endif
43
44/*============================ MACROFIED FUNCTIONS ===========================*/
45/*============================ INCLUDES ======================================*/
46
47#if VSF_MULTIPLEX_I2C_CFG_MULTI_CLASS == ENABLED
48# define __describe_multiplex_i2c_op() .op = &vsf_multiplex_i2c_op,
49#else
50# define __describe_multiplex_i2c_op()
51#endif
52
53#define __describe_multiplex_i2c(__multiplexer, __name) \
54 vsf_multiplex_i2c_t __name = { \
55 __describe_multiplex_i2c_op() \
56 .multiplexer = &(__multiplexer), \
57 };
58
59#define __describe_multiplexer_i2c(__name, __i2c, ...) \
60 vsf_multiplexer_i2c_t __name = { \
61 .i2c_ptr = __i2c, \
62 }; \
63 VSF_MFOREACH_ARG1(__describe_multiplex_i2c, __name, __VA_ARGS__)
64
65#define describe_multiplexer_i2c(__name, __i2c, ...) \
66 __describe_multiplexer_i2c(__name, __i2c, __VA_ARGS__)
67
68/*============================ TYPES =========================================*/
69
71
73
74vsf_class(vsf_multiplexer_i2c_t) {
75 public_member(
76 vsf_i2c_t *i2c_ptr;
77 )
78
79 private_member(
80 vsf_slist_queue_t waiting_queue;
81
82 vsf_multiplex_i2c_t *req_m_i2c;
83 vsf_multiplex_i2c_t *inited_m_i2c;
84 vsf_i2c_irq_mask_t irq_mask; // All CS IRQ Mask Wire-OR
87 )
88};
89
91 public_member(
93 implement(vsf_i2c_t)
94#endif
95 vsf_multiplexer_i2c_t * const multiplexer;
96 )
97
98 private_member(
99 vsf_slist_node_t slist_node;
100 vsf_i2c_cfg_t cfg;
102 uint8_t id;
103
104 struct {
105 vsf_i2c_cmd_t cmd;
106 uint8_t *buffer_ptr;
107 uint16_t address;
108 uint16_t count;
109 } request;
111};
112
113/*============================ GLOBAL VARIABLES ==============================*/
114
115#define VSF_I2C_CFG_DEC_PREFIX vsf_multiplex
116#define VSF_I2C_CFG_DEC_UPCASE_PREFIX VSF_MULTIPLEX
117#define VSF_I2C_CFG_DEC_EXTERN_OP ENABLED
119
120/*============================ LOCAL VARIABLES ===============================*/
121/*============================ PROTOTYPES ====================================*/
122/*============================ IMPLEMENTATION ================================*/
123
124#endif // VSF_HAL_I2C_IMP_REQUEST_BY_CMD
125#endif
#define ENABLED
Definition __type.h:28
Definition multiplex_i2c.h:90
vsf_i2c_cmd_t
Definition i2c.h:32
#define VSF_MULTIPLEX_I2C_CFG_MULTI_CLASS
Definition multiplex_i2c.h:37
VSF_MULTIPLEXER_I2C_CFG_MASK_TYPE vsf_i2c_multiplex_mask_t
Definition multiplex_i2c.h:70
#define VSF_MULTIPLEXER_I2C_CFG_MASK_TYPE
Definition multiplex_i2c.h:41
#define vsf_class(__name)
Definition ooc_class.h:48
#define vsf_declare_class(__name)
Definition ooc_class.h:45
const i_spi_t vsf_spi_irq_mask_t irq_mask
Definition spi_interface.h:38
unsigned short uint16_t
Definition stdint.h:7
unsigned char uint8_t
Definition stdint.h:5
i2c configuration
Definition vsf_template_i2c.h:314
Definition vsf_template_i2c.h:334
Definition vsf_list.h:876
Definition vsf_list.h:896
vsf_i2c_irq_mask_t
Definition vsf_template_i2c.h:194