//Connection protocol handler void *connection_handler(void *arg) { int value; int len = 8*10; char *buff = (char*)malloc(len); //Command buffer //send_policy_file(data_child); while(client_connected) { freenect_network_read(buff, &len); //If command length is multiple of 6 if(len > 0 && len % 6 == 0){ //Get the number of commands received int max = len / 6; int i; //For each command received for(i = 0; i < max; i++){ memcpy(&value, &buff[2 + (i*6)], sizeof(int)); value = ntohl(value); //The BIG switch (Communication protocol) switch(buff[0 + (i*6)]){ case 0: //CAMERA switch(buff[1 + (i*6)]){ case 0: //GET DEPTH sendDepth(); break; case 1: //GET RAW DEPTH sendRawDepth(); break; case 2: //GET RGB sendVideo(); break; case 3: //Mirror depth _depth_mirrored = value; break; case 4: //Mirror video _video_mirrored = value; break; case 5: //Min depth _min_depth = value; break; case 6: //Max depth _max_depth = value; break; case 7: //Depth compression _depth_compression = value; break; case 8: //Video compression _video_compression = value; break; } break; case 1: //MOTOR switch(buff[1 + (i*6)]){ case 0: //MOVE freenect_sync_set_tilt_degs(value, 0); break; case 1: //LED COLOR freenect_sync_set_led((freenect_led_options) value, 0); break; case 2: //Accelerometer sendAccelerometers(); break; } break; } } } else { //Command was not multiple of 6 (we received an invalid command) if(!die) printf("got bad command (%d)\n", len ); client_connected = 0; } } if(!die) { printf("Disconecting client...\n"); freenect_network_wait(); //waiting for client led status freenect_sync_set_led((freenect_led_options) 4, 0); } return NULL; }
//Connection protocol handler void *connection_handler(void *arg) { int n, value; //send_policy_file(data_child); while(client_connected) { char buff[8*10]; //Command buffer #ifdef WIN32 //Listen for data (Winsock) n = recv(data_client_socket, (char*)buff, sizeof(buff), 0); #else //Listen for data (UNIX) n = read(data_child, buff, sizeof(buff)); #endif //If command length is multiple of 6 if(n > 0 && n % 6 == 0){ //Get the number of commands received int max = n / 6; int i; //For each command received for(i = 0; i < max; i++){ memcpy(&value, &buff[2 + (i*6)], sizeof(int)); value = ntohl(value); //The BIG switch (Communication protocol) switch(buff[0 + (i*6)]){ case 0: //CAMERA switch(buff[1 + (i*6)]){ case 0: //GET DEPTH sendDepth(); break; case 1: //GET RGB sendVideo(); break; case 2: //Mirror depth _depth_mirrored = value; break; case 3: //Mirror video _video_mirrored = value; break; case 4: //Min depth _min_depth = value; break; case 5: //Max depth _max_depth = value; break; } break; case 1: //MOTOR switch(buff[1 + (i*6)]){ case 0: //MOVE freenect_sync_set_tilt_degs(value, 0); break; case 1: //LED COLOR freenect_sync_set_led((freenect_led_options) value, 0); break; case 2: //Accelerometer sendAccelerometers(); break; } break; } } } else { //Command was not multiple of 6 (we received an invalid command) printf("got bad command (%d)\n", n); client_connected = 0; } } printf("Disconecting client...\n"); //waiting for client led status freenect_sync_set_led((freenect_led_options) 4, 0); return NULL; }