Initial commit
[jamendo] / branches / nota-show-app / src / ts7200 / ts7200_client.c
diff --git a/branches/nota-show-app/src/ts7200/ts7200_client.c b/branches/nota-show-app/src/ts7200/ts7200_client.c
new file mode 100644 (file)
index 0000000..1ffa21a
--- /dev/null
@@ -0,0 +1,106 @@
+/***************************************************************************
+ *            ts7200_client.c
+ *
+ *  Wed Nov 18 10:46:06 2009
+ *  Copyright  2009  Bartlomiej Swiercz
+ *  <bartlomiej.swiercz@teleca.com>
+ ****************************************************************************/
+
+#include <stdio.h>
+#include <errno.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include "ts7200_client.h"
+
+ACT_STATE act_connect( sid_t sid, int *sock )
+{
+    nota_addr_t addr = { sid, DEFAULT_PORT };
+    int err;
+
+    *sock = Hsocket( Hgetinstance(), AF_NOTA, SOCK_STREAM, 0 );
+    if(sock < 0)
+    {
+        perror( "Hsocket" );
+        return HSOCKET_ERR;
+    }
+
+    err = Hconnect( Hgetinstance(), *sock, (struct sockaddr*) &addr, sizeof(addr) );
+    if( err < 0 ) 
+    {
+        Hclose( Hgetinstance(), *sock );
+        perror( "Hconnect" );
+        return HCONNECT_ERR;
+    }
+
+    return OK;
+
+}
+
+ACT_STATE act_send( int sock, char cmd )
+{
+    int err;
+    err = Hsend( Hgetinstance(), sock, &cmd, 1, 0 );
+    if(err != 1) {
+        Hclose( Hgetinstance(), sock );
+        perror( "Hsend" );
+        return HSEND_ERR;
+    }
+
+    return OK;
+}
+
+ACT_STATE act_recv( int sock, char *resp )
+{
+    int err;
+    err = Hrecv( Hgetinstance(), sock, resp, 1, 0 );
+    if(err != 1) {
+        Hclose( Hgetinstance(), sock );
+        perror( "Hrecv" );
+        return HRECV_ERR;
+    }
+
+    return OK;
+}
+
+void act_close( int sock )
+{
+    Hclose( Hgetinstance(), sock );
+}
+
+ACT_STATE act_run_cmd( sid_t sid, ACT_CMD cmd )
+{
+    int err, sock, resp;
+    char buf;
+    err = act_connect( sid, &sock );
+    if ( err != OK ) return NOTCONNECTED;
+
+    switch ( cmd )
+    {
+        case PING:
+            act_send( sock, 'P' );
+            act_recv( sock, &buf );
+            if (buf == 'P')
+                resp = CONNECTED;
+            else
+                resp = NOTCONNECTED;
+            break;
+
+        case FACE_DETECTED:
+            act_send( sock, 'F' );
+            act_recv( sock, &buf );
+            if (buf == 'F')
+                resp = CONNECTED;
+            else
+                resp = NOTCONNECTED;
+            break;
+
+        default:
+            resp = WEIRD;
+            break;
+    }
+
+    act_close( sock );
+
+   return resp; 
+}
+