aboutsummaryrefslogtreecommitdiffstats
path: root/ucs2-afb
diff options
context:
space:
mode:
authorTobias Jahnke <tjahnk@users.noreply.github.com>2017-08-03 16:48:18 +0200
committerTobias Jahnke <tjahnk@users.noreply.github.com>2017-08-03 16:48:18 +0200
commite9aa8f0519f75d8dc1d698e11596c4720cd977e5 (patch)
tree7e48967a3b2587cbb898173ba4da49fc0cdb6a50 /ucs2-afb
parent070569777b69eb2d36c4c8a3a4b10ce498f559ff (diff)
adds node-availibility event and subscribe function
Diffstat (limited to 'ucs2-afb')
-rw-r--r--ucs2-afb/ucs_apidef.h46
-rw-r--r--ucs2-afb/ucs_apidef.json42
-rw-r--r--ucs2-afb/ucs_binding.c61
-rw-r--r--ucs2-afb/ucs_binding.h4
4 files changed, 103 insertions, 50 deletions
diff --git a/ucs2-afb/ucs_apidef.h b/ucs2-afb/ucs_apidef.h
index d32a6dc..1c27ab7 100644
--- a/ucs2-afb/ucs_apidef.h
+++ b/ucs2-afb/ucs_apidef.h
@@ -33,21 +33,21 @@ static const char _afb_description_v2_UNICENS[] =
"et\":{\"x-permissions\":{\"$ref\":\"#/components/x-permissions/config\"}"
",\"parameters\":[{\"in\":\"query\",\"name\":\"filename\",\"required\":tr"
"ue,\"schema\":{\"type\":\"string\"}}],\"responses\":{\"200\":{\"$ref\":\""
- "#/components/responses/200\"}}}},\"/volume\":{\"description\":\"Set Mast"
- "er Volume.\",\"get\":{\"x-permissions\":{\"$ref\":\"#/components/x-permi"
- "ssions/monitor\"},\"parameters\":[{\"in\":\"query\",\"name\":\"value\",\""
- "required\":true,\"schema\":{\"type\":\"integer\"}}],\"responses\":{\"200"
- "\":{\"$ref\":\"#/components/responses/200\"}}}},\"/monitor\":{\"descript"
- "ion\":\"Subscribe to Unicens Event.\",\"get\":{\"x-permissions\":{\"$ref"
- "\":\"#/components/x-permissions/monitor\"},\"responses\":{\"200\":{\"$re"
- "f\":\"#/components/responses/200\"}}}},\"/writei2c\":{\"description\":\""
- "Writes I2C command to remote node.\",\"get\":{\"x-permissions\":{\"$ref\""
- ":\"#/components/x-permissions/monitor\"},\"parameters\":[{\"in\":\"query"
- "\",\"name\":\"node\",\"required\":true,\"schema\":{\"type\":\"integer\","
- "\"format\":\"int32\"}},{\"in\":\"query\",\"name\":\"data\",\"required\":"
- "true,\"schema\":{\"type\":\"array\",\"format\":\"int32\"},\"style\":\"si"
- "mple\"}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\""
- "}}}}}}"
+ "#/components/responses/200\"}}}},\"/subscribe\":{\"description\":\"Subsc"
+ "ribe to UNICENS Events.\",\"get\":{\"x-permissions\":{\"$ref\":\"#/compo"
+ "nents/x-permissions/monitor\"},\"responses\":{\"200\":{\"$ref\":\"#/comp"
+ "onents/responses/200\"}}}},\"/writei2c\":{\"description\":\"Writes I2C c"
+ "ommand to remote node.\",\"get\":{\"x-permissions\":{\"$ref\":\"#/compon"
+ "ents/x-permissions/monitor\"},\"parameters\":[{\"in\":\"query\",\"name\""
+ ":\"node\",\"required\":true,\"schema\":{\"type\":\"integer\",\"format\":"
+ "\"int32\"}},{\"in\":\"query\",\"name\":\"data\",\"required\":true,\"sche"
+ "ma\":{\"type\":\"array\",\"format\":\"int32\"},\"style\":\"simple\"}],\""
+ "responses\":{\"200\":{\"$ref\":\"#/components/responses/200\"}}}},\"/vol"
+ "ume\":{\"description\":\"Set Master Volume (DEPRECATED).\",\"get\":{\"x-"
+ "permissions\":{\"$ref\":\"#/components/x-permissions/monitor\"},\"parame"
+ "ters\":[{\"in\":\"query\",\"name\":\"value\",\"required\":true,\"schema\""
+ ":{\"type\":\"integer\"}}],\"responses\":{\"200\":{\"$ref\":\"#/component"
+ "s/responses/200\"}}}}}}"
;
static const struct afb_auth _afb_auths_v2_UNICENS[] = {
@@ -57,9 +57,9 @@ static const struct afb_auth _afb_auths_v2_UNICENS[] = {
void ucs2_listconfig(struct afb_req req);
void ucs2_initialise(struct afb_req req);
- void ucs2_volume(struct afb_req req);
- void ucs2_monitor(struct afb_req req);
+ void ucs2_subscribe(struct afb_req req);
void ucs2_writei2c(struct afb_req req);
+ void ucs2_volume(struct afb_req req);
static const struct afb_verb_v2 _afb_verbs_v2_UNICENS[] = {
{
@@ -77,22 +77,22 @@ static const struct afb_verb_v2 _afb_verbs_v2_UNICENS[] = {
.session = AFB_SESSION_NONE_V2
},
{
- .verb = "volume",
- .callback = ucs2_volume,
+ .verb = "subscribe",
+ .callback = ucs2_subscribe,
.auth = &_afb_auths_v2_UNICENS[1],
.info = NULL,
.session = AFB_SESSION_NONE_V2
},
{
- .verb = "monitor",
- .callback = ucs2_monitor,
+ .verb = "writei2c",
+ .callback = ucs2_writei2c,
.auth = &_afb_auths_v2_UNICENS[1],
.info = NULL,
.session = AFB_SESSION_NONE_V2
},
{
- .verb = "writei2c",
- .callback = ucs2_writei2c,
+ .verb = "volume",
+ .callback = ucs2_volume,
.auth = &_afb_auths_v2_UNICENS[1],
.info = NULL,
.session = AFB_SESSION_NONE_V2
diff --git a/ucs2-afb/ucs_apidef.json b/ucs2-afb/ucs_apidef.json
index 24474e6..febd4c8 100644
--- a/ucs2-afb/ucs_apidef.json
+++ b/ucs2-afb/ucs_apidef.json
@@ -140,27 +140,8 @@
}
}
},
- "/volume": {
- "description": "Set Master Volume.",
- "get": {
- "x-permissions": {
- "$ref": "#/components/x-permissions/monitor"
- },
- "parameters": [
- {
- "in": "query",
- "name": "value",
- "required": true,
- "schema": { "type": "integer" }
- }
- ],
- "responses": {
- "200": {"$ref": "#/components/responses/200"}
- }
- }
- },
- "/monitor": {
- "description": "Subscribe to Unicens Event.",
+ "/subscribe": {
+ "description": "Subscribe to UNICENS Events.",
"get": {
"x-permissions": {
"$ref": "#/components/x-permissions/monitor"
@@ -201,6 +182,25 @@
"200": {"$ref": "#/components/responses/200"}
}
}
+ },
+ "/volume": {
+ "description": "Set Master Volume (DEPRECATED).",
+ "get": {
+ "x-permissions": {
+ "$ref": "#/components/x-permissions/monitor"
+ },
+ "parameters": [
+ {
+ "in": "query",
+ "name": "value",
+ "required": true,
+ "schema": { "type": "integer" }
+ }
+ ],
+ "responses": {
+ "200": {"$ref": "#/components/responses/200"}
+ }
+ }
}
}
}
diff --git a/ucs2-afb/ucs_binding.c b/ucs2-afb/ucs_binding.c
index fe6e033..8a1174c 100644
--- a/ucs2-afb/ucs_binding.c
+++ b/ucs2-afb/ucs_binding.c
@@ -62,7 +62,13 @@ typedef struct {
UCSI_channelsT *channels;
} ucsContextT;
+typedef struct {
+ struct afb_event node_event;
+
+} EventData_t;
+
static ucsContextT *ucsContextS;
+static EventData_t *eventData = NULL;
PUBLIC void UcsXml_CB_OnError(const char format[], uint16_t vargsCnt, ...) {
/*AFB_DEBUG (afbIface, format, args); */
@@ -200,6 +206,31 @@ void UCSI_CB_OnGpioStateChange(void *pTag, uint16_t nodeAddress, uint8_t gpioPin
{
}
+PUBLIC void UCSI_CB_OnMgrReport(void *pTag, Ucs_MgrReport_t code, uint16_t nodeAddress, Ucs_Rm_Node_t *pNode){
+
+ bool available;
+
+ if (code == UCS_MGR_REP_AVAILABLE) {
+ available = true;
+ }
+ else if (code == UCS_MGR_REP_NOT_AVAILABLE) {
+ available = false;
+ }
+ else {
+ /*untracked event - just exit*/
+ return;
+ }
+
+ if (eventData) {
+
+ json_object *j_event_info = json_object_new_object();
+ json_object_object_add(j_event_info, "node", json_object_new_int(nodeAddress));
+ json_object_object_add(j_event_info, "available", json_object_new_boolean(available));
+
+ afb_event_push(eventData->node_event, j_event_info);
+ }
+}
+
bool Cdev_Init(CdevData_t *d, const char *fileName, bool read, bool write)
{
if (NULL == d || NULL == fileName) goto OnErrorExit;
@@ -531,12 +562,34 @@ PUBLIC void ucs2_listconfig (struct afb_req request) {
return;
}
-PUBLIC void ucs2_monitor (struct afb_req request) {
+PUBLIC void ucs2_subscribe (struct afb_req request) {
- afb_req_success(request,NULL,"UNICENS-to_be_done");
+ if (!eventData) {
+
+ eventData = malloc(sizeof(EventData_t));
+ if (eventData) {
+ eventData->node_event = afb_daemon_make_event ("node-availibility");
+ }
+
+ if (!eventData || !afb_event_is_valid(eventData->node_event)) {
+ afb_req_fail_f (request, "create-event", "Cannot create or register event");
+ goto OnExitError;
+ }
+ }
+
+ if (afb_req_subscribe(request, eventData->node_event) != 0) {
+
+ afb_req_fail_f (request, "subscribe-event", "Cannot subscribe to event");
+ goto OnExitError;
+ }
+
+ afb_req_success(request,NULL,"event subscription successful");
+
+OnExitError:
+ return;
}
-STATIC void ucs2_writei2c_CB(void *result_ptr, void *request_ptr) {
+STATIC void ucs2_writei2c_CB (void *result_ptr, void *request_ptr) {
if (request_ptr){
afb_req *req = (afb_req *)request_ptr;
@@ -560,7 +613,7 @@ STATIC void ucs2_writei2c_CB(void *result_ptr, void *request_ptr) {
}
}
-PUBLIC void ucs2_writei2c(struct afb_req request) {
+PUBLIC void ucs2_writei2c (struct afb_req request) {
struct json_object *j_obj;
static uint8_t i2c_data[I2C_MAX_DATA_SZ];
diff --git a/ucs2-afb/ucs_binding.h b/ucs2-afb/ucs_binding.h
index d77a2f8..24c0b4e 100644
--- a/ucs2-afb/ucs_binding.h
+++ b/ucs2-afb/ucs_binding.h
@@ -44,9 +44,9 @@ extern struct afb_service afbSrv;
// API verbs prototype
PUBLIC void ucs2_configure (struct afb_req request);
-PUBLIC void ucs2_volume (struct afb_req request);
-PUBLIC void ucs2_monitor (struct afb_req request);
+PUBLIC void ucs2_subscribe (struct afb_req request);
PUBLIC void ucs2_writei2c (struct afb_req request);
+PUBLIC void ucs2_volume (struct afb_req request);
#endif /* UCS2BINDING_H */