X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=ucs2-afb%2Fucs_binding.c;h=133a946156add5c68b0744cd35363ef67c1ffb72;hb=1fd01df28fc2a2b0ea64f8fd569fe5f5f2d0471e;hp=c0a9fcf4f6a6b9d7749d18374c7026b0330ca811;hpb=4d190f69cc90143c4de1b0d474cbf552fa165b78;p=apps%2Fagl-service-unicens.git diff --git a/ucs2-afb/ucs_binding.c b/ucs2-afb/ucs_binding.c index c0a9fcf..133a946 100644 --- a/ucs2-afb/ucs_binding.c +++ b/ucs2-afb/ucs_binding.c @@ -537,3 +537,86 @@ 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 + +#define UCSB_I2C_MAX_PAYLOAD 32 + +PUBLIC void ucs2_write_i2c (struct afb_req request) { + + struct json_object *j_obj; + static uint8_t tx_payload[UCSB_I2C_MAX_PAYLOAD]; + uint8_t tx_payload_sz = 0; + 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_address")); + AFB_NOTICE("node_address: 0x%02X", node_addr); + + if (node_addr == 0) { + afb_req_fail_f(request, "query-params","params wrong or missing"); + goto OnErrorExit; + } + + if (json_object_get_type(json_object_object_get(j_obj, "i2c_data"))==json_type_array) { + int size = json_object_array_length(json_object_object_get(j_obj, "i2c_data")); + if ((size > 0) && (size <= UCSB_I2C_MAX_PAYLOAD)) { + + int32_t i; + int32_t val; + struct json_object *j_elem; + struct json_object *j_arr = json_object_object_get(j_obj, "i2c_data"); + + for (i = 0; i < size; i++) { + + + j_elem = json_object_array_get_idx(j_arr, i); + val = json_object_get_int(j_elem); + if ((val < 0) && (val > 0xFF)){ + i = 0; + break; + } + tx_payload[i] = (uint8_t)json_object_get_int(j_elem); + } + + tx_payload_sz = (uint8_t)i; + } + } + + if (tx_payload_sz == 0) { + AFB_NOTICE("i2c_data: invalid or not found"); + 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 */ + tx_payload_sz, /* uint8_t dataLen */ + &tx_payload[0] /* uint8_t *pData */ + ); + + afb_req_success(request,NULL,"done!!!"); + + OnErrorExit: + return; +}