Initial commit
[jamendo] / branches / nota-show-app / src / ts7200 / test_server.c
1 /***************************************************************************
2  *            test_server.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 typedef enum { GREEN, RED } led_color_t;
16
17 void initTS7200()
18 {
19     printf( "TS-7200 initialized\n" );
20 }
21
22 void switchOnLed( led_color_t color )
23 {
24     switch( color )
25     {
26         case GREEN:
27             printf( "Green led switched on\n" );
28             break;
29         case RED:
30             printf( "Red led switched on\n" );
31             break;
32         default:
33             printf( "Unknown led!\n" );
34     }
35 }
36
37 void switchOffLed( led_color_t color )
38 {
39     switch( color )
40     {
41         case GREEN:
42             printf( "Green led switched off\n" );
43             break;
44         case RED:
45             printf( "Red led switched off\n" );
46             break;
47         default:
48             printf( "Unknown led!\n" );
49     }
50 }
51
52 int openNota( int *sock, nota_addr_t *addr )
53 {
54     int err;
55     *sock = Hsocket( Hgetinstance(), AF_NOTA, SOCK_STREAM, 0 );
56     if(sock < 0)
57     {
58         perror( "Hsocket" );
59         return -1;
60     }
61
62     err = Hbind( Hgetinstance(), *sock, (struct sockaddr*) addr, sizeof(*addr) );
63     if( err != 0 ) 
64     {
65         Hclose( Hgetinstance(), *sock );
66         perror( "Hbind" );
67         return -1;
68     }
69
70     return 0;
71 }
72
73 int waitForConnection( int sock )
74 {
75     int err, client;
76     err = Hlisten( Hgetinstance(), sock, 1 );
77     if(err != 0) {
78         Hclose( Hgetinstance(), sock );
79         perror( "Hlisten" );
80         return -1;
81     }
82
83     client = Haccept( Hgetinstance(), sock, NULL, NULL );
84     if( client < 0 ) 
85     {
86         Hclose( Hgetinstance(), sock );
87         perror( "Haccept" );
88         return -1;
89     }
90     return client;
91 }
92
93 char processCmd( char cmd )
94 {
95     switch( cmd )
96     {
97         case 'P':
98             switchOffLed( GREEN );
99             switchOffLed( RED );
100             break;
101         case 'F':
102             switchOnLed( RED );
103             break;
104         default:
105             cmd = '?';
106     }
107
108     return cmd;
109 }
110
111 void startServer( nota_addr_t *addr )
112 {
113     int sock, client, err;
114     char buf;
115
116     if (openNota( &sock, addr ) != 0)
117     {
118         printf( "openNota error!\n" );
119         return;
120     }
121     printf( "Waiting for connection ...\n" );
122     switchOnLed( GREEN );
123     
124     client = waitForConnection( sock );
125     if (client <= 0)
126     {
127         printf( "waitForConnection error!\n" );
128         return;
129     }
130
131     printf( "Server started and connected\n" );
132
133     while( 1 )
134     {
135
136         err = Hrecv( Hgetinstance(), client, &buf, 1, 0 );
137         if(err != 1) {
138             perror( "Hrecv" );
139             break;
140         }
141         printf( "Recived: %c\n", buf );
142
143         buf = processCmd( buf );
144
145         err = Hsend( Hgetinstance(), client, &buf, 1, 0 );
146         if(err != 1) {
147             perror( "Hsend" );
148             break;
149         }
150
151         break;
152     }
153
154     Hclose( Hgetinstance(), client );
155     Hclose( Hgetinstance(), sock );
156
157 }
158
159 int main( int argc, char *argv[] )
160 {
161     int sid;
162
163     if (argc != 2)
164     {
165         printf( "Usage: ./test_server sid\n" );
166         exit( 1 );
167     }
168     
169     sid = atoi( argv[1] );
170
171     nota_addr_t addr;
172     addr.sid = sid;
173     addr.port = DEFAULT_PORT;
174
175     initTS7200();
176     switchOnLed( GREEN );
177     switchOffLed( RED );
178 //    sleep( 1 );
179
180     printf( "Test server is registered with sid: %d\n", sid );
181
182     while( 1 )
183     {
184         switchOffLed( GREEN );
185         startServer( &addr );
186     }
187
188     return 0;
189 }