Add Verification exception

Sometimes the state machine stuck at a state lower than 5 and isnt reset by the continueReceiving function
This commit is contained in:
Ronny 2014-11-12 14:09:28 +01:00
parent 63b1639ab9
commit 6e5b923919
1 changed files with 45 additions and 17 deletions

View File

@ -11,7 +11,6 @@
#define MIN_FOOTER_LENGTH 3500
#define MIN_PULSE_LENGTH 100
unsigned int footer_length;
unsigned int timings[MAX_RECORDINGS];
unsigned long lastTime = 0;
@ -27,6 +26,28 @@ bool Pack1EqualPack3 = false;
bool data1_ready = false;
bool data2_ready = false;
void handleInterrupt();
/*
void RFControl::sendState() {
Serial.print("Equal0-1=");
Serial.print(Pack0EqualPack1);
Serial.print(" Equal0-2=");
Serial.print(Pack0EqualPack2);
Serial.print(" Equal0-3=");
Serial.print(Pack0EqualPack3);
Serial.print(" Equal0-1=");
Serial.print(Pack1EqualPack2);
Serial.print(" Equal0-1=");
Serial.print(Pack1EqualPack3);
Serial.write('\n');
Serial.print("Data1=");
Serial.print(data1_ready);
Serial.print(" Data2=");
Serial.print(data2_ready);
Serial.write('\n');
Serial.print("State=");
Serial.print(state);
Serial.write('\n');
}*/
void RFControl::startReceiving(int _interruptPin) {
footer_length = 0;
@ -262,9 +283,9 @@ void verification1() {
int pos = data_end[1] - 1 - data_start[1];
if (Pack0EqualPack1 && pos >= 0)
{
int refVal = timings[pos];
int mainVal = timings[data_end[1] - 1];
int delta = refVal / 8 + refVal / 4; //+-37,5%
unsigned int refVal = timings[pos];
unsigned int mainVal = timings[data_end[1] - 1];
unsigned int delta = refVal / 8 + refVal / 4; //+-37,5%
if (refVal - delta > mainVal || mainVal > refVal + delta)
{
Pack0EqualPack1 = false;
@ -285,15 +306,15 @@ void verification1() {
}
void verification2() {
int refVal = timings[data_end[2] - 1];
int delta = refVal / 8 + refVal / 4; //+-37,5%
int refVal_min = refVal - delta;
int refVal_max = refVal + delta;
unsigned int refVal = timings[data_end[2] - 1];
unsigned int delta = refVal / 8 + refVal / 4; //+-37,5%
unsigned int refVal_min = refVal - delta;
unsigned int refVal_max = refVal + delta;
int pos = data_end[2] - 1 - data_start[2];
if (Pack0EqualPack2 && pos >= 0)
{
int mainVal = timings[pos];
unsigned int mainVal = timings[pos];
if (refVal_min > mainVal || mainVal > refVal_max)
{
Pack0EqualPack2 = false;
@ -312,7 +333,7 @@ void verification2() {
if (Pack1EqualPack2 && pos >= 0)
{
pos = pos + data_start[1];
int mainVal = timings[pos];
unsigned int mainVal = timings[pos];
if (refVal_min > mainVal || mainVal > refVal_max)
{
Pack1EqualPack2 = false;
@ -328,18 +349,21 @@ void verification2() {
data2_ready = true;
}
}
if (state == STATUS_RECORDING_3 && data1_ready == false && data2_ready == false) {
state = STATUS_WAITING;
}
}
void verification3() {
int refVal = timings[data_end[3] - 1]; //Values from the 4th package
int delta = refVal / 8 + refVal / 4; //+-37,5%
int refVal_min = refVal - delta;
int refVal_max = refVal + delta;
unsigned int refVal = timings[data_end[3] - 1]; //Values from the 4th package
unsigned int delta = refVal / 8 + refVal / 4; //+-37,5%
unsigned int refVal_min = refVal - delta;
unsigned int refVal_max = refVal + delta;
int pos = data_end[3] - 1 - data_start[3];
if (!Pack0EqualPack2 && Pack0EqualPack3 && pos >= 0)
{
int mainVal = timings[pos];
unsigned int mainVal = timings[pos];
if (refVal_min > mainVal || mainVal > refVal_max)
{
Pack0EqualPack3 = false;
@ -358,7 +382,7 @@ void verification3() {
if (!Pack1EqualPack2 && Pack1EqualPack3 && pos >= 0)
{
pos = pos + data_start[1];
int mainVal = timings[pos];
unsigned int mainVal = timings[pos];
if (refVal_min > mainVal || mainVal > refVal_max)
{
Pack1EqualPack3 = false;
@ -374,9 +398,13 @@ void verification3() {
data2_ready = true;
}
}
if (state == STATUS_RECORDING_END && data1_ready == false && data2_ready == false) {
state = STATUS_WAITING;
}
}
void handleInterrupt() {
digitalWrite(9, HIGH);
unsigned long currentTime = micros();
unsigned int duration = currentTime - lastTime;
//lastTime = currentTime;
@ -409,7 +437,7 @@ void handleInterrupt() {
break;
}
}
digitalWrite(9, LOW);
#ifdef RF_CONTROL_SIMULATE_ARDUINO
printf("\n");
#endif