/* Processes data packets received from the Gumstix */ void process_data_packet( void ) { uint8_t packet[ COMM_BUF_SIZE ], size; uint16_t checksum; /* get data from serial or parallel interface */ if( serial_get_data( packet ) )//&& parallel_get_data( packet ) ) { return; } /* check for valid packet content */ size = packet[1] + COMM_OVERHEAD - 2; checksum = (packet[ size-2 ] << 8) | packet[ size-1 ]; size -= 2; /* iterate over payload */ while( size-- ) { checksum -= packet[ size ]; } /* check for non-zero checksum */ if( checksum ) { return; } /* call packet-dependent function */ switch( packet[0] ) { case COMM_SENSOR_DATA: process_sensor_data( packet + 2, packet[1] ); break; case COMM_MOTOR_SIGNALS: process_motor_signals( packet + 2, packet[1] ); break; case COMM_SWITCH_STATE: process_state_switch( ); break; case COMM_SHUT_DOWN: process_shut_down( ); break; default: return; } }
int main(int argc, char * argv[]) { if (argc < 2) { fprintf(stderr, "Usage: %s device\n", argv[0]); exit(1); } int fd = serial_init(argv[1]); if (fd == -1) { exit(1); } unsigned int data[8]; for (;;) { if (serial_get_data(fd, data)) { printf("%5u %5u %5u %5u %5u %5u %5u %5u\n", data[0], data[1], data[2], data[3], data[4], data[5], data[6], data[7]); } } serial_stop(fd); return 0; }