From: Jinhyung Choi Date: Thu, 20 Mar 2014 02:13:18 +0000 (+0900) Subject: Device ARGS: added device properties option for sensors & jacks X-Git-Tag: Tizen_Studio_1.3_Release_p2.3.1~456 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=fbc91bd211dd42ea830ff6fed9498cec4bdf1dac;p=sdk%2Femulator%2Fqemu.git Device ARGS: added device properties option for sensors & jacks Sensor devices contains accel, geo, gyro, light and proxi sensors. By device properties, sensor device turn on sensors selectively. The option is now changed to "-device virtio-sensor-pci,sensors=accel&geo&gyro&light&proxi" Jack device is very similar to sensor device. It contains earjack, earkey, charger, usb and hdmi. Jack device's option is "-device virtio-jack-pci,jacks=earjack&usb&charger" Change-Id: If67ce1adf64a22225fe6f28e1ddb16d558e87c7a Signed-off-by: Jinhyung Choi --- diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c index 5920cd0112..eec210426d 100644 --- a/hw/virtio/virtio-pci.c +++ b/hw/virtio/virtio-pci.c @@ -1769,8 +1769,15 @@ static int virtio_sensor_pci_init(VirtIOPCIProxy *vpci_dev) return 0; } +static Property virtio_sensor_pci_properties[] = { + DEFINE_PROP_STRING(ATTRIBUTE_NAME_SENSORS, VirtIOSENSORPCI, vdev.sensors), + DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features), + DEFINE_PROP_END_OF_LIST(), +}; + static void virtio_sensor_pci_class_init(ObjectClass *klass, void *data) { + DeviceClass *dc = DEVICE_CLASS(klass); VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass); PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass); @@ -1779,6 +1786,7 @@ static void virtio_sensor_pci_class_init(ObjectClass *klass, void *data) pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_SENSOR; pcidev_k->revision = VIRTIO_PCI_ABI_VERSION; pcidev_k->class_id = PCI_CLASS_OTHERS; + dc->props = virtio_sensor_pci_properties; } static void virtio_sensor_pci_instance_init(Object *obj) @@ -1851,8 +1859,15 @@ static int virtio_jack_pci_init(VirtIOPCIProxy *vpci_dev) return 0; } +static Property virtio_jack_pci_properties[] = { + DEFINE_PROP_STRING(ATTRIBUTE_NAME_JACKS, VirtIOJACKPCI, vdev.jacks), + DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features), + DEFINE_PROP_END_OF_LIST(), +}; + static void virtio_jack_pci_class_init(ObjectClass *klass, void *data) { + DeviceClass *dc = DEVICE_CLASS(klass); VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass); PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass); @@ -1861,6 +1876,7 @@ static void virtio_jack_pci_class_init(ObjectClass *klass, void *data) pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_JACK; pcidev_k->revision = VIRTIO_PCI_ABI_VERSION; pcidev_k->class_id = PCI_CLASS_OTHERS; + dc->props = virtio_jack_pci_properties; } static void virtio_jack_pci_instance_init(Object *obj) diff --git a/package/changelog b/package/changelog index c7eb51d976..60e9f24806 100644 --- a/package/changelog +++ b/package/changelog @@ -1,3 +1,6 @@ +* 1.7.26 +- added device option for sensor & jack device +== Jinhyung Choi 2014-03-20 * 1.7.25 - added build/install dependency for spice server == SungMin Ha 2014-03-12 diff --git a/package/pkginfo.manifest b/package/pkginfo.manifest index 9c98a7b45a..ddf3120c1e 100644 --- a/package/pkginfo.manifest +++ b/package/pkginfo.manifest @@ -1,4 +1,4 @@ -Version: 1.7.25 +Version: 1.7.26 Maintainer: Yeong-Kyoon Lee Source: emulator diff --git a/tizen/src/hw/maru_virtio_jack.c b/tizen/src/hw/maru_virtio_jack.c index 0747487976..2f682ba388 100644 --- a/tizen/src/hw/maru_virtio_jack.c +++ b/tizen/src/hw/maru_virtio_jack.c @@ -49,6 +49,7 @@ static int hdmi_online = 0; static int usb_online = 0; VirtIOJACK* vjack; +static int jack_capability = 0; typedef struct msg_info { char buf[_MAX_BUF]; @@ -119,6 +120,9 @@ static void get_jack_data(enum jack_types type, char* msg_info) } switch (type) { + case jack_type_list: + sprintf(msg_info, "%d", jack_capability); + break; case jack_type_charger: sprintf(msg_info, "%d", charger_online); break; @@ -212,6 +216,42 @@ static void virtio_jack_vq(VirtIODevice *vdev, VirtQueue *vq) } } +static int set_capability(char* jack) +{ + if (!strncmp(jack, JACK_NAME_CHARGER, 7)) { + return jack_cap_charger; + } else if (!strncmp(jack, JACK_NAME_EARJACK, 7)) { + return jack_cap_earjack; + } else if (!strncmp(jack, JACK_NAME_EARKEY, 6)) { + return jack_cap_earkey; + } else if (!strncmp(jack, JACK_NAME_HDMI, 4)) { + return jack_cap_hdmi; + } else if (!strncmp(jack, JACK_NAME_USB, 3)) { + return jack_cap_usb; + } + + return 0; +} + +static void parse_jack_capability(char* lists) +{ + char token[] = JACK_CAP_TOKEN; + char* data = NULL; + + if (lists == NULL) + return; + + data = strtok(lists, token); + if (data != NULL) { + jack_capability |= set_capability(data); + while ((data = strtok(NULL, token)) != NULL) { + jack_capability |= set_capability(data); + } + } + + INFO("jack device capabilty enabled with %02x\n", jack_capability); +} + static int virtio_jack_init(VirtIODevice *vdev) { INFO("initialize virtio-jack device\n"); @@ -227,6 +267,12 @@ static int virtio_jack_init(VirtIODevice *vdev) vjack->vq = virtio_add_queue(&vjack->vdev, 64, virtio_jack_vq); + INFO("initialized jack type: %s\n", vjack->jacks); + + if (vjack->jacks) { + parse_jack_capability(vjack->jacks); + } + return 0; } @@ -253,11 +299,17 @@ static uint32_t virtio_jack_get_features(VirtIODevice *vdev, return 0; } +static Property virtio_jack_properties[] = { + DEFINE_PROP_STRING(ATTRIBUTE_NAME_JACKS, VirtIOJACK, jacks), + DEFINE_PROP_END_OF_LIST(), +}; + static void virtio_jack_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); dc->exit = virtio_jack_exit; + dc->props = virtio_jack_properties; vdc->init = virtio_jack_init; vdc->get_features = virtio_jack_get_features; vdc->reset = virtio_jack_reset; diff --git a/tizen/src/hw/maru_virtio_jack.h b/tizen/src/hw/maru_virtio_jack.h index 4b85232cca..615db82d88 100644 --- a/tizen/src/hw/maru_virtio_jack.h +++ b/tizen/src/hw/maru_virtio_jack.h @@ -41,7 +41,8 @@ extern "C" { OBJECT_CHECK(VirtIOJACK, (obj), TYPE_VIRTIO_JACK) enum jack_types { - jack_type_charger = 0, + jack_type_list = 0, + jack_type_charger, jack_type_earjack, jack_type_earkey, jack_type_hdmi, @@ -49,14 +50,32 @@ enum jack_types { jack_type_max }; +enum jack_capabilities { + jack_cap_charger = 0x01, + jack_cap_earjack = 0x02, + jack_cap_earkey = 0x04, + jack_cap_hdmi = 0x08, + jack_cap_usb = 0x10 +}; + typedef struct VirtIOJACK { VirtIODevice vdev; VirtQueue *vq; DeviceState *qdev; - QEMUBH *bh; + char *jacks; } VirtIOJACK; +#define ATTRIBUTE_NAME_JACKS "jacks" + +#define JACK_NAME_CHARGER "charger" +#define JACK_NAME_EARJACK "earjack" +#define JACK_NAME_EARKEY "earkey" +#define JACK_NAME_HDMI "hdmi" +#define JACK_NAME_USB "usb" + +#define JACK_CAP_TOKEN "&" + void set_jack_charger(int online); int get_jack_charger(void); diff --git a/tizen/src/hw/maru_virtio_sensor.c b/tizen/src/hw/maru_virtio_sensor.c index a0475ebcff..bd7684456d 100644 --- a/tizen/src/hw/maru_virtio_sensor.c +++ b/tizen/src/hw/maru_virtio_sensor.c @@ -57,6 +57,7 @@ static int light_level = 10; static int proxi_vo = 8; VirtIOSENSOR* vsensor; +static int sensor_capability = 0; typedef struct msg_info { char buf[_MAX_BUF]; @@ -176,6 +177,9 @@ static void __get_sensor_data(enum sensor_types type, char* msg_info) } switch (type) { + case sensor_type_list: + sprintf(msg_info, "%d", sensor_capability); + break; case sensor_type_accel: strcpy(msg_info, accel_xyz); break; @@ -255,7 +259,7 @@ static void handle_msg(struct msg_info *msg, VirtQueueElement *elem) { unsigned int len = 0; - if (msg == NULL) { + if (msg == NULL) { INFO("msg info structure is NULL.\n"); return; } @@ -303,6 +307,42 @@ static void virtio_sensor_vq(VirtIODevice *vdev, VirtQueue *vq) } } +static int set_capability(char* sensor) +{ + if (!strncmp(sensor, SENSOR_NAME_ACCEL, 5)) { + return sensor_cap_accel; + } else if (!strncmp(sensor, SENSOR_NAME_GEO, 3)) { + return sensor_cap_geo; + } else if (!strncmp(sensor, SENSOR_NAME_GYRO, 4)) { + return sensor_cap_gyro; + } else if (!strncmp(sensor, SENSOR_NAME_LIGHT, 5)) { + return sensor_cap_light; + } else if (!strncmp(sensor, SENSOR_NAME_PROXI, 5)) { + return sensor_cap_proxi; + } + + return 0; +} + +static void parse_sensor_capability(char* lists) +{ + char token[] = SENSOR_CAP_TOKEN; + char* data = NULL; + + if (lists == NULL) + return; + + data = strtok(lists, token); + if (data != NULL) { + sensor_capability |= set_capability(data); + while ((data = strtok(NULL, token)) != NULL) { + sensor_capability |= set_capability(data); + } + } + + INFO("sensor device capabilty enabled with %02x\n", sensor_capability); +} + static int virtio_sensor_init(VirtIODevice *vdev) { INFO("initialize virtio-sensor device\n"); @@ -318,6 +358,12 @@ static int virtio_sensor_init(VirtIODevice *vdev) vsensor->vq = virtio_add_queue(&vsensor->vdev, 64, virtio_sensor_vq); + INFO("initialized sensor type: %s\n", vsensor->sensors); + + if (vsensor->sensors) { + parse_sensor_capability(vsensor->sensors); + } + return 0; } @@ -344,11 +390,17 @@ static uint32_t virtio_sensor_get_features(VirtIODevice *vdev, return 0; } +static Property virtio_sensor_properties[] = { + DEFINE_PROP_STRING(ATTRIBUTE_NAME_SENSORS, VirtIOSENSOR, sensors), + DEFINE_PROP_END_OF_LIST(), +}; + static void virtio_sensor_class_init(ObjectClass *klass, void *data) { DeviceClass *dc = DEVICE_CLASS(klass); VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); dc->exit = virtio_sensor_exit; + dc->props = virtio_sensor_properties; vdc->init = virtio_sensor_init; vdc->get_features = virtio_sensor_get_features; vdc->reset = virtio_sensor_reset; diff --git a/tizen/src/hw/maru_virtio_sensor.h b/tizen/src/hw/maru_virtio_sensor.h index 31093a5477..fef5bf4e4f 100644 --- a/tizen/src/hw/maru_virtio_sensor.h +++ b/tizen/src/hw/maru_virtio_sensor.h @@ -43,7 +43,8 @@ enum request_cmd { }; enum sensor_types { - sensor_type_accel = 0, + sensor_type_list = 0, + sensor_type_accel, sensor_type_geo, sensor_type_gyro, sensor_type_gyro_x, @@ -58,6 +59,14 @@ enum sensor_types { sensor_type_max }; +enum sensor_capabilities { + sensor_cap_accel = 0x01, + sensor_cap_geo = 0x02, + sensor_cap_gyro = 0x04, + sensor_cap_light = 0x08, + sensor_cap_proxi = 0x10 +}; + #define MESSAGE_TYPE_SENSOR "sensor" #define GROUP_STATUS 15 @@ -68,6 +77,16 @@ enum sensor_types { #define ACTION_LIGHT 113 #define ACTION_PROXI 114 +#define ATTRIBUTE_NAME_SENSORS "sensors" + +#define SENSOR_NAME_ACCEL "accel" +#define SENSOR_NAME_GYRO "gyro" +#define SENSOR_NAME_GEO "geo" +#define SENSOR_NAME_LIGHT "light" +#define SENSOR_NAME_PROXI "proxi" + +#define SENSOR_CAP_TOKEN "&" + #define TYPE_VIRTIO_SENSOR "virtio-sensor-device" #define VIRTIO_SENSOR(obj) \ OBJECT_CHECK(VirtIOSENSOR, (obj), TYPE_VIRTIO_SENSOR) @@ -76,6 +95,8 @@ typedef struct VirtIOSENSOR { VirtIODevice vdev; VirtQueue *vq; DeviceState *qdev; + + char *sensors; } VirtIOSENSOR; void req_sensor_data(enum sensor_types type, enum request_cmd req, char* data, int len);