18dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine/* 28dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * Copyright (C) 2011 The Android Open Source Project 38dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * 48dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * Licensed under the Apache License, Version 2.0 (the "License"); 58dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * you may not use this file except in compliance with the License. 68dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * You may obtain a copy of the License at 78dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * 88dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * http://www.apache.org/licenses/LICENSE-2.0 98dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * 108dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * Unless required by applicable law or agreed to in writing, software 118dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * distributed under the License is distributed on an "AS IS" BASIS, 128dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 138dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * See the License for the specific language governing permissions and 148dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * limitations under the License. 158dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine */ 168dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine 178dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine#ifndef ANDROID_ANDROID_MULTITOUCH_PORT_H_ 188dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine#define ANDROID_ANDROID_MULTITOUCH_PORT_H_ 198dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine 207136b053b7fc7840ec64e01d1d19ab822e1f949aVladimir Chtchetkine#include "android/sdk-controller-socket.h" 217136b053b7fc7840ec64e01d1d19ab822e1f949aVladimir Chtchetkine 228dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine/* 238dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * Encapsulates exchange protocol between the multi-touch screen emulator, and an 248dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * application running on an Android device that provides touch events, and is 258dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * connected to the host via USB. 268dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine */ 278dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine 288dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine/* 298dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * Codes that define transmitted framebuffer format: 308dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * 318dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * NOTE: Application on the device side depends on these values. Any changes 328dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * made here must be reflected in the app too. Application location is at 338dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * 'sdk/apps/SdkController/SdkControllerMultitouch' root. 348dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine */ 358dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine 368dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine/* Framebuffer is transmitted as JPEG. */ 378dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine#define MTFB_JPEG 1 388dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine/* Framebuffer is transmitted as raw RGB565 bitmap. */ 398dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine#define MTFB_RGB565 2 408dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine/* Framebuffer is transmitted as raw RGB888 bitmap. */ 418dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine#define MTFB_RGB888 3 428dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine 438dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine/* Framebuffer update descriptor. 448dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * This descriptor is used to collect properties of the updated framebuffer 458dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * region. This descriptor is also sent to the MT emulation application on the 468dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * device, so it can properly redraw its screen. 478dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * 488dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * NOTE: Application on the device side depends on that structure. Any changes 498dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * made here must be reflected in the app too. Application location is at 508dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * 'sdk/apps/SdkController/SdkControllerMultitouch' root. 518dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine */ 528dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkinetypedef struct MTFrameHeader { 538dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine /* Size of the header. Must be always sizeof(MTFrameHeader). */ 548dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine int header_size; 558dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine /* Display width */ 568dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine int disp_width; 578dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine /* Display height */ 588dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine int disp_height; 598dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine /* x, y, w, and h define framebuffer region that has been updated. */ 608dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine int x; 618dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine int y; 628dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine int w; 638dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine int h; 648dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine /* Bytes per line in the framebufer. */ 658dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine int bpl; 668dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine /* Bytes per pixel in the framebufer. */ 678dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine int bpp; 688dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine /* Defines format in which framebuffer is transmitted to the device. */ 698dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine int format; 708dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine} MTFrameHeader; 718dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine 728dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine/* Declares multi-touch port descriptor. */ 738dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkinetypedef struct AndroidMTSPort AndroidMTSPort; 748dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine 758dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine/* Creates multi-touch port, and connects it to the device. 768dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * Param: 778dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * opaque - An opaque pointer that is passed back to the callback routines. 788dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * Return: 798dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * Initialized device descriptor on success, or NULL on failure. If failure is 808dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * returned from this routine, 'errno' indicates the reason for failure. If this 818dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * routine successeds, a connection is established with the sensor reading 828dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * application on the device. 838dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine */ 848dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkineextern AndroidMTSPort* mts_port_create(void* opaque); 858dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine 868dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine/* Disconnects from the multi-touch port, and destroys the descriptor. */ 878dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkineextern void mts_port_destroy(AndroidMTSPort* amtp); 888dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine 898dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine/* Sends framebuffer update to the multi-touch emulation application, running on 908dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * the android device. 918dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * Param: 928dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * mtsp - Android multi-touch port instance returned from mts_port_create. 938dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * fmt - Framebuffer update descriptor. 948dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * fb - Beginning of the framebuffer. 958dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * cb - Callback to invoke when update has been transferred to the MT-emulating 968dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * application on the device. 978dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * cb_opaque - An opaque parameter to pass back to the 'cb' callback. 981a820e90d8848c6b0ac7c78b5a2e8b28c9738a3aVladimir Chtchetkine * ydir - Indicates direction in which lines are arranged in the framebuffer. If 991a820e90d8848c6b0ac7c78b5a2e8b28c9738a3aVladimir Chtchetkine * this value is negative, lines are arranged in bottom-up format (i.e. the 1001a820e90d8848c6b0ac7c78b5a2e8b28c9738a3aVladimir Chtchetkine * bottom line is at the beginning of the buffer). 1018dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * Return: 1028dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine * 0 on success, or != 0 on failure. 1038dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine */ 1048dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkineextern int mts_port_send_frame(AndroidMTSPort* mtsp, 1058dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine MTFrameHeader* fmt, 1068dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine const uint8_t* fb, 1077136b053b7fc7840ec64e01d1d19ab822e1f949aVladimir Chtchetkine on_sdkctl_direct_cb cb, 1081a820e90d8848c6b0ac7c78b5a2e8b28c9738a3aVladimir Chtchetkine void* cb_opaque, 1091a820e90d8848c6b0ac7c78b5a2e8b28c9738a3aVladimir Chtchetkine int ydir); 1108dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine 1118dd31e8e10fc3ca10192368acf19d2345eeddde7Vladimir Chtchetkine#endif /* ANDROID_ANDROID_MULTITOUCH_PORT_H_ */ 112