//============================================================================= // DECODE PERIOD - used in RomanBlack's DTMF triplet decoder algorithm //============================================================================= void decode_period(void) { //------------------------------------------------------- // this is called once for each captured period, it checks that // period to see if matches one of the 24 periods in our DTMF signatures. // if so, it checks that period and the 2 periods before it to // see if they match a triplet and then allocate points. // This code could be made very fast by sorting the period // tests into a few groups by numerical order and jumping to // the right group. Or maybe use a jump table of some type. // (for now it just does 24 sequential period tests) // There are lots of very obvious ways the code below can be // tidied up and optimised for speed and/or ROM size!! //------------------------------------------------------- // Tone 0 66 98 LLS LSL SLL if(per >= 66-1 && per <= 66+1) // ends S { if(per2 >= 98-1 && per2 <= 98+1 && per1 >= 98-1 && per1 <= 98+1) Dtone[0]+=9; // LLS } if(per >= 98-1 && per <= 98+1) // ends L { if(per2 >= 66-1 && per2 <= 66+1 && per1 >= 98-1 && per1 <= 98+1) Dtone[0]+=9; // SLL if(per2 >= 98-1 && per2 <= 98+1 && per1 >= 66-1 && per1 <= 66+1) Dtone[0]+=9; // LSL } //------------------------------------------------------- // Tone 1 63 94 SLS LSL if(per >= 63-1 && per <= 63+1) // ends S { if(per2 >= 63-1 && per2 <= 63+1 && per1 >= 94-1 && per1 <= 94+1) Dtone[1]+=14; // SLS } if(per >= 94-1 && per <= 94+1) // ends L { if(per2 >= 94-1 && per2 <= 94+1 && per1 >= 63-1 && per1 <= 63+1) Dtone[1]+=6; // LSL } //------------------------------------------------------- // Tone 2 61 90 SSL SLS LSS if(per >= 61-1 && per <= 61+1) // ends S { if(per2 >= 61-1 && per2 <= 61+1 && per1 >= 90-1 && per1 <= 90+1) Dtone[2]+=3; // SLS if(per2 >= 90-1 && per2 <= 90+1 && per1 >= 61-1 && per1 <= 61+1) Dtone[2]+=12; // LSS } if(per >= 90-1 && per <= 90+1) // ends L { if(per2 >= 61-1 && per2 <= 61+1 && per1 >= 61-1 && per1 <= 61+1) Dtone[2]+=12; // SSL } //------------------------------------------------------- // Tone 3 58 86 SSL LSS if(per >= 58-1 && per <= 58+1) // ends S { if(per2 >= 86-1 && per2 <= 86+1 && per1 >= 58-1 && per1 <= 58+1) Dtone[3]+=10; // LSS } if(per >= 86-1 && per <= 86+1) // ends L { if(per2 >= 58-1 && per2 <= 58+1 && per1 >= 58-1 && per1 <= 58+1) Dtone[3]+=10; // SSL } //------------------------------------------------------- // Tone 4 62 92 SSS SLL LLS if(per >= 62-1 && per <= 62+1) // ends S { if(per2 >= 62-1 && per2 <= 62+1 && per1 >= 62-1 && per1 <= 62+1) Dtone[0]+=2; // SSS if(per2 >= 92-1 && per2 <= 92+1 && per1 >= 92-1 && per1 <= 92+1) Dtone[4]+=28; // LLS } if(per >= 92-1 && per <= 92+1) // ends L { if(per2 >= 62-1 && per2 <= 62+1 && per1 >= 92-1 && per1 <= 92+1) Dtone[4]+=28; // SLL } //------------------------------------------------------- // Tone 5 60 89 SLL LLS if(per >= 60-1 && per <= 60+1) // ends S { if(per2 >= 89-1 && per2 <= 89+1 && per1 >= 89-1 && per1 <= 89+1) Dtone[5]+=10; // LLS } if(per >= 89-1 && per <= 89+1) // ends L { if(per2 >= 60-1 && per2 <= 60+1 && per1 >= 89-1 && per1 <= 89+1) Dtone[5]+=10; // SLL } //------------------------------------------------------- // Tone 6 58 85 SLL LLS LSL if(per >= 58-1 && per <= 58+1) // ends S { if(per2 >= 85-1 && per2 <= 85+1 && per1 >= 85-1 && per1 <= 85+1) Dtone[6]+=10; // LLS } if(per >= 85-1 && per <= 85+1) // ends L { if(per2 >= 58-1 && per2 <= 58+1 && per1 >= 85-1 && per1 <= 85+1) Dtone[6]+=10; // SLL if(per2 >= 85-1 && per2 <= 85+1 && per1 >= 58-1 && per1 <= 58+1) Dtone[6]+=6; // LSL } //------------------------------------------------------- // Tone 7 55 82 SLS SSL LSS if(per >= 55-1 && per <= 55+1) // ends S { if(per2 >= 55-1 && per2 <= 55+1 && per1 >= 82-1 && per1 <= 82+1) Dtone[7]+=6; // SLS if(per2 >= 82-1 && per2 <= 82+1 && per1 >= 55-1 && per1 <= 55+1) Dtone[7]+=8; // LSS } if(per >= 82-1 && per <= 82+1) // ends L { if(per2 >= 55-1 && per2 <= 55+1 && per1 >= 55-1 && per1 <= 55+1) Dtone[7]+=8; // SSL } //------------------------------------------------------- // Tone 8 86 114 SLS SSL LSS if(per >= 86-1 && per <= 86+1) // ends S { if(per2 >= 86-1 && per2 <= 86+1 && per1 >= 114-1 && per1 <= 114+1) Dtone[8]+=15; // SLS if(per2 >= 114-1 && per2 <= 114+1 && per1 >= 86-1 && per1 <= 86+1) Dtone[8]+=15; // LSS } if(per >= 114-1 && per <= 114+1) // ends L { if(per2 >= 86-1 && per2 <= 86+1 && per1 >= 86-1 && per1 <= 86+1) Dtone[8]+=15; // SSL } //------------------------------------------------------- // Tone 9 57 83 SLL LLS LSL if(per >= 57-1 && per <= 57+1) // ends S { if(per2 >= 83-1 && per2 <= 83+1 && per1 >= 83-1 && per1 <= 83+1) Dtone[9]+=18; // LLS } if(per >= 83-1 && per <= 83+1) // ends L { if(per2 >= 57-1 && per2 <= 57+1 && per1 >= 83-1 && per1 <= 83+1) Dtone[9]+=18; // SLL if(per2 >= 83-1 && per2 <= 83+1 && per1 >= 57-1 && per1 <= 57+1) Dtone[9]+=18; // LSL } //------------------------------------------------------- // Tone 10 54 80 LLS if(per >= 54-1 && per <= 54+1) // ends S { if(per2 >= 80-1 && per2 <= 80+1 && per1 >= 80-1 && per1 <= 80+1) Dtone[10]+=17; // LLS } //------------------------------------------------------- // Tone 11 52 77 SLS SLL LLS if(per >= 52-1 && per <= 52+1) // ends S { if(per2 >= 52-1 && per2 <= 52+1 && per1 >= 77-1 && per1 <= 77+1) Dtone[11]+=8; // SLS if(per2 >= 77-1 && per2 <= 77+1 && per1 >= 77-1 && per1 <= 77+1) Dtone[11]+=8; // LLS } if(per >= 77-1 && per <= 77+1) // ends L { if(per2 >= 52-1 && per2 <= 52+1 && per1 >= 77-1 && per1 <= 77+1) Dtone[11]+=8; // SLL } } //-----------------------------------------------------------------------------