1 /* 2 * Copyright (C) 2011 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 #ifndef ANDROID_ANDROID_MULTITOUCH_PORT_H_ 18 #define ANDROID_ANDROID_MULTITOUCH_PORT_H_ 19 20 /* 21 * Encapsulates exchange protocol between the multi-touch screen emulator, and an 22 * application running on an Android device that provides touch events, and is 23 * connected to the host via USB. 24 */ 25 26 #include "android/android-device.h" 27 28 /* TCP port reserved for multi-touch emulation. */ 29 #define AD_MULTITOUCH_PORT 1969 30 31 /* 32 * Codes that define transmitted framebuffer format: 33 * 34 * NOTE: Application on the device side depends on these values. Any changes 35 * made here must be reflected in the app too. Application location is at 36 * 'sdk/apps/SdkController/SdkControllerMultitouch' root. 37 */ 38 39 /* Framebuffer is transmitted as JPEG. */ 40 #define MTFB_JPEG 1 41 /* Framebuffer is transmitted as raw RGB565 bitmap. */ 42 #define MTFB_RGB565 2 43 /* Framebuffer is transmitted as raw RGB888 bitmap. */ 44 #define MTFB_RGB888 3 45 46 /* Framebuffer update descriptor. 47 * This descriptor is used to collect properties of the updated framebuffer 48 * region. This descriptor is also sent to the MT emulation application on the 49 * device, so it can properly redraw its screen. 50 * 51 * NOTE: Application on the device side depends on that structure. Any changes 52 * made here must be reflected in the app too. Application location is at 53 * 'sdk/apps/SdkController/SdkControllerMultitouch' root. 54 */ 55 typedef struct MTFrameHeader { 56 /* Size of the header. Must be always sizeof(MTFrameHeader). */ 57 int header_size; 58 /* Display width */ 59 int disp_width; 60 /* Display height */ 61 int disp_height; 62 /* x, y, w, and h define framebuffer region that has been updated. */ 63 int x; 64 int y; 65 int w; 66 int h; 67 /* Bytes per line in the framebufer. */ 68 int bpl; 69 /* Bytes per pixel in the framebufer. */ 70 int bpp; 71 /* Defines format in which framebuffer is transmitted to the device. */ 72 int format; 73 } MTFrameHeader; 74 75 /* Declares multi-touch port descriptor. */ 76 typedef struct AndroidMTSPort AndroidMTSPort; 77 78 /* Creates multi-touch port, and connects it to the device. 79 * Param: 80 * opaque - An opaque pointer that is passed back to the callback routines. 81 * Return: 82 * Initialized device descriptor on success, or NULL on failure. If failure is 83 * returned from this routine, 'errno' indicates the reason for failure. If this 84 * routine successeds, a connection is established with the sensor reading 85 * application on the device. 86 */ 87 extern AndroidMTSPort* mts_port_create(void* opaque); 88 89 /* Disconnects from the multi-touch port, and destroys the descriptor. */ 90 extern void mts_port_destroy(AndroidMTSPort* amtp); 91 92 /* Checks if port is connected to a MT-emulating application on the device. 93 * Note that connection can go out and then be restored at any time after 94 * mts_port_create API succeeded. 95 */ 96 extern int mts_port_is_connected(AndroidMTSPort* amtp); 97 98 /* Queries the connected application to start delivering multi-touch events. 99 * Param: 100 * amtp - Android multi-touch port instance returned from mts_port_create. 101 * Return: 102 * Zero on success, failure otherwise. 103 */ 104 extern int mts_port_start(AndroidMTSPort* amtp); 105 106 /* Queries the connected application to stop delivering multi-touch events. 107 * Param: 108 * amtp - Android multi-touch port instance returned from mts_port_create. 109 * Return: 110 * Zero on success, failure otherwise. 111 */ 112 extern int mts_port_stop(AndroidMTSPort* amtp); 113 114 /* Sends framebuffer update to the multi-touch emulation application, running on 115 * the android device. 116 * Param: 117 * mtsp - Android multi-touch port instance returned from mts_port_create. 118 * fmt - Framebuffer update descriptor. 119 * fb - Beginning of the framebuffer. 120 * cb - Callback to invoke when update has been transferred to the MT-emulating 121 * application on the device. 122 * cb_opaque - An opaque parameter to pass back to the 'cb' callback. 123 * ydir - Indicates direction in which lines are arranged in the framebuffer. If 124 * this value is negative, lines are arranged in bottom-up format (i.e. the 125 * bottom line is at the beginning of the buffer). 126 * Return: 127 * 0 on success, or != 0 on failure. 128 */ 129 extern int mts_port_send_frame(AndroidMTSPort* mtsp, 130 MTFrameHeader* fmt, 131 const uint8_t* fb, 132 async_send_cb cb, 133 void* cb_opaque, 134 int ydir); 135 136 #endif /* ANDROID_ANDROID_MULTITOUCH_PORT_H_ */ 137