Decoder
-----__---___----_________
| | | | |
look for start
when start found calculate next sample time, reset bit count
have a function called sample(ip,dt);
sample( ip,dt )
switch state
WAITING_FOR_EDGE:
edge = ~ip and lastIp
lastIp = ip;
if ( edge ){
reset time,
reset serial
reset count
nextsampletime = 1.5*baud
state = WAITING_FOR_NEXT_SAMPLE
}
WAITING_FOR_NEXT_SAMPLE:
time += dt
if ( time > next sample ){
// sample input
serial = serial * 2 + ip
count ++
if (count > 8) {
emit serial
state = WAITING_FOR_NEXT_SAMPLE
}
//
time = time - nextSample