adds experimental i2cwrite command
authorTobias Jahnke <tjahnk@users.noreply.github.com>
Mon, 31 Jul 2017 09:46:47 +0000 (11:46 +0200)
committerFulup Ar Foll <fulup@iot.bzh>
Tue, 1 Aug 2017 09:47:14 +0000 (11:47 +0200)
htdocs/UNICENS.html
ucs2-afb/ucs_apidef.h
ucs2-afb/ucs_apidef.json
ucs2-afb/ucs_binding.c
ucs2-afb/ucs_binding.h
ucs2-interface/ucs_lib_interf.c

index fc13d34..6ea380d 100644 (file)
     <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>
index c23f066..140b96a 100644 (file)
@@ -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 }
 };
 
index c200f74..2b9714b 100644 (file)
           "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"}
+        }
+      }
     }
   }
 }
index c0a9fcf..e413ee3 100644 (file)
@@ -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;
+}
index 4265762..d77a2f8 100644 (file)
@@ -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 */
 
index 3eda07f..fd60496 100644 (file)
@@ -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);