void ShellClass::digitalWriteCmd(String& params){ int pin = nextParam(params).toInt(); int level = nextParam(params).toInt(); if (g_APinDescription[pin].ulPinType == PIO_NOT_A_PIN){ Log.e(SHELL_TAG) << F("Pin number ") << pin << F(" is not a valid digital I/O pin for this board") << Endl; } else{ pinMode(pin, OUTPUT); digitalWrite(pin, level); Log.i(SHELL_TAG) << F("OK") << Endl; } }
void ShellClass::analogWriteCmd(String& params){ int pin = A0 + nextParam(params).toInt(); int value = nextParam(params).toInt(); uint32_t attr = g_APinDescription[pin].ulPinAttribute; if ((attr & PIN_ATTR_ANALOG) != PIN_ATTR_ANALOG && (attr & PIN_ATTR_PWM) != PIN_ATTR_PWM){ Log.e(SHELL_TAG) << F("Pin number A") << pin << F(" is not a valid analog I/O pin for this board") << Endl; } else{ pinMode(pin, OUTPUT); analogWrite(pin, value); Log.i(SHELL_TAG) << F("OK") << Endl; } }
//S void ShellClass::SDMkDirCmd(String& params){ String path = nextParam(params); if (SD.mkdir(path)){ Log.i(SHELL_TAG) << F("OK") << Endl; } else{ Log.e(SHELL_TAG) << F("Error creating new directory: is SD inserted?") << Endl; } }
void ShellClass::channelValueCmd(String& params){ int id = nextParam(params).toInt(); Channel* c = channelsConfig.getChannelByID(id); if (c == NULL){ Log.e(SHELL_TAG) << F("Channel not found") << Endl; } else{ Log.i(SHELL_TAG) << c->getID() << "\t" << channelsBuffer.getValueAsString(id) << "\t" << channelsBuffer.getValueAsByteArray(id).toHexString() << Endl; } }
//Cmds //A void ShellClass::analogReadCmd(String& params){ int pin = A0 + nextParam(params).toInt(); uint32_t attr = g_APinDescription[pin].ulPinAttribute; if ((attr & PIN_ATTR_ANALOG) != PIN_ATTR_ANALOG){ Log.e(SHELL_TAG) << F("Pin number A") << pin << F(" is not a valid analog I/O pin for this board") << Endl; } else{ pinMode(pin, INPUT); Log.i(SHELL_TAG) << F("Readed ") << analogRead(pin) << Endl; } }
void ShellClass::SDRmCmd(String& params){ String path = nextParam(params); if (SD.exists(path)){ if (SD.remove(path)){ Log.i(SHELL_TAG) << F("OK") << Endl; } else{ Log.e(SHELL_TAG) << F("Error deleting file") << Endl; } } else{ Log.e(SHELL_TAG) << F("File not found") << Endl; } }
void ShellClass::SDRmDirCmd(String& params){ String path = nextParam(params); if (SD.exists(path)){ if (SD.rmdir(path)){ Log.i(SHELL_TAG) << F("OK") << Endl; } else{ Log.e(SHELL_TAG) << F("Error deleting directory") << Endl; } } else{ Log.e(SHELL_TAG) << F("Directory not found") << Endl; } }
void ShellClass::SDOpenCmd(String& params){ String path = nextParam(params); if (SD.exists(path)){ File f = SD.open(path); f.setTimeout(100); if (f){ while (f.available()){ Log.i(SHELL_TAG) << f.readStringUntil('\n') << Endl; } f.close(); } else{ Log.e(SHELL_TAG) << F("Error opening file") << Endl; } } else{ Log.e(SHELL_TAG) << F("File not found") << Endl; } }
char getChar(char sep, istream& I) { nextParam(sep, I); char c; I>>c; return c; }
void getStr(char sep, istream& I, char* s) { nextParam(sep, I); I>>s; }
int getInt(char sep, istream& I) { nextParam(sep, I); int i; I>>i; // get the number return i; }
unsigned long getLongInt(char sep, istream& I) { nextParam(sep, I); unsigned long i; I>>i; // get the number return i; }
double getDouble(char sep, istream& I) { nextParam(sep, I); double d; I>>d; // get the number return d; }
void ViBenchMarker3::process2() { int time = mTime.elapsed(); QObject::disconnect(mCurrentObject.data(), SIGNAL(noiseGenerated()), this, SLOT(process2())); /*QObject::connect(mCurrentObject.data(), SIGNAL(encoded()), this, SLOT(quit())); mCurrentObject->encode(ViAudio::Noise); return;*/ qreal maxMAT = 0; qint64 maxTP = 0, maxTN = 0, maxFP = 0, maxFN = 0; qint64 i, lengthIndex, offset1 = 0, offset2 = 0; int noChange = 0; ViAudioReadData corrupted(mCurrentObject->buffer(ViAudio::Noise)); ViAudioReadData realMask(mCurrentObject->buffer(ViAudio::CustomMask)); ViAudioReadData length(mCurrentObject->buffer(ViAudio::Custom)); corrupted.setSampleCount(WINDOW_SIZE); realMask.setSampleCount(WINDOW_SIZE); length.setSampleCount(WINDOW_SIZE); ViSampleChunk *nData1 = new ViSampleChunk(corrupted.bufferSamples() / 2); ViSampleChunk *nData2 = new ViSampleChunk(corrupted.bufferSamples() / 2); ViSampleChunk *nMask1 = new ViSampleChunk(corrupted.bufferSamples() / 2); ViSampleChunk *nMask2 = new ViSampleChunk(corrupted.bufferSamples() / 2); ViSampleChunk *nRealMask1 = new ViSampleChunk(realMask.bufferSamples() / 2); ViSampleChunk *nRealMask2 = new ViSampleChunk(realMask.bufferSamples() / 2); ViSampleChunk *nLength1 = new ViSampleChunk(corrupted.bufferSamples() / 2); ViSampleChunk *nLength2 = new ViSampleChunk(corrupted.bufferSamples() / 2); while(corrupted.hasData() && realMask.hasData()) { corrupted.read(); ViSampleChunk &corrupted1 = corrupted.splitSamples(0); ViSampleChunk &corrupted2 = corrupted.splitSamples(1); realMask.read(); ViSampleChunk &realMask1 = realMask.splitSamples(0); ViSampleChunk &realMask2 = realMask.splitSamples(1); length.read(); ViSampleChunk &length1 = length.splitSamples(0); ViSampleChunk &length2 = length.splitSamples(1); for(i = 0; i < corrupted1.size(); ++i) { (*nData1)[i + offset1] = corrupted1[i]; (*nRealMask1)[i + offset1] = realMask1[i]; (*nLength1)[i + offset1] = length1[i]; } offset1 += corrupted1.size(); for(i = 0; i < corrupted2.size(); ++i) { (*nData2)[i + offset2] = corrupted2[i]; (*nRealMask2)[i + offset2] = realMask2[i]; (*nLength2)[i + offset2] = length2[i]; } offset2 += corrupted2.size(); } mCurrentObject->clearBuffer(ViAudio::Target); mCurrentObject->clearBuffer(ViAudio::Noise); mCurrentObject->clearBuffer(ViAudio::NoiseMask); ViNoise noise1(nData1, nMask1, mCurrentThreshold); ViNoise noise2(nData2, nMask2, mCurrentThreshold); QVector<qreal> lengthTP(ViNoiseCreator::noiseSizeCount()); QVector<qreal> lengthFN(ViNoiseCreator::noiseSizeCount()); lengthTP.fill(0); lengthFN.fill(0); QVector<qreal> maxLengthTP, maxLengthFN; for(mCurrentThreshold = MASK_START; mCurrentThreshold <= MASK_END; mCurrentThreshold += MASK_INTERVAL) { noise1.setThreshold(mCurrentThreshold); noise1.generateMask(ViNoise::NOISE_TYPE); noise2.setThreshold(mCurrentThreshold); noise2.generateMask(ViNoise::NOISE_TYPE); qint64 truePositives = 0, falsePositives = 0, trueNegatives = 0, falseNegatives = 0; for(i = 0; i < nRealMask1->size(); ++i) { if((*nRealMask1)[i] == 1) { lengthIndex = ViNoiseCreator::fromSizeMask((*nLength1)[i]) - 1; if((*nMask1)[i] == 1) { ++truePositives; lengthTP[lengthIndex] += 1; } else { ++falseNegatives; lengthFN[lengthIndex] += 1; } } else if((*nRealMask1)[i] == 0) { if((*nMask1)[i] == 1) ++falsePositives; else ++trueNegatives; } } for(i = 0; i < nRealMask2->size(); ++i) { if((*nRealMask2)[i] == 1) { lengthIndex = ViNoiseCreator::fromSizeMask((*nLength2)[i]) - 1; if((*nMask2)[i] == 1) { ++truePositives; lengthTP[lengthIndex] += 1; } else { ++falseNegatives; lengthFN[lengthIndex] += 1; } } else if((*nRealMask2)[i] == 0) { if((*nMask2)[i] == 1) ++falsePositives; else ++trueNegatives; } } qreal math = matthews(truePositives, trueNegatives, falsePositives, falseNegatives); if(math > maxMAT) { maxMAT = math; maxTP = truePositives; maxTN = trueNegatives; maxFP = falsePositives; maxFN = falseNegatives; maxLengthTP = lengthTP; maxLengthFN = lengthFN; noChange = 0; } ++noChange; if(noChange > NO_CHANGE) break; } delete nRealMask1; delete nRealMask2; delete nLength1; delete nLength2; ++mDoneParamIterations; if(maxMAT > mBestMatthews) mBestMatthews = maxMAT; printFileData(time, maxTP, maxTN, maxFP, maxFN, maxLengthTP, maxLengthFN); printTerminal(time, maxTP, maxTN, maxFP, maxFN, mBestMatthews); if(nextParam()) process1(false); else nextFile(); }