blob: 6a2cc660da60aa049d72184e39a6664b7f02c0c0 [file] [log] [blame]
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -08001/* Copyright (C) 2007-2008 The Android Open Source Project
2**
3** This software is licensed under the terms of the GNU General Public
4** License version 2, as published by the Free Software Foundation, and
5** may be copied, distributed, and modified under those terms.
6**
7** This program is distributed in the hope that it will be useful,
8** but WITHOUT ANY WARRANTY; without even the implied warranty of
9** MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
10** GNU General Public License for more details.
11*/
12#ifndef _android_qemud_h
13#define _android_qemud_h
14
15#include "qemu-common.h"
16
David Turnerfff1ae52009-04-05 14:22:28 -070017/* Support for the qemud-based 'services' in the emulator.
18 * Please read docs/ANDROID-QEMUD.TXT to understand what this is about.
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080019 */
20
21/* initialize the qemud support code in the emulator
22 */
23
24extern void android_qemud_init( void );
25
26/* return the character driver state object that needs to be connected to the
27 * emulated serial port where all multiplexed channels go through.
28 */
29extern CharDriverState* android_qemud_get_cs( void );
30
David Turnerfff1ae52009-04-05 14:22:28 -070031/* returns in '*pcs' a CharDriverState object that will be connected to
32 * a single client in the emulated system for a given named service.
33 *
34 * this is only used to connect GPS and GSM service clients to the
35 * implementation that requires a CharDriverState object for legacy
36 * reasons.
37 *
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080038 * returns 0 on success, or -1 in case of error
39 */
40extern int android_qemud_get_channel( const char* name, CharDriverState* *pcs );
41
David Turnerfff1ae52009-04-05 14:22:28 -070042/* set an explicit CharDriverState object for a given qemud communication channel. this
43 * is used to attach the channel to an external char driver device (e.g. one
44 * created with "-serial <device>") directly.
45 *
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080046 * returns 0 on success, -1 on error
47 */
48extern int android_qemud_set_channel( const char* name, CharDriverState* peer_cs );
49
50/* list of known qemud channel names */
51#define ANDROID_QEMUD_GSM "gsm"
52#define ANDROID_QEMUD_GPS "gps"
53#define ANDROID_QEMUD_CONTROL "control"
The Android Open Source Project9877e2e2009-03-18 17:39:44 -070054#define ANDROID_QEMUD_SENSORS "sensors"
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -080055
The Android Open Source Project9877e2e2009-03-18 17:39:44 -070056/* A QemudService service is used to connect one or more clients to
57 * a given emulator facility. Only one client can be connected at any
58 * given time, but the connection can be closed periodically.
59 */
60
61typedef struct QemudClient QemudClient;
62typedef struct QemudService QemudService;
63
64
David 'Digit' Turner318e4f22009-05-25 18:01:03 +020065/* A function that will be called when the client running in the emulated
66 * system has closed its connection to qemud.
67 */
The Android Open Source Project9877e2e2009-03-18 17:39:44 -070068typedef void (*QemudClientClose)( void* opaque );
The Android Open Source Project9877e2e2009-03-18 17:39:44 -070069
David 'Digit' Turner318e4f22009-05-25 18:01:03 +020070/* A function that will be called when the client sends a message to the
71 * service through qemud.
72 */
73typedef void (*QemudClientRecv) ( void* opaque, uint8_t* msg, int msglen, QemudClient* client );
74
Ot ten Thije871da2a2010-09-20 10:29:22 +010075/* A function that will be called when the state of the client should be
76 * saved to a snapshot.
77 */
78typedef void (*QemudClientSave) ( QEMUFile* f, QemudClient* client, void* opaque );
79
80/* A function that will be called when the state of the client should be
81 * restored from a snapshot.
82 */
83typedef int (*QemudClientLoad) ( QEMUFile* f, QemudClient* client, void* opaque );
84
David 'Digit' Turner318e4f22009-05-25 18:01:03 +020085/* Register a new client for a given service.
86 * 'clie_opaque' will be sent as the first argument to 'clie_recv' and 'clie_close'
87 * 'clie_recv' and 'clie_close' are both optional and may be NULL.
88 *
89 * You should typically use this function within a QemudServiceConnect callback
90 * (see below).
91 */
Vladimir Chtchetkine4c414822011-08-20 08:55:37 -070092extern QemudClient* qemud_client_new( QemudService* service,
David 'Digit' Turnerbb1f4322011-03-21 17:50:20 +010093 int channel_id,
Vladimir Chtchetkine4c414822011-08-20 08:55:37 -070094 const char* client_param,
David 'Digit' Turnerbb1f4322011-03-21 17:50:20 +010095 void* clie_opaque,
96 QemudClientRecv clie_recv,
97 QemudClientClose clie_close,
98 QemudClientSave clie_save,
99 QemudClientLoad clie_load );
The Android Open Source Project9877e2e2009-03-18 17:39:44 -0700100
David 'Digit' Turner318e4f22009-05-25 18:01:03 +0200101/* Enable framing on a given client channel.
102 */
The Android Open Source Project9877e2e2009-03-18 17:39:44 -0700103extern void qemud_client_set_framing( QemudClient* client, int enabled );
104
David 'Digit' Turner318e4f22009-05-25 18:01:03 +0200105/* Send a message to a given qemud client
106 */
The Android Open Source Project9877e2e2009-03-18 17:39:44 -0700107extern void qemud_client_send ( QemudClient* client, const uint8_t* msg, int msglen );
David 'Digit' Turner318e4f22009-05-25 18:01:03 +0200108
109/* Force-close the connection to a given qemud client.
110 */
The Android Open Source Project9877e2e2009-03-18 17:39:44 -0700111extern void qemud_client_close( QemudClient* client );
112
113
David 'Digit' Turner318e4f22009-05-25 18:01:03 +0200114/* A function that will be called each time a new client in the emulated
115 * system tries to connect to a given qemud service. This should typically
116 * call qemud_client_new() to register a new client.
117 */
Vladimir Chtchetkine4c414822011-08-20 08:55:37 -0700118typedef QemudClient* (*QemudServiceConnect)( void* opaque,
119 QemudService* service,
120 int channel,
121 const char* client_param );
The Android Open Source Project9877e2e2009-03-18 17:39:44 -0700122
Ot ten Thije871da2a2010-09-20 10:29:22 +0100123/* A function that will be called when the state of the service should be
124 * saved to a snapshot.
125 */
126typedef void (*QemudServiceSave) ( QEMUFile* f, QemudService* service, void* opaque );
127
128/* A function that will be called when the state of the service should be
129 * restored from a snapshot.
130 */
131typedef int (*QemudServiceLoad) ( QEMUFile* f, QemudService* service, void* opaque );
132
David 'Digit' Turner318e4f22009-05-25 18:01:03 +0200133/* Register a new qemud service.
134 * 'serv_opaque' is the first parameter to 'serv_connect'
135 */
The Android Open Source Project9877e2e2009-03-18 17:39:44 -0700136extern QemudService* qemud_service_register( const char* serviceName,
137 int max_clients,
138 void* serv_opaque,
Ot ten Thije871da2a2010-09-20 10:29:22 +0100139 QemudServiceConnect serv_connect,
140 QemudServiceSave serv_save,
141 QemudServiceLoad serv_load);
The Android Open Source Project9877e2e2009-03-18 17:39:44 -0700142
David 'Digit' Turner318e4f22009-05-25 18:01:03 +0200143/* Sends a message to all clients of a given service.
144 */
The Android Open Source Project9877e2e2009-03-18 17:39:44 -0700145extern void qemud_service_broadcast( QemudService* sv,
146 const uint8_t* msg,
147 int msglen );
The Android Open Source Project8b23a6c2009-03-03 19:30:32 -0800148
149#endif /* _android_qemud_h */