static const char _afb_description_UNICENS[] =
	"{\"openapi\":\"3.0.0\",\"$schema\":\"http:iot.bzh/download/openapi/s"
	"chema-3.0/default-schema.json\",\"info\":{\"description\":\"\",\"tit"
	"le\":\"ucs2\",\"version\":\"1.0\",\"x-binding-c-generator\":{\"api\""
	":\"UNICENS\",\"version\":3,\"prefix\":\"ucs2_\",\"postfix\":\"\",\"s"
	"tart\":null,\"onevent\":null,\"preinit\":null,\"init\":\"ucs2_initbi"
	"nding\",\"scope\":\"\",\"private\":false}},\"servers\":[{\"url\":\"w"
	"s://{host}:{port}/api/monitor\",\"description\":\"Unicens2 API.\",\""
	"variables\":{\"host\":{\"default\":\"localhost\"},\"port\":{\"defaul"
	"t\":\"1234\"}},\"x-afb-events\":[{\"$ref\":\"#/components/schemas/af"
	"b-event\"}]}],\"components\":{\"schemas\":{\"afb-reply\":{\"$ref\":\""
	"#/components/schemas/afb-reply-v2\"},\"afb-event\":{\"$ref\":\"#/com"
	"ponents/schemas/afb-event-v2\"},\"afb-reply-v2\":{\"title\":\"Generi"
	"c response.\",\"type\":\"object\",\"required\":[\"jtype\",\"request\""
	"],\"properties\":{\"jtype\":{\"type\":\"string\",\"const\":\"afb-rep"
	"ly\"},\"request\":{\"type\":\"object\",\"required\":[\"status\"],\"p"
	"roperties\":{\"status\":{\"type\":\"string\"},\"info\":{\"type\":\"s"
	"tring\"},\"token\":{\"type\":\"string\"},\"uuid\":{\"type\":\"string"
	"\"},\"reqid\":{\"type\":\"string\"}}},\"response\":{\"type\":\"objec"
	"t\"}}},\"afb-event-v2\":{\"type\":\"object\",\"required\":[\"jtype\""
	",\"event\"],\"properties\":{\"jtype\":{\"type\":\"string\",\"const\""
	":\"afb-event\"},\"event\":{\"type\":\"string\"},\"data\":{\"type\":\""
	"object\"}}}},\"x-permissions\":{\"config\":{\"permission\":\"urn:AGL"
	":permission:UNICENS:public:initialise\"},\"monitor\":{\"permission\""
	":\"urn:AGL:permission:UNICENS:public:monitor\"},\"controller\":{\"pe"
	"rmission\":\"urn:AGL:permission:UNICENS:public:controller\"}},\"resp"
	"onses\":{\"200\":{\"description\":\"A complex object array response\""
	",\"content\":{\"application/json\":{\"schema\":{\"$ref\":\"#/compone"
	"nts/schemas/afb-reply\"}}}}}},\"paths\":{\"/listconfig\":{\"descript"
	"ion\":\"List Config Files\",\"get\":{\"x-permissions\":{\"$ref\":\"#"
	"/components/x-permissions/config\"},\"parameters\":[{\"in\":\"query\""
	",\"name\":\"cfgpath\",\"required\":false,\"schema\":{\"type\":\"stri"
	"ng\"}}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/20"
	"0\"}}}},\"/initialise\":{\"description\":\"configure Unicens2 lib fr"
	"om NetworkConfig.XML.\",\"get\":{\"x-permissions\":{\"$ref\":\"#/com"
	"ponents/x-permissions/config\"},\"parameters\":[{\"in\":\"query\",\""
	"name\":\"filename\",\"required\":true,\"schema\":{\"type\":\"string\""
	"}}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\"}"
	"}}},\"/subscribe\":{\"description\":\"Subscribe to network events.\""
	",\"get\":{\"x-permissions\":{\"$ref\":\"#/components/x-permissions/m"
	"onitor\"},\"responses\":{\"200\":{\"$ref\":\"#/components/responses/"
	"200\"}}}},\"/subscriberx\":{\"description\":\"Subscribe to Rx contro"
	"l message events.\",\"get\":{\"x-permissions\":{\"$ref\":\"#/compone"
	"nts/x-permissions/monitor\"},\"responses\":{\"200\":{\"$ref\":\"#/co"
	"mponents/responses/200\"}}}},\"/writei2c\":{\"description\":\"Writes"
	" I2C command to remote node.\",\"get\":{\"x-permissions\":{\"$ref\":"
	"\"#/components/x-permissions/monitor\"},\"parameters\":[{\"in\":\"qu"
	"ery\",\"name\":\"node\",\"required\":true,\"schema\":{\"type\":\"int"
	"eger\",\"format\":\"int32\"}},{\"in\":\"query\",\"name\":\"data\",\""
	"required\":true,\"schema\":{\"type\":\"array\",\"format\":\"int32\"}"
	",\"style\":\"simple\"}],\"responses\":{\"200\":{\"$ref\":\"#/compone"
	"nts/responses/200\"}}}},\"/sendmessage\":{\"description\":\"Transmit"
	"s a control message to a node.\",\"get\":{\"x-permissions\":{\"$ref\""
	":\"#/components/x-permissions/controller\"},\"parameters\":[{\"in\":"
	"\"query\",\"name\":\"node\",\"required\":true,\"schema\":{\"type\":\""
	"integer\",\"format\":\"int32\"}},{\"in\":\"query\",\"name\":\"msgid\""
	",\"required\":true,\"schema\":{\"type\":\"integer\",\"format\":\"int"
	"32\"}},{\"in\":\"query\",\"name\":\"data\",\"required\":false,\"sche"
	"ma\":{\"type\":\"string\",\"format\":\"byte\"},\"style\":\"simple\"}"
	"],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\"}}}"
	"}}}"
;

static const struct afb_auth _afb_auths_UNICENS[] = {
	{ .type = afb_auth_Permission, .text = "urn:AGL:permission:UNICENS:public:initialise" },
	{ .type = afb_auth_Permission, .text = "urn:AGL:permission:UNICENS:public:monitor" },
	{ .type = afb_auth_Permission, .text = "urn:AGL:permission:UNICENS:public:controller" }
};

void ucs2_listconfig(afb_req_t req);
void ucs2_initialise(afb_req_t req);
void ucs2_subscribe(afb_req_t req);
void ucs2_subscriberx(afb_req_t req);
void ucs2_writei2c(afb_req_t req);
void ucs2_sendmessage(afb_req_t req);

static const struct afb_verb_v3 _afb_verbs_UNICENS[] = {
    {
        .verb = "listconfig",
        .callback = ucs2_listconfig,
        .auth = &_afb_auths_UNICENS[0],
        .info = "List Config Files",
        .vcbdata = NULL,
        .session = AFB_SESSION_NONE,
        .glob = 0
    },
    {
        .verb = "initialise",
        .callback = ucs2_initialise,
        .auth = &_afb_auths_UNICENS[0],
        .info = "configure Unicens2 lib from NetworkConfig.XML.",
        .vcbdata = NULL,
        .session = AFB_SESSION_NONE,
        .glob = 0
    },
    {
        .verb = "subscribe",
        .callback = ucs2_subscribe,
        .auth = &_afb_auths_UNICENS[1],
        .info = "Subscribe to network events.",
        .vcbdata = NULL,
        .session = AFB_SESSION_NONE,
        .glob = 0
    },
    {
        .verb = "subscriberx",
        .callback = ucs2_subscriberx,
        .auth = &_afb_auths_UNICENS[1],
        .info = "Subscribe to Rx control message events.",
        .vcbdata = NULL,
        .session = AFB_SESSION_NONE,
        .glob = 0
    },
    {
        .verb = "writei2c",
        .callback = ucs2_writei2c,
        .auth = &_afb_auths_UNICENS[1],
        .info = "Writes I2C command to remote node.",
        .vcbdata = NULL,
        .session = AFB_SESSION_NONE,
        .glob = 0
    },
    {
        .verb = "sendmessage",
        .callback = ucs2_sendmessage,
        .auth = &_afb_auths_UNICENS[2],
        .info = "Transmits a control message to a node.",
        .vcbdata = NULL,
        .session = AFB_SESSION_NONE,
        .glob = 0
    },
    {
        .verb = NULL,
        .callback = NULL,
        .auth = NULL,
        .info = NULL,
        .vcbdata = NULL,
        .session = 0,
        .glob = 0
    }
};

int ucs2_initbinding(afb_api_t api);

const struct afb_binding_v3 afbBindingV3 = {
    .api = "UNICENS",
    .specification = _afb_description_UNICENS,
    .info = "",
    .verbs = _afb_verbs_UNICENS,
    .preinit = NULL,
    .init = ucs2_initbinding,
    .onevent = NULL,
    .userdata = NULL,
    .provide_class = NULL,
    .require_class = NULL,
    .require_api = NULL,
    .noconcurrency = 0
};