| ANDROID QEMUD SERVICES |
| |
| The docs/ANDROID-QEMUD.TXT document describes how clients running in the |
| emulated system can communicate with the emulator through the 'qemud' |
| multiplexing daemon. |
| |
| This document lists all services officially provided by the emulator to |
| clients. Each service is identified by a unique name. There is no provision |
| for versioning. Instead, if you need new features, create a new service |
| with a slightly different name and modify clients to use it in the system |
| image. |
| |
| |
| "gsm" service: |
| -------------- |
| |
| The GSM service provides a communication channel where GSM/GPRS AT commands |
| can be exchanged between the emulated system and an emulated modem. |
| |
| The messages consist in un-framed character messages as they appear in a |
| regular AT command channel (i.e. terminated by \r\n most of the time). |
| |
| There can be only 1 client talking to the modem, since the AT command |
| protocol does not allow for anything more complex. |
| |
| Implementation: telephony/modem_driver.c |
| Since: SDK 1.0 |
| |
| "gps" service: |
| -------------- |
| |
| The GPS service is used to broadcast NMEA 0183 sentences containing fix |
| information to all clients. The service doesn't listen to clients at all. |
| |
| All sentences are un-framed and end with a \n character. |
| |
| Implementation: android/gps.c |
| Since: SDK 1.0 |
| |
| |
| "hw-control" / "control" service: |
| --------------------- |
| |
| This service is named "control" in 1.0 and 1.1, and "hw-control" |
| in 1.5 and later releases of the SDK. |
| |
| This service is used to allow the emulated system to control various aspects |
| of hardware emulation. The corresponding clients are in |
| hardware/libhardware_legacy in the Android source tree. |
| |
| All messages use the optional framing described in ANDROID-QEMUD.TXT. |
| Only one client can talk with the service at any one time, but clients |
| quickly connect/disconnect to the service anyway. |
| |
| Supported messages are: |
| |
| 1/ Client sends "power:light:brightness:<lightname>:<val>", where |
| <lightname> is the name of a light and <val> is an decimal value |
| between 0 (off) and 255 (brightest). Valid values for 'light' are: |
| |
| lcd_backlight |
| keyboard_backlight |
| button_backlight |
| |
| Currently, only 'lcd_backlight' is supported by the emulator. |
| Note that the brightness value doesn't scale linearly on physical |
| devices. |
| |
| 2/ Client sends "set_led_state:<color-rgb>:<on-ms>:<off-ms>" where |
| <color-rgb> is an 8-hexchar value describing an xRGB color, and |
| <on-ms> and <off-ms> are decimal values expressing timeout in |
| milliseconds. |
| |
| This is used to modify the color of the notification LED on the |
| emulated phone as well as provide on/off timeouts for flashing. |
| |
| cCrrently unsupported by the emulator. |
| |
| 3/ Client sends "vibrator:<timeout>", where <timeout> is a decimal value. |
| used to enable vibrator emulation for <timeout> milli-seconds. |
| |
| Currently unsupported by the emulator. |
| |
| |
| Implementation: android/hw-control.c |
| Since: SDK 1.0 |
| |
| |
| "sensors" service: |
| ------------------ |
| |
| This service is used for sensor emulation. All messages are framed and the |
| protocol is the following: |
| |
| 1/ Clients initially sends "list-sensors" and receives a single string |
| containing a decimal mask value. The value is a set of bit-flags |
| indicating which sensors are provided by the hardware emulation. The |
| bit flags are defined as: |
| |
| bit 0: accelerometer |
| bit 1: compass |
| bit 2: orientation |
| bit 3: temperature |
| |
| 2/ Client sends "set-delay:<delay-ms>", where <delay-ms> is a decimal |
| string, to set the minimum delay in milliseconds between sensor event |
| reports it wants to receive. |
| |
| 3/ Client sends "wake", the service must immediately send back "wake" as |
| an answer. This is used to simplify parts of the client emulation. |
| |
| 4/ Client sends "set:<sensor-name>:<flag>", where <sensor-name> is the |
| name of one of the emulated sensors, and <flag> is either "0" or "1". |
| This is used to enable or disable the report of data from a given |
| emulated sensor hardware. |
| |
| the list of valid <sensor-name> values is the following: |
| |
| acceleration : for the accelerometer |
| magnetic-field : for the compass |
| orientation : for the orientation sensor |
| temperature : for the temperature sensor |
| |
| |
| 5/ If at least one of the emulated sensors has been enabled with |
| "set:<name>:1", then the service should broadcast periodically the |
| state of sensors. |
| |
| this is done by broadcasting a series of framed messages that look |
| like: |
| |
| acceleration:<x>:<y>:<z> |
| magnetic-field:<x>:<y>:<z> |
| orientation:<azimuth>:<pitch>:<roll> |
| temperature:<celsius> |
| sync:<time_us> |
| |
| Note that each line, corresponds to an independent framed message. |
| Each line, except the last one, is optional and should only be |
| produced if the corresponding sensor reporting has been enabled |
| through "set:<name>:1". |
| |
| <x>, <y>, <z>, <azimuth>, <pitch>, <roll> and <celsius> are floating |
| point values written as strings with the "%g" printf formatting option. |
| |
| The last 'sync' message is required to end the broadcast and contains |
| the current VM clock time in micro-seconds. The client will adjust it |
| internally to only care about differences between sensor broadcasts. |
| |
| If reporting is disabled for all sensors, no broadcast message needs |
| to be sent back to clients. |
| |
| |
| Implementation: android/hw-sensors.c |
| Since: SDK 1.5 (cupcake) |
| |
| |
| "boot-properties" service: |
| -------------------------- |
| |
| WARNING: These properties don't get set until init starts a service in |
| class "core" called "qemu-props". Other init services in class "core" |
| include servicemanager and vold. If those processes read the property |
| (they probably don't right now), there is a small chance it has not been set yet. |
| Also, init services are started asynchronously, so there is no guarantee that |
| services started just after qemu-props will not run before qemu-props, and may |
| not see the new properties. This hasn't been an issue, but should probably |
| be cleaned up. |
| |
| This service is used to set system properties in the emulated system at |
| boot time. It is invoked by the 'qemu-props' helper program that is invoked |
| by /system/etc/init.goldfish.rc. All messages are framed and the protocol |
| is the following: |
| |
| 1/ Clients sends the 'list' command |
| |
| 2/ Service answers by listing all system properties to set. One per |
| message with the following format: |
| |
| <property-name>=<property-value> |
| |
| Note that <property-value> is not zero-terminated. |
| |
| |
| 3/ After sending all the properties, the service force-closes the |
| connection. |
| |
| Implementation: android/boot-properties.c |
| Since: SDK 1.XXX (donut) |