void initAdvancedAsync(){ if(isInit == true) { //println_W("All ready initialized advanced async"); return; } isInit=true; int i; for (i=0;i<GetNumberOfIOChannels();i++){ startAdvancedAsyncDefault(i); } //println_W("Initializing advanced async"); }
/* * Set Channel Mode * Sets the given channel to the given mode * Returns true if successful */ boolean SetChannelMode(uint8_t pin,uint8_t mode){ if(setChanelModeHWPtr == NULL){ //println_E("Set mode pointer not set!") return false; } //println_I("Abstract_bcs_io_setmode Setting Mode: ");printMode(mode,INFO_PRINT);print_I(" on: ");p_int_I(pin); boolean ok = setChanelModeHWPtr(pin,mode); //print_I(" Hardware ok"); //getBcsIoDataTable(pin)->PIN.currentChannelMode = mode; SetChannelModeDataTable(pin,mode); if(IsAsync(pin)){ //print_I(" Restarting async"); startAdvancedAsyncDefault(pin); } return ok; }
void setAsync(uint8_t pin,boolean async){ setAsyncLocal(pin,async); startAdvancedAsyncDefault(pin); }
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; }