embox
84 строки · 1.5 Кб
1/**
2* @file
3* @brief phoneME MIDP glue layer
4*
5* @date 11.01.2013
6* @author Felix Sulima
7*/
8
9#include <javacall_events.h>10#include <kernel/task.h>11
12#include "midp.h"13#include "cldc.h"14
15#include <stdio.h>16#include <unistd.h>17#include <fcntl.h>18#include <drivers/input/input_dev.h>19
20#include <javacall_lifecycle.h>21
22
23static void *phoneme_run(void *data) {24//ToDo:25printf("NOT IMPLEMENTED\n");26JavaTask();27return NULL;28}
29
30struct __jvm_params {31int argc;32char **argv;33int code;34};35
36/* Notify java task about system events. */
37static void notify_loop(void) {38int fd;39struct input_event buf[16];40
41if (0 > (fd = open("/dev/input/keyboard", 0))) {42return;43}44
45while(!list_empty(&task_self()->children)) { /* XXX make it throw signals */46size_t len, i, event_size = sizeof(struct input_event);47if ((len = read(fd, buf, event_size * 16)) > 0) {48/* Send all events we read to java task. */49for (i = 0; i < len / event_size; i++) {50/*javacall_event_send(buf[i], event_size);*/51}52}53}54}
55
56int phoneme_midp(int argc, char **argv) {57struct __jvm_params params = {58.argc = argc,59.argv = argv,60.code = -161};62
63if (JAVACALL_OK != javacall_events_init()) {64return -1;65}66
67new_task("", phoneme_run, ¶ms);68notify_loop();69
70return params.code;71}
72
73int phoneme_cldc(int argc, char **argv) {74struct __jvm_params params = {75.argc = argc,76.argv = argv,77.code = -178};79
80new_task("", phoneme_run, ¶ms);81while(!list_empty(&task_self()->children)) { } /* XXX make it throw waitpid() */82
83return params.code;84}
85