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 <jinhyung2.choi@samsung.com>
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);
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)
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);
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)
+* 1.7.26
+- added device option for sensor & jack device
+== Jinhyung Choi <jinhyung2.choi@samsung.com> 2014-03-20
* 1.7.25
- added build/install dependency for spice server
== SungMin Ha <sungmin82.ha@samsung.com> 2014-03-12
-Version: 1.7.25
+Version: 1.7.26
Maintainer: Yeong-Kyoon Lee<yeongkyoon.lee@samsung.com>
Source: emulator
static int usb_online = 0;
VirtIOJACK* vjack;
+static int jack_capability = 0;
typedef struct msg_info {
char buf[_MAX_BUF];
}
switch (type) {
+ case jack_type_list:
+ sprintf(msg_info, "%d", jack_capability);
+ break;
case jack_type_charger:
sprintf(msg_info, "%d", charger_online);
break;
}
}
+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");
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;
}
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;
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,
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);
static int proxi_vo = 8;
VirtIOSENSOR* vsensor;
+static int sensor_capability = 0;
typedef struct msg_info {
char buf[_MAX_BUF];
}
switch (type) {
+ case sensor_type_list:
+ sprintf(msg_info, "%d", sensor_capability);
+ break;
case sensor_type_accel:
strcpy(msg_info, accel_xyz);
break;
{
unsigned int len = 0;
- if (msg == NULL) {
+ if (msg == NULL) {
INFO("msg info structure is NULL.\n");
return;
}
}
}
+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");
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;
}
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;
};
enum sensor_types {
- sensor_type_accel = 0,
+ sensor_type_list = 0,
+ sensor_type_accel,
sensor_type_geo,
sensor_type_gyro,
sensor_type_gyro_x,
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
#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)
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);