#ifndef LIBOSDP_OSDP_HPP_
#define LIBOSDP_OSDP_HPP_
#include <osdp.h>
namespace OSDP {
class OSDP_EXPORT 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 OSDP_EXPORT 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;
}
bool setup()
{
return setup(0, nullptr);
}
int add_pd(int num_pd, osdp_pd_info_t *info)
{
return osdp_cp_add_pd(_ctx, num_pd, info);
}
void refresh()
{
osdp_cp_refresh(_ctx);
}
[[deprecated]]
int send_command(int pd, struct osdp_cmd *cmd)
{
return osdp_cp_submit_command(_ctx, pd, cmd);
}
int submit_command(int pd, struct osdp_cmd *cmd)
{
return osdp_cp_submit_command(_ctx, pd, cmd);
}
void set_event_callback(cp_event_callback_t cb, void *arg)
{
osdp_cp_set_event_callback(_ctx, cb, arg);
}
#ifdef OPT_OSDP_APP_OWNED_QUEUE_DATA
void set_command_completion_callback(cp_command_completion_callback_t cb,
void *arg)
{
osdp_cp_set_command_completion_callback(_ctx, cb, arg);
}
#endif
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 OSDP_EXPORT 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);
}
#ifdef OPT_OSDP_APP_OWNED_QUEUE_DATA
void set_event_completion_callback(pd_event_completion_callback_t cb,
void *arg)
{
osdp_pd_set_event_completion_callback(_ctx, cb, arg);
}
#endif
[[deprecated]]
int notify_event(struct osdp_event *event)
{
return osdp_pd_submit_event(_ctx, event);
}
int submit_event(struct osdp_event *event)
{
return osdp_pd_submit_event(_ctx, event);
}
int flush_events()
{
return osdp_pd_flush_events(_ctx);
}
};
};
#endif