void printAsync(){ int i; println_I("Async Data ");p_fl_I(getMs()); for(i=0;i<GetNumberOfIOChannels();i++){ println_I("\t# ");p_int_I(i); print_I("\tCurrent ");p_int_I(getBcsIoDataTable()[i].PIN.asyncDataCurrentVal); print_I("\tPrevious ");p_int_I(getBcsIoDataTable()[i].PIN.asyncDataPreviousVal); print_I("\tMode ");printAsyncType(getBcsIoDataTable()[i].PIN.asyncDataType); print_I("\tIteration ");p_fl_I(getBcsIoDataTable()[i].PIN.asyncDataTime.setPoint); print_I("\tLast ");p_fl_I(getBcsIoDataTable()[i].PIN.asyncDataTime.MsTime); } }
boolean pushAsyncReady( uint8_t pin){ if(!IsAsync(pin)){ //println_I("No asyinc on pin ");p_int_I(pin);print_I(" Mode 0x");prHEX8(GetChannelMode(pin),INFO_PRINT); return false; } int32_t last; int32_t aval; int32_t db; //int i=pin; //EndCritical(); // println_I("Checking timer \nMsTime: ");p_fl_I(tRef->MsTime); // print_I(" \nSetpoint: ");p_fl_I(tRef->setPoint); // print_I(" \nCurrentTime: ");p_fl_I(getMs()); float timeout = RunEvery(getPinsScheduler( pin)); // print_I(" \nTimeout: ");p_fl_I(timeout); if(GetChannelMode(pin)== IS_SERVO){ aval = GetServoPos(pin); }else{ aval = getDataTableCurrentValue(pin); } if(timeout !=0){ // println_I("Time to do something"); switch(getBcsIoDataTable(pin)->PIN.asyncDataType){ case AUTOSAMP: // println_I("Auto samp ");p_int_I(pin); getBcsIoDataTable(pin)->PIN.asyncDataPreviousVal = aval; return true; case NOTEQUAL: // if(aval != getBcsIoDataTable(pin)->PIN.asyncDataPreviousVal){ //println_I("not equ ");p_int_I(pin); //print_I("\t"); //p_int_I(getBcsIoDataTable(pin)->PIN.asyncDataPreviousVal); //print_I("\t"); //p_int_I(getBcsIoDataTable(pin)->PIN.currentValue); getBcsIoDataTable(pin)->PIN.asyncDataPreviousVal = aval; return true; } break; case DEADBAND: last = getBcsIoDataTable(pin)->PIN.asyncDataPreviousVal; db = getBcsIoDataTable(pin)->PIN.asyncDatadeadBandval; if(!bound(last,aval,db,db)){ //println_I("deadband");p_int_I(pin); getBcsIoDataTable(pin)->PIN.asyncDataPreviousVal=aval; return true; } break; case THRESHHOLD: //println_I("treshhold");p_int_I(pin); last = getBcsIoDataTable(pin)->PIN.asyncDataPreviousVal; db = getBcsIoDataTable(pin)->PIN.asyncDatathreshholdval; if(getBcsIoDataTable(pin)->PIN.asyncDatathreshholdedge == ASYN_RISING || getBcsIoDataTable(pin)->PIN.asyncDatathreshholdedge == ASYN_BOTH){ if(last<= db && aval>db){ getBcsIoDataTable(pin)->PIN.asyncDataPreviousVal = aval; return true; } } if(getBcsIoDataTable(pin)->PIN.asyncDatathreshholdedge == ASYN_FALLING|| getBcsIoDataTable(pin)->PIN.asyncDatathreshholdedge == ASYN_BOTH){ if(last> db && aval<=db){ getBcsIoDataTable(pin)->PIN.asyncDataPreviousVal = aval; return true; } } break; default: println_E("\nNo type defined!! chan: ");p_int_E(pin); print_E(" mode: ");printMode(pin,GetChannelMode(pin),ERROR_PRINT); print_E(" type: ");printAsyncType(pin,ERROR_PRINT); startAdvancedAsyncDefault(pin); break; } }else{ // println_I("Nothing to do, returning"); } return false; }