Initial commit
[jamendo] / branches / nota-show-app / src / ts7200 / ts7200_client.c
1 /***************************************************************************
2  *            ts7200_client.c
3  *
4  *  Wed Nov 18 10:46:06 2009
5  *  Copyright  2009  Bartlomiej Swiercz
6  *  <bartlomiej.swiercz@teleca.com>
7  ****************************************************************************/
8
9 #include <stdio.h>
10 #include <errno.h>
11 #include <unistd.h>
12 #include <stdlib.h>
13 #include "ts7200_client.h"
14
15 ACT_STATE act_connect( sid_t sid, int *sock )
16 {
17     nota_addr_t addr = { sid, DEFAULT_PORT };
18     int err;
19
20     *sock = Hsocket( Hgetinstance(), AF_NOTA, SOCK_STREAM, 0 );
21     if(sock < 0)
22     {
23         perror( "Hsocket" );
24         return HSOCKET_ERR;
25     }
26
27     err = Hconnect( Hgetinstance(), *sock, (struct sockaddr*) &addr, sizeof(addr) );
28     if( err < 0 ) 
29     {
30         Hclose( Hgetinstance(), *sock );
31         perror( "Hconnect" );
32         return HCONNECT_ERR;
33     }
34
35     return OK;
36
37 }
38
39 ACT_STATE act_send( int sock, char cmd )
40 {
41     int err;
42     err = Hsend( Hgetinstance(), sock, &cmd, 1, 0 );
43     if(err != 1) {
44         Hclose( Hgetinstance(), sock );
45         perror( "Hsend" );
46         return HSEND_ERR;
47     }
48
49     return OK;
50 }
51
52 ACT_STATE act_recv( int sock, char *resp )
53 {
54     int err;
55     err = Hrecv( Hgetinstance(), sock, resp, 1, 0 );
56     if(err != 1) {
57         Hclose( Hgetinstance(), sock );
58         perror( "Hrecv" );
59         return HRECV_ERR;
60     }
61
62     return OK;
63 }
64
65 void act_close( int sock )
66 {
67     Hclose( Hgetinstance(), sock );
68 }
69
70 ACT_STATE act_run_cmd( sid_t sid, ACT_CMD cmd )
71 {
72     int err, sock, resp;
73     char buf;
74     err = act_connect( sid, &sock );
75     if ( err != OK ) return NOTCONNECTED;
76
77     switch ( cmd )
78     {
79         case PING:
80             act_send( sock, 'P' );
81             act_recv( sock, &buf );
82             if (buf == 'P')
83                 resp = CONNECTED;
84             else
85                 resp = NOTCONNECTED;
86             break;
87
88         case FACE_DETECTED:
89             act_send( sock, 'F' );
90             act_recv( sock, &buf );
91             if (buf == 'F')
92                 resp = CONNECTED;
93             else
94                 resp = NOTCONNECTED;
95             break;
96
97         default:
98             resp = WEIRD;
99             break;
100     }
101
102     act_close( sock );
103
104    return resp; 
105 }
106