source: tools/tuxtxt/tuxtxt.c @ 32996

Last change on this file since 32996 was 28036, checked in by obi, 9 years ago

[tools] add mipsel tuxtxt

File size: 2.4 KB
Line 
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
10extern int tuxtxt_run_ui(int pid, int demux);
11extern int tuxtxt_init();
12extern void tuxtxt_start(int tpid, int demux);
13extern int tuxtxt_stop();
14extern void tuxtxt_close();
15extern void tuxtxt_handlePressedKey(int key);
16
17int pid = 0;
18int demux = 0;
19int threadend = 0;
20
21void* tuxtxtthread(void* param)
22{
23        tuxtxt_run_ui(pid, demux);
24        threadend = 1;
25}
26
27void 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
108end:
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}
Note: See TracBrowser for help on using the repository browser.