diff options
author | Vladimir Chtchetkine <vchtchetkine@google.com> | 2012-03-05 14:20:00 -0800 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2012-03-05 14:20:00 -0800 |
commit | 025a347156acb6c22444f7d4d06c0f44da573c5e (patch) | |
tree | 8252ef05e1127002f2b0fa4c5452bbce4e603571 /android/multitouch-port.h | |
parent | 7fc0c500e5bcb4fad084302d217708a7a07da452 (diff) | |
parent | 8dd31e8e10fc3ca10192368acf19d2345eeddde7 (diff) | |
download | external_qemu-025a347156acb6c22444f7d4d06c0f44da573c5e.zip external_qemu-025a347156acb6c22444f7d4d06c0f44da573c5e.tar.gz external_qemu-025a347156acb6c22444f7d4d06c0f44da573c5e.tar.bz2 |
Merge "Multi-touch emulation support"
Diffstat (limited to 'android/multitouch-port.h')
-rw-r--r-- | android/multitouch-port.h | 132 |
1 files changed, 132 insertions, 0 deletions
diff --git a/android/multitouch-port.h b/android/multitouch-port.h new file mode 100644 index 0000000..553617b --- /dev/null +++ b/android/multitouch-port.h @@ -0,0 +1,132 @@ +/* + * Copyright (C) 2011 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef ANDROID_ANDROID_MULTITOUCH_PORT_H_ +#define ANDROID_ANDROID_MULTITOUCH_PORT_H_ + +/* + * Encapsulates exchange protocol between the multi-touch screen emulator, and an + * application running on an Android device that provides touch events, and is + * connected to the host via USB. + */ + +#include "android/android-device.h" + +/* TCP port reserved for multi-touch emulation. */ +#define AD_MULTITOUCH_PORT 1969 + +/* + * Codes that define transmitted framebuffer format: + * + * NOTE: Application on the device side depends on these values. Any changes + * made here must be reflected in the app too. Application location is at + * 'sdk/apps/SdkController/SdkControllerMultitouch' root. + */ + +/* Framebuffer is transmitted as JPEG. */ +#define MTFB_JPEG 1 +/* Framebuffer is transmitted as raw RGB565 bitmap. */ +#define MTFB_RGB565 2 +/* Framebuffer is transmitted as raw RGB888 bitmap. */ +#define MTFB_RGB888 3 + +/* Framebuffer update descriptor. + * This descriptor is used to collect properties of the updated framebuffer + * region. This descriptor is also sent to the MT emulation application on the + * device, so it can properly redraw its screen. + * + * NOTE: Application on the device side depends on that structure. Any changes + * made here must be reflected in the app too. Application location is at + * 'sdk/apps/SdkController/SdkControllerMultitouch' root. + */ +typedef struct MTFrameHeader { + /* Size of the header. Must be always sizeof(MTFrameHeader). */ + int header_size; + /* Display width */ + int disp_width; + /* Display height */ + int disp_height; + /* x, y, w, and h define framebuffer region that has been updated. */ + int x; + int y; + int w; + int h; + /* Bytes per line in the framebufer. */ + int bpl; + /* Bytes per pixel in the framebufer. */ + int bpp; + /* Defines format in which framebuffer is transmitted to the device. */ + int format; +} MTFrameHeader; + +/* Declares multi-touch port descriptor. */ +typedef struct AndroidMTSPort AndroidMTSPort; + +/* Creates multi-touch port, and connects it to the device. + * Param: + * opaque - An opaque pointer that is passed back to the callback routines. + * Return: + * Initialized device descriptor on success, or NULL on failure. If failure is + * returned from this routine, 'errno' indicates the reason for failure. If this + * routine successeds, a connection is established with the sensor reading + * application on the device. + */ +extern AndroidMTSPort* mts_port_create(void* opaque); + +/* Disconnects from the multi-touch port, and destroys the descriptor. */ +extern void mts_port_destroy(AndroidMTSPort* amtp); + +/* Checks if port is connected to a MT-emulating application on the device. + * Note that connection can go out and then be restored at any time after + * mts_port_create API succeeded. + */ +extern int mts_port_is_connected(AndroidMTSPort* amtp); + +/* Queries the connected application to start delivering multi-touch events. + * Param: + * amtp - Android multi-touch port instance returned from mts_port_create. + * Return: + * Zero on success, failure otherwise. + */ +extern int mts_port_start(AndroidMTSPort* amtp); + +/* Queries the connected application to stop delivering multi-touch events. + * Param: + * amtp - Android multi-touch port instance returned from mts_port_create. + * Return: + * Zero on success, failure otherwise. + */ +extern int mts_port_stop(AndroidMTSPort* amtp); + +/* Sends framebuffer update to the multi-touch emulation application, running on + * the android device. + * Param: + * mtsp - Android multi-touch port instance returned from mts_port_create. + * fmt - Framebuffer update descriptor. + * fb - Beginning of the framebuffer. + * cb - Callback to invoke when update has been transferred to the MT-emulating + * application on the device. + * cb_opaque - An opaque parameter to pass back to the 'cb' callback. + * Return: + * 0 on success, or != 0 on failure. + */ +extern int mts_port_send_frame(AndroidMTSPort* mtsp, + MTFrameHeader* fmt, + const uint8_t* fb, + async_send_cb cb, + void* cb_opaque); + +#endif /* ANDROID_ANDROID_MULTITOUCH_PORT_H_ */ |