• 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 /*
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