1 | #include <stdio.h>
|
---|
2 | #include <string.h>
|
---|
3 | #include <stdlib.h>
|
---|
4 | #include <pthread.h>
|
---|
5 | #include <sys/socket.h>
|
---|
6 | #include <sys/un.h>
|
---|
7 | #include <errno.h>
|
---|
8 | #include <fcntl.h>
|
---|
9 |
|
---|
10 | extern int tuxtxt_run_ui(int pid, int demux);
|
---|
11 | extern int tuxtxt_init();
|
---|
12 | extern void tuxtxt_start(int tpid, int demux);
|
---|
13 | extern int tuxtxt_stop();
|
---|
14 | extern void tuxtxt_close();
|
---|
15 | extern void tuxtxt_handlePressedKey(int key);
|
---|
16 |
|
---|
17 | int pid = 0;
|
---|
18 | int demux = 0;
|
---|
19 | int threadend = 0;
|
---|
20 |
|
---|
21 | void* tuxtxtthread(void* param)
|
---|
22 | {
|
---|
23 | tuxtxt_run_ui(pid, demux);
|
---|
24 | threadend = 1;
|
---|
25 | }
|
---|
26 |
|
---|
27 | void main(int argc, char *argv[])
|
---|
28 | {
|
---|
29 | int ret = 0;
|
---|
30 | pthread_attr_t txtthreadattr;
|
---|
31 | pthread_t txtthread;
|
---|
32 | struct sockaddr_un cliadr, srvadr;
|
---|
33 | int srvfd = -1;
|
---|
34 | socklen_t len = 0;
|
---|
35 | int key = 0, rc = -1;
|
---|
36 | char stmp[9];
|
---|
37 |
|
---|
38 | if(argc != 3 || argv[1] == NULL || argv[2] == NULL)
|
---|
39 | {
|
---|
40 | ret = 1;
|
---|
41 | goto end;
|
---|
42 | }
|
---|
43 |
|
---|
44 | unlink ("/tmp/block.tmp");
|
---|
45 | unlink ("/tmp/rc.socket");
|
---|
46 | int bfd = open("/tmp/block.tmp", O_RDWR | O_CREAT | O_TRUNC, 0777);
|
---|
47 | close(bfd);
|
---|
48 |
|
---|
49 | pid = atoi(argv[1]);
|
---|
50 | demux = atoi(argv[2]);
|
---|
51 |
|
---|
52 | pthread_attr_init(&txtthreadattr);
|
---|
53 | //pthread_attr_setstacksize(&txtthreadattr, 50000);
|
---|
54 | pthread_attr_setdetachstate(&txtthreadattr, PTHREAD_CREATE_JOINABLE);
|
---|
55 | ret = pthread_create(&txtthread, &txtthreadattr, tuxtxtthread, NULL);
|
---|
56 | if(ret)
|
---|
57 | {
|
---|
58 | printf("create thread");
|
---|
59 | ret = 2;
|
---|
60 | goto end;
|
---|
61 | }
|
---|
62 |
|
---|
63 | srvadr.sun_family = AF_LOCAL;
|
---|
64 | strcpy(srvadr.sun_path, "/tmp/rc.socket");
|
---|
65 | srvfd = socket(AF_LOCAL, SOCK_STREAM, 0);
|
---|
66 | bind(srvfd, (struct sockaddr *)&srvadr, sizeof(srvadr));
|
---|
67 | listen(srvfd, 10);
|
---|
68 | len = sizeof(cliadr);
|
---|
69 |
|
---|
70 | while(rc < 0)
|
---|
71 | {
|
---|
72 | rc = accept(srvfd, (struct sockaddr *) &cliadr, &len);
|
---|
73 | if(rc < 0)
|
---|
74 | {
|
---|
75 | if(errno == EINTR || errno == EAGAIN) continue;
|
---|
76 | printf("error in sock accept\n");
|
---|
77 | if(srvfd > -1) close(srvfd);
|
---|
78 | ret = 3;
|
---|
79 | goto end;
|
---|
80 | }
|
---|
81 | }
|
---|
82 |
|
---|
83 | while(threadend == 0)
|
---|
84 | {
|
---|
85 | usleep(100000);
|
---|
86 |
|
---|
87 | ret = read(rc, &stmp, sizeof("00000000"));
|
---|
88 | if(ret == 8)
|
---|
89 | {
|
---|
90 | stmp[8]= '\0';
|
---|
91 | printf("TT_KEY->: %s\n", stmp);
|
---|
92 | sscanf(stmp, "%d", &key);
|
---|
93 | printf("TT_KEY->: %d\n", key);
|
---|
94 |
|
---|
95 | tuxtxt_handlePressedKey(key);
|
---|
96 |
|
---|
97 | if(key == 0x1F) break;
|
---|
98 | }
|
---|
99 | else
|
---|
100 | {
|
---|
101 | if(errno == EINTR || errno == EAGAIN) continue;
|
---|
102 | printf("error in sock read (%d)\n", ret);
|
---|
103 | ret = 4;
|
---|
104 | goto end;
|
---|
105 | }
|
---|
106 | }
|
---|
107 |
|
---|
108 | end:
|
---|
109 | if(rc > -1) close(rc);
|
---|
110 | if(srvfd > -1) close(srvfd);
|
---|
111 | unlink ("/tmp/block.tmp");
|
---|
112 | unlink("/tmp/rc.socket");
|
---|
113 | exit(ret);
|
---|
114 | }
|
---|