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