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 | |
parent | 41d1d8957f7bc7154e0abb2c276ee4ca52409a56 (diff) |
adds experimental i2cwrite command
-rw-r--r-- | htdocs/UNICENS.html | 9 | ||||
-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 | ||||
-rw-r--r-- | ucs2-interface/ucs_lib_interf.c | 2 |
6 files changed, 103 insertions, 3 deletions
diff --git a/htdocs/UNICENS.html b/htdocs/UNICENS.html index fc13d34..6ea380d 100644 --- a/htdocs/UNICENS.html +++ b/htdocs/UNICENS.html @@ -23,12 +23,21 @@ <li><button onclick="callbinder('unicens','volume', {channel:'master', volume: 200})">Set Master Volume to 200</button></li> <li><button onclick="callbinder('unicens','volume', {channel:'master', volume: 185})">Set Master Volume to 185</button></li> <li><button onclick="callbinder('unicens','volume', {channel:'master', volume: 0})">Set Master Volume to 0</button></li> + </ol> <br> + <ol> <li><button onclick="callbinder('UNICENS','volume', [[0,200], [1,255]])">Set left=200 right=250</button></li> <li><button onclick="callbinder('UNICENS','volume', [[0,255], [1,200]])">Set right=250 left=200</button></li> <li><button onclick="callbinder('UNICENS','volume', [[0,255], [1,255]])">Set right=255 left=255</button></li> </ol> <br> + <ol> + <li><button onclick="callbinder('UNICENS','write_i2c', {node :0x270})">Write I2C to 0x270 (mute)</button></li> + <li><button onclick="callbinder('UNICENS','write_i2c', {node :0x271})">Write I2C to 0x271 (mute)</button></li> + <li><button onclick="callbinder('UNICENS','write_i2c', {node :0x272})">Write I2C to 0x272 (mute)</button></li> + </ol> + <br> + <br> <div id="main" style="visibility:hidden"> <ol> <li>Question <pre id="question"></pre> 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 */ diff --git a/ucs2-interface/ucs_lib_interf.c b/ucs2-interface/ucs_lib_interf.c index 3eda07f..fd60496 100644 --- a/ucs2-interface/ucs_lib_interf.c +++ b/ucs2-interface/ucs_lib_interf.c @@ -223,7 +223,7 @@ void UCSI_Service(UCSI_Data_t *my) e->val.I2CWrite.slaveAddr, e->val.I2CWrite.timeout, e->val.I2CWrite.dataLen, e->val.I2CWrite.data, OnUcsI2CWrite)) popEntry = false; else - UCSI_CB_OnUserMessage(my->tag, true, "Ucs_Gpio_CreatePort failed", 0); + UCSI_CB_OnUserMessage(my->tag, true, "Ucs_I2c_WritePort failed", 0); break; default: assert(false); |