#include <iostream>
void receiveByte( uint8_t byte )
{
printf( "receiveByte( 0x%02X )\n", byte );
static const uint8_t header[] = { 0x23, 0x00, 0x18, 0x22 };
static uint8_t headerIndex = 0;
static uint8_t bytes[3];
static uint8_t bytesIndex = 0;
if ( headerIndex != 4 )
{
if ( byte == header[ headerIndex ] )
{
if ( ++headerIndex == 4 )
{
printf( "-> header received\n" );
}
}
else
{
headerIndex = 0;
}
}
else if ( bytesIndex != 3 )
{
bytes[ bytesIndex ] = byte;
if ( ++bytesIndex == 3 )
{
printf( "-> bytes received\n" );
for ( uint8_t i = 0; i < 3; i++ )
{
printf(" bytes[%hhu] = 0x%02X\n", i, bytes[i] );
}
// reset for next data
headerIndex = 0;
bytesIndex = 0;
}
}
}
int main()
{
// simulate receiving bytes from source
uint8_t bytes[] = { 0x23, 0xEB, 0x54, 0x23, 0x00, 0x18, 0x22, 0x45, 0x72, 0xAE, 0xA8, 0x23, 0xEB, 0x54, 0x23, 0x00, 0x18, 0x21, 0x99, 0xAA, 0x54, 0x23, 0x00, 0x18, 0x22, 0x11, 0x22, 0x33, 0x23 };
for (uint8_t i = 0; i < sizeof( bytes ) / sizeof( uint8_t ); i++ )
{
receiveByte( bytes[i] );
}
return 0;
}
I2luY2x1ZGUgPGlvc3RyZWFtPgoKCnZvaWQgcmVjZWl2ZUJ5dGUoIHVpbnQ4X3QgYnl0ZSApCnsKCXByaW50ZiggInJlY2VpdmVCeXRlKCAweCUwMlggKVxuIiwgYnl0ZSApOwoJCglzdGF0aWMgY29uc3QgdWludDhfdCBoZWFkZXJbXSA9IHsgMHgyMywgMHgwMCwgMHgxOCwgMHgyMiB9OwoJc3RhdGljIHVpbnQ4X3QgaGVhZGVySW5kZXggPSAwOwoKCXN0YXRpYyB1aW50OF90IGJ5dGVzWzNdOwoJc3RhdGljIHVpbnQ4X3QgYnl0ZXNJbmRleCA9IDA7CgkKCWlmICggaGVhZGVySW5kZXggIT0gNCApCgl7CgkJaWYgKCBieXRlID09IGhlYWRlclsgaGVhZGVySW5kZXggXSApCgkJewoJCQlpZiAoICsraGVhZGVySW5kZXggPT0gNCApCgkJCXsKCQkJCXByaW50ZiggIi0+IGhlYWRlciByZWNlaXZlZFxuIiApOwoJCQl9CgkJfQoJCWVsc2UKCQl7CgkJCWhlYWRlckluZGV4ID0gMDsKCQl9Cgl9CgllbHNlIGlmICggYnl0ZXNJbmRleCAhPSAzICkKCXsKCQlieXRlc1sgYnl0ZXNJbmRleCBdID0gYnl0ZTsKCQkKCQlpZiAoICsrYnl0ZXNJbmRleCA9PSAzICkKCQl7CgkJCXByaW50ZiggIi0+IGJ5dGVzIHJlY2VpdmVkXG4iICk7CgkJCQoJCQlmb3IgKCB1aW50OF90IGkgPSAwOyBpIDwgMzsgaSsrICkKCQkJewoJCQkJcHJpbnRmKCIgICBieXRlc1slaGh1XSA9IDB4JTAyWFxuIiwgaSwgYnl0ZXNbaV0gKTsKCQkJfQoJCQkKCQkJLy8gcmVzZXQgZm9yIG5leHQgZGF0YQoJCQloZWFkZXJJbmRleCA9IDA7CgkJCWJ5dGVzSW5kZXggPSAwOwoJCX0KCX0KfQoKCmludCBtYWluKCkKewoJCgkvLyBzaW11bGF0ZSByZWNlaXZpbmcgYnl0ZXMgZnJvbSBzb3VyY2UKCQoJdWludDhfdCBieXRlc1tdID0geyAweDIzLCAweEVCLCAweDU0LCAweDIzLCAweDAwLCAweDE4LCAweDIyLCAweDQ1LCAweDcyLCAweEFFLCAweEE4LCAweDIzLCAweEVCLCAweDU0LCAweDIzLCAweDAwLCAweDE4LCAweDIxLCAweDk5LCAweEFBLCAweDU0LCAweDIzLCAweDAwLCAweDE4LCAweDIyLCAweDExLCAweDIyLCAweDMzLCAweDIzIH07CgkKCWZvciAodWludDhfdCBpID0gMDsgaSA8IHNpemVvZiggYnl0ZXMgKSAvIHNpemVvZiggdWludDhfdCApOyBpKysgKQoJewoJCXJlY2VpdmVCeXRlKCBieXRlc1tpXSApOwoJfQoJCglyZXR1cm4gMDsKfQ==