ecp : resolve sync problem of evdi packet
authorDaiYoung Kim <daiyoung777.kim@samsung.com>
Wed, 24 Apr 2013 12:43:22 +0000 (21:43 +0900)
committerDaiYoung Kim <daiyoung777.kim@samsung.com>
Wed, 24 Apr 2013 12:43:22 +0000 (21:43 +0900)
Signed-off-by: DaiYoung, Kim <daiyoung777.kim@samsung.com>
tizen/src/ecs.c
tizen/src/ecs.h
tizen/src/hw/maru_device_ids.h
tizen/src/hw/maru_virtio_evdi.c

index 3059d151720c0a169a4e3d729e8f16d92c5ed8c8..7d8530f0a2636d5c2d319e7db9b4711098d3dd35 100755 (executable)
@@ -720,11 +720,19 @@ void read_val_str(const char* data, char* ret_val, int len)
        memcpy(ret_val, data, len);
 }
 
+void make_header(QDict* obj, type_length length, type_group group, type_action action)
+{
+       qdict_put(obj, "length",  qint_from_int((int64_t)length));
+       qdict_put(obj, "group",  qint_from_int((int64_t)group));
+       qdict_put(obj, "action",  qint_from_int((int64_t)action));
+}
+
+
 bool ntf_to_injector(const char* data, const int len)
 {
        type_length length = 0;
-       type_action group = 0;
-       type_group action = 0;
+       type_group group = 0;
+       type_action action = 0;
 
 
        const int catsize = 10;
@@ -742,20 +750,25 @@ bool ntf_to_injector(const char* data, const int len)
        const char* ijdata = (data + catsize +  2 + 1 + 1);
 
        QDict* obj_header = qdict_new();
+       make_header(obj_header, length, group, action);
 
-       qdict_put(obj_header, "cat",  qstring_from_str(cat));
-       qdict_put(obj_header, "length",  qint_from_int((int64_t)length));
-       qdict_put(obj_header, "group",  qint_from_int((int64_t)group));
-       qdict_put(obj_header, "action",  qint_from_int((int64_t)action));
-
-       QDict* obj = qdict_new();
+       QDict* objData = qdict_new();
        qobject_incref(QOBJECT(obj_header));
-       qdict_put(obj, "header", obj_header);
-       qdict_put(obj, "data", qstring_from_str(ijdata));
 
+       qdict_put(objData, "cat",  qstring_from_str(cat));
+       qdict_put(objData, "header", obj_header);
+       qdict_put(objData, "ijdata", qstring_from_str(ijdata));
+
+
+       QDict* objMsg = qdict_new();
+       qobject_incref(QOBJECT(objData));
+
+       qdict_put(objMsg, "type", qstring_from_str("injector"));
+       qdict_put(objMsg, "result", qstring_from_str("success"));
+       qdict_put(objMsg, "data", objData);
 
     QString *json;
-    json =  qobject_to_json(QOBJECT(obj));
+    json =  qobject_to_json(QOBJECT(objMsg));
 
     assert(json != NULL);
 
@@ -769,7 +782,8 @@ bool ntf_to_injector(const char* data, const int len)
        QDECREF(json);
 
        QDECREF(obj_header);
-       QDECREF(obj);
+       QDECREF(objData);
+       QDECREF(objMsg);
 
        return true;
 }
@@ -784,6 +798,8 @@ bool ntf_to_monitor(const char* data, const int len)
        return true;
 }
 
+static int ijcount = 0;
+
 static bool injector_command_proc(ECS_Client *clii, QObject *obj)
 {
        QDict* header = qdict_get_qdict(qobject_to_qdict(obj), "header");
@@ -797,6 +813,7 @@ static bool injector_command_proc(ECS_Client *clii, QObject *obj)
 
        // get data
        const char* data = qdict_get_str(qobject_to_qdict(obj), COMMANDS_DATA);
+       LOG(">> count= %d", ++ijcount);
        LOG(">> print len = %d, data\" %s\"", strlen(data), data);
        LOG(">> header = cmd = %s, length = %d, action=%d, group=%d",
                        cmd, length, action, group);
index d9b1246ad3bc8b85d1f56efc9098416b2e7645ab..870f5f050a49d32510f9aa6f53ce471414217b48 100755 (executable)
@@ -55,6 +55,8 @@ bool send_to_all_client(const char* data, const int len);
 void send_to_client(int fd, const char *str);
 
 
+void make_header(QDict* obj, type_length length, type_group group, type_action action);
+
 void read_val_short(const char* data, unsigned short* ret_val);
 void read_val_char(const char* data, unsigned char* ret_val);
 void read_val_str(const char* data, char* ret_val, int len);
index 47a2fda27400305f7b2481b3193f378ca1e4b5a2..deda8024d6132caf6d1fd0ebab68239bdf5d5069 100755 (executable)
@@ -53,7 +53,7 @@
 #define PCI_DEVICE_ID_VIRTIO_KEYBOARD    0x1020
 #define PCI_DEVICE_ID_VIRTIO_ESM         0x1024
 #define PCI_DEVICE_ID_VIRTIO_HWKEY       0x1028
-#define PCI_DEVICE_ID_VIRTIO_EVDI        0x1028
+#define PCI_DEVICE_ID_VIRTIO_EVDI        0x102C
 
 /* Virtio */
 /*
index 72e25f5b0c82b4c7a24875e366981e687227833d..8653b9bea44b5d45a548c59fbf5858c87c8e5af1 100755 (executable)
@@ -93,36 +93,6 @@ static QTAILQ_HEAD(EvdiMsgHead , EvdiBuf) evdi_in_queue =
 static pthread_mutex_t recv_buf_mutex = PTHREAD_MUTEX_INITIALIZER;\r
 static pthread_mutex_t send_buf_mutex = PTHREAD_MUTEX_INITIALIZER;\r
 \r
-/*\r
-bool queue_evdi_buf(VirtIO_EVDI* evdi)\r
-{\r
-       int sg_idx;\r
-       EvdiBuf* ebuf = malloc(sizeof(EvdiBuf));\r
-\r
-       while (sg_idx = virtqueue_pop(evdi->rvq, &ebuf->elem))\r
-\r
-        INFO(">> QueueEvdiBuf : sg_idx = %d\n", sg_idx);\r
-\r
-\r
-       pthread_mutex_lock(&recv_buf_mutex);\r
-\r
-       QTAILQ_INSERT_TAIL(&evdi_in_queue, ebuf, next);\r
-       qemu_bh_schedule(evdi->bh);\r
-\r
-       pthread_mutex_unlock(&recv_buf_mutex);\r
-}\r
-*/\r
-/*\r
-void reset_msg_info(msg_info* info)\r
-{\r
-       info->route = route_ij;\r
-       info->use = 0;\r
-       info->count = 0;\r
-       info->index = 0;\r
-\r
-}\r
-*/\r
-\r
 bool send_to_evdi(const uint32_t route, char* data, const uint32_t len)\r
 {\r
        int size;\r
@@ -160,12 +130,11 @@ bool send_to_evdi(const uint32_t route, char* data, const uint32_t len)
 }\r
 \r
 \r
-//static int g_cnt = 0;\r
+static int g_cnt = 0;\r
 \r
 static void flush_evdi_recv_queue(void)\r
 {\r
        int index;\r
-       TRACE("nothing to do.\n");\r
 \r
     if (unlikely(!virtio_queue_ready(vio_evdi->rvq))) {\r
         INFO("virtio queue is not ready\n");\r
@@ -190,16 +159,16 @@ static void flush_evdi_recv_queue(void)
                 index = virtqueue_pop(vio_evdi->rvq, &elem);\r
                 if (index == 0)\r
                 {\r
-                        ERR("unexpected empty queue");\r
+                        //ERR("unexpected empty queue");\r
                         break;\r
                 }\r
 \r
-                INFO(">> virtqueue_pop. index: %d, out_num : %d, in_num : %d\n", index, elem.out_num, elem.in_num);\r
+                //INFO(">> virtqueue_pop. index: %d, out_num : %d, in_num : %d\n", index, elem.out_num, elem.in_num);\r
 \r
                 memcpy(elem.in_sg[0].iov_base, &msginfo->info, sizeof(struct msg_info));\r
 \r
-                INFO(">> send to guest use = %d, msg = %s, iov_len = %d \n",\r
-                                               msginfo->info.use, msginfo->info.buf, elem.in_sg[0].iov_len);\r
+                //INFO(">> send to guest count = %d, use = %d, msg = %s, iov_len = %d \n",\r
+                                ++g_cnt, msginfo->info.use, msginfo->info.buf, elem.in_sg[0].iov_len);\r
 \r
                 virtqueue_push(vio_evdi->rvq, &elem, sizeof(msg_info));\r
                 virtio_notify(&vio_evdi->vdev, vio_evdi->rvq);\r
@@ -216,67 +185,9 @@ static void flush_evdi_recv_queue(void)
 \r
 static void virtio_evdi_recv(VirtIODevice *vdev, VirtQueue *vq)\r
 {\r
-      INFO(">> evdirecv : virtio_evdi_recv\n");\r
-\r
-    if (!QTAILQ_EMPTY(&evdi_recv_msg_queue))\r
-       return;\r
-\r
-    flush_evdi_recv_queue();\r
-\r
-    INFO("enf of virtio_evdi_recv\n");\r
-}\r
-\r
-/*\r
-static void virtio_evdi_recv(VirtIODevice *vdev, VirtQueue *vq)\r
-{\r
-    int index = 0;\r
-\r
-    struct msg_info _msg;\r
-\r
-    INFO(">> evdirecv : virtio_evdi_recv\n");\r
-\r
-       if (unlikely(virtio_queue_empty(vio_evdi->rvq))) {\r
-               INFO(">> evdirecv : virtqueue is empty\n");\r
-               return;\r
-       }\r
-\r
-    VirtQueueElement elem;\r
-\r
-    while ((index = virtqueue_pop(vq, &elem))) {\r
-\r
-       INFO(">> evdirecv : virtqueue_pop. index: %d\n", index);\r
-       INFO(">> evdirecv : element out_num : %d, in_num : %d\n", elem.out_num, elem.in_num);\r
-\r
-       if (index == 0) {\r
-               INFO("evdirecv : virtqueue break\n");\r
-                       break;\r
-               }\r
-\r
-       INFO(">> evdirecv : received use = %d, iov_len = %d\n", _msg.use, elem.in_sg[0].iov_len);\r
-\r
-       memcpy(&_msg, elem.in_sg[0].iov_base,  elem.in_sg[0].iov_len);\r
-\r
-\r
-       if (g_cnt < 10)\r
-       {\r
-                       memset(&_msg, 0x00, sizeof(_msg));\r
-                       sprintf(_msg.buf, "test_%d\n", g_cnt++);\r
-                       memcpy(elem.in_sg[0].iov_base, &_msg, sizeof(struct msg_info));\r
-\r
-                       INFO(">> evdirecv : send to guest msg use = %d, msg = %s, iov_len = %d \n",\r
-                                       _msg.use, _msg.buf, elem.in_sg[0].iov_len);\r
-\r
-\r
-                       virtqueue_push(vq, &elem, sizeof(VirtIO_EVDI));\r
-                       virtio_notify(&vio_evdi->vdev, vq);\r
-       }\r
-       }\r
-\r
-    INFO("enf of virtio_evdi_recv\n");\r
+       flush_evdi_recv_queue();\r
 }\r
 \r
-*/\r
-\r
 static void virtio_evdi_send(VirtIODevice *vdev, VirtQueue *vq)\r
 {\r
        VirtIO_EVDI *vevdi = (VirtIO_EVDI *)vdev;\r
@@ -292,19 +203,19 @@ static void virtio_evdi_send(VirtIODevice *vdev, VirtQueue *vq)
 \r
     while ((index = virtqueue_pop(vq, &elem))) {\r
 \r
-               INFO("<< virtqueue pop. index: %d, out_num : %d, in_num : %d\n", index,  elem.out_num, elem.in_num);\r
+               //INFO("<< virtqueue pop. index: %d, out_num : %d, in_num : %d\n", index,  elem.out_num, elem.in_num);\r
 \r
                if (index == 0) {\r
                        INFO("<< virtqueue break\n");\r
                        break;\r
                }\r
 \r
-               INFO("<< use=%d, iov_len = %d\n", _msg.use, elem.out_sg[0].iov_len);\r
+               //INFO("<< use=%d, iov_len = %d\n", _msg.use, elem.out_sg[0].iov_len);\r
 \r
                memset(&_msg, 0x00, sizeof(_msg));\r
                memcpy(&_msg, elem.out_sg[0].iov_base, elem.out_sg[0].iov_len);\r
 \r
-               INFO("<< recv from guest len = %d, msg = %s \n", _msg.use, _msg.buf);\r
+               //INFO("<< recv from guest len = %d, msg = %s \n", _msg.use, _msg.buf);\r
 \r
                ntf_to_injector(_msg.buf, _msg.use);\r
     }\r
@@ -313,44 +224,6 @@ static void virtio_evdi_send(VirtIODevice *vdev, VirtQueue *vq)
        virtio_notify(&vio_evdi->vdev, vq);\r
 }\r
 \r
-/*\r
-static void virtio_evdi_send(VirtIODevice *vdev, VirtQueue *vq)\r
-{\r
-       VirtIO_EVDI *vevdi = (VirtIO_EVDI *)vdev;\r
-    int index = 0;\r
-    struct msg_info _msg;\r
-\r
-    INFO("<< evdisend : virtio_evdi_send \n");\r
-    if (virtio_queue_empty(vevdi->svq)) {\r
-        INFO("<< evdisend : virtqueue is empty.\n");\r
-        return;\r
-    }\r
-\r
-    VirtQueueElement elem;\r
-\r
-    while ((index = virtqueue_pop(vq, &elem))) {\r
-\r
-               INFO("<< evdisend : virtqueue pop. index: %d\n", index);\r
-               INFO("<< evdisend : element out_num : %d, in_num : %d\n", elem.out_num, elem.in_num);\r
-\r
-               if (index == 0) {\r
-                       INFO("<< evdisend : virtqueue break\n");\r
-                       break;\r
-               }\r
-\r
-               INFO("<< evdisend : use=%d, iov_len = %d\n", _msg.use, elem.out_sg[0].iov_len);\r
-\r
-               memset(&_msg, 0x00, sizeof(_msg));\r
-               memcpy(&_msg, elem.out_sg[0].iov_base, elem.out_sg[0].iov_len);\r
-\r
-               INFO("<< evdisend : recv from guest len = %d, msg = %s \n", _msg.use, _msg.buf);\r
-    }\r
-\r
-       virtqueue_push(vq, &elem, sizeof(VirtIO_EVDI));\r
-       virtio_notify(&vio_evdi->vdev, vq);\r
-}\r
-*/\r
-\r
 static uint32_t virtio_evdi_get_features(VirtIODevice *vdev,\r
                                             uint32_t request_feature)\r
 {\r