From: DaiYoung Kim Date: Wed, 24 Apr 2013 12:43:22 +0000 (+0900) Subject: ecp : resolve sync problem of evdi packet X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.1~875^2~19 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=6eb5577746d0d8d2422c2d4433cf837e8d822199;p=sdk%2Femulator%2Fqemu.git ecp : resolve sync problem of evdi packet Signed-off-by: DaiYoung, Kim --- diff --git a/tizen/src/ecs.c b/tizen/src/ecs.c index 3059d15172..7d8530f0a2 100755 --- a/tizen/src/ecs.c +++ b/tizen/src/ecs.c @@ -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); diff --git a/tizen/src/ecs.h b/tizen/src/ecs.h index d9b1246ad3..870f5f050a 100755 --- a/tizen/src/ecs.h +++ b/tizen/src/ecs.h @@ -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); diff --git a/tizen/src/hw/maru_device_ids.h b/tizen/src/hw/maru_device_ids.h index 47a2fda274..deda8024d6 100755 --- a/tizen/src/hw/maru_device_ids.h +++ b/tizen/src/hw/maru_device_ids.h @@ -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 */ /* diff --git a/tizen/src/hw/maru_virtio_evdi.c b/tizen/src/hw/maru_virtio_evdi.c index 72e25f5b0c..8653b9bea4 100755 --- a/tizen/src/hw/maru_virtio_evdi.c +++ b/tizen/src/hw/maru_virtio_evdi.c @@ -93,36 +93,6 @@ static QTAILQ_HEAD(EvdiMsgHead , EvdiBuf) evdi_in_queue = static pthread_mutex_t recv_buf_mutex = PTHREAD_MUTEX_INITIALIZER; static pthread_mutex_t send_buf_mutex = PTHREAD_MUTEX_INITIALIZER; -/* -bool queue_evdi_buf(VirtIO_EVDI* evdi) -{ - int sg_idx; - EvdiBuf* ebuf = malloc(sizeof(EvdiBuf)); - - while (sg_idx = virtqueue_pop(evdi->rvq, &ebuf->elem)) - - INFO(">> QueueEvdiBuf : sg_idx = %d\n", sg_idx); - - - pthread_mutex_lock(&recv_buf_mutex); - - QTAILQ_INSERT_TAIL(&evdi_in_queue, ebuf, next); - qemu_bh_schedule(evdi->bh); - - pthread_mutex_unlock(&recv_buf_mutex); -} -*/ -/* -void reset_msg_info(msg_info* info) -{ - info->route = route_ij; - info->use = 0; - info->count = 0; - info->index = 0; - -} -*/ - bool send_to_evdi(const uint32_t route, char* data, const uint32_t len) { int size; @@ -160,12 +130,11 @@ bool send_to_evdi(const uint32_t route, char* data, const uint32_t len) } -//static int g_cnt = 0; +static int g_cnt = 0; static void flush_evdi_recv_queue(void) { int index; - TRACE("nothing to do.\n"); if (unlikely(!virtio_queue_ready(vio_evdi->rvq))) { INFO("virtio queue is not ready\n"); @@ -190,16 +159,16 @@ static void flush_evdi_recv_queue(void) index = virtqueue_pop(vio_evdi->rvq, &elem); if (index == 0) { - ERR("unexpected empty queue"); + //ERR("unexpected empty queue"); break; } - INFO(">> virtqueue_pop. index: %d, out_num : %d, in_num : %d\n", index, elem.out_num, elem.in_num); + //INFO(">> virtqueue_pop. index: %d, out_num : %d, in_num : %d\n", index, elem.out_num, elem.in_num); memcpy(elem.in_sg[0].iov_base, &msginfo->info, sizeof(struct msg_info)); - INFO(">> send to guest use = %d, msg = %s, iov_len = %d \n", - msginfo->info.use, msginfo->info.buf, elem.in_sg[0].iov_len); + //INFO(">> send to guest count = %d, use = %d, msg = %s, iov_len = %d \n", + ++g_cnt, msginfo->info.use, msginfo->info.buf, elem.in_sg[0].iov_len); virtqueue_push(vio_evdi->rvq, &elem, sizeof(msg_info)); virtio_notify(&vio_evdi->vdev, vio_evdi->rvq); @@ -216,67 +185,9 @@ static void flush_evdi_recv_queue(void) static void virtio_evdi_recv(VirtIODevice *vdev, VirtQueue *vq) { - INFO(">> evdirecv : virtio_evdi_recv\n"); - - if (!QTAILQ_EMPTY(&evdi_recv_msg_queue)) - return; - - flush_evdi_recv_queue(); - - INFO("enf of virtio_evdi_recv\n"); -} - -/* -static void virtio_evdi_recv(VirtIODevice *vdev, VirtQueue *vq) -{ - int index = 0; - - struct msg_info _msg; - - INFO(">> evdirecv : virtio_evdi_recv\n"); - - if (unlikely(virtio_queue_empty(vio_evdi->rvq))) { - INFO(">> evdirecv : virtqueue is empty\n"); - return; - } - - VirtQueueElement elem; - - while ((index = virtqueue_pop(vq, &elem))) { - - INFO(">> evdirecv : virtqueue_pop. index: %d\n", index); - INFO(">> evdirecv : element out_num : %d, in_num : %d\n", elem.out_num, elem.in_num); - - if (index == 0) { - INFO("evdirecv : virtqueue break\n"); - break; - } - - INFO(">> evdirecv : received use = %d, iov_len = %d\n", _msg.use, elem.in_sg[0].iov_len); - - memcpy(&_msg, elem.in_sg[0].iov_base, elem.in_sg[0].iov_len); - - - if (g_cnt < 10) - { - memset(&_msg, 0x00, sizeof(_msg)); - sprintf(_msg.buf, "test_%d\n", g_cnt++); - memcpy(elem.in_sg[0].iov_base, &_msg, sizeof(struct msg_info)); - - INFO(">> evdirecv : send to guest msg use = %d, msg = %s, iov_len = %d \n", - _msg.use, _msg.buf, elem.in_sg[0].iov_len); - - - virtqueue_push(vq, &elem, sizeof(VirtIO_EVDI)); - virtio_notify(&vio_evdi->vdev, vq); - } - } - - INFO("enf of virtio_evdi_recv\n"); + flush_evdi_recv_queue(); } -*/ - static void virtio_evdi_send(VirtIODevice *vdev, VirtQueue *vq) { VirtIO_EVDI *vevdi = (VirtIO_EVDI *)vdev; @@ -292,19 +203,19 @@ static void virtio_evdi_send(VirtIODevice *vdev, VirtQueue *vq) while ((index = virtqueue_pop(vq, &elem))) { - INFO("<< virtqueue pop. index: %d, out_num : %d, in_num : %d\n", index, elem.out_num, elem.in_num); + //INFO("<< virtqueue pop. index: %d, out_num : %d, in_num : %d\n", index, elem.out_num, elem.in_num); if (index == 0) { INFO("<< virtqueue break\n"); break; } - INFO("<< use=%d, iov_len = %d\n", _msg.use, elem.out_sg[0].iov_len); + //INFO("<< use=%d, iov_len = %d\n", _msg.use, elem.out_sg[0].iov_len); memset(&_msg, 0x00, sizeof(_msg)); memcpy(&_msg, elem.out_sg[0].iov_base, elem.out_sg[0].iov_len); - INFO("<< recv from guest len = %d, msg = %s \n", _msg.use, _msg.buf); + //INFO("<< recv from guest len = %d, msg = %s \n", _msg.use, _msg.buf); ntf_to_injector(_msg.buf, _msg.use); } @@ -313,44 +224,6 @@ static void virtio_evdi_send(VirtIODevice *vdev, VirtQueue *vq) virtio_notify(&vio_evdi->vdev, vq); } -/* -static void virtio_evdi_send(VirtIODevice *vdev, VirtQueue *vq) -{ - VirtIO_EVDI *vevdi = (VirtIO_EVDI *)vdev; - int index = 0; - struct msg_info _msg; - - INFO("<< evdisend : virtio_evdi_send \n"); - if (virtio_queue_empty(vevdi->svq)) { - INFO("<< evdisend : virtqueue is empty.\n"); - return; - } - - VirtQueueElement elem; - - while ((index = virtqueue_pop(vq, &elem))) { - - INFO("<< evdisend : virtqueue pop. index: %d\n", index); - INFO("<< evdisend : element out_num : %d, in_num : %d\n", elem.out_num, elem.in_num); - - if (index == 0) { - INFO("<< evdisend : virtqueue break\n"); - break; - } - - INFO("<< evdisend : use=%d, iov_len = %d\n", _msg.use, elem.out_sg[0].iov_len); - - memset(&_msg, 0x00, sizeof(_msg)); - memcpy(&_msg, elem.out_sg[0].iov_base, elem.out_sg[0].iov_len); - - INFO("<< evdisend : recv from guest len = %d, msg = %s \n", _msg.use, _msg.buf); - } - - virtqueue_push(vq, &elem, sizeof(VirtIO_EVDI)); - virtio_notify(&vio_evdi->vdev, vq); -} -*/ - static uint32_t virtio_evdi_get_features(VirtIODevice *vdev, uint32_t request_feature) {