diff options
author | Tobias Jahnke <tjahnk@users.noreply.github.com> | 2017-07-31 11:46:47 +0200 |
---|---|---|
committer | Fulup Ar Foll <fulup@iot.bzh> | 2017-08-01 11:47:14 +0200 |
commit | 05e055b854e46a7bbd60b4c249ff267a000b9258 (patch) | |
tree | 62c2a055244f5692818da79dd1d0775837c9fc61 /ucs2-afb | |
parent | 41d1d8957f7bc7154e0abb2c276ee4ca52409a56 (diff) |
adds experimental i2cwrite command
Diffstat (limited to 'ucs2-afb')
-rw-r--r-- | ucs2-afb/ucs_apidef.h | 15 | ||||
-rw-r--r-- | ucs2-afb/ucs_apidef.json | 19 | ||||
-rw-r--r-- | ucs2-afb/ucs_binding.c | 59 | ||||
-rw-r--r-- | ucs2-afb/ucs_binding.h | 2 |
4 files changed, 93 insertions, 2 deletions
diff --git a/ucs2-afb/ucs_apidef.h b/ucs2-afb/ucs_apidef.h index c23f066..140b96a 100644 --- a/ucs2-afb/ucs_apidef.h +++ b/ucs2-afb/ucs_apidef.h @@ -40,7 +40,12 @@ static const char _afb_description_v2_UNICENS[] = "\":{\"$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\"}}}}}}" + "f\":\"#/components/responses/200\"}}}},\"/write_i2c\":{\"description\":\"" + "Writes I2C command to remote node.\",\"get\":{\"x-permissions\":{\"$ref\"" + ":\"#/components/x-permissions/monitor\"},\"parameters\":[{\"in\":\"query" + "\",\"name\":\"command\",\"required\":true,\"schema\":{\"node\":\"integer" + "\"}}],\"responses\":{\"200\":{\"$ref\":\"#/components/responses/200\"}}}" + "}}}" ; static const struct afb_auth _afb_auths_v2_UNICENS[] = { @@ -52,6 +57,7 @@ static const struct afb_auth _afb_auths_v2_UNICENS[] = { void ucs2_initialise(struct afb_req req); void ucs2_volume(struct afb_req req); void ucs2_monitor(struct afb_req req); + void ucs2_write_i2c(struct afb_req req); static const struct afb_verb_v2 _afb_verbs_v2_UNICENS[] = { { @@ -82,6 +88,13 @@ static const struct afb_verb_v2 _afb_verbs_v2_UNICENS[] = { .info = NULL, .session = AFB_SESSION_NONE_V2 }, + { + .verb = "write_i2c", + .callback = ucs2_write_i2c, + .auth = &_afb_auths_v2_UNICENS[1], + .info = NULL, + .session = AFB_SESSION_NONE_V2 + }, { .verb = NULL } }; diff --git a/ucs2-afb/ucs_apidef.json b/ucs2-afb/ucs_apidef.json index c200f74..2b9714b 100644 --- a/ucs2-afb/ucs_apidef.json +++ b/ucs2-afb/ucs_apidef.json @@ -169,6 +169,25 @@ "200": {"$ref": "#/components/responses/200"} } } + }, + "/write_i2c": { + "description": "Writes I2C command to remote node.", + "get": { + "x-permissions": { + "$ref": "#/components/x-permissions/monitor" + }, + "parameters": [ + { + "in": "query", + "name": "command", + "required": true, + "schema": { "node": "integer" } + } + ], + "responses": { + "200": {"$ref": "#/components/responses/200"} + } + } } } } diff --git a/ucs2-afb/ucs_binding.c b/ucs2-afb/ucs_binding.c index c0a9fcf..e413ee3 100644 --- a/ucs2-afb/ucs_binding.c +++ b/ucs2-afb/ucs_binding.c @@ -537,3 +537,62 @@ PUBLIC void ucs2_monitor (struct afb_req request) { afb_req_success(request,NULL,"UNICENS-to_be_done"); } +#define MUTE_VALUE 0x03FFU +#define MUTE_VALUE_HB 0x03U +#define MUTE_VALUE_LB 0xFFU + +#define CONTROL_MASTER 0x07U +#define CONTROL_CH_1 0x08U +#define CONTROL_CH_2 0x09U + +PUBLIC void ucs2_write_i2c (struct afb_req request) { + + /*const uint16_t MUTE_VALUE = 0x03FFU;*/ + /*const uint8_t MUTE_VALUE_HB = 0x03U;*/ + /*const uint8_t MUTE_VALUE_LB = 0xFFU;*/ + + /*const uint8_t CONTROL_MASTER = 0x07U;*/ + /*const uint8_t CONTROL_CH_1 = 0x08U;*/ + /*const uint8_t CONTROL_CH_2 = 0x09U;*/ + + struct json_object *j_obj, *temp; + static uint8_t tx_payload[3] = {CONTROL_MASTER, MUTE_VALUE_HB, MUTE_VALUE_LB}; + uint16_t node_addr = 0; + + /* check UNICENS is initialised */ + if (!ucsContextS) { + afb_req_fail_f (request, "unicens-init","Should Load Config before using setvol"); + goto OnErrorExit; + } + + j_obj = afb_req_json(request); + if (!j_obj) { + afb_req_fail_f (request, "query-notjson","query=%s not a valid json entry", afb_req_value(request,"")); + goto OnErrorExit; + }; + + node_addr = (uint16_t)json_object_get_int(json_object_object_get(j_obj, "node")); + AFB_NOTICE ("node_addr: 0x%02X", node_addr); + + if (node_addr == 0) { + afb_req_fail_f (request, "query-params","params wrong or missing"); + goto OnErrorExit; + } + + + UCSI_I2CWrite(&ucsContextS->ucsiData,/*UCSI_Data_t *pPriv*/ + node_addr, /*uint16_t targetAddress*/ + false, /*bool isBurst*/ + 0u, /* block count */ + 0x2Au, /* i2c slave address */ + 0x03E8u, /* timeout 1000 milliseconds */ + 3, /* uint8_t dataLen */ + &tx_payload[0] /* uint8_t *pData */ + ); + + + afb_req_success(request,NULL,"done!!!"); + + OnErrorExit: + return; +} diff --git a/ucs2-afb/ucs_binding.h b/ucs2-afb/ucs_binding.h index 4265762..d77a2f8 100644 --- a/ucs2-afb/ucs_binding.h +++ b/ucs2-afb/ucs_binding.h @@ -46,7 +46,7 @@ extern struct afb_service afbSrv; 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_writei2c (struct afb_req request); #endif /* UCS2BINDING_H */ |