#include <stdio.h>
#include <Phidget21/phidget21.h>
#include <time.h>
#include <sys/time.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <string.h>

// BUG: Sometime this stops sending data. Don't know why yet, might have forgotten something?
void triggerBip( int value ) {

   int    sockfd;
   struct sockaddr_in serveraddr;
   char   sendline[1000];

   sprintf(sendline,"%d", value);

   sockfd = socket(AF_INET,SOCK_DGRAM,0);

   bzero( &serveraddr, sizeof( serveraddr ) );
   serveraddr.sin_family = AF_INET;
   serveraddr.sin_addr.s_addr = inet_addr("192.168.5.100");
   serveraddr.sin_port = htons(9696);

   sendto( sockfd, sendline, strlen(sendline), 0, (struct sockaddr*) &serveraddr, sizeof( serveraddr ) );

}

int SensorChangeHandler(CPhidgetInterfaceKitHandle IFK, void *usrptr, int Index, int Value)
{
   time_t     now;
   struct tm  *ts;
   char       buf[80];
   struct     timeval tv;    

   time(&now);
   ts = localtime(&now);
   strftime(buf, sizeof(buf), "%H:%M:%S.", ts);
   gettimeofday( &tv, NULL );

   printf("[%s%1d] %d\n", buf,tv.tv_usec, Value);

   triggerBip( Value );

   return 0;
}

int lightEvent()
{
   int result;
   const char *err;

   CPhidgetInterfaceKitHandle ifKit = 0;
   CPhidgetInterfaceKit_create(&ifKit);
   CPhidgetInterfaceKit_set_OnSensorChange_Handler (ifKit, SensorChangeHandler, NULL);
   CPhidget_open((CPhidgetHandle)ifKit, -1);

   if((result = CPhidget_waitForAttachment((CPhidgetHandle)ifKit, 10000)))
   {
      CPhidget_getErrorDescription(result, &err);
      return 0;
   }


   getchar();


   CPhidget_close((CPhidgetHandle)ifKit);
   CPhidget_delete((CPhidgetHandle)ifKit);

   return 0;
}

int main(void) {
   lightEvent();
   return 0;
}


