#include #include #include #include #include #include #include #include "serial.h" #define SERIAL_DEVICE "/dev/ttyUSB0" #define MAX_FRAME_SIZE 1024 #define WAIT_DELAY 50 #define TAILLE_MESSAGE 7 int sd; static int callback_http( struct libwebsocket_context *this, struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason, void *user,void *in,size_t len) { return 0; } static int callback_my( struct libwebsocket_context * this, struct libwebsocket *wsi,enum libwebsocket_callback_reasons reason, void *user,void *in,size_t len) { static char message[LWS_SEND_BUFFER_PRE_PADDING+LWS_SEND_BUFFER_POST_PADDING+TAILLE_MESSAGE]; unsigned char sonar,position; switch(reason){ case LWS_CALLBACK_ESTABLISHED: printf("connection established\n"); // Declenchement d'un prochain envoi au navigateur libwebsocket_callback_on_writable(this,wsi); break; case LWS_CALLBACK_RECEIVE: // Ici sont traites les messages envoyes par le navigateur printf("received data: %s\n",(char *)in); if(write(sd,(unsigned char *)in,sizeof(char))!=1){perror("main.write"); exit(-1); } break; case LWS_CALLBACK_SERVER_WRITEABLE: // Ici sont envoyes les messages au navigateur if(read(sd,&sonar,sizeof(char))==1){ char *out=message + LWS_SEND_BUFFER_PRE_PADDING; read(sd,&position,sizeof(char)); sprintf(out,"%03d %03d",sonar,position); printf("%d %d\n",sonar,position); libwebsocket_write(wsi,(unsigned char *)out,TAILLE_MESSAGE,LWS_WRITE_TEXT); } libwebsocket_callback_on_writable(this,wsi); break; default: break; } return 0; } static struct libwebsocket_protocols protocols[] = { { "http-only", // name callback_http, // callback 0, // data size 0 // maximum frame size }, {"myprotocol",callback_my,0,MAX_FRAME_SIZE}, {NULL,NULL,0,0} }; int main(void) { int port=9000; struct lws_context_creation_info info; memset(&info,0,sizeof info); info.port=port; info.protocols=protocols; info.gid=-1; info.uid=-1; struct libwebsocket_context *context=libwebsocket_create_context(&info); if(context==NULL){ fprintf(stderr, "libwebsocket init failed\n"); return -1; } printf("connexion port serie en %s ... ",SERIAL_DEVICE); sd=serialOpen(SERIAL_DEVICE,SERIAL_BOTH); serialConfig(sd,B9600); sleep(2); //attente pour la connexion serie (necessaire apres tests) printf("Done !\n"); printf("starting server...\n"); while(1){ libwebsocket_service(context,WAIT_DELAY); } libwebsocket_context_destroy(context); serialClose(sd); return 0; }