From 109da2b6b6ffe2ccc9d33a447f0c808d022de3b0 Mon Sep 17 00:00:00 2001 From: choisjin80 Date: Wed, 20 Mar 2013 21:11:56 +0900 Subject: [PATCH] Basic ecp message handler added --- json-streamer.c | 5 +++-- json-streamer.h | 5 +++-- monitor.c | 6 +++--- qapi-schema.json | 31 ++++++++++++++++++++++++++++++- qemu-config.c | 22 ++++++++++++++++++++++ qemu-ga.c | 4 ++-- qemu-sockets.c | 3 +-- qjson.c | 4 ++-- qmp-commands.hx | 30 ++++++++++++++++++++++++++++++ tizen/src/Makefile.tizen | 3 +++ tizen/src/emulator.c | 3 +++ 11 files changed, 102 insertions(+), 14 deletions(-) diff --git a/json-streamer.c b/json-streamer.c index c255c78..78b20b8 100644 --- a/json-streamer.c +++ b/json-streamer.c @@ -84,7 +84,7 @@ out_emit: /* send current list of tokens to parser and reset tokenizer */ parser->brace_count = 0; parser->bracket_count = 0; - parser->emit(parser, parser->tokens); + parser->emit(parser, parser->tokens, parser->opaque); if (parser->tokens) { QDECREF(parser->tokens); } @@ -93,13 +93,14 @@ out_emit: } void json_message_parser_init(JSONMessageParser *parser, - void (*func)(JSONMessageParser *, QList *)) + void (*func)(JSONMessageParser *, QList *, void *), void *opaque) { parser->emit = func; parser->brace_count = 0; parser->bracket_count = 0; parser->tokens = qlist_new(); parser->token_size = 0; + parser->opaque = opaque; json_lexer_init(&parser->lexer, json_message_process_token); } diff --git a/json-streamer.h b/json-streamer.h index f09bc4d..f6b8fd2 100644 --- a/json-streamer.h +++ b/json-streamer.h @@ -19,16 +19,17 @@ typedef struct JSONMessageParser { - void (*emit)(struct JSONMessageParser *parser, QList *tokens); + void (*emit)(struct JSONMessageParser *parser, QList *tokens, void *); JSONLexer lexer; int brace_count; int bracket_count; QList *tokens; uint64_t token_size; + void *opaque; } JSONMessageParser; void json_message_parser_init(JSONMessageParser *parser, - void (*func)(JSONMessageParser *, QList *)); + void (*func)(JSONMessageParser *, QList *, void *), void *opaque); int json_message_parser_feed(JSONMessageParser *parser, const char *buffer, size_t size); diff --git a/monitor.c b/monitor.c index b17b1bb..f58bc5d 100644 --- a/monitor.c +++ b/monitor.c @@ -4684,7 +4684,7 @@ static void qmp_call_cmd(Monitor *mon, const mon_cmd_t *cmd, qobject_decref(data); } -static void handle_qmp_command(JSONMessageParser *parser, QList *tokens) +static void handle_qmp_command(JSONMessageParser *parser, QList *tokens, void *opaque) { int err; QObject *obj; @@ -4839,7 +4839,7 @@ static void monitor_control_event(void *opaque, int event) break; case CHR_EVENT_CLOSED: json_message_parser_destroy(&mon->mc->parser); - json_message_parser_init(&mon->mc->parser, handle_qmp_command); + json_message_parser_init(&mon->mc->parser, handle_qmp_command, NULL); mon_refcount--; monitor_fdsets_cleanup(); break; @@ -4947,7 +4947,7 @@ void monitor_init(CharDriverState *chr, int flags) monitor_control_event, mon); qemu_chr_fe_set_echo(chr, true); - json_message_parser_init(&mon->mc->parser, handle_qmp_command); + json_message_parser_init(&mon->mc->parser, handle_qmp_command, NULL); } else { qemu_chr_add_handlers(chr, monitor_can_read, monitor_read, monitor_event, mon); diff --git a/qapi-schema.json b/qapi-schema.json index bd8ad74..acff082 100644 --- a/qapi-schema.json +++ b/qapi-schema.json @@ -2439,7 +2439,7 @@ # Since: 1.2.0 ## { 'type': 'FdsetInfo', - 'data': {'fdset-id': 'int', 'fds': ['FdsetFdInfo']} } + 'data': {'fdset-id': yy'int', 'fds': ['FdsetFdInfo']} } ## # @query-fdsets: @@ -2493,3 +2493,32 @@ # Since: 1.2.0 ## { 'command': 'query-target', 'returns': 'TargetInfo' } + + + +## Eric 2013.3.7 ## + +## +# @AccelInfo: +# +# Information describing the acceleration sensor value +# +# @Xaxis: x axis value of the acceleration sensor +# @Yaxis: y axis value of the acceleration sensor +# @Zaxis: z axis value of the acceleration sensor +# +# Since: 1.2.0 +## +{ 'type': 'AccelInfo', + 'data': { 'Xaxis': 'int', 'Yaxis': 'int', 'Zaxis' : 'int'} } + +## +# @query-accel: +# +# Return information about the acceleration sensor value +# +# Returns: AccelInfo +# +# Since: 1.2.0 +## +{ 'command': 'query-accel', 'returns': 'AccelInfo' } diff --git a/qemu-config.c b/qemu-config.c index c05ffbc..4a02189 100644 --- a/qemu-config.c +++ b/qemu-config.c @@ -643,6 +643,27 @@ QemuOptsList qemu_boot_opts = { }, }; +static QemuOptsList qemu_carrier_opts = { + .name = "carrier", + .head = QTAILQ_HEAD_INITIALIZER(qemu_carrier_opts.head), + .desc = { + { + .name = "host", + .type = QEMU_OPT_STRING, + },{ + .name = "port", + .type = QEMU_OPT_STRING, + },{ + .name = "ipv4", + .type = QEMU_OPT_BOOL, + },{ + .name = "ipv6", + .type = QEMU_OPT_BOOL, + }, + { /* end of list */ } + }, +}; + static QemuOptsList *vm_config_groups[32] = { &qemu_drive_opts, &qemu_chardev_opts, @@ -659,6 +680,7 @@ static QemuOptsList *vm_config_groups[32] = { &qemu_boot_opts, &qemu_iscsi_opts, &qemu_sandbox_opts, + &qemu_carrier_opts, NULL, }; diff --git a/qemu-ga.c b/qemu-ga.c index 7623079..f744a95 100644 --- a/qemu-ga.c +++ b/qemu-ga.c @@ -498,7 +498,7 @@ static void process_command(GAState *s, QDict *req) } /* handle requests/control events coming in over the channel */ -static void process_event(JSONMessageParser *parser, QList *tokens) +static void process_event(JSONMessageParser *parser, QList *tokens, void *opaque) { GAState *s = container_of(parser, GAState, parser); QObject *obj; @@ -861,7 +861,7 @@ int main(int argc, char **argv) s->command_state = ga_command_state_new(); ga_command_state_init(s, s->command_state); ga_command_state_init_all(s->command_state); - json_message_parser_init(&s->parser, process_event); + json_message_parser_init(&s->parser, process_event, NULL); ga_state = s; #ifndef _WIN32 if (!register_signal_handlers()) { diff --git a/qemu-sockets.c b/qemu-sockets.c index 361d890..a3ff183 100644 --- a/qemu-sockets.c +++ b/qemu-sockets.c @@ -114,7 +114,6 @@ int inet_listen_opts(QemuOpts *opts, int port_offset, Error **errp) char uaddr[INET6_ADDRSTRLEN+1]; char uport[33]; int slisten, rc, to, port_min, port_max, p; - memset(&ai,0, sizeof(ai)); ai.ai_flags = AI_PASSIVE | AI_ADDRCONFIG; ai.ai_family = PF_UNSPEC; @@ -549,7 +548,7 @@ int unix_listen_opts(QemuOpts *opts) fprintf(stderr, "bind(unix:%s): %s\n", un.sun_path, strerror(errno)); goto err; } - if (listen(sock, 1) < 0) { + if (listen(sock, 5) < 0) { fprintf(stderr, "listen(unix:%s): %s\n", un.sun_path, strerror(errno)); goto err; } diff --git a/qjson.c b/qjson.c index f9c8e77..2025cbe 100644 --- a/qjson.c +++ b/qjson.c @@ -28,7 +28,7 @@ typedef struct JSONParsingState QObject *result; } JSONParsingState; -static void parse_json(JSONMessageParser *parser, QList *tokens) +static void parse_json(JSONMessageParser *parser, QList *tokens, void *opaque) { JSONParsingState *s = container_of(parser, JSONParsingState, parser); s->result = json_parser_parse(tokens, s->ap); @@ -40,7 +40,7 @@ QObject *qobject_from_jsonv(const char *string, va_list *ap) state.ap = ap; - json_message_parser_init(&state.parser, parse_json); + json_message_parser_init(&state.parser, parse_json, NULL); json_message_parser_feed(&state.parser, string, strlen(string)); json_message_parser_flush(&state.parser); json_message_parser_destroy(&state.parser); diff --git a/qmp-commands.hx b/qmp-commands.hx index 3745a21..f954df5 100644 --- a/qmp-commands.hx +++ b/qmp-commands.hx @@ -2514,3 +2514,33 @@ EQMP .args_type = "", .mhandler.cmd_new = qmp_marshal_input_query_target, }, + +SQMP +Eric 2013.3.7 +EQMP + +SQMP +query-accel +------------- + +Show acceleration sensor information. + +Example: + +-> { "execute": "query-accel" } +<- { + "return":{ + "Xaxis":1, + "Yaxis":2, + "Zaxis":3 + } + } + +EQMP + + { + .name = "query-accel", + .args_type = "", + .mhandler.cmd_new = qmp_marshal_input_query_accel, + }, + diff --git a/tizen/src/Makefile.tizen b/tizen/src/Makefile.tizen index 292f462..06fb470 100755 --- a/tizen/src/Makefile.tizen +++ b/tizen/src/Makefile.tizen @@ -104,6 +104,9 @@ endif # debug channel obj-y += debug_ch.o +# carrier +obj-y += carrier.o qmp_handler.o + # maru hardware include $(SRC_PATH)/tizen/src/Makefile.tizen.$(TARGET_BASE_ARCH) diff --git a/tizen/src/emulator.c b/tizen/src/emulator.c index 9651fea..30b9c18 100644 --- a/tizen/src/emulator.c +++ b/tizen/src/emulator.c @@ -50,6 +50,7 @@ #include "hw/maru_camera_common.h" #include "hw/gloffscreen_test.h" #include "debug_ch.h" +#include "carrier.h" #include #ifdef CONFIG_SDL @@ -109,6 +110,7 @@ void exit_emulator(void) mloop_ev_stop(); shutdown_skin_server(); shutdown_guest_server(); + stop_carrier(); maru_display_fini(); } @@ -487,6 +489,7 @@ void prepare_maru(void) int guest_server_port = tizen_base_port + SDB_UDP_SENSOR_INDEX; start_guest_server(guest_server_port); + start_carrier(guest_server_port+1); mloop_ev_init(); } -- 2.7.4