• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 #include "android/sdk-controller-socket.h"
21 
22 /*
23  * Encapsulates exchange protocol between the multi-touch screen emulator, and an
24  * application running on an Android device that provides touch events, and is
25  * connected to the host via USB.
26  */
27 
28 /*
29  * Codes that define transmitted framebuffer format:
30  *
31  * NOTE: Application on the device side depends on these values. Any changes
32  * made here must be reflected in the app too. Application location is at
33  * 'sdk/apps/SdkController/SdkControllerMultitouch' root.
34  */
35 
36 /* Framebuffer is transmitted as JPEG. */
37 #define MTFB_JPEG       1
38 /* Framebuffer is transmitted as raw RGB565 bitmap. */
39 #define MTFB_RGB565     2
40 /* Framebuffer is transmitted as raw RGB888 bitmap. */
41 #define MTFB_RGB888     3
42 
43 /* Framebuffer update descriptor.
44  * This descriptor is used to collect properties of the updated framebuffer
45  * region. This descriptor is also sent to the MT emulation application on the
46  * device, so it can properly redraw its screen.
47  *
48  * NOTE: Application on the device side depends on that structure. Any changes
49  * made here must be reflected in the app too. Application location is at
50  * 'sdk/apps/SdkController/SdkControllerMultitouch' root.
51  */
52 typedef struct MTFrameHeader {
53     /* Size of the header. Must be always sizeof(MTFrameHeader). */
54     int         header_size;
55     /* Display width */
56     int         disp_width;
57     /* Display height */
58     int         disp_height;
59     /* x, y, w, and h define framebuffer region that has been updated. */
60     int         x;
61     int         y;
62     int         w;
63     int         h;
64     /* Bytes per line in the framebufer. */
65     int         bpl;
66     /* Bytes per pixel in the framebufer. */
67     int         bpp;
68     /* Defines format in which framebuffer is transmitted to the device. */
69     int         format;
70 } MTFrameHeader;
71 
72 /* Declares multi-touch port descriptor. */
73 typedef struct AndroidMTSPort AndroidMTSPort;
74 
75 /* Creates multi-touch port, and connects it to the device.
76  * Param:
77  *  opaque - An opaque pointer that is passed back to the callback routines.
78  * Return:
79  *  Initialized device descriptor on success, or NULL on failure. If failure is
80  *  returned from this routine, 'errno' indicates the reason for failure. If this
81  *  routine successeds, a connection is established with the sensor reading
82  *  application on the device.
83  */
84 extern AndroidMTSPort* mts_port_create(void* opaque);
85 
86 /* Disconnects from the multi-touch port, and destroys the descriptor. */
87 extern void mts_port_destroy(AndroidMTSPort* amtp);
88 
89 /* Sends framebuffer update to the multi-touch emulation application, running on
90  * the android device.
91  * Param:
92  *  mtsp - Android multi-touch port instance returned from mts_port_create.
93  *  fmt - Framebuffer update descriptor.
94  *  fb - Beginning of the framebuffer.
95  *  cb - Callback to invoke when update has been transferred to the MT-emulating
96  *      application on the device.
97  *  cb_opaque - An opaque parameter to pass back to the 'cb' callback.
98  *  ydir - Indicates direction in which lines are arranged in the framebuffer. If
99  *      this value is negative, lines are arranged in bottom-up format (i.e. the
100  *      bottom line is at the beginning of the buffer).
101  * Return:
102  *  0 on success, or != 0 on failure.
103  */
104 extern int mts_port_send_frame(AndroidMTSPort* mtsp,
105                                MTFrameHeader* fmt,
106                                const uint8_t* fb,
107                                on_sdkctl_direct_cb cb,
108                                void* cb_opaque,
109                                int ydir);
110 
111 #endif  /* ANDROID_ANDROID_MULTITOUCH_PORT_H_ */
112