예제 #1
0
/* 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;
    }
}
예제 #2
0
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;
}