VSF Documented
vsf_distbus.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_DISTBUS_H__
19#define __VSF_DISTBUS_H__
20
21/*============================ INCLUDES ======================================*/
23
24#if VSF_USE_DISTBUS == ENABLED
25
27
28#if defined(__VSF_DISTBUS_CLASS_IMPLEMENT)
29# define __VSF_CLASS_IMPLEMENT__
30#elif defined(__VSF_DISTBUS_CLASS_INHERIT__)
31# define __VSF_CLASS_INHERIT__
32#endif
33
34#include "utilities/ooc_class.h"
35
36#ifdef __cplusplus
37extern "C" {
38#endif
39
40/*============================ MACROS ========================================*/
41/*============================ MACROFIED FUNCTIONS ===========================*/
42
43#if VSF_DISTBUS_CFG_DEBUG == ENABLED
44# define __vsf_distbus_trace(...) vsf_trace_debug(__VA_ARGS__)
45# define __vsf_distbus_trace_buffer(__ptr, __size) vsf_trace_buffer(VSF_TRACE_DEBUG, (__ptr), (__size))
46#else
47# define __vsf_distbus_trace(...)
48# define __vsf_distbus_trace_buffer(__ptr, __size)
49#endif
50
51/*============================ TYPES =========================================*/
52
56
57// returns true to hold msg
59 vsf_distbus_service_t *service,
69 protected_member(
70 uint32_t pos;
72 )
73 public_member(
75 )
76};
77
85
87 private_member(
89 )
90 public_member(
91 uint16_t addr_start;
93 )
94};
95
96typedef struct vsf_distbus_bus_op_t {
97 void *transport;
98 bool (*init)(void *transport, void *p, void (*on_inited)(void *p));
99 // returns true if sent
100 bool (*send)(void *transport, uint8_t *buffer, uint_fast32_t size, void *p, void (*on_sent)(void *p));
101 // returns true if received
102 bool (*recv)(void *transport, uint8_t *buffer, uint_fast32_t size, void *p, void (*on_recv)(void *p));
104
105typedef struct vsf_distbus_mem_op_t {
106 // dynamic allocation of message SHOULD be implemented as pool, because maybe
107 // it will be called in interrupt
108 void * (*alloc_msg)(uint_fast32_t size);
109 void (*free_msg)(void *msg);
111
112typedef void (*vsf_distbus_on_error_t)(vsf_distbus_t *distbus);
113typedef struct vsf_distbus_op_t {
118
120 public_member(
121 const vsf_distbus_op_t op;
122 void (*on_connected)(vsf_distbus_t *distbus);
124 private_member(
125 uint32_t mtu;
126 vsf_distbus_msg_t *msg_rx;
127 vsf_distbus_msg_t *msg_tx;
128 vsf_slist_t msg_tx_list;
129 vsf_slist_t service_list;
130 uint16_t cur_addr;
131 )
132};
133
134/*============================ GLOBAL VARIABLES ==============================*/
135/*============================ PROTOTYPES ====================================*/
136
137#ifdef __VSF_DISTBUS_CLASS_INHERIT__
138// size is data size of message(excluding header)
140// if user hold msg by returning turn in vsf_distbus_msghandler_t, user MUST free msg manually
141extern void vsf_distbus_free_msg(vsf_distbus_t *distbus, vsf_distbus_msg_t *msg);
142// after message is sent, it will be freed automatically
144#endif
145
149
150#ifdef __cplusplus
151}
152#endif
153
154#undef __VSF_DISTBUS_CLASS_IMPLEMENT
155#undef __VSF_DISTBUS_CLASS_INHERIT__
156
157#endif // VSF_USE_DISTBUS
158#endif // __VSF_DISTBUS_H__
vsf_err_t
Definition __type.h:42
bool
Definition type.h:60
Definition vsf_distbus.h:68
Definition vsf_distbus.h:86
Definition vsf_distbus.h:119
#define vsf_dcl_class
Definition ooc_class.h:46
#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 int uint_fast32_t
Definition stdint.h:27
unsigned char uint8_t
Definition stdint.h:5
Definition vsf_distbus.h:96
void * transport
Definition vsf_distbus.h:97
bool(* recv)(void *transport, uint8_t *buffer, uint_fast32_t size, void *p, void(*on_recv)(void *p))
Definition vsf_distbus.h:102
bool(* init)(void *transport, void *p, void(*on_inited)(void *p))
Definition vsf_distbus.h:98
bool(* send)(void *transport, uint8_t *buffer, uint_fast32_t size, void *p, void(*on_sent)(void *p))
Definition vsf_distbus.h:100
Definition vsf_distbus.h:105
void(* free_msg)(void *msg)
Definition vsf_distbus.h:109
Definition vsf_distbus.h:61
uint32_t hash_header
Definition vsf_distbus.h:63
uint16_t flag
Definition vsf_distbus.h:66
uint32_t hash_data
Definition vsf_distbus.h:64
uint16_t addr
Definition vsf_distbus.h:65
uint32_t datalen
Definition vsf_distbus.h:62
Definition vsf_distbus.h:113
vsf_distbus_bus_op_t bus
Definition vsf_distbus.h:114
vsf_distbus_on_error_t on_error
Definition vsf_distbus.h:116
vsf_distbus_mem_op_t mem
Definition vsf_distbus.h:115
Definition vsf_distbus.h:78
uint32_t mtu
Definition vsf_distbus.h:79
vsf_distbus_msghandler_t handler
Definition vsf_distbus.h:83
uint8_t flag
Definition vsf_distbus.h:82
uint16_t type
Definition vsf_distbus.h:80
uint8_t addr_range
Definition vsf_distbus.h:81
Definition vsf_list.h:876
Definition vsf_list.h:872
vsf_distbus_msg_t * vsf_distbus_alloc_msg(vsf_distbus_t *distbus, uint_fast32_t size, uint8_t **buf)
Definition vsf_distbus.c:59
void vsf_distbus_free_msg(vsf_distbus_t *distbus, vsf_distbus_msg_t *msg)
Definition vsf_distbus.c:74
void vsf_distbus_send_msg(vsf_distbus_t *distbus, vsf_distbus_service_t *service, vsf_distbus_msg_t *msg)
Definition vsf_distbus.c:114
vsf_err_t vsf_distbus_init(vsf_distbus_t *distbus)
Definition vsf_distbus.c:226
vsf_err_t vsf_distbus_start(vsf_distbus_t *distbus)
Definition vsf_distbus.c:243
void(* vsf_distbus_on_error_t)(vsf_distbus_t *distbus)
Definition vsf_distbus.h:112
bool(* vsf_distbus_msghandler_t)(vsf_distbus_t *bus, vsf_distbus_service_t *service, vsf_distbus_msg_t *msg)
Definition vsf_distbus.h:58
void vsf_distbus_register_service(vsf_distbus_t *distbus, vsf_distbus_service_t *service)
Definition vsf_distbus.c:258
uint32_t size
Definition vsf_memfs.h:50
struct vk_romfs_header_t VSF_CAL_PACKED