-
Notifications
You must be signed in to change notification settings - Fork 2
/
osdp.hpp
155 lines (120 loc) · 2.44 KB
/
osdp.hpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
/*
* Copyright (c) 2021-2021 Siddharth Chandrasekaran <[email protected]>
*
* SPDX-License-Identifier: Apache-2.0
*/
#ifndef LIBOSDP_OSDP_HPP_
#define LIBOSDP_OSDP_HPP_
#include <osdp.h>
#include <tinyaes.h>
/**
* @file: LibOSDP classical wrapper. See osdp.h for documentation.
*/
namespace OSDP {
class Common {
public:
Common() : _ctx(nullptr) {}
void logger_init(const char *name, int log_level,
osdp_log_puts_fn_t puts_fn)
{
osdp_logger_init(name, log_level, puts_fn);
}
const char *get_version()
{
return osdp_get_version();
}
const char *get_source_info()
{
return osdp_get_source_info();
}
void get_status_mask(uint8_t *bitmask)
{
osdp_get_status_mask(_ctx, bitmask);
}
void get_sc_status_mask(uint8_t *bitmask)
{
osdp_get_sc_status_mask(_ctx, bitmask);
}
int file_register_ops(int pd, struct osdp_file_ops *ops)
{
return osdp_file_register_ops(_ctx, pd, ops);
}
int file_tx_get_status(int pd, int *size, int *offset)
{
return osdp_get_file_tx_status(_ctx, pd, size, offset);
}
protected:
osdp_t *_ctx;
};
class ControlPanel : public Common {
public:
ControlPanel() {}
~ControlPanel()
{
if (_ctx) {
osdp_cp_teardown(_ctx);
}
}
bool setup(int num_pd, osdp_pd_info_t *info)
{
_ctx = osdp_cp_setup(num_pd, info);
return _ctx != nullptr;
}
void refresh()
{
osdp_cp_refresh(_ctx);
}
int send_command(int pd, struct osdp_cmd *cmd)
{
return osdp_cp_send_command(_ctx, pd, cmd);
}
void set_event_callback(cp_event_callback_t cb, void *arg)
{
osdp_cp_set_event_callback(_ctx, cb, arg);
}
int get_pd_id(int pd, struct osdp_pd_id *id)
{
return osdp_cp_get_pd_id(_ctx, pd, id);
}
int get_capability(int pd, struct osdp_pd_cap *cap)
{
return osdp_cp_get_capability(_ctx, pd, cap);
}
};
class PeripheralDevice : public Common {
public:
PeripheralDevice() {}
~PeripheralDevice()
{
if (_ctx) {
osdp_pd_teardown(_ctx);
}
}
bool setup(osdp_pd_info_t *info)
{
_ctx = osdp_pd_setup(info);
return _ctx != nullptr;
}
void refresh()
{
osdp_pd_refresh(_ctx);
}
void set_command_callback(pd_command_callback_t cb, void* args)
{
osdp_pd_set_command_callback(_ctx, cb, args);
}
int notify_event(struct osdp_event *event)
{
return osdp_pd_notify_event(_ctx, event);
}
int flush_events()
{
return osdp_pd_flush_events(_ctx);
}
void debug (uint32_t flags)
{
osdp_pd_set_debugflags (_ctx, flags);
}
};
}; /* namespace OSDP */
#endif // LIBOSDP_OSDP_HPP_