| 12345678910111213141516171819202122232425262728293031323334 |
- #include "manchester-decoder.h"
- #include <stdint.h>
- 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) {
- *data = false;
- result = true;
- } else if(new_state == ManchesterStateMid1) {
- *data = true;
- result = true;
- }
- }
- }
- *next_state = new_state;
- return result;
- }
|