X-Git-Url: http://git.maemo.org/git/?p=jamendo;a=blobdiff_plain;f=branches%2Fnota-show-app%2Fsrc%2Fts7200%2Ftest_server.c;fp=branches%2Fnota-show-app%2Fsrc%2Fts7200%2Ftest_server.c;h=643bead8b7c3b547b2c598d2a76dd84c3ac4940e;hp=0000000000000000000000000000000000000000;hb=71eece00473c745dbe74c7dd9abd6a5fa52ea3ab;hpb=496d310181c50d216bf2f44e9a970a791aa2aba0 diff --git a/branches/nota-show-app/src/ts7200/test_server.c b/branches/nota-show-app/src/ts7200/test_server.c new file mode 100644 index 0000000..643bead --- /dev/null +++ b/branches/nota-show-app/src/ts7200/test_server.c @@ -0,0 +1,189 @@ +/*************************************************************************** + * test_server.c + * + * Wed Nov 18 10:46:06 2009 + * Copyright 2009 Bartlomiej Swiercz + * + ****************************************************************************/ + +#include +#include +#include +#include +#include "ts7200_client.h" + +typedef enum { GREEN, RED } led_color_t; + +void initTS7200() +{ + printf( "TS-7200 initialized\n" ); +} + +void switchOnLed( led_color_t color ) +{ + switch( color ) + { + case GREEN: + printf( "Green led switched on\n" ); + break; + case RED: + printf( "Red led switched on\n" ); + break; + default: + printf( "Unknown led!\n" ); + } +} + +void switchOffLed( led_color_t color ) +{ + switch( color ) + { + case GREEN: + printf( "Green led switched off\n" ); + break; + case RED: + printf( "Red led switched off\n" ); + break; + default: + printf( "Unknown led!\n" ); + } +} + +int openNota( int *sock, nota_addr_t *addr ) +{ + int err; + *sock = Hsocket( Hgetinstance(), AF_NOTA, SOCK_STREAM, 0 ); + if(sock < 0) + { + perror( "Hsocket" ); + return -1; + } + + err = Hbind( Hgetinstance(), *sock, (struct sockaddr*) addr, sizeof(*addr) ); + if( err != 0 ) + { + Hclose( Hgetinstance(), *sock ); + perror( "Hbind" ); + return -1; + } + + return 0; +} + +int waitForConnection( int sock ) +{ + int err, client; + err = Hlisten( Hgetinstance(), sock, 1 ); + if(err != 0) { + Hclose( Hgetinstance(), sock ); + perror( "Hlisten" ); + return -1; + } + + client = Haccept( Hgetinstance(), sock, NULL, NULL ); + if( client < 0 ) + { + Hclose( Hgetinstance(), sock ); + perror( "Haccept" ); + return -1; + } + return client; +} + +char processCmd( char cmd ) +{ + switch( cmd ) + { + case 'P': + switchOffLed( GREEN ); + switchOffLed( RED ); + break; + case 'F': + switchOnLed( RED ); + break; + default: + cmd = '?'; + } + + return cmd; +} + +void startServer( nota_addr_t *addr ) +{ + int sock, client, err; + char buf; + + if (openNota( &sock, addr ) != 0) + { + printf( "openNota error!\n" ); + return; + } + printf( "Waiting for connection ...\n" ); + switchOnLed( GREEN ); + + client = waitForConnection( sock ); + if (client <= 0) + { + printf( "waitForConnection error!\n" ); + return; + } + + printf( "Server started and connected\n" ); + + while( 1 ) + { + + err = Hrecv( Hgetinstance(), client, &buf, 1, 0 ); + if(err != 1) { + perror( "Hrecv" ); + break; + } + printf( "Recived: %c\n", buf ); + + buf = processCmd( buf ); + + err = Hsend( Hgetinstance(), client, &buf, 1, 0 ); + if(err != 1) { + perror( "Hsend" ); + break; + } + + break; + } + + Hclose( Hgetinstance(), client ); + Hclose( Hgetinstance(), sock ); + +} + +int main( int argc, char *argv[] ) +{ + int sid; + + if (argc != 2) + { + printf( "Usage: ./test_server sid\n" ); + exit( 1 ); + } + + sid = atoi( argv[1] ); + + nota_addr_t addr; + addr.sid = sid; + addr.port = DEFAULT_PORT; + + initTS7200(); + switchOnLed( GREEN ); + switchOffLed( RED ); +// sleep( 1 ); + + printf( "Test server is registered with sid: %d\n", sid ); + + while( 1 ) + { + switchOffLed( GREEN ); + startServer( &addr ); + } + + return 0; +}