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