librpc
bus.h
Go to the documentation of this file.
1 /*
2  * Copyright 2015-2017 Two Pore Guys, Inc.
3  * All rights reserved
4  *
5  * Redistribution and use in source and binary forms, with or without
6  * modification, are permitted providing that the following conditions
7  * are met:
8  * 1. Redistributions of source code must retain the above copyright
9  * notice, this list of conditions and the following disclaimer.
10  * 2. Redistributions in binary form must reproduce the above copyright
11  * notice, this list of conditions and the following disclaimer in the
12  * documentation and/or other materials provided with the distribution.
13  *
14  * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR
15  * IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED
16  * WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17  * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR ANY
18  * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19  * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20  * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21  * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT,
22  * STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING
23  * IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
24  * POSSIBILITY OF SUCH DAMAGE.
25  */
26 
27 #ifndef LIBRPC_BUS_H
28 #define LIBRPC_BUS_H
29 
30 #include <stdint.h>
31 
38 #ifdef __cplusplus
39 extern "C" {
40 #endif
41 
45 typedef enum {
49 
57 {
58  const char *_Nullable rbn_name;
59  const char *_Nullable rbn_description;
60  const char *_Nullable rbn_serial;
61  uint32_t rbn_address;
62 };
63 
67 typedef void (^rpc_bus_event_handler_t)(rpc_bus_event_t event,
68  struct rpc_bus_node *_Nonnull node);
69 
73 #define RPC_BUS_EVENT_HANDLER(_fn, _arg) \
74  ^(rpc_bus_event_t _event, struct rpc_bus_node *_node) { \
75  _fn(_arg, _event, _node); \
76  }
77 
83 int rpc_bus_open(void);
84 
90 int rpc_bus_close(void);
91 
98 int rpc_bus_ping(const char *_Nonnull serial);
99 
106 int rpc_bus_enumerate(struct rpc_bus_node *_Nullable *_Nonnull result);
107 
113 void rpc_bus_free_result(struct rpc_bus_node *_Nonnull result);
114 
122 
128 
129 
130 #ifdef __cplusplus
131 }
132 #endif
133 
134 #endif /* LIBRPC_BUS_H */
rpc_bus_event_t
Definition: bus.h:45
int rpc_bus_enumerate(struct rpc_bus_node *_Nullable *_Nonnull result)
void rpc_bus_register_event_handler(_Nonnull rpc_bus_event_handler_t handler)
int rpc_bus_open(void)
const char *_Nullable rbn_description
Definition: bus.h:59
const char *_Nullable rbn_name
Definition: bus.h:58
void rpc_bus_unregister_event_handler(void)
const char *_Nullable rbn_serial
Definition: bus.h:60
int rpc_bus_close(void)
void rpc_bus_free_result(struct rpc_bus_node *_Nonnull result)
uint32_t rbn_address
Definition: bus.h:61
int rpc_bus_ping(const char *_Nonnull serial)
void(^ rpc_bus_event_handler_t)(rpc_bus_event_t event, struct rpc_bus_node *_Nonnull node)
Definition: bus.h:67