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 ======================================*/
22
24
25#if VSF_USE_DISTBUS == ENABLED
26
28
29#if defined(__VSF_DISTBUS_CLASS_IMPLEMENT)
30# define __VSF_CLASS_IMPLEMENT__
31#elif defined(__VSF_DISTBUS_CLASS_INHERIT__)
32# define __VSF_CLASS_INHERIT__
33#endif
34
35#include "utilities/ooc_class.h"
36
37#ifdef __cplusplus
38extern "C" {
39#endif
40
41/*============================ MACROS ========================================*/
42/*============================ MACROFIED FUNCTIONS ===========================*/
43
44#if VSF_DISTBUS_CFG_DEBUG == ENABLED
45# define __vsf_distbus_trace(...) vsf_trace_debug(__VA_ARGS__)
46# define __vsf_distbus_trace_buffer(__ptr, __size) vsf_trace_buffer(VSF_TRACE_DEBUG, (__ptr), (__size))
47#else
48# define __vsf_distbus_trace(...)
49# define __vsf_distbus_trace_buffer(__ptr, __size)
50#endif
51
52/*============================ TYPES =========================================*/
53
57
58// returns true to hold msg
60 vsf_distbus_service_t *service,
70 protected_member(
71 uint32_t pos;
73 )
74 public_member(
76 )
77};
78
86
88 private_member(
90 )
91 public_member(
92 uint16_t addr_start;
94 )
95};
96
97typedef struct vsf_distbus_bus_op_t {
98 void *transport;
99 bool (*init)(void *transport, void *p, void (*on_inited)(void *p));
100 // returns true if sent
101 bool (*send)(void *transport, uint8_t *buffer, uint_fast32_t size, void *p, void (*on_sent)(void *p));
102 // returns true if received
103 bool (*recv)(void *transport, uint8_t *buffer, uint_fast32_t size, void *p, void (*on_recv)(void *p));
105
106typedef struct vsf_distbus_mem_op_t {
107 // dynamic allocation of message SHOULD be implemented as pool, because maybe
108 // it will be called in interrupt
109 void * (*alloc_msg)(uint_fast32_t size);
110 void (*free_msg)(void *msg);
112
113typedef void (*vsf_distbus_on_error_t)(vsf_distbus_t *distbus);
114typedef struct vsf_distbus_op_t {
119
121 public_member(
122 const vsf_distbus_op_t op;
123 void (*on_connected)(vsf_distbus_t *distbus);
125 private_member(
126 uint32_t mtu;
127 vsf_distbus_msg_t *msg_rx;
128 vsf_distbus_msg_t *msg_tx;
129 vsf_slist_t msg_tx_list;
130 vsf_slist_t service_list;
131 uint16_t cur_addr;
132 )
133};
134
135/*============================ GLOBAL VARIABLES ==============================*/
136/*============================ PROTOTYPES ====================================*/
137
138#ifdef __VSF_DISTBUS_CLASS_INHERIT__
139// size is data size of message(excluding header)
141// if user hold msg by returning turn in vsf_distbus_msghandler_t, user MUST free msg manually
142extern void vsf_distbus_free_msg(vsf_distbus_t *distbus, vsf_distbus_msg_t *msg);
143// after message is sent, it will be freed automatically
145#endif
146
150
151#ifdef __cplusplus
152}
153#endif
154
155#undef __VSF_DISTBUS_CLASS_IMPLEMENT
156#undef __VSF_DISTBUS_CLASS_INHERIT__
157
158/*============================ INCLUDES ======================================*/
159
161
162#endif // VSF_USE_DISTBUS
163#endif // __VSF_DISTBUS_H__
vsf_err_t
Definition __type.h:42
bool
Definition type.h:60
Definition vsf_distbus.h:69
Definition vsf_distbus.h:87
Definition vsf_distbus.h:120
#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:97
void * transport
Definition vsf_distbus.h:98
bool(* recv)(void *transport, uint8_t *buffer, uint_fast32_t size, void *p, void(*on_recv)(void *p))
Definition vsf_distbus.h:103
bool(* init)(void *transport, void *p, void(*on_inited)(void *p))
Definition vsf_distbus.h:99
bool(* send)(void *transport, uint8_t *buffer, uint_fast32_t size, void *p, void(*on_sent)(void *p))
Definition vsf_distbus.h:101
Definition vsf_distbus.h:106
void(* free_msg)(void *msg)
Definition vsf_distbus.h:110
Definition vsf_distbus.h:62
uint32_t hash_header
Definition vsf_distbus.h:64
uint16_t flag
Definition vsf_distbus.h:67
uint32_t hash_data
Definition vsf_distbus.h:65
uint16_t addr
Definition vsf_distbus.h:66
uint32_t datalen
Definition vsf_distbus.h:63
Definition vsf_distbus.h:114
vsf_distbus_bus_op_t bus
Definition vsf_distbus.h:115
vsf_distbus_on_error_t on_error
Definition vsf_distbus.h:117
vsf_distbus_mem_op_t mem
Definition vsf_distbus.h:116
Definition vsf_distbus.h:79
uint32_t mtu
Definition vsf_distbus.h:80
vsf_distbus_msghandler_t handler
Definition vsf_distbus.h:84
uint8_t flag
Definition vsf_distbus.h:83
uint16_t type
Definition vsf_distbus.h:81
uint8_t addr_range
Definition vsf_distbus.h:82
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:113
bool(* vsf_distbus_msghandler_t)(vsf_distbus_t *bus, vsf_distbus_service_t *service, vsf_distbus_msg_t *msg)
Definition vsf_distbus.h:59
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
Generated from commit: vsfteam/vsf@74aa6ce