source: tools/tuxtxt/tuxtxt.c

Last change on this file was 41839, checked in by gost, 6 years ago

[tools] fix make teletext for arm

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