11#if DETWS_ENABLE_SOUTHBOUND
15#ifndef DETWS_SOUTHBOUND_MAX_DRIVERS
16#define DETWS_SOUTHBOUND_MAX_DRIVERS 8
25 const SouthboundDriver *drivers[DETWS_SOUTHBOUND_MAX_DRIVERS] = {};
31int detws_southbound_register(
const SouthboundDriver *drv)
33 if (!drv || !drv->name)
34 return Sb::SB_ERR_ARG;
35 if (detws_southbound_find(drv->name))
36 return Sb::SB_ERR_DUP;
37 if (s_sb.count >= DETWS_SOUTHBOUND_MAX_DRIVERS)
38 return Sb::SB_ERR_FULL;
39 s_sb.drivers[s_sb.count++] = drv;
43void detws_southbound_clear(
void)
45 for (
size_t i = 0; i < DETWS_SOUTHBOUND_MAX_DRIVERS; i++)
46 s_sb.drivers[i] =
nullptr;
50size_t detws_southbound_count(
void)
55const SouthboundDriver *detws_southbound_find(
const char *name)
59 for (
size_t i = 0; i < s_sb.count; i++)
60 if (s_sb.drivers[i] && s_sb.drivers[i]->name && strcmp(s_sb.drivers[i]->name, name) == 0)
61 return s_sb.drivers[i];
65int detws_southbound_read(
const char *name, uint32_t point, int32_t *value_out)
68 return Sb::SB_ERR_ARG;
69 const SouthboundDriver *d = detws_southbound_find(name);
71 return Sb::SB_ERR_NOT_FOUND;
73 return Sb::SB_ERR_UNSUPPORTED;
74 return d->read(d->ctx, point, value_out);
77int detws_southbound_write(
const char *name, uint32_t point, int32_t value)
79 const SouthboundDriver *d = detws_southbound_find(name);
81 return Sb::SB_ERR_NOT_FOUND;
83 return Sb::SB_ERR_UNSUPPORTED;
84 return d->write(d->ctx, point, value);
87int detws_southbound_read_block(
const char *name, uint32_t first, int32_t *out,
size_t n)
90 return Sb::SB_ERR_ARG;
91 const SouthboundDriver *d = detws_southbound_find(name);
93 return Sb::SB_ERR_NOT_FOUND;
95 return Sb::SB_ERR_UNSUPPORTED;
96 return d->read_block(d->ctx, first, out, n);
99int detws_southbound_write_block(
const char *name, uint32_t first,
const int32_t *in,
size_t n)
102 return Sb::SB_ERR_ARG;
103 const SouthboundDriver *d = detws_southbound_find(name);
105 return Sb::SB_ERR_NOT_FOUND;
107 return Sb::SB_ERR_UNSUPPORTED;
108 return d->write_block(d->ctx, first, in, n);
Southbound protocol-driver framework (DETWS_ENABLE_SOUTHBOUND).