#include "manchester_decoder.h" #include static const uint8_t transitions[] = {0b00000001, 0b10010001, 0b10011011, 0b11111011}; static const ManchesterState manchester_reset_state = ManchesterStateMid1; bool manchester_advance( ManchesterState state, ManchesterEvent event, ManchesterState* next_state, bool* data) { bool result = false; ManchesterState new_state; if(event == ManchesterEventReset) { new_state = manchester_reset_state; } else { new_state = transitions[state] >> event & 0x3; if(new_state == state) { new_state = manchester_reset_state; } else { if(new_state == ManchesterStateMid0) { if(data) *data = false; result = true; } else if(new_state == ManchesterStateMid1) { if(data) *data = true; result = true; } } } *next_state = new_state; return result; }