/* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: FILL_API_PACKET :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ void fill_api_packet( byte *p, int size ) { for( int i = 1; i < size; i++ ) p[ i ] = Serial.read(); } /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: PRINT_API_PACKET :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ void print_api_packet( byte *packet, int size ) { if( size == 0 ) return; else { Serial.print( "0x" ); Serial.print( packet[ 0 ], HEX ); for( int i = 1; i < size; i++ ) { Serial.print( " + 0x" ); Serial.print( packet[ i ], HEX ); } } Serial.print( "\r\n" ); } /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: GET SERIAL DATA FROM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ inline int get_serial_data_from( byte *a ) { return ( int ) a[ IO_DATA_SAMPLE_API_PACKET_SIZE - 3 ] + ( int ) a[ IO_DATA_SAMPLE_API_PACKET_SIZE - 2 ]; } /* ::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: CONFIRM CHECKSUM :::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::::: */ int checksum_confirmed_in( byte *p ) { static byte my_checksum; static byte xbee_checksum; static byte full_checksum; static byte data_between_length_and_last; static int i; static int size; static int analog_sample; static int state; size = ( int ) p[ LENGTH_LSB ]; for( i = 0, data_between_length_and_last = 0; i < size; i++ ) data_between_length_and_last += p[ LENGTH_LSB + 1 + i ]; my_checksum = 0xFF & ( 0xFF - data_between_length_and_last ); xbee_checksum = 0xFF & p[ ( IO_DATA_SAMPLE_API_PACKET_SIZE - 1 ) ]; full_checksum = 0xFF & ( data_between_length_and_last + p[ ( IO_DATA_SAMPLE_API_PACKET_SIZE - 1 ) ] ); state = ( ( my_checksum == xbee_checksum ) && ( full_checksum == CHECKSUM ) ) ? VALID : INVALID; return state; }