added DI unit

This commit is contained in:
2017-12-28 21:01:13 +01:00
parent 37f712f054
commit 8768dc31ab
12 changed files with 313 additions and 29 deletions
+10 -25
View File
@@ -23,6 +23,9 @@ static void DO_loadBinary(Unit *unit, PayloadParser *pp)
{
struct priv *priv = unit->data;
uint8_t version = pp_u8(pp);
(void)version;
priv->port_name = pp_char(pp);
priv->pins = pp_u16(pp);
priv->initial = pp_u16(pp);
@@ -34,6 +37,8 @@ static void DO_writeBinary(Unit *unit, PayloadBuilder *pb)
{
struct priv *priv = unit->data;
pb_u8(pb, 0); // version
pb_char(pb, priv->port_name);
pb_u16(pb, priv->pins);
pb_u16(pb, priv->initial);
@@ -71,19 +76,18 @@ static bool DO_loadIni(Unit *unit, const char *key, const char *value)
static void DO_writeIni(Unit *unit, IniWriter *iw)
{
struct priv *priv = unit->data;
char buf[64];
iw_comment(iw, "Port name");
iw_entry(iw, "port", "%c", priv->port_name);
iw_comment(iw, "Pins (comma separated, supports ranges)");
iw_entry(iw, "pins", "%s", str_pinmask(priv->pins, buf));
iw_entry(iw, "pins", "%s", str_pinmask(priv->pins, unit_tmp64));
iw_comment(iw, "Initially high pins");
iw_entry(iw, "initial", "%s", str_pinmask(priv->initial, buf));
iw_entry(iw, "initial", "%s", str_pinmask(priv->initial, unit_tmp64));
iw_comment(iw, "Open-drain pins");
iw_entry(iw, "opendrain", "%s", str_pinmask(priv->open_drain, buf));
iw_entry(iw, "opendrain", "%s", str_pinmask(priv->open_drain, unit_tmp64));
}
// ------------------------------------------------------------------------
@@ -120,28 +124,9 @@ static bool DO_init(Unit *unit)
return false;
}
dbg("Claim rsc");
// Claim all needed pins
for (int i = 0; i < 16; i++) {
if (priv->pins & (1 << i)) {
Resource rsc = pin2resource(priv->port_name, (uint8_t) i, &suc);
if (!suc) {
unit->status = E_BAD_CONFIG;
rsc_teardown(unit);
return false;
}
suc = rsc_claim(unit, rsc);
if (!suc) {
rsc_teardown(unit);
return false;
}
}
}
dbg("Init pins");
suc = rsc_claim_gpios(unit, priv->port_name, priv->pins);
CHECK_SUC();
uint16_t mask = 1;
for (int i = 0; i < 16; i++, mask <<= 1) {