aboutsummaryrefslogtreecommitdiffstats
path: root/android/multitouch-port.h
blob: d99b3fd7cb2dc556881c9fc2673d52df1d7860e3 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
/*
 * Copyright (C) 2011 The Android Open Source Project
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

#ifndef ANDROID_ANDROID_MULTITOUCH_PORT_H_
#define ANDROID_ANDROID_MULTITOUCH_PORT_H_

/*
 * Encapsulates exchange protocol between the multi-touch screen emulator, and an
 * application running on an Android device that provides touch events, and is
 * connected to the host via USB.
 */

#include "android/android-device.h"

/* TCP port reserved for multi-touch emulation. */
#define AD_MULTITOUCH_PORT      1969

/*
 * Codes that define transmitted framebuffer format:
 *
 * NOTE: Application on the device side depends on these values. Any changes
 * made here must be reflected in the app too. Application location is at
 * 'sdk/apps/SdkController/SdkControllerMultitouch' root.
 */

/* Framebuffer is transmitted as JPEG. */
#define MTFB_JPEG       1
/* Framebuffer is transmitted as raw RGB565 bitmap. */
#define MTFB_RGB565     2
/* Framebuffer is transmitted as raw RGB888 bitmap. */
#define MTFB_RGB888     3

/* Framebuffer update descriptor.
 * This descriptor is used to collect properties of the updated framebuffer
 * region. This descriptor is also sent to the MT emulation application on the
 * device, so it can properly redraw its screen.
 *
 * NOTE: Application on the device side depends on that structure. Any changes
 * made here must be reflected in the app too. Application location is at
 * 'sdk/apps/SdkController/SdkControllerMultitouch' root.
 */
typedef struct MTFrameHeader {
    /* Size of the header. Must be always sizeof(MTFrameHeader). */
    int         header_size;
    /* Display width */
    int         disp_width;
    /* Display height */
    int         disp_height;
    /* x, y, w, and h define framebuffer region that has been updated. */
    int         x;
    int         y;
    int         w;
    int         h;
    /* Bytes per line in the framebufer. */
    int         bpl;
    /* Bytes per pixel in the framebufer. */
    int         bpp;
    /* Defines format in which framebuffer is transmitted to the device. */
    int         format;
} MTFrameHeader;

/* Declares multi-touch port descriptor. */
typedef struct AndroidMTSPort AndroidMTSPort;

/* Creates multi-touch port, and connects it to the device.
 * Param:
 *  opaque - An opaque pointer that is passed back to the callback routines.
 * Return:
 *  Initialized device descriptor on success, or NULL on failure. If failure is
 *  returned from this routine, 'errno' indicates the reason for failure. If this
 *  routine successeds, a connection is established with the sensor reading
 *  application on the device.
 */
extern AndroidMTSPort* mts_port_create(void* opaque);

/* Disconnects from the multi-touch port, and destroys the descriptor. */
extern void mts_port_destroy(AndroidMTSPort* amtp);

/* Checks if port is connected to a MT-emulating application on the device.
 * Note that connection can go out and then be restored at any time after
 * mts_port_create API succeeded.
 */
extern int mts_port_is_connected(AndroidMTSPort* amtp);

/* Queries the connected application to start delivering multi-touch events.
 * Param:
 *  amtp - Android multi-touch port instance returned from mts_port_create.
 * Return:
 *  Zero on success, failure otherwise.
 */
extern int mts_port_start(AndroidMTSPort* amtp);

/* Queries the connected application to stop delivering multi-touch events.
 * Param:
 *  amtp - Android multi-touch port instance returned from mts_port_create.
 * Return:
 *  Zero on success, failure otherwise.
 */
extern int mts_port_stop(AndroidMTSPort* amtp);

/* Sends framebuffer update to the multi-touch emulation application, running on
 * the android device.
 * Param:
 *  mtsp - Android multi-touch port instance returned from mts_port_create.
 *  fmt - Framebuffer update descriptor.
 *  fb - Beginning of the framebuffer.
 *  cb - Callback to invoke when update has been transferred to the MT-emulating
 *      application on the device.
 *  cb_opaque - An opaque parameter to pass back to the 'cb' callback.
 *  ydir - Indicates direction in which lines are arranged in the framebuffer. If
 *      this value is negative, lines are arranged in bottom-up format (i.e. the
 *      bottom line is at the beginning of the buffer).
 * Return:
 *  0 on success, or != 0 on failure.
 */
extern int mts_port_send_frame(AndroidMTSPort* mtsp,
                               MTFrameHeader* fmt,
                               const uint8_t* fb,
                               async_send_cb cb,
                               void* cb_opaque,
                               int ydir);

#endif  /* ANDROID_ANDROID_MULTITOUCH_PORT_H_ */