From 5a83c13450b5c6200a267acb7bab5ca2dc55f019 Mon Sep 17 00:00:00 2001 From: brentfpage Date: Mon, 27 Oct 2025 00:32:43 -0700 Subject: [PATCH 1/7] add option for triggering at sig. gen. frequency --- .github/workflows/mac.yml | 101 +++++++++- Desktop_Interface/functiongencontrol.cpp | 161 ++++++++++++--- Desktop_Interface/functiongencontrol.h | 8 + Desktop_Interface/genericusbdriver.cpp | 95 +-------- Desktop_Interface/isobuffer.cpp | 190 +++++++++++------- Desktop_Interface/isobuffer.h | 27 ++- Desktop_Interface/isobuffer_file.cpp | 2 +- Desktop_Interface/isodriver.cpp | 82 ++++---- Desktop_Interface/isodriver.h | 6 +- Desktop_Interface/mainwindow.cpp | 27 ++- Desktop_Interface/mainwindow.h | 2 + .../ui_files_desktop/mainwindow.ui | 16 ++ .../ui_files_mobile/mainwindow.ui | 16 ++ 13 files changed, 500 insertions(+), 233 deletions(-) diff --git a/.github/workflows/mac.yml b/.github/workflows/mac.yml index a9abdd8d1..c7ba6245f 100644 --- a/.github/workflows/mac.yml +++ b/.github/workflows/mac.yml @@ -6,7 +6,7 @@ on: jobs: build-dmg: - runs-on: macos-13 + runs-on: macos-15-intel steps: - name: Checkout repository uses: actions/checkout@v4 @@ -15,7 +15,7 @@ jobs: run: | brew update brew remove --force $(brew list --formula) || true - brew install fftw libomp qt@5 libusb eigen + brew install fftw libomp qt@5 libusb eigen create-dmg brew link libomp qt@5 --force - name: Build librador @@ -36,13 +36,106 @@ jobs: qmake -config release make -j$(sysctl -n hw.ncpu) + - name: Import code signing certificate + env: + MACOS_CERTIFICATE: ${{ secrets.MACOS_CERTIFICATE }} + MACOS_CERTIFICATE_PWD: ${{ secrets.MACOS_CERTIFICATE_PWD }} + run: | + # Create keychain + KEYCHAIN_PATH=$RUNNER_TEMP/app-signing.keychain-db + KEYCHAIN_PASSWORD=$(openssl rand -base64 32) + + security create-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + security set-keychain-settings -lut 21600 $KEYCHAIN_PATH + security unlock-keychain -p "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + + # Import certificate + CERTIFICATE_PATH=$RUNNER_TEMP/certificate.p12 + echo -n "$MACOS_CERTIFICATE" | base64 --decode -o $CERTIFICATE_PATH + security import $CERTIFICATE_PATH -P "$MACOS_CERTIFICATE_PWD" -A -t cert -f pkcs12 -k $KEYCHAIN_PATH + security list-keychain -d user -s $KEYCHAIN_PATH + + # Allow codesign to access the keychain + security set-key-partition-list -S apple-tool:,apple:,codesign: -s -k "$KEYCHAIN_PASSWORD" $KEYCHAIN_PATH + - name: Build macOS app working-directory: Desktop_Interface run: | qmake -config release make -j$(sysctl -n hw.ncpu) - macdeployqt Labrador.app -verbose=2 -dmg -libpath=build_mac/libdfuprog/lib/ - mv Labrador.dmg Labrador-$(git rev-parse --short HEAD).dmg + macdeployqt Labrador.app -verbose=2 -libpath=build_mac/libdfuprog/lib/ + + - name: Code sign app bundle + working-directory: Desktop_Interface + run: | + # Find the signing identity + IDENTITY=$(security find-identity -v -p codesigning | grep "Developer ID Application" | head -1 | awk -F'"' '{print $2}') + echo "Using signing identity: $IDENTITY" + + # Sign all frameworks and dylibs first + find Labrador.app/Contents/Frameworks -name "*.dylib" -o -name "*.framework" | while read file; do + codesign --force --timestamp --options runtime --sign "$IDENTITY" "$file" || true + done + + # Sign the main app bundle + codesign --force --deep --timestamp --options runtime --sign "$IDENTITY" Labrador.app + + # Verify the signature is valid (but don't check Gatekeeper yet - app isn't notarized) + codesign -vv --deep --strict Labrador.app + echo "App bundle signed successfully" + + - name: Create and sign DMG + working-directory: Desktop_Interface + run: | + # Get the git hash for the filename + GIT_HASH=$(git rev-parse --short HEAD) + + # Find the signing identity + IDENTITY=$(security find-identity -v -p codesigning | grep "Developer ID Application" | head -1 | awk -F'"' '{print $2}') + + # Create a beautiful DMG with: + # - Applications folder symlink for drag-and-drop + # - Custom window size and icon positions + # - App icon extracted and used as DMG icon + create-dmg \ + --volname "Labrador" \ + --volicon "Labrador.app/Contents/Resources/iconfile.icns" \ + --window-pos 200 120 \ + --window-size 600 400 \ + --icon-size 100 \ + --icon "Labrador.app" 175 190 \ + --hide-extension "Labrador.app" \ + --app-drop-link 425 190 \ + --codesign "$IDENTITY" \ + "Labrador-${GIT_HASH}.dmg" \ + "Labrador.app" + + - name: Notarize DMG + working-directory: Desktop_Interface + env: + APPLE_ID: ${{ secrets.APPLE_ID }} + APPLE_ID_PASSWORD: ${{ secrets.APPLE_ID_PASSWORD }} + APPLE_TEAM_ID: ${{ secrets.APPLE_TEAM_ID }} + run: | + GIT_HASH=$(git rev-parse --short HEAD) + DMG_PATH="Labrador-${GIT_HASH}.dmg" + + # Submit for notarization + echo "Submitting DMG for notarization..." + xcrun notarytool submit "$DMG_PATH" \ + --apple-id "$APPLE_ID" \ + --password "$APPLE_ID_PASSWORD" \ + --team-id "$APPLE_TEAM_ID" \ + --wait + + # Staple the notarization ticket to the DMG + echo "Stapling notarization ticket..." + xcrun stapler staple "$DMG_PATH" + + # Verify notarization + echo "Verifying notarization..." + xcrun stapler validate "$DMG_PATH" + spctl -a -vvv -t install "$DMG_PATH" - name: Upload artifacts uses: actions/upload-artifact@v4 diff --git a/Desktop_Interface/functiongencontrol.cpp b/Desktop_Interface/functiongencontrol.cpp index ac42fc26b..afd59db46 100644 --- a/Desktop_Interface/functiongencontrol.cpp +++ b/Desktop_Interface/functiongencontrol.cpp @@ -14,7 +14,7 @@ ChannelData const& SingleChannelController::getData() const { void SingleChannelController::waveformName(QString newName) { qDebug() << "newName = " << newName; - m_data.waveform = newName; + m_data_orig.waveform = newName; #if defined(PLATFORM_ANDROID) QFile file(newName.prepend("assets:/waveforms/").append(".tlw")); @@ -27,29 +27,29 @@ void SingleChannelController::waveformName(QString newName) qFatal("could not open %s", qUtf8Printable(file.fileName())); int length = file.readLine().trimmed().toInt(); - m_data.divisibility = file.readLine().trimmed().toInt(); + m_data_orig.divisibility = file.readLine().trimmed().toInt(); QByteArray data = file.readLine().trimmed(); file.close(); qDebug() << "Length = " << length; - qDebug() << "Divisibility = " << m_data.divisibility; + qDebug() << "Divisibility = " << m_data_orig.divisibility; // Length is redundant, could be derived from the sample list. if (length != data.count('\t') + 1) qFatal("%s: sample count mismatch", qUtf8Printable(file.fileName())); - m_data.samples.resize(length); + m_data_orig.samples.resize(length); data.replace('\t', '\0'); const char *dataString = data.constData(); QByteArray dataElem; - for (auto &sample : m_data.samples) { + for (auto &sample : m_data_orig.samples) { dataElem.setRawData(dataString, strlen(dataString)); sample = static_cast(dataElem.toInt()); dataString += dataElem.size() + 1; } - m_data.repeat_forever = true; + m_data_orig.repeat_forever = true; - double newMaxFreq = DAC_SPS / (length >> (m_data.divisibility - 1)); + double newMaxFreq = DAC_SPS / (length >> (m_data_orig.divisibility - 1)); double newMinFreq = double(CLOCK_FREQ) / 1024.0 / 65535.0 / static_cast(length); setMaxFreq(newMaxFreq); @@ -61,32 +61,138 @@ void SingleChannelController::waveformName(QString newName) void SingleChannelController::freqUpdate(double newFreq) { qDebug() << "newFreq = " << newFreq; - m_data.freq = newFreq; - m_data.repeat_forever = true; + m_data_orig.freq = newFreq; + m_data_orig.repeat_forever = true; notifyUpdate(this); } +void SingleChannelController::reinitWfData() +{ + m_data = m_data_orig; +} + +unsigned char SingleChannelController::doScalingForTripleMode(unsigned char fGenTriple, ChannelID channelID) +{ + //Triple mode + if ((m_data.amplitude + m_data.offset) > FGEN_LIMIT) + { + m_data.amplitude /= 3.0; + m_data.offset /= 3.0; + fGenTriple |= static_cast(!static_cast(channelID) + 1); + } + else + { + fGenTriple &= static_cast(254 - !static_cast(channelID)); + } + return fGenTriple; +} + +void SingleChannelController::scaleToDAC() +{ + //Waveform scaling in V + m_data.amplitude = (m_data.amplitude * 255) / FGEN_LIMIT; + m_data.offset = (m_data.offset * 255) / FGEN_LIMIT; + if (m_data.offset < FGEN_OFFSET) + { + if (m_data.amplitude > 5) + m_data.amplitude -= FGEN_OFFSET; + else + m_data.amplitude = 0; + m_data.offset = FGEN_OFFSET; + } + // Apply duty cycle to Square waveform + if(m_data.waveform == "Square") + { + int length = m_data.samples.size(); + int dutyCycle = static_cast((m_data.dutyCycle*length)/100); + for (int i = 0; i < length; ++i) + { + if(i < dutyCycle) + m_data.samples[i] = 255; + else + m_data.samples[i] = 0; + } + } + + auto applyAmplitudeAndOffset = [&](unsigned char sample) -> unsigned char + { + return sample / 255.0 * m_data.amplitude + m_data.offset; + }; + + std::transform(m_data.samples.begin(), m_data.samples.end(), + m_data.samples.begin(), // transform in place + applyAmplitudeAndOffset); +} + + +//Need to increase size of wave if its freq too high, or too low! +void SingleChannelController::resizeWaveform() +{ + int shift = 0; + int newLength = m_data.samples.size(); + + while ((newLength >> shift) * m_data.freq > DAC_SPS) + shift++; + + if (shift != 0) + { + m_data.divisibility -= shift; + newLength >>= shift; + + for (int i = 0; i < newLength; ++i) + m_data.samples[i] = m_data.samples[i << shift]; + + m_data.samples.resize(newLength); + m_data.samples.shrink_to_fit(); + + if (m_data.divisibility <= 0) + qDebug("SingleChannelController::setFunctionGen: channel divisibility <= 0 after T-stretching"); + } +} + +void SingleChannelController::getClockSettings(int* clkSetting, int* timerPeriod) +{ + // Timer Setup + int validClockDivs[7] = {1, 2, 4, 8, 64, 256, 1024}; + auto period = [&](int division) -> int + { + return CLOCK_FREQ / (division * m_data.samples.size() * m_data.freq) - 0.5; + }; + + int* clkSettingIt = std::find_if(std::begin(validClockDivs), std::end(validClockDivs), + [&](int division) -> bool { return period(division) < 65535; }); + + *timerPeriod = period(*clkSettingIt); + + // +1 to change from [0:n) to [1:n] + *clkSetting = std::distance(std::begin(validClockDivs), clkSettingIt) + 1; + + this->notifyFreqUpdate(*clkSetting,*timerPeriod,m_data.samples.size()); +} + + + void SingleChannelController::amplitudeUpdate(double newAmplitude) { qDebug() << "newAmplitude = " << newAmplitude; - m_data.amplitude = newAmplitude; - m_data.repeat_forever = true; + m_data_orig.amplitude = newAmplitude; + m_data_orig.repeat_forever = true; notifyUpdate(this); } void SingleChannelController::offsetUpdate(double newOffset) { qDebug() << "newOffset = " << newOffset; - m_data.offset = newOffset; - m_data.repeat_forever = true; + m_data_orig.offset = newOffset; + m_data_orig.repeat_forever = true; notifyUpdate(this); } void SingleChannelController::dutyCycleUpdate(double newDutyCycle) { qDebug() << "newDutyCycle = " << newDutyCycle; - m_data.dutyCycle = newDutyCycle; - m_data.repeat_forever = true; + m_data_orig.dutyCycle = newDutyCycle; + m_data_orig.repeat_forever = true; notifyUpdate(this); } @@ -94,23 +200,23 @@ void SingleChannelController::txuartUpdate(int baudRate, std::vector sa { // Update txUart data int length = samples.size(); - m_data.samples.resize(length); - m_data.samples = samples; - m_data.freq = baudRate/length; - m_data.repeat_forever = false; + m_data_orig.samples.resize(length); + m_data_orig.samples = samples; + m_data_orig.freq = baudRate/length; + m_data_orig.repeat_forever = false; notifyUpdate(this); } void SingleChannelController::backup_waveform() { - m_data.freq2 = m_data.freq; + m_data_orig.freq2 = m_data_orig.freq; } void SingleChannelController::restore_waveform() { - m_data.freq = m_data.freq2; - waveformName(m_data.waveform); + m_data_orig.freq = m_data_orig.freq2; + waveformName(m_data_orig.waveform); } @@ -124,20 +230,25 @@ DualChannelController::DualChannelController(QWidget *parent) : QLabel(parent) connect(controller1, &SingleChannelController::notifyUpdate, this, [=](SingleChannelController* ptr){ this->functionGenToUpdate(ChannelID::CH1, ptr); }); + connect(controller1, &SingleChannelController::notifyFreqUpdate, + this, [=](int newClkSetting, int newTimerPeriod, int wfSize){ this->freqUpdated(ChannelID::CH1,newClkSetting,newTimerPeriod,wfSize); }); + connect(controller1, &SingleChannelController::setMaxFreq, this, &DualChannelController::setMaxFreq_CH1); connect(controller1, &SingleChannelController::setMinFreq, this, &DualChannelController::setMinFreq_CH1); - connect(controller2, &SingleChannelController::notifyUpdate, this, [=](SingleChannelController* ptr){ this->functionGenToUpdate(ChannelID::CH2, ptr); }); - connect(controller1, &SingleChannelController::setMaxFreq, + connect(controller2, &SingleChannelController::notifyFreqUpdate, + this, [=](int newClkSetting, int newTimerPeriod, int wfSize){ this->freqUpdated(ChannelID::CH2,newClkSetting,newTimerPeriod, wfSize); }); + + connect(controller2, &SingleChannelController::setMaxFreq, this, &DualChannelController::setMaxFreq_CH2); - connect(controller1, &SingleChannelController::setMinFreq, + connect(controller2, &SingleChannelController::setMinFreq, this, &DualChannelController::setMinFreq_CH2); this->hide(); diff --git a/Desktop_Interface/functiongencontrol.h b/Desktop_Interface/functiongencontrol.h index 056b12913..1dcd97e49 100644 --- a/Desktop_Interface/functiongencontrol.h +++ b/Desktop_Interface/functiongencontrol.h @@ -35,9 +35,15 @@ class SingleChannelController : public QObject public: ChannelData const& getData() const; + void reinitWfData(); + void resizeWaveform(); + unsigned char doScalingForTripleMode(unsigned char fGenTriple, ChannelID); + void scaleToDAC(); + void getClockSettings(int* clkSetting, int* timerPeriod); signals: void notifyUpdate(SingleChannelController* controller); + void notifyFreqUpdate(int clkSetting, int timerPeriod, int wfSize); void setMaxFreq(double maxFreq); void setMinFreq(double minFreq); @@ -53,6 +59,7 @@ public slots: private: ChannelData m_data; + ChannelData m_data_orig; }; class DualChannelController : public QLabel @@ -69,6 +76,7 @@ class DualChannelController : public QLabel signals: void functionGenToUpdate(ChannelID channel, SingleChannelController* fGenControl); + void freqUpdated(ChannelID channel, int newClkSetting, int newTimerPeriod, int wfSize); void setMaxFreq_CH1(double maxFreq); void setMinFreq_CH1(double minFreq); void setMaxFreq_CH2(double maxFreq); diff --git a/Desktop_Interface/genericusbdriver.cpp b/Desktop_Interface/genericusbdriver.cpp index 1f1d42933..4c83eb566 100644 --- a/Desktop_Interface/genericusbdriver.cpp +++ b/Desktop_Interface/genericusbdriver.cpp @@ -139,32 +139,17 @@ void genericUsbDriver::setFunctionGen(functionGen::ChannelID channelID, function void genericUsbDriver::sendFunctionGenData(functionGen::ChannelID channelID) { - //Reading in data - functionGen::ChannelData channelData = fGenPtrData[(int)channelID]->getData(); - //Triple mode - if ((channelData.amplitude + channelData.offset) > FGEN_LIMIT) - { - channelData.amplitude /= 3.0; - channelData.offset /= 3.0; - fGenTriple |= static_cast(!static_cast(channelID) + 1); - } - else - { - fGenTriple &= static_cast(254 - !static_cast(channelID)); - } + int clkSetting, timerPeriod; - //Waveform scaling in V - channelData.amplitude = (channelData.amplitude * 255) / FGEN_LIMIT; - channelData.offset = (channelData.offset * 255) / FGEN_LIMIT; - if (channelData.offset < FGEN_OFFSET) - { - if (channelData.amplitude > 5) - channelData.amplitude -= FGEN_OFFSET; - else - channelData.amplitude = 0; - channelData.offset = FGEN_OFFSET; - } + fGenPtrData[(int)channelID]->reinitWfData(); + fGenTriple = fGenPtrData[(int)channelID]->doScalingForTripleMode(fGenTriple, channelID); + fGenPtrData[(int)channelID]->scaleToDAC(); + fGenPtrData[(int)channelID]->resizeWaveform(); + fGenPtrData[(int)channelID]->getClockSettings(&clkSetting, &timerPeriod); + + //Read wf data + functionGen::ChannelData channelData = fGenPtrData[(int)channelID]->getData(); #ifdef INVERT_TRIPLE unsigned char fGenTemp = 0; @@ -175,68 +160,6 @@ void genericUsbDriver::sendFunctionGenData(functionGen::ChannelID channelID) usbSendControl(0x40, 0xa4, fGenTriple, 0, 0, NULL); #endif - // Apply duty cycle to Square waveform - if(channelData.waveform == "Square") - { - int length = channelData.samples.size(); - int dutyCycle = static_cast((channelData.dutyCycle*length)/100); - for (int i = 0; i < length; ++i) - { - if(i < dutyCycle) - channelData.samples[i] = 255; - else - channelData.samples[i] = 0; - } - } - - auto applyAmplitudeAndOffset = [&](unsigned char sample) -> unsigned char - { - return sample / 255.0 * channelData.amplitude + channelData.offset; - }; - - std::transform(channelData.samples.begin(), channelData.samples.end(), - channelData.samples.begin(), // transform in place - applyAmplitudeAndOffset); - - //Need to increase size of wave if its freq too high, or too low! - { - int shift = 0; - int newLength = channelData.samples.size(); - - while ((newLength >> shift) * channelData.freq > DAC_SPS) - shift++; - - if (shift != 0) - { - channelData.divisibility -= shift; - newLength >>= shift; - - for (int i = 0; i < newLength; ++i) - channelData.samples[i] = channelData.samples[i << shift]; - - channelData.samples.resize(newLength); - channelData.samples.shrink_to_fit(); - - if (channelData.divisibility <= 0) - qDebug("genericUsbDriver::setFunctionGen: channel divisibility <= 0 after T-stretching"); - } - } - - // Timer Setup - int validClockDivs[7] = {1, 2, 4, 8, 64, 256, 1024}; - auto period = [&](int division) -> int - { - return CLOCK_FREQ / (division * channelData.samples.size() * channelData.freq) - 0.5; - }; - - int* clkSettingIt = std::find_if(std::begin(validClockDivs), std::end(validClockDivs), - [&](int division) -> bool { return period(division) < 65535; }); - - int timerPeriod = period(*clkSettingIt); - - // +1 to change from [0:n) to [1:n] - int clkSetting = std::distance(std::begin(validClockDivs), clkSettingIt) + 1; - if(deviceMode == 5) qDebug("DEVICE IS IN MODE 5"); diff --git a/Desktop_Interface/isobuffer.cpp b/Desktop_Interface/isobuffer.cpp index 2243f7444..7acbd8013 100644 --- a/Desktop_Interface/isobuffer.cpp +++ b/Desktop_Interface/isobuffer.cpp @@ -38,6 +38,7 @@ isoBuffer::isoBuffer(QWidget* parent, int bufferLen, isoDriver* caller, unsigned , m_channel(channel_value) , m_bufferPtr(std::make_unique(bufferLen*2)) , m_bufferLen(bufferLen) + , m_isTriggeredPtr(std::make_unique(bufferLen*2)) #ifndef DISABLE_SPECTRUM , m_window_capacity(windowLen) #endif @@ -46,6 +47,7 @@ isoBuffer::isoBuffer(QWidget* parent, int bufferLen, isoDriver* caller, unsigned , m_virtualParent(caller) { m_buffer = m_bufferPtr.get(); + m_isTriggered = m_isTriggeredPtr.get(); #ifndef DISABLE_SPECTRUM m_window.reserve(m_window_capacity); m_window_iter = m_window.begin(); @@ -99,7 +101,7 @@ void isoBuffer::insertIntoBuffer(short item) } #endif - checkTriggered(); + checkTriggered(m_back); } short isoBuffer::bufferAt(uint32_t idx) const @@ -144,7 +146,7 @@ void isoBuffer::writeBuffer_short(short* data, int len) writeBuffer(data, len, 2048, [](short item) -> short {return item >> 4;}); } -std::vector isoBuffer::readBuffer(double sampleWindow, int numSamples, bool singleBit, double delayOffset) +std::vector isoBuffer::readBuffer(double sampleWindow, int numSamples, bool singleBit, int delaySamples) { /* * The expected behavior is to run backwards over the buffer with a stride @@ -157,8 +159,7 @@ std::vector isoBuffer::readBuffer(double sampleWindow, int numSamples, bo * * (1) m_insertedCount < (delayOffset + sampleWindow) * m_samplesPerSecond */ - const double timeBetweenSamples = sampleWindow * m_samplesPerSecond / numSamples; - const int delaySamples = delayOffset * m_samplesPerSecond; + const double timeBetweenSamples = sampleWindow * m_samplesPerSecond / (numSamples-1); auto readData = std::vector(numSamples, short(0)); @@ -209,6 +210,9 @@ void isoBuffer::clearBuffer() m_window.clear(); m_window_iter = m_window.begin(); #endif + + resetTrigger(); + } void isoBuffer::gainBuffer(int gain_log) @@ -426,8 +430,11 @@ void isoBuffer::serialManage(double baudRate, UartParity parity, bool hexDisplay void isoBuffer::setTriggerType(TriggerType newType) { qDebug() << "Trigger Type: " << (uint8_t)newType; - m_triggerType = newType; - m_lastTriggerDetlaT = 0; + if(newType != m_triggerType){ + m_triggerType = newType; + resetTrigger(); + m_lastTriggerDeltaT = 0; + } } void isoBuffer::setTriggerLevel(double voltageLevel, uint16_t top, bool acCoupled) @@ -436,95 +443,132 @@ void isoBuffer::setTriggerLevel(double voltageLevel, uint16_t top, bool acCouple m_triggerSensitivity = static_cast(1 + abs(voltageLevel * kTriggerSensitivityMultiplier * static_cast(top) / 128.)); qDebug() << "Trigger Level: " << m_triggerLevel; qDebug() << "Trigger sensitivity:" << m_triggerSensitivity; - m_lastTriggerDetlaT = 0; + m_lastTriggerDeltaT = 0; +} + +void isoBuffer::setSigGenTriggerFreq(functionGen::ChannelID channelID, int clkSetting, int timerPeriod, int wfSize) +{ + int validClockDivs[7] = {1, 2, 4, 8, 64, 256, 1024}; + qDebug() << "clksetting" << clkSetting; + qDebug() << "timerPeriod" << timerPeriod; + qDebug() << "wfSize" << wfSize; + + double freq_ratio = ((double) (CLOCK_FREQ/m_samplesPerSecond))/validClockDivs[clkSetting-1]; // a power 2**n, n possibly < 0 + + double bufferSamplesPerWfCycle = wfSize * (timerPeriod+1) / freq_ratio; + qDebug() << "bspwfc" << bufferSamplesPerWfCycle; + + if(channelID==functionGen::ChannelID::CH1) { + if(bufferSamplesPerCH1WfCycle!=bufferSamplesPerWfCycle){ + bufferSamplesPerCH1WfCycle = bufferSamplesPerWfCycle; + if(m_triggerType==TriggerType::CH1SigGen){ + resetTrigger(); + } + } + } else if (channelID==functionGen::ChannelID::CH2) { + qDebug() << "bufferSamplesPerCH2WfCycle set"; + if(bufferSamplesPerCH2WfCycle!=bufferSamplesPerWfCycle){ + bufferSamplesPerCH2WfCycle = bufferSamplesPerWfCycle; + if(m_triggerType==TriggerType::CH2SigGen){ + resetTrigger(); + } + } + } } // TODO: Clear trigger // FIXME: AC changes will not be reflected here -void isoBuffer::checkTriggered() +void isoBuffer::checkTriggered(int m_back) { + static uint32_t s_lastPosition = 0; if (m_triggerType == TriggerType::Disabled) return; - if ((bufferAt(0) >= (m_triggerLevel + m_triggerSensitivity)) && (m_triggerSeekState == TriggerSeekState::BelowTriggerLevel)) + if((m_triggerType == TriggerType::CH1SigGen)||(m_triggerType == TriggerType::CH2SigGen)) { - // Rising Edge - m_triggerSeekState = TriggerSeekState::AboveTriggerLevel; - if (m_triggerType == TriggerType::Rising) - addTriggerPosition(m_back - 1); - } - else if ((bufferAt(0) < (m_triggerLevel - m_triggerSensitivity)) && (m_triggerSeekState == TriggerSeekState::AboveTriggerLevel)) - { - // Falling Edge - m_triggerSeekState = TriggerSeekState::BelowTriggerLevel; - if (m_triggerType == TriggerType::Falling) - addTriggerPosition(m_back - 1); + float bufferSamplesPerWfCycle = m_triggerType == TriggerType::CH1SigGen ? bufferSamplesPerCH1WfCycle : bufferSamplesPerCH2WfCycle; + int32_t diff = m_back-s_lastPosition; + if(diff < 0) { + diff += m_bufferLen; + } + int n_cycles = diff/bufferSamplesPerWfCycle; + if( triggerIsReset || (diff-n_cycles*bufferSamplesPerWfCycle == 0) ) { + addTriggerPosition(m_back, s_lastPosition, n_cycles); + s_lastPosition=m_back; + } else { + m_isTriggered[m_back]=false; + m_isTriggered[m_back+m_bufferLen]=false; + } + triggerIsReset = false; + + } else { + m_isTriggered[m_back] = false; + m_isTriggered[m_back+m_bufferLen] = false; + + if ((bufferAt(0) >= (m_triggerLevel + m_triggerSensitivity)) && (m_triggerSeekState == TriggerSeekState::BelowTriggerLevel)) + { + // Rising Edge + m_triggerSeekState = TriggerSeekState::AboveTriggerLevel; + if (m_triggerType == TriggerType::Rising){ + addTriggerPosition(m_back, s_lastPosition, 1); + s_lastPosition=m_back; + } + } + else if ((bufferAt(0) < (m_triggerLevel - m_triggerSensitivity)) && (m_triggerSeekState == TriggerSeekState::AboveTriggerLevel)) + { + // Falling Edge + m_triggerSeekState = TriggerSeekState::BelowTriggerLevel; + if (m_triggerType == TriggerType::Falling){ + addTriggerPosition(m_back, s_lastPosition, 1); + s_lastPosition=m_back; + } + } } } -double isoBuffer::getDelayedTriggerPoint(double delay) +void isoBuffer::getDelayedTriggerPoint(double delay, double window, int* fullDelaySamples, bool* triggering) { - if (m_triggerPositionList.size() == 0) - return 0; - const uint32_t delaySamples = delay * m_samplesPerSecond; - - auto isValid = [=](uint32_t index)->bool - { - if (m_back > delaySamples) - return (index < m_back - delaySamples) || (index >= m_back); - else - return (index < m_bufferLen + m_back - delaySamples) && (index >= m_back); - }; - - auto getDelay = [=](uint32_t index)->double - { - if (m_back > index) - return (m_back - index) / static_cast(m_samplesPerSecond); - else - return (m_bufferLen + (m_back - 1) - index) / static_cast(m_samplesPerSecond); - }; - - // Like std::find_if but returns the last element matching the predicate instead of the first one - // TODO: Move this elsewhere (maybe a utils / algorithms file??) - // requires first and last to be Bidirectional iters, and form a valid range - // requires p to be a valid unaryPredicate - // Full signature would be: - // template - // It find_last_if(It begin, It end, Predicate p) - auto find_last_if = [](auto begin, auto end, auto p) - { - using It = decltype(begin); // TODO: remove this line once this is a proper function - std::reverse_iterator rlast(begin), rfirst(end); - auto found = std::find_if(rfirst, rlast, p); - return found == rlast - ? end - : std::prev(found.base()); - }; - - auto it = find_last_if(m_triggerPositionList.begin(), m_triggerPositionList.end(), isValid); - if (it != m_triggerPositionList.end()) - { - // NOTE: vector::erase does not remove the element pointed to by the second iterator. - m_triggerPositionList.erase(m_triggerPositionList.begin(), it); - return getDelay(m_triggerPositionList[0]); + const uint32_t windowSamples = window * m_samplesPerSecond; + + const uint32_t delayPosition = m_back + m_bufferLen - delaySamples; + +// starting from the delay position, go back in time until finding a trigger position, making sure that a full windowSamples's worth of samples is available from the trigger position to the earliest available sample + if(m_triggerType==TriggerType::Disabled) { + *fullDelaySamples = delaySamples; + *triggering=false; + return; + } else { + for (int i = delayPosition-1; i > delayPosition - (m_bufferLen-delaySamples-windowSamples); i--){ + if(m_isTriggered[i]){ + *fullDelaySamples = (delayPosition - i + delaySamples); + *triggering=true; + return; + } + } + *fullDelaySamples = delaySamples; + *triggering=false; } - - return 0; } double isoBuffer::getTriggerFrequencyHz() { - return (m_lastTriggerDetlaT == 0) ? -1. : static_cast(m_samplesPerSecond) / static_cast(m_lastTriggerDetlaT); + return (m_lastTriggerDeltaT == 0) ? -1. : 1. / (m_lastTriggerDeltaT); } -void isoBuffer::addTriggerPosition(uint32_t position) +void isoBuffer::addTriggerPosition(uint32_t position, uint32_t s_lastPosition, int n_cycles) { - static uint32_t s_lastPosition = 0; - m_triggerPositionList.push_back(m_back - 1); - m_lastTriggerDetlaT = (position > s_lastPosition) ? (position - s_lastPosition) : position + m_bufferLen - s_lastPosition; + uint32_t delta_samples = (position > s_lastPosition) ? (position - s_lastPosition) : position + m_bufferLen - s_lastPosition; + m_lastTriggerDeltaT = delta_samples / static_cast(m_samplesPerSecond) / n_cycles; + m_isTriggered[position] = true; + m_isTriggered[position+m_bufferLen] = true; - s_lastPosition = position; + //qDebug() << position << s_lastPosition << static_cast(m_samplesPerSecond) / static_cast(m_lastTriggerDeltaT) << "Hz"; +} - //qDebug() << position << s_lastPosition << static_cast(m_samplesPerSecond) / static_cast(m_lastTriggerDetlaT) << "Hz"; +void isoBuffer::resetTrigger() { + for(int i = 0; i < 2*m_bufferLen; i++) { + m_isTriggered[i] = false; + } + triggerIsReset = true; } diff --git a/Desktop_Interface/isobuffer.h b/Desktop_Interface/isobuffer.h index 4950dae77..7cc891c4d 100644 --- a/Desktop_Interface/isobuffer.h +++ b/Desktop_Interface/isobuffer.h @@ -27,7 +27,9 @@ enum class TriggerType : uint8_t { Disabled, Rising, - Falling + Falling, + CH1SigGen, + CH2SigGen }; enum class TriggerSeekState : uint8_t @@ -74,7 +76,7 @@ class isoBuffer : public QWidget void writeBuffer_char(char* data, int len); void writeBuffer_short(short* data, int len); - std::vector readBuffer(double sampleWindow, int numSamples, bool singleBit, double delayOffset); + std::vector readBuffer(double sampleWindow, int numSamples, bool singleBit, int delaySamples); #ifndef DISABLE_SPECTRUM std::vector readWindow(); #endif @@ -89,7 +91,7 @@ class isoBuffer : public QWidget private: template int capSample(int offset, int target, double seconds, double value, Function comp); - void checkTriggered(); + void checkTriggered(int m_back); public: int cap_x0fromLast(double seconds, double vbot); int cap_x1fromLast(double seconds, int x0, double vbot); @@ -97,8 +99,9 @@ class isoBuffer : public QWidget void serialManage(double baudRate, UartParity parity, bool hexDisplay); void setTriggerType(TriggerType newType); void setTriggerLevel(double voltageLevel, uint16_t top, bool acCoupled); - double getDelayedTriggerPoint(double delay); + void getDelayedTriggerPoint(double delay, double window, int* fullDelaySamples, bool* triggering); double getTriggerFrequencyHz(); + void setSigGenTriggerFreq(functionGen::ChannelID channelID, int clkSetting, int timerPeriod, int wfSize); // ---- MEMBER VARIABLES ---- @@ -116,6 +119,15 @@ class isoBuffer : public QWidget uint32_t m_back = 0; uint32_t m_insertedCount = 0; uint32_t m_bufferLen; + uint32_t m_back_prev = 0; + + std::unique_ptr m_isTriggeredPtr; + bool* m_isTriggered; + bool triggerIsReset = true; + void resetTrigger(); + + + #ifndef DISABLE_SPECTRUM private: @@ -140,7 +152,6 @@ class isoBuffer : public QWidget TriggerSeekState m_triggerSeekState = TriggerSeekState::BelowTriggerLevel; short m_triggerLevel = 0; short m_triggerSensitivity = 0; - std::vector m_triggerPositionList = {}; // UARTS decoding uartStyleDecoder* m_decoder = NULL; bool m_isDecoding = true; @@ -154,11 +165,13 @@ class isoBuffer : public QWidget qulonglong m_fileIO_maxFileSize; qulonglong m_fileIO_numBytesWritten; unsigned int m_currentColumn = 0; - uint32_t m_lastTriggerDetlaT = 0; + double m_lastTriggerDeltaT = 0.0; + float bufferSamplesPerCH1WfCycle; + float bufferSamplesPerCH2WfCycle; isoDriver* m_virtualParent; - void addTriggerPosition(uint32_t position); + void addTriggerPosition(uint32_t m_back, uint32_t position, int n_cycles); signals: void fileIOinternalDisable(); public slots: diff --git a/Desktop_Interface/isobuffer_file.cpp b/Desktop_Interface/isobuffer_file.cpp index 3c5b28f9f..394e0528c 100644 --- a/Desktop_Interface/isobuffer_file.cpp +++ b/Desktop_Interface/isobuffer_file.cpp @@ -24,7 +24,7 @@ void isoBuffer_file::writeBuffer_float(float* data, int len) float *isoBuffer_file::readBuffer(double sampleWindow, int numSamples, bool singleBit, double delayOffset) { //ignore singleBit for now - double timeBetweenSamples = (double) sampleWindow * samplesPerSecond / (double) numSamples; + double timeBetweenSamples = (double) sampleWindow * samplesPerSecond / ((double) numSamples - 1); double accumulatedDelay = 0; int delaySamples = (int)((double)delayOffset * samplesPerSecond); diff --git a/Desktop_Interface/isodriver.cpp b/Desktop_Interface/isodriver.cpp index a58e34182..5072c6662 100644 --- a/Desktop_Interface/isodriver.cpp +++ b/Desktop_Interface/isodriver.cpp @@ -348,10 +348,7 @@ DisplayControl::DisplayControl(double left, double right, double top, double bot rightRange = right; } -<<<<<<< HEAD -======= #ifndef DISABLE_SPECTRUM ->>>>>>> freq_resp_and_spec_zoom void DisplayControl::setRespAndSpecRanges(QWheelEvent* event, QCustomPlot* axes, isoDriver* driver) { double steps = event->delta() / 120.0; @@ -420,10 +417,7 @@ void DisplayControl::setRespAndSpecRanges(QWheelEvent* event, QCustomPlot* axes, } } -<<<<<<< HEAD -======= #endif ->>>>>>> freq_resp_and_spec_zoom @@ -812,6 +806,13 @@ void isoDriver::setTriggerLevel(double level) triggerStateChanged(); } +// channel ID here refers to the wf gen channels +void isoDriver::newSigGenTriggerFreq(functionGen::ChannelID channelID, int clkSetting, int timerPeriod, int wfSize) { + internalBuffer375_CH1->setSigGenTriggerFreq(channelID, clkSetting, timerPeriod, wfSize); + internalBuffer750->setSigGenTriggerFreq(channelID, clkSetting, timerPeriod, wfSize); +} + + void isoDriver::setSingleShotEnabled(bool enabled) { singleShotEnabled = enabled; @@ -871,17 +872,13 @@ void isoDriver::frameActionGeneric(char CH1_mode, char CH2_mode) auto internalBuffer_CH1 = (CH1_mode == -1) ? internalBuffer750 : internalBuffer375_CH1; auto internalBuffer_CH2 = internalBuffer375_CH2; - double triggerDelay = 0; - if (triggerEnabled) - { - triggerDelay = (triggerMode < 2) ? internalBuffer_CH1->getDelayedTriggerPoint(display->window) - display->window - : internalBuffer_CH2->getDelayedTriggerPoint(display->window) - display->window; - - if (triggerDelay < 0) - triggerDelay = 0; - } - - if(singleShotEnabled && (triggerDelay != 0)) + int fullDelaySamples; + bool triggering; + if((triggerMode<2)||(triggerMode>=4)) + internalBuffer_CH1->getDelayedTriggerPoint(display->delay,display->window,&fullDelaySamples,&triggering); + else + internalBuffer_CH2->getDelayedTriggerPoint(display->delay, display->window,&fullDelaySamples,&triggering); + if(singleShotEnabled && triggering) singleShotTriggered(1); std::vector readData_CH1; @@ -899,17 +896,17 @@ void isoDriver::frameActionGeneric(char CH1_mode, char CH2_mode) readData_CH2 = internalBuffer_CH2->readWindow(); } else if (freqResp) { double freqResp_window = 1/freqValue_CH1->value(); - readData_CH1 = internalBuffer_CH1->readBuffer(freqResp_window, internalBuffer_CH1->freqResp_samples, CH1_mode == 2, triggerDelay); - readData_CH2 = internalBuffer_CH2->readBuffer(freqResp_window, internalBuffer_CH2->freqResp_samples, CH2_mode == 2, triggerDelay); + readData_CH1 = internalBuffer_CH1->readBuffer(freqResp_window, internalBuffer_CH1->freqResp_samples, CH1_mode == 2, fullDelaySamples); + readData_CH2 = internalBuffer_CH2->readBuffer(freqResp_window, internalBuffer_CH2->freqResp_samples, CH2_mode == 2, fullDelaySamples); } else #endif { if (CH1_mode == -2) readDataFile = internalBufferFile->readBuffer(display->window, GRAPH_SAMPLES, false, display->delay); else if (CH1_mode) - readData_CH1 = internalBuffer_CH1->readBuffer(display->window, GRAPH_SAMPLES, CH1_mode == 2, display->delay + triggerDelay); + readData_CH1 = internalBuffer_CH1->readBuffer(display->window, GRAPH_SAMPLES, CH1_mode == 2, fullDelaySamples); if (CH2_mode) - readData_CH2 = internalBuffer_CH2->readBuffer(display->window, GRAPH_SAMPLES, CH2_mode == 2, display->delay + triggerDelay); + readData_CH2 = internalBuffer_CH2->readBuffer(display->window, GRAPH_SAMPLES, CH2_mode == 2, fullDelaySamples); } QVector CH1, CH2; @@ -1356,19 +1353,14 @@ void isoDriver::multimeterAction(){ } } - double triggerDelay = 0; - if (triggerEnabled) - { - triggerDelay = internalBuffer375_CH1->getDelayedTriggerPoint(display->window) - display->window; + int fullDelaySamples; + bool triggering; + internalBuffer375_CH1->getDelayedTriggerPoint(display->delay, display->window, &fullDelaySamples, &triggering); - if (triggerDelay < 0) - triggerDelay = 0; - } - - if(singleShotEnabled && (triggerDelay != 0)) + if(singleShotEnabled && triggering) singleShotTriggered(1); - auto readData_CH1 = internalBuffer375_CH1->readBuffer(display->window, GRAPH_SAMPLES, false, display->delay + triggerDelay); + auto readData_CH1 = internalBuffer375_CH1->readBuffer(display->window, GRAPH_SAMPLES, false, fullDelaySamples); auto CH1 = analogConvert(readData_CH1, 2048, 0, 1); //No AC coupling! QVector x(CH1.size()); @@ -1734,7 +1726,7 @@ void isoDriver::slowTimerTick(){ update_CH1 = true; update_CH2 = true; - bool frequencyLabelVisible = false; + bool frequencyLabelValid = false; if (triggerEnabled) { @@ -1750,11 +1742,15 @@ void isoDriver::slowTimerTick(){ case 3: triggerFrequency = internalBuffer375_CH2->getTriggerFrequencyHz(); break; + case 4: + case 5: + triggerFrequency = (driver->deviceMode == 6) ? internalBuffer750->getTriggerFrequencyHz() : internalBuffer375_CH1->getTriggerFrequencyHz(); + break; } if (triggerFrequency > 0.) { - frequencyLabelVisible = true; + frequencyLabelValid = true; siprint triggerFreqSiprint("Hz", triggerFrequency); siprint periodSiprint("s", 1. / triggerFrequency); @@ -1764,7 +1760,7 @@ void isoDriver::slowTimerTick(){ qDebug() << triggerFrequency << "Hz"; } - triggerFrequencyLabel->setVisible(frequencyLabelVisible); + triggerFrequencyLabel->setVisible(showTriggerFrequencyLabel&&frequencyLabelValid); } void isoDriver::setTopRange(double newTop) @@ -2053,6 +2049,7 @@ void isoDriver::triggerStateChanged() { if (!triggerEnabled) { + internalBuffer375_CH1->setTriggerType(TriggerType::Disabled); internalBuffer375_CH2->setTriggerType(TriggerType::Disabled); internalBuffer750->setTriggerType(TriggerType::Disabled); @@ -2091,6 +2088,23 @@ void isoDriver::triggerStateChanged() internalBuffer750->setTriggerType(TriggerType::Disabled); break; } + // use the CH1 buffer to do the sig gen trigger timekeeping. If there were a Ch. 2-only mode for the device, + // this practice could be problematic, but at present there is no Ch. 2-only mode. + // Also, in CH#SigGen below, the channel number refers to the sig gen channel + case 4: + { + internalBuffer375_CH1->setTriggerType(TriggerType::CH1SigGen); + internalBuffer375_CH2->setTriggerType(TriggerType::Disabled); + internalBuffer750->setTriggerType(TriggerType::CH1SigGen); + break; + } + case 5: + { + internalBuffer375_CH1->setTriggerType(TriggerType::CH2SigGen); + internalBuffer375_CH2->setTriggerType(TriggerType::Disabled); + internalBuffer750->setTriggerType(TriggerType::CH2SigGen); + } + } } diff --git a/Desktop_Interface/isodriver.h b/Desktop_Interface/isodriver.h index 1cce763c6..e706a841e 100644 --- a/Desktop_Interface/isodriver.h +++ b/Desktop_Interface/isodriver.h @@ -7,6 +7,7 @@ #include #include "qcustomplot.h" #include "genericusbdriver.h" +#include "functiongencontrol.h" #include "desktop_settings.h" #include "siprint.h" #include "i2cdecoder.h" @@ -54,6 +55,7 @@ class DisplayControl : public QObject void botRangeUpdated(double); void timeWindowUpdated(double); void delayUpdated(double); + }; class isoDriver : public QLabel @@ -71,6 +73,7 @@ class isoDriver : public QLabel QCPItemText *cursorLabel; QCPItemText *fSpaceLabel; QCPItemText *triggerFrequencyLabel; + bool showTriggerFrequencyLabel = true; #endif genericUsbDriver *driver; bool doNotTouchGraph = true; @@ -154,7 +157,6 @@ class isoDriver : public QLabel bool hexDisplay_CH1 = false; bool hexDisplay_CH2 = false; - //Generic Functions QVector analogConvert(std::vector &in, int TOP, bool AC, int channel); QVector digitalConvert(std::vector &in); @@ -330,6 +332,8 @@ public slots: void attenuationChanged_CH2(int attenuationIndex); void setHexDisplay_CH1(bool enabled); void setHexDisplay_CH2(bool enabled); + + void newSigGenTriggerFreq(functionGen::ChannelID channelID, int clkSetting, int timerPeriod, int wfSize); #ifndef DISABLE_SPECTRUM void setWindowingType(int windowing); void setMinFreqResp(double minFreqResp); diff --git a/Desktop_Interface/mainwindow.cpp b/Desktop_Interface/mainwindow.cpp index 27a51e31d..d05174deb 100644 --- a/Desktop_Interface/mainwindow.cpp +++ b/Desktop_Interface/mainwindow.cpp @@ -167,6 +167,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->psuSlider, SIGNAL(voltageChanged(double)), ui->controller_iso->driver, SLOT(setPsu(double))); connect(ui->controller_iso, SIGNAL(setGain(double)), ui->controller_iso->driver, SLOT(setGain(double))); connect(ui->controller_fg, &functionGenControl::functionGenToUpdate, ui->controller_iso->driver, &genericUsbDriver::setFunctionGen); + connect(ui->controller_fg, &functionGenControl::freqUpdated, ui->controller_iso, &isoDriver::newSigGenTriggerFreq); connect(ui->bufferDisplay, SIGNAL(modeChange(int)), ui->controller_iso->driver, SLOT(setDeviceMode(int))); connect(ui->bufferDisplay, &bufferControl::modeChange, this, [this](){ // Force a trigger refresh @@ -1513,6 +1514,7 @@ void MainWindow::reinitUsbStage2(void){ connect(ui->psuSlider, SIGNAL(voltageChanged(double)), ui->controller_iso->driver, SLOT(setPsu(double))); connect(ui->controller_iso, SIGNAL(setGain(double)), ui->controller_iso->driver, SLOT(setGain(double))); connect(ui->controller_fg, &functionGenControl::functionGenToUpdate, ui->controller_iso->driver, &genericUsbDriver::setFunctionGen); + connect(ui->controller_fg, &functionGenControl::freqUpdated, ui->controller_iso, &isoDriver::newSigGenTriggerFreq); connect(ui->bufferDisplay, SIGNAL(modeChange(int)), ui->controller_iso->driver, SLOT(setDeviceMode(int))); connect(ui->bufferDisplay, &bufferControl::modeChange, this, [this](){ // Force a trigger refresh @@ -2726,10 +2728,13 @@ void MainWindow::on_actionFrequency_Spectrum_triggered(bool checked) ui->scopeAxes->xAxis->setAutoTickCount(9); } - if (checked == true) + if (checked == true) { MAX_WINDOW_SIZE = 1<<17; - else + ui->controller_iso->showTriggerFrequencyLabel = false; + } else { MAX_WINDOW_SIZE = 10; + ui->controller_iso->showTriggerFrequencyLabel = true; + } } void MainWindow::on_actionFrequency_Response_triggered(bool checked) @@ -2763,12 +2768,14 @@ void MainWindow::on_actionFrequency_Response_triggered(bool checked) ui->cursorHoriCheck->setChecked(ui->controller_iso->horiCursorEnabled2); ui->cursorVertCheck->setChecked(ui->controller_iso->vertCursorEnabled2); ui->controller_iso->retickXAxis(); + ui->controller_iso->showTriggerFrequencyLabel = false; }else{ ui->cursorHoriCheck->setChecked(ui->controller_iso->horiCursorEnabled0); ui->cursorVertCheck->setChecked(ui->controller_iso->vertCursorEnabled0); ui->scopeAxes->xAxis->setScaleType(QCPAxis::stLinear); ui->scopeAxes->xAxis->setNumberPrecision(6); ui->scopeAxes->xAxis->setAutoTickCount(9); + ui->controller_iso->showTriggerFrequencyLabel = true; } } @@ -2799,9 +2806,11 @@ void MainWindow::on_actionEye_Diagram_triggered(bool checked) if(checked){ ui->cursorHoriCheck->setChecked(ui->controller_iso->horiCursorEnabled3); ui->cursorVertCheck->setChecked(ui->controller_iso->vertCursorEnabled3); + ui->controller_iso->showTriggerFrequencyLabel = false; }else{ ui->cursorHoriCheck->setChecked(ui->controller_iso->horiCursorEnabled0); ui->cursorVertCheck->setChecked(ui->controller_iso->vertCursorEnabled0); + ui->controller_iso->showTriggerFrequencyLabel = true; } } #endif @@ -2898,6 +2907,20 @@ void MainWindow::on_serialEncodingCheck_CH1_toggled(bool checked) } } +void MainWindow::triggerChannelChanged(int newTriggerChannel){ + if((newTriggerChannel==4)||(newTriggerChannel==5)) { + ui->triggerLevelValue->setEnabled(false); + ui->singleShotCheckBox->setEnabled(false); + ui->singleShotCheckBox->setChecked(false); + ui->label_6->setEnabled(false); + } else { + ui->triggerLevelValue->setEnabled(true); + ui->singleShotCheckBox->setEnabled(true); + ui->label_6->setEnabled(true); + } +} + + void MainWindow::on_txuart_textChanged() { QString text, new_char; diff --git a/Desktop_Interface/mainwindow.h b/Desktop_Interface/mainwindow.h index 345932713..0f48dd726 100644 --- a/Desktop_Interface/mainwindow.h +++ b/Desktop_Interface/mainwindow.h @@ -66,6 +66,8 @@ private slots: void on_actionSnap_to_Cursors_triggered(); void on_actionEnter_Manually_triggered(); + void triggerChannelChanged(int newTriggerChannel); + void connectDisplaySignals(); void calibrateStage2(); void calibrateStage3(); diff --git a/Desktop_Interface/ui_files_desktop/mainwindow.ui b/Desktop_Interface/ui_files_desktop/mainwindow.ui index 300b70155..9ed885377 100644 --- a/Desktop_Interface/ui_files_desktop/mainwindow.ui +++ b/Desktop_Interface/ui_files_desktop/mainwindow.ui @@ -691,6 +691,16 @@ CH2 (Falling) + + + Sig. Gen. CH1 + + + + + Sig. Gen. CH2 + + @@ -3643,6 +3653,12 @@ + + triggerChannelSelect + currentIndexChanged(int) + MainWindow + triggerChannelChanged(int) + acCoupledLabel_CH1 toggled(bool) diff --git a/Desktop_Interface/ui_files_mobile/mainwindow.ui b/Desktop_Interface/ui_files_mobile/mainwindow.ui index 1b6224adf..9c3e46671 100644 --- a/Desktop_Interface/ui_files_mobile/mainwindow.ui +++ b/Desktop_Interface/ui_files_mobile/mainwindow.ui @@ -576,6 +576,16 @@ CH2 (Falling) + + + Sig. Gen. CH1 + + + + + Sig. Gen. CH2 + + @@ -3627,6 +3637,12 @@ + + triggerChannelSelect + currentIndexChanged(int) + MainWindow + triggerChannelChanged(int) + acCoupledLabel_CH1 toggled(bool) From bf81de030fe4ce8246b8b620cf4530dffb722993 Mon Sep 17 00:00:00 2001 From: brentfpage Date: Fri, 31 Oct 2025 16:11:33 -0700 Subject: [PATCH 2/7] cleanup and trying to enable compilation for android --- AVR_Code/USB_BULK_TEST/src/globals.h | 4 ++-- Desktop_Interface/mainwindow.cpp | 19 +++++++++++++------ Desktop_Interface/mainwindow.h | 4 ++++ 3 files changed, 19 insertions(+), 8 deletions(-) diff --git a/AVR_Code/USB_BULK_TEST/src/globals.h b/AVR_Code/USB_BULK_TEST/src/globals.h index e85cc0b87..4a0986937 100644 --- a/AVR_Code/USB_BULK_TEST/src/globals.h +++ b/AVR_Code/USB_BULK_TEST/src/globals.h @@ -9,7 +9,7 @@ #ifndef GLOBALS_H_ #define GLOBALS_H_ -//#define SINGLE_ENDPOINT_INTERFACE +#define SINGLE_ENDPOINT_INTERFACE //#define VERO #define OVERCLOCK 48 @@ -71,4 +71,4 @@ extern const unsigned char variant; #include "unified_debug_structure.h" extern unified_debug uds; -#endif /* GLOBALS_H_ */ \ No newline at end of file +#endif /* GLOBALS_H_ */ diff --git a/Desktop_Interface/mainwindow.cpp b/Desktop_Interface/mainwindow.cpp index d05174deb..729f307f7 100644 --- a/Desktop_Interface/mainwindow.cpp +++ b/Desktop_Interface/mainwindow.cpp @@ -406,6 +406,7 @@ void MainWindow::initialisePlot() for(int i=0; i<=94; ++i) ui->scopeAxes->addGraph(); // eye diagram + defaultNumberFormat = ui->scopeAxes->xAxis->numberFormat(); #if QCP_VER == 1 QFont labelFont("Monospace", 12); labelFont.setStyleHint(QFont::Monospace); @@ -2724,8 +2725,9 @@ void MainWindow::on_actionFrequency_Spectrum_triggered(bool checked) ui->controller_iso->fSpaceLabel->setVisible(false); ui->scopeAxes->xAxis->setScaleType(QCPAxis::stLinear); - ui->scopeAxes->xAxis->setNumberPrecision(6); - ui->scopeAxes->xAxis->setAutoTickCount(9); + ui->scopeAxes->xAxis->setNumberPrecision(defaultNumberPrecision); + ui->scopeAxes->xAxis->setAutoTickCount(defaultAutoTickCount); + ui->scopeAxes->xAxis->setNumberFormat(defaultNumberFormat); } if (checked == true) { @@ -2768,13 +2770,18 @@ void MainWindow::on_actionFrequency_Response_triggered(bool checked) ui->cursorHoriCheck->setChecked(ui->controller_iso->horiCursorEnabled2); ui->cursorVertCheck->setChecked(ui->controller_iso->vertCursorEnabled2); ui->controller_iso->retickXAxis(); + ui->controller_iso->showTriggerFrequencyLabel = false; }else{ ui->cursorHoriCheck->setChecked(ui->controller_iso->horiCursorEnabled0); ui->cursorVertCheck->setChecked(ui->controller_iso->vertCursorEnabled0); + ui->controller_iso->fSpaceLabel->setVisible(false); ui->scopeAxes->xAxis->setScaleType(QCPAxis::stLinear); - ui->scopeAxes->xAxis->setNumberPrecision(6); - ui->scopeAxes->xAxis->setAutoTickCount(9); + + ui->scopeAxes->xAxis->setNumberPrecision(defaultNumberPrecision); + ui->scopeAxes->xAxis->setAutoTickCount(defaultAutoTickCount); + ui->scopeAxes->xAxis->setNumberFormat(defaultNumberFormat); + ui->controller_iso->showTriggerFrequencyLabel = true; } } @@ -2912,11 +2919,11 @@ void MainWindow::triggerChannelChanged(int newTriggerChannel){ ui->triggerLevelValue->setEnabled(false); ui->singleShotCheckBox->setEnabled(false); ui->singleShotCheckBox->setChecked(false); - ui->label_6->setEnabled(false); +// ui->label_6->setEnabled(false); } else { ui->triggerLevelValue->setEnabled(true); ui->singleShotCheckBox->setEnabled(true); - ui->label_6->setEnabled(true); +// ui->label_6->setEnabled(true); } } diff --git a/Desktop_Interface/mainwindow.h b/Desktop_Interface/mainwindow.h index 0f48dd726..9121a28f7 100644 --- a/Desktop_Interface/mainwindow.h +++ b/Desktop_Interface/mainwindow.h @@ -249,6 +249,10 @@ private slots: double reinitScopeGain; double reinitCurrentPsuVoltage; int reinitDigitalPinState; + + int defaultAutoTickCount = 9; + int defaultNumberPrecision = 6; + QString defaultNumberFormat; QSettings *settings; bool calibrationCanceled = false; From b6a29576e53a423697282f7e13aced529ce2a552 Mon Sep 17 00:00:00 2001 From: brentfpage Date: Fri, 31 Oct 2025 16:16:21 -0700 Subject: [PATCH 3/7] restored unintentially changed file --- AVR_Code/USB_BULK_TEST/src/globals.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/AVR_Code/USB_BULK_TEST/src/globals.h b/AVR_Code/USB_BULK_TEST/src/globals.h index 4a0986937..e85cc0b87 100644 --- a/AVR_Code/USB_BULK_TEST/src/globals.h +++ b/AVR_Code/USB_BULK_TEST/src/globals.h @@ -9,7 +9,7 @@ #ifndef GLOBALS_H_ #define GLOBALS_H_ -#define SINGLE_ENDPOINT_INTERFACE +//#define SINGLE_ENDPOINT_INTERFACE //#define VERO #define OVERCLOCK 48 @@ -71,4 +71,4 @@ extern const unsigned char variant; #include "unified_debug_structure.h" extern unified_debug uds; -#endif /* GLOBALS_H_ */ +#endif /* GLOBALS_H_ */ \ No newline at end of file From c7d26782ea59856017cdf5df065fcfca25f10742 Mon Sep 17 00:00:00 2001 From: brentfpage Date: Sun, 2 Nov 2025 12:45:38 -0800 Subject: [PATCH 4/7] minimized changes in genericusbdriver and functiongencontrol relative to master --- Desktop_Interface/functiongencontrol.cpp | 161 ++++------------------- Desktop_Interface/functiongencontrol.h | 8 -- Desktop_Interface/genericusbdriver.cpp | 96 ++++++++++++-- Desktop_Interface/genericusbdriver.h | 1 + Desktop_Interface/isobuffer.cpp | 4 - Desktop_Interface/mainwindow.cpp | 12 +- 6 files changed, 121 insertions(+), 161 deletions(-) diff --git a/Desktop_Interface/functiongencontrol.cpp b/Desktop_Interface/functiongencontrol.cpp index afd59db46..ac42fc26b 100644 --- a/Desktop_Interface/functiongencontrol.cpp +++ b/Desktop_Interface/functiongencontrol.cpp @@ -14,7 +14,7 @@ ChannelData const& SingleChannelController::getData() const { void SingleChannelController::waveformName(QString newName) { qDebug() << "newName = " << newName; - m_data_orig.waveform = newName; + m_data.waveform = newName; #if defined(PLATFORM_ANDROID) QFile file(newName.prepend("assets:/waveforms/").append(".tlw")); @@ -27,29 +27,29 @@ void SingleChannelController::waveformName(QString newName) qFatal("could not open %s", qUtf8Printable(file.fileName())); int length = file.readLine().trimmed().toInt(); - m_data_orig.divisibility = file.readLine().trimmed().toInt(); + m_data.divisibility = file.readLine().trimmed().toInt(); QByteArray data = file.readLine().trimmed(); file.close(); qDebug() << "Length = " << length; - qDebug() << "Divisibility = " << m_data_orig.divisibility; + qDebug() << "Divisibility = " << m_data.divisibility; // Length is redundant, could be derived from the sample list. if (length != data.count('\t') + 1) qFatal("%s: sample count mismatch", qUtf8Printable(file.fileName())); - m_data_orig.samples.resize(length); + m_data.samples.resize(length); data.replace('\t', '\0'); const char *dataString = data.constData(); QByteArray dataElem; - for (auto &sample : m_data_orig.samples) { + for (auto &sample : m_data.samples) { dataElem.setRawData(dataString, strlen(dataString)); sample = static_cast(dataElem.toInt()); dataString += dataElem.size() + 1; } - m_data_orig.repeat_forever = true; + m_data.repeat_forever = true; - double newMaxFreq = DAC_SPS / (length >> (m_data_orig.divisibility - 1)); + double newMaxFreq = DAC_SPS / (length >> (m_data.divisibility - 1)); double newMinFreq = double(CLOCK_FREQ) / 1024.0 / 65535.0 / static_cast(length); setMaxFreq(newMaxFreq); @@ -61,138 +61,32 @@ void SingleChannelController::waveformName(QString newName) void SingleChannelController::freqUpdate(double newFreq) { qDebug() << "newFreq = " << newFreq; - m_data_orig.freq = newFreq; - m_data_orig.repeat_forever = true; + m_data.freq = newFreq; + m_data.repeat_forever = true; notifyUpdate(this); } -void SingleChannelController::reinitWfData() -{ - m_data = m_data_orig; -} - -unsigned char SingleChannelController::doScalingForTripleMode(unsigned char fGenTriple, ChannelID channelID) -{ - //Triple mode - if ((m_data.amplitude + m_data.offset) > FGEN_LIMIT) - { - m_data.amplitude /= 3.0; - m_data.offset /= 3.0; - fGenTriple |= static_cast(!static_cast(channelID) + 1); - } - else - { - fGenTriple &= static_cast(254 - !static_cast(channelID)); - } - return fGenTriple; -} - -void SingleChannelController::scaleToDAC() -{ - //Waveform scaling in V - m_data.amplitude = (m_data.amplitude * 255) / FGEN_LIMIT; - m_data.offset = (m_data.offset * 255) / FGEN_LIMIT; - if (m_data.offset < FGEN_OFFSET) - { - if (m_data.amplitude > 5) - m_data.amplitude -= FGEN_OFFSET; - else - m_data.amplitude = 0; - m_data.offset = FGEN_OFFSET; - } - // Apply duty cycle to Square waveform - if(m_data.waveform == "Square") - { - int length = m_data.samples.size(); - int dutyCycle = static_cast((m_data.dutyCycle*length)/100); - for (int i = 0; i < length; ++i) - { - if(i < dutyCycle) - m_data.samples[i] = 255; - else - m_data.samples[i] = 0; - } - } - - auto applyAmplitudeAndOffset = [&](unsigned char sample) -> unsigned char - { - return sample / 255.0 * m_data.amplitude + m_data.offset; - }; - - std::transform(m_data.samples.begin(), m_data.samples.end(), - m_data.samples.begin(), // transform in place - applyAmplitudeAndOffset); -} - - -//Need to increase size of wave if its freq too high, or too low! -void SingleChannelController::resizeWaveform() -{ - int shift = 0; - int newLength = m_data.samples.size(); - - while ((newLength >> shift) * m_data.freq > DAC_SPS) - shift++; - - if (shift != 0) - { - m_data.divisibility -= shift; - newLength >>= shift; - - for (int i = 0; i < newLength; ++i) - m_data.samples[i] = m_data.samples[i << shift]; - - m_data.samples.resize(newLength); - m_data.samples.shrink_to_fit(); - - if (m_data.divisibility <= 0) - qDebug("SingleChannelController::setFunctionGen: channel divisibility <= 0 after T-stretching"); - } -} - -void SingleChannelController::getClockSettings(int* clkSetting, int* timerPeriod) -{ - // Timer Setup - int validClockDivs[7] = {1, 2, 4, 8, 64, 256, 1024}; - auto period = [&](int division) -> int - { - return CLOCK_FREQ / (division * m_data.samples.size() * m_data.freq) - 0.5; - }; - - int* clkSettingIt = std::find_if(std::begin(validClockDivs), std::end(validClockDivs), - [&](int division) -> bool { return period(division) < 65535; }); - - *timerPeriod = period(*clkSettingIt); - - // +1 to change from [0:n) to [1:n] - *clkSetting = std::distance(std::begin(validClockDivs), clkSettingIt) + 1; - - this->notifyFreqUpdate(*clkSetting,*timerPeriod,m_data.samples.size()); -} - - - void SingleChannelController::amplitudeUpdate(double newAmplitude) { qDebug() << "newAmplitude = " << newAmplitude; - m_data_orig.amplitude = newAmplitude; - m_data_orig.repeat_forever = true; + m_data.amplitude = newAmplitude; + m_data.repeat_forever = true; notifyUpdate(this); } void SingleChannelController::offsetUpdate(double newOffset) { qDebug() << "newOffset = " << newOffset; - m_data_orig.offset = newOffset; - m_data_orig.repeat_forever = true; + m_data.offset = newOffset; + m_data.repeat_forever = true; notifyUpdate(this); } void SingleChannelController::dutyCycleUpdate(double newDutyCycle) { qDebug() << "newDutyCycle = " << newDutyCycle; - m_data_orig.dutyCycle = newDutyCycle; - m_data_orig.repeat_forever = true; + m_data.dutyCycle = newDutyCycle; + m_data.repeat_forever = true; notifyUpdate(this); } @@ -200,23 +94,23 @@ void SingleChannelController::txuartUpdate(int baudRate, std::vector sa { // Update txUart data int length = samples.size(); - m_data_orig.samples.resize(length); - m_data_orig.samples = samples; - m_data_orig.freq = baudRate/length; - m_data_orig.repeat_forever = false; + m_data.samples.resize(length); + m_data.samples = samples; + m_data.freq = baudRate/length; + m_data.repeat_forever = false; notifyUpdate(this); } void SingleChannelController::backup_waveform() { - m_data_orig.freq2 = m_data_orig.freq; + m_data.freq2 = m_data.freq; } void SingleChannelController::restore_waveform() { - m_data_orig.freq = m_data_orig.freq2; - waveformName(m_data_orig.waveform); + m_data.freq = m_data.freq2; + waveformName(m_data.waveform); } @@ -230,25 +124,20 @@ DualChannelController::DualChannelController(QWidget *parent) : QLabel(parent) connect(controller1, &SingleChannelController::notifyUpdate, this, [=](SingleChannelController* ptr){ this->functionGenToUpdate(ChannelID::CH1, ptr); }); - connect(controller1, &SingleChannelController::notifyFreqUpdate, - this, [=](int newClkSetting, int newTimerPeriod, int wfSize){ this->freqUpdated(ChannelID::CH1,newClkSetting,newTimerPeriod,wfSize); }); - connect(controller1, &SingleChannelController::setMaxFreq, this, &DualChannelController::setMaxFreq_CH1); connect(controller1, &SingleChannelController::setMinFreq, this, &DualChannelController::setMinFreq_CH1); + connect(controller2, &SingleChannelController::notifyUpdate, this, [=](SingleChannelController* ptr){ this->functionGenToUpdate(ChannelID::CH2, ptr); }); - connect(controller2, &SingleChannelController::notifyFreqUpdate, - this, [=](int newClkSetting, int newTimerPeriod, int wfSize){ this->freqUpdated(ChannelID::CH2,newClkSetting,newTimerPeriod, wfSize); }); - - connect(controller2, &SingleChannelController::setMaxFreq, + connect(controller1, &SingleChannelController::setMaxFreq, this, &DualChannelController::setMaxFreq_CH2); - connect(controller2, &SingleChannelController::setMinFreq, + connect(controller1, &SingleChannelController::setMinFreq, this, &DualChannelController::setMinFreq_CH2); this->hide(); diff --git a/Desktop_Interface/functiongencontrol.h b/Desktop_Interface/functiongencontrol.h index 1dcd97e49..056b12913 100644 --- a/Desktop_Interface/functiongencontrol.h +++ b/Desktop_Interface/functiongencontrol.h @@ -35,15 +35,9 @@ class SingleChannelController : public QObject public: ChannelData const& getData() const; - void reinitWfData(); - void resizeWaveform(); - unsigned char doScalingForTripleMode(unsigned char fGenTriple, ChannelID); - void scaleToDAC(); - void getClockSettings(int* clkSetting, int* timerPeriod); signals: void notifyUpdate(SingleChannelController* controller); - void notifyFreqUpdate(int clkSetting, int timerPeriod, int wfSize); void setMaxFreq(double maxFreq); void setMinFreq(double minFreq); @@ -59,7 +53,6 @@ public slots: private: ChannelData m_data; - ChannelData m_data_orig; }; class DualChannelController : public QLabel @@ -76,7 +69,6 @@ class DualChannelController : public QLabel signals: void functionGenToUpdate(ChannelID channel, SingleChannelController* fGenControl); - void freqUpdated(ChannelID channel, int newClkSetting, int newTimerPeriod, int wfSize); void setMaxFreq_CH1(double maxFreq); void setMinFreq_CH1(double minFreq); void setMaxFreq_CH2(double maxFreq); diff --git a/Desktop_Interface/genericusbdriver.cpp b/Desktop_Interface/genericusbdriver.cpp index 4c83eb566..1d864eda4 100644 --- a/Desktop_Interface/genericusbdriver.cpp +++ b/Desktop_Interface/genericusbdriver.cpp @@ -139,17 +139,32 @@ void genericUsbDriver::setFunctionGen(functionGen::ChannelID channelID, function void genericUsbDriver::sendFunctionGenData(functionGen::ChannelID channelID) { + //Reading in data + functionGen::ChannelData channelData = fGenPtrData[(int)channelID]->getData(); - int clkSetting, timerPeriod; - - fGenPtrData[(int)channelID]->reinitWfData(); - fGenTriple = fGenPtrData[(int)channelID]->doScalingForTripleMode(fGenTriple, channelID); - fGenPtrData[(int)channelID]->scaleToDAC(); - fGenPtrData[(int)channelID]->resizeWaveform(); - fGenPtrData[(int)channelID]->getClockSettings(&clkSetting, &timerPeriod); + //Triple mode + if ((channelData.amplitude + channelData.offset) > FGEN_LIMIT) + { + channelData.amplitude /= 3.0; + channelData.offset /= 3.0; + fGenTriple |= static_cast(!static_cast(channelID) + 1); + } + else + { + fGenTriple &= static_cast(254 - !static_cast(channelID)); + } - //Read wf data - functionGen::ChannelData channelData = fGenPtrData[(int)channelID]->getData(); + //Waveform scaling in V + channelData.amplitude = (channelData.amplitude * 255) / FGEN_LIMIT; + channelData.offset = (channelData.offset * 255) / FGEN_LIMIT; + if (channelData.offset < FGEN_OFFSET) + { + if (channelData.amplitude > 5) + channelData.amplitude -= FGEN_OFFSET; + else + channelData.amplitude = 0; + channelData.offset = FGEN_OFFSET; + } #ifdef INVERT_TRIPLE unsigned char fGenTemp = 0; @@ -160,6 +175,68 @@ void genericUsbDriver::sendFunctionGenData(functionGen::ChannelID channelID) usbSendControl(0x40, 0xa4, fGenTriple, 0, 0, NULL); #endif + // Apply duty cycle to Square waveform + if(channelData.waveform == "Square") + { + int length = channelData.samples.size(); + int dutyCycle = static_cast((channelData.dutyCycle*length)/100); + for (int i = 0; i < length; ++i) + { + if(i < dutyCycle) + channelData.samples[i] = 255; + else + channelData.samples[i] = 0; + } + } + + auto applyAmplitudeAndOffset = [&](unsigned char sample) -> unsigned char + { + return sample / 255.0 * channelData.amplitude + channelData.offset; + }; + + std::transform(channelData.samples.begin(), channelData.samples.end(), + channelData.samples.begin(), // transform in place + applyAmplitudeAndOffset); + + //Need to increase size of wave if its freq too high, or too low! + { + int shift = 0; + int newLength = channelData.samples.size(); + + while ((newLength >> shift) * channelData.freq > DAC_SPS) + shift++; + + if (shift != 0) + { + channelData.divisibility -= shift; + newLength >>= shift; + + for (int i = 0; i < newLength; ++i) + channelData.samples[i] = channelData.samples[i << shift]; + + channelData.samples.resize(newLength); + channelData.samples.shrink_to_fit(); + + if (channelData.divisibility <= 0) + qDebug("genericUsbDriver::setFunctionGen: channel divisibility <= 0 after T-stretching"); + } + } + + // Timer Setup + int validClockDivs[7] = {1, 2, 4, 8, 64, 256, 1024}; + auto period = [&](int division) -> int + { + return CLOCK_FREQ / (division * channelData.samples.size() * channelData.freq) - 0.5; + }; + + int* clkSettingIt = std::find_if(std::begin(validClockDivs), std::end(validClockDivs), + [&](int division) -> bool { return period(division) < 65535; }); + + int timerPeriod = period(*clkSettingIt); + + // +1 to change from [0:n) to [1:n] + int clkSetting = std::distance(std::begin(validClockDivs), clkSettingIt) + 1; + if(deviceMode == 5) qDebug("DEVICE IS IN MODE 5"); @@ -176,6 +253,7 @@ void genericUsbDriver::sendFunctionGenData(functionGen::ChannelID channelID) usbSendControl(0x40, 0xb2, timerPeriod, clkSetting, channelData.samples.size(), channelData.samples.data()); } + this->sigGenFreqUpdated(channelID, clkSetting, timerPeriod, channelData.samples.size()); return; } diff --git a/Desktop_Interface/genericusbdriver.h b/Desktop_Interface/genericusbdriver.h index 95dcc7a57..a3807b99d 100644 --- a/Desktop_Interface/genericusbdriver.h +++ b/Desktop_Interface/genericusbdriver.h @@ -121,6 +121,7 @@ class genericUsbDriver : public QLabel void initialConnectComplete(void); void signalFirmwareFlash(void); void calibrateMe(void); + void sigGenFreqUpdated(functionGen::ChannelID channelID, int newClkSetting, int newTimerPeriod, int wfSize); public slots: void setPsu(double voltage); void setFunctionGen(functionGen::ChannelID channelID, functionGen::SingleChannelController *fGenControl); diff --git a/Desktop_Interface/isobuffer.cpp b/Desktop_Interface/isobuffer.cpp index 7acbd8013..852e58886 100644 --- a/Desktop_Interface/isobuffer.cpp +++ b/Desktop_Interface/isobuffer.cpp @@ -449,14 +449,10 @@ void isoBuffer::setTriggerLevel(double voltageLevel, uint16_t top, bool acCouple void isoBuffer::setSigGenTriggerFreq(functionGen::ChannelID channelID, int clkSetting, int timerPeriod, int wfSize) { int validClockDivs[7] = {1, 2, 4, 8, 64, 256, 1024}; - qDebug() << "clksetting" << clkSetting; - qDebug() << "timerPeriod" << timerPeriod; - qDebug() << "wfSize" << wfSize; double freq_ratio = ((double) (CLOCK_FREQ/m_samplesPerSecond))/validClockDivs[clkSetting-1]; // a power 2**n, n possibly < 0 double bufferSamplesPerWfCycle = wfSize * (timerPeriod+1) / freq_ratio; - qDebug() << "bspwfc" << bufferSamplesPerWfCycle; if(channelID==functionGen::ChannelID::CH1) { if(bufferSamplesPerCH1WfCycle!=bufferSamplesPerWfCycle){ diff --git a/Desktop_Interface/mainwindow.cpp b/Desktop_Interface/mainwindow.cpp index 729f307f7..a7fcf2071 100644 --- a/Desktop_Interface/mainwindow.cpp +++ b/Desktop_Interface/mainwindow.cpp @@ -167,7 +167,7 @@ MainWindow::MainWindow(QWidget *parent) : connect(ui->psuSlider, SIGNAL(voltageChanged(double)), ui->controller_iso->driver, SLOT(setPsu(double))); connect(ui->controller_iso, SIGNAL(setGain(double)), ui->controller_iso->driver, SLOT(setGain(double))); connect(ui->controller_fg, &functionGenControl::functionGenToUpdate, ui->controller_iso->driver, &genericUsbDriver::setFunctionGen); - connect(ui->controller_fg, &functionGenControl::freqUpdated, ui->controller_iso, &isoDriver::newSigGenTriggerFreq); + connect(ui->controller_iso->driver, &genericUsbDriver::sigGenFreqUpdated, ui->controller_iso, &isoDriver::newSigGenTriggerFreq); connect(ui->bufferDisplay, SIGNAL(modeChange(int)), ui->controller_iso->driver, SLOT(setDeviceMode(int))); connect(ui->bufferDisplay, &bufferControl::modeChange, this, [this](){ // Force a trigger refresh @@ -1515,7 +1515,7 @@ void MainWindow::reinitUsbStage2(void){ connect(ui->psuSlider, SIGNAL(voltageChanged(double)), ui->controller_iso->driver, SLOT(setPsu(double))); connect(ui->controller_iso, SIGNAL(setGain(double)), ui->controller_iso->driver, SLOT(setGain(double))); connect(ui->controller_fg, &functionGenControl::functionGenToUpdate, ui->controller_iso->driver, &genericUsbDriver::setFunctionGen); - connect(ui->controller_fg, &functionGenControl::freqUpdated, ui->controller_iso, &isoDriver::newSigGenTriggerFreq); + connect(ui->controller_iso->driver, &genericUsbDriver::sigGenFreqUpdated, ui->controller_iso, &isoDriver::newSigGenTriggerFreq); connect(ui->bufferDisplay, SIGNAL(modeChange(int)), ui->controller_iso->driver, SLOT(setDeviceMode(int))); connect(ui->bufferDisplay, &bufferControl::modeChange, this, [this](){ // Force a trigger refresh @@ -2919,11 +2919,15 @@ void MainWindow::triggerChannelChanged(int newTriggerChannel){ ui->triggerLevelValue->setEnabled(false); ui->singleShotCheckBox->setEnabled(false); ui->singleShotCheckBox->setChecked(false); -// ui->label_6->setEnabled(false); +#ifndef PLATFORM_ANDROID + ui->label_6->setEnabled(false); +#endif } else { ui->triggerLevelValue->setEnabled(true); ui->singleShotCheckBox->setEnabled(true); -// ui->label_6->setEnabled(true); +#ifndef PLATFORM_ANDROID + ui->label_6->setEnabled(true); +#endif } } From d7cf3f8258ac5263dd404c56130e756a018ddc85 Mon Sep 17 00:00:00 2001 From: Chris Esposito Date: Tue, 9 Dec 2025 20:36:02 +1100 Subject: [PATCH 5/7] PendingIntent.FLAG_MUTABLE on Bootloader too --- .../build_android/package_source/src/androidInterface.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/Desktop_Interface/build_android/package_source/src/androidInterface.java b/Desktop_Interface/build_android/package_source/src/androidInterface.java index 9935cf84d..5f2913504 100644 --- a/Desktop_Interface/build_android/package_source/src/androidInterface.java +++ b/Desktop_Interface/build_android/package_source/src/androidInterface.java @@ -89,7 +89,12 @@ public void findDevice() public void findDevice_bootloader() { Log.d(QtApplication.QtTAG, "findDevice_bootloader"); - PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); //??? + PendingIntent mPermissionIntent; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), PendingIntent.FLAG_MUTABLE); + } else { + mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); + } UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); //Handle to system USB service? HashMap deviceList = manager.getDeviceList(); Iterator deviceIterator = deviceList.values().iterator(); From 4a8f16eb25fbf09495c007114bff3337ce01bf27 Mon Sep 17 00:00:00 2001 From: brentfpage Date: Tue, 16 Dec 2025 16:22:40 -0800 Subject: [PATCH 6/7] updated some paths from master --- .github/workflows/android.yml | 28 +- Desktop_Interface/Labrador.pro | 27 +- Desktop_Interface/androidusbdriver.cpp | 7 +- .../lib/arm64-v8a/libdfuprog-0.9.so | Bin 0 -> 281408 bytes .../lib/armeabi-v7a/libdfuprog-0.9.so | Bin 0 -> 272596 bytes .../liblog/lib/arm64-v8a/liblog.so | Bin 0 -> 7864 bytes .../liblog/lib/armeabi-v7a/liblog.so | Bin 0 -> 7356 bytes .../libusb-242/android/arm64-v8a/libusb1.0.so | Bin 0 -> 105136 bytes .../android/armeabi-v7a/libusb1.0.so | Bin 71160 -> 70956 bytes .../build_android/libusb-242/libusb.h | 984 +++++++++++++----- .../package_source/AndroidManifest.xml | 11 +- .../package_source/src/androidInterface.java | 9 +- 12 files changed, 766 insertions(+), 300 deletions(-) create mode 100755 Desktop_Interface/build_android/libdfuprog/lib/arm64-v8a/libdfuprog-0.9.so create mode 100755 Desktop_Interface/build_android/libdfuprog/lib/armeabi-v7a/libdfuprog-0.9.so create mode 100755 Desktop_Interface/build_android/liblog/lib/arm64-v8a/liblog.so create mode 100755 Desktop_Interface/build_android/liblog/lib/armeabi-v7a/liblog.so create mode 100644 Desktop_Interface/build_android/libusb-242/android/arm64-v8a/libusb1.0.so diff --git a/.github/workflows/android.yml b/.github/workflows/android.yml index fa327b3d9..8d3466d49 100644 --- a/.github/workflows/android.yml +++ b/.github/workflows/android.yml @@ -1,5 +1,9 @@ name: Build Android +permissions: + contents: read + pull-requests: write + on: workflow_dispatch: workflow_call: @@ -14,14 +18,14 @@ jobs: - name: Install Qt uses: jurplel/install-qt-action@v4 with: - aqtversion: '==3.1.*' - version: '5.12.12' + aqtversion: '==3.3.*' + version: '5.14.2' host: 'linux' target: 'android' - arch: 'android_armv7' + arch: 'android' - name: Install SDK - run: ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --install 'platforms;android-28' 'build-tools;28.0.3' 'ndk;21.3.6528147' + run: ${ANDROID_SDK_ROOT}/cmdline-tools/latest/bin/sdkmanager --install 'platforms;android-31' 'build-tools;31.0.0' 'ndk;21.3.6528147' # Secrets should be the base64 portion of the PEM format # (i.e. the stuff between the BEGIN/END lines): @@ -60,20 +64,28 @@ jobs: qmake -config release make -j$(nproc) make INSTALL_ROOT=android-build install - JAVA_HOME=${JAVA_HOME_8_X64} androiddeployqt --input android-libLabrador.so-deployment-settings.json --output android-build --android-platform android-28 --verbose --gradle --release - ${ANDROID_SDK_ROOT}/build-tools/28.0.3/apksigner sign --in android-build/build/outputs/apk/release/android-build-release-unsigned.apk --out ${APK_BASENAME}-release-signed.apk --key cert.p8 --cert cert.cer --verbose + JAVA_HOME=${JAVA_HOME_8_X64} androiddeployqt --input android-Labrador-deployment-settings.json --output android-build --aab --android-platform android-31 --verbose --gradle --release + ${ANDROID_SDK_ROOT}/build-tools/31.0.0/apksigner sign --in android-build/build/outputs/apk/release/android-build-release-unsigned.apk --out ${APK_BASENAME}-release-signed.apk --key cert.p8 --cert cert.cer --verbose else qmake -config debug make -j$(nproc) make INSTALL_ROOT=android-build install - JAVA_HOME=${JAVA_HOME_8_X64} androiddeployqt --input android-libLabrador.so-deployment-settings.json --output android-build --android-platform android-28 --verbose --gradle + JAVA_HOME=${JAVA_HOME_8_X64} androiddeployqt --input android-Labrador-deployment-settings.json --output android-build --aab --android-platform android-31 --verbose --gradle cp android-build/build/outputs/apk/debug/android-build-debug.apk ${APK_BASENAME}-debug.apk fi + cp android-build/build/outputs/bundle/release/android-build-release.aab ${APK_BASENAME}-release-unsigned.aab - - name: Upload artifacts + - name: Upload apk artifacts uses: actions/upload-artifact@v4 with: name: asset-apk path: Desktop_Interface/Labrador*.apk compression-level: 0 if-no-files-found: error + - name: Upload aab artifacts + uses: actions/upload-artifact@v4 + with: + name: asset-aab + path: Desktop_Interface/Labrador*.aab + compression-level: 0 + if-no-files-found: error diff --git a/Desktop_Interface/Labrador.pro b/Desktop_Interface/Labrador.pro index 78c6e05d2..fc6d1b480 100644 --- a/Desktop_Interface/Labrador.pro +++ b/Desktop_Interface/Labrador.pro @@ -279,6 +279,7 @@ android { QT += androidextras CONFIG += mobility + CONFIG += android_app_bundle MOBILITY = DEFINES += PLATFORM_ANDROID @@ -287,13 +288,13 @@ android { INCLUDEPATH += build_android/libusb-242 ANDROID_PACKAGE_SOURCE_DIR = build_android/package_source - #ANDROID_MIN_SDK_VERSION = 21 - #ANDROID_TARGET_SDK_VERSION = 28 - ANDROID_SDK_BUILD_TOOLS_REVISION = 28.0.3 + ANDROID_MIN_SDK_VERSION = 21 + ANDROID_TARGET_SDK_VERSION = 31 + ANDROID_SDK_BUILD_TOOLS_REVISION = 31.0.0 # These are used in the AndroidManifest.xml template - ANDROID_VERSION_NAME = 1.3 - ANDROID_VERSION_CODE = 8 + ANDROID_VERSION_NAME = 1.4 + ANDROID_VERSION_CODE = 9 ANDROID_PERMISSIONS += android.permission.INTERNET ANDROID_PERMISSIONS += android.permission.WRITE_EXTERNAL_STORAGE ANDROID_PERMISSIONS += android.permission.READ_EXTERNAL_STORAGE @@ -307,13 +308,7 @@ android { INSTALLS += firmware waveforms #libdfuprog include - LIBS += -L$$PWD/build_android/libdfuprog/lib -ldfuprog-0.9 INCLUDEPATH += build_android/libdfuprog/include - ANDROID_EXTRA_LIBS += $${PWD}/build_android/libdfuprog/lib/libdfuprog-0.9.so - - #liblog include - LIBS += -L$$PWD/build_android/liblog/lib -llog - ANDROID_EXTRA_LIBS += $${PWD}/build_android/liblog/lib/liblog.so # Frequency spectrum/response disabled for now, needs UI and supporting libraries DEFINES += DISABLE_SPECTRUM @@ -321,12 +316,20 @@ android { HEADERS -= asyncdft.h # Library dependencies are only compiled for this ABI currently - ANDROID_ABIS = armeabi-v7a + ANDROID_ABIS = armeabi-v7a arm64-v8a # Doing the following inside one equals() failed. qmake bug? https://forum.qt.io/topic/113836/dynamic-libs-on-android-with-qt5-14-2/4 for(abi, ANDROID_ABIS): message("Building for Android ($${abi})") for(abi, ANDROID_ABIS): LIBS += -L$${PWD}/build_android/libusb-242/android/$${abi} -lusb1.0 for(abi, ANDROID_ABIS): ANDROID_EXTRA_LIBS += $${PWD}/build_android/libusb-242/android/$${abi}/libusb1.0.so + + #libdfuprog library + for(abi, ANDROID_ABIS): LIBS += -L$$PWD/build_android/libdfuprog/lib/$${abi} -ldfuprog-0.9 + for(abi, ANDROID_ABIS): ANDROID_EXTRA_LIBS += $${PWD}/build_android/libdfuprog/lib/$${abi}/libdfuprog-0.9.so + + #liblog library + for(abi, ANDROID_ABIS): LIBS += -L$$PWD/build_android/liblog/lib/$${abi} -llog + for(abi, ANDROID_ABIS): ANDROID_EXTRA_LIBS += $${PWD}/build_android/liblog/lib/$${abi}/liblog.so } DISTFILES += \ diff --git a/Desktop_Interface/androidusbdriver.cpp b/Desktop_Interface/androidusbdriver.cpp index e665cbb87..bef8ab13c 100644 --- a/Desktop_Interface/androidusbdriver.cpp +++ b/Desktop_Interface/androidusbdriver.cpp @@ -49,9 +49,10 @@ unsigned char androidUsbDriver::usbInit(unsigned long VIDin, unsigned long PIDin return E_BOARD_IN_BOOTLOADER; } + libusb_set_option(ctx, LIBUSB_OPTION_NO_DEVICE_DISCOVERY); int error = libusb_init(&ctx); if(error){ - qDebug() << "libusb_init FAILED"; + qDebug() << "libusb_init FAILED with error" << error; return error; } else qDebug() << "Libusb context initialised"; @@ -60,7 +61,7 @@ unsigned char androidUsbDriver::usbInit(unsigned long VIDin, unsigned long PIDin qDebug() << "Opening Device!"; //libusb_device * device_ptr = libusb_get_device2(ctx, usbfs_path); //error = libusb_open2(device_ptr, &handle, file_descriptor); - error = libusb_wrap_fd(ctx, file_descriptor, &handle); + error = libusb_wrap_sys_device(ctx, file_descriptor, &handle); if(error){ qDebug() << "ERROR OPENING DEVICE"; return error; @@ -121,7 +122,7 @@ int androidUsbDriver::get_new_bootloader_ctx(libusb_device **device_ptr, libusb_ //*(device_ptr) = libusb_get_device2(*(ctx), usbfs_path); //error = libusb_open2(*(device_ptr), handle, file_descriptor); - error = libusb_wrap_fd(*(ctx), file_descriptor, handle); + error = libusb_wrap_sys_device(*(ctx), file_descriptor, handle); if(error){ qDebug() << "ERROR OPENING DEVICE"; return error; diff --git a/Desktop_Interface/build_android/libdfuprog/lib/arm64-v8a/libdfuprog-0.9.so b/Desktop_Interface/build_android/libdfuprog/lib/arm64-v8a/libdfuprog-0.9.so new file mode 100755 index 0000000000000000000000000000000000000000..30ed1c8818f330e5f58f5945bd00b4f41e894453 GIT binary patch literal 281408 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 TP)IVf;iQfg8FVr+}s&Gxz7Qd8eR3GLsb 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

?DJ?H8pHWkB?;{k>v$OsE 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 literal 0 HcmV?d00001 diff --git a/Desktop_Interface/build_android/libdfuprog/lib/armeabi-v7a/libdfuprog-0.9.so b/Desktop_Interface/build_android/libdfuprog/lib/armeabi-v7a/libdfuprog-0.9.so new file mode 100755 index 0000000000000000000000000000000000000000..f26cc9815b5dc9a1740e52936de837564ea03eb7 GIT binary patch literal 272596 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%0DQ_+jyoA%6dus8uZ1H_-(23YWP5XE#zJ2 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

9mVC>ki;Jt&#EgP6GY{?DTk{hxmH)Kn0$d=rY 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%0A+~^Z#zNh) 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 FzX8+2po;(i literal 0 HcmV?d00001 diff --git a/Desktop_Interface/build_android/liblog/lib/armeabi-v7a/liblog.so b/Desktop_Interface/build_android/liblog/lib/armeabi-v7a/liblog.so new file mode 100755 index 0000000000000000000000000000000000000000..1f34f47d01e4892db5afd11c918afc6ebb912367 GIT binary patch literal 7356 zcmeHMU2GIp6h6~-OH0erA87d#Hwp*_XSbyw6%;BUkU$eq{7cMcwmWTCc6Z9mv{1!h zR1%C25)yrp7)0I_!-I*5B!(x@_~e5R@?bEA_#hBWkdR=g-*;zkJ3B2%RP<#}a?U;9 zIp?04xj!@a-Z`*o+f#;Nh^A^;DjIdcxM(g!mBhLvA$9PzOPkcfM4x6=0hMZCBkTH5 z72T*3A;*ZC0{`KeB8Tq}cnD@P^U{w{xt(8MqYD?&oIpHT`*vLPvw)LG<%bnjhpyrx zn(JUA>-sxU|F5o(+mveX=H6X0|C2pyTYozGmHXYH`d2R3doY(#8_;E3kI&VDR!Bwg zJB&_H@bP~e`;bb4BEY!cviiLdoQdGQ5qtzVoKMnetC)42TsEC|2GW-2*{&Zk<~;fa ztW4g%y(gWwixKaTn=3|hjZ9_S>*jo|APM|l$b`>iqO1U5o(=pTa@g1L9SIX33}oqbJDun|o3<*njCV#Id6oKsA6 znJKe#^~&zlszhRG#`5fJ0@iKYp4}dDEfZ(hPkN4197vkj_1SL0&gLxN_LAPH=i7y3 zpX1ueU@KQD%wl$TQg1#jw~z*ptn}@)H)y$bHq9F8j#bG4yO{L+;f&cA*7WcY%Hs*vGZ8mdEv3pCV(4A*Fgg$!|A*Qga<w0SREPk-zh?NP4Wh31uG`mgMNouO5x*s8;r9Rh4zZ$udFH<+TX_ ztwG)_!;NZ6PMBuMyAuFfT;40gGv$La+$0~B;bu7v%<&yiOwK^zx$F>1qiULbgED+} z`C|m%h~PFndpQ2#2woS#PXkK=4C2}6ixJ!(!T-%SXHnMd5Q;!{Dt(2LT}rN0a+Q*g zD!H1nGo_@erNUL53h0(azL}Er#us{fwr|}Kc|%V5Sqr^3BjF*>y*q;yvuEda)83cM z?h`X>XNGZ9oXNQMh?u^;&lj`LDHLp+_Nq9`_uX7(7+-%KJT#msT7?PhVuhj5Xwmas z9TidwR$s2z?`Th;7aiX=2a3Zc-x!aS7AOcolF@=F&!FWE>Pq=s(bjsui_42So*^@w zLyBBh`}0npN@NvsP`p9hif?70>2kC{eAjdik<-AOPT_wOIzg~35IG71*LRHLT914T zx<2P-9KT1;m28aT8j#F2pe8^?Cm^q5{l_@24ar-e6O)*aJP*t|Tw`+1>+c$%A|1~d z@X#A5!~aP1Svzy_O?MH@T)c1fF9-j0_}(BU>9{m>=1kE@!ow}6p+u$Y$$8+AS(Z2J zh@jLyeuuSA591aGAxdiBD3I3a*nv1MX*6lyRv5HS-+9EX)fr4ogrx>gZi1C(rM(q~|un|MFsex*_(?K=p} zajI!>mdFAPQ0jckprbF@rHbA{+*%D#>U>o6*rEFj;;zCr8#@1eF(0~I_^r@m1FD>Y UbN6_XiF{Wgar5V3yiF1JC;GC;AOHXW literal 0 HcmV?d00001 diff --git a/Desktop_Interface/build_android/libusb-242/android/arm64-v8a/libusb1.0.so b/Desktop_Interface/build_android/libusb-242/android/arm64-v8a/libusb1.0.so new file mode 100644 index 0000000000000000000000000000000000000000..f7c15b2c95fbf94ceaf56e86f6f830e50c8b62a9 GIT binary patch literal 105136 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 literal 0 HcmV?d00001 diff --git a/Desktop_Interface/build_android/libusb-242/android/armeabi-v7a/libusb1.0.so b/Desktop_Interface/build_android/libusb-242/android/armeabi-v7a/libusb1.0.so index 4236a98888074062bf0a83125880ccf1f2307e04..dc3df24b019b557165e39f65a875be55e496ba41 100755 GIT binary patch literal 70956 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 literal 71160 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 diff --git a/Desktop_Interface/build_android/libusb-242/libusb.h b/Desktop_Interface/build_android/libusb-242/libusb.h index 2294ef8bd..8542c6ac7 100644 --- a/Desktop_Interface/build_android/libusb-242/libusb.h +++ b/Desktop_Interface/build_android/libusb-242/libusb.h @@ -3,8 +3,9 @@ * Copyright © 2001 Johannes Erdfelt * Copyright © 2007-2008 Daniel Drake * Copyright © 2012 Pete Batard - * Copyright © 2012 Nathan Hjelm - * For more information, please visit: http://libusb.info + * Copyright © 2012-2023 Nathan Hjelm + * Copyright © 2014-2020 Chris Dickens + * For more information, please visit: https://libusb.info * * This library is free software; you can redistribute it and/or * modify it under the terms of the GNU Lesser General Public @@ -24,65 +25,64 @@ #ifndef LIBUSB_H #define LIBUSB_H -#ifdef _MSC_VER +#if defined(_MSC_VER) +#pragma warning(push) +/* Disable: warning C4200: nonstandard extension used : zero-sized array in struct/union */ +#pragma warning(disable:4200) /* on MS environments, the inline keyword is available in C++ only */ #if !defined(__cplusplus) #define inline __inline #endif -/* ssize_t is also not available (copy/paste from MinGW) */ +/* ssize_t is also not available */ #ifndef _SSIZE_T_DEFINED #define _SSIZE_T_DEFINED -#undef ssize_t -#ifdef _WIN64 - typedef __int64 ssize_t; -#else - typedef int ssize_t; -#endif /* _WIN64 */ +#include +typedef SSIZE_T ssize_t; #endif /* _SSIZE_T_DEFINED */ #endif /* _MSC_VER */ -/* stdint.h is not available on older MSVC */ -#if defined(_MSC_VER) && (_MSC_VER < 1600) && (!defined(_STDINT)) && (!defined(_STDINT_H)) -typedef unsigned __int8 uint8_t; -typedef unsigned __int16 uint16_t; -typedef unsigned __int32 uint32_t; -#else +#include #include -#endif - -#if !defined(_WIN32_WCE) #include -#endif - -#if defined(__linux) || defined(__APPLE__) || defined(__CYGWIN__) || defined(__HAIKU__) +#if !defined(_MSC_VER) #include #endif - #include -#include + +#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) +#define LIBUSB_FLEXIBLE_ARRAY /* [] - valid C99 code */ +#else +#define LIBUSB_FLEXIBLE_ARRAY 0 /* [0] - non-standard, but usually working code */ +#endif /* __STDC_VERSION__ */ /* 'interface' might be defined as a macro on Windows, so we need to * undefine it so as not to break the current libusb API, because * libusb_config_descriptor has an 'interface' member * As this can be problematic if you include windows.h after libusb.h * in your sources, we force windows.h to be included first. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +#if defined(_WIN32) || defined(__CYGWIN__) #include #if defined(interface) #undef interface #endif -#if !defined(__CYGWIN__) -#include -#endif -#endif - -#if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) -#define LIBUSB_DEPRECATED_FOR(f) \ - __attribute__((deprecated("Use " #f " instead"))) +#endif /* _WIN32 || __CYGWIN__ */ + +#if defined(__GNUC__) && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5)) +#define LIBUSB_DEPRECATED_FOR(f) __attribute__ ((deprecated ("Use " #f " instead"))) +#elif defined(__GNUC__) && (__GNUC__ >= 3) +#define LIBUSB_DEPRECATED_FOR(f) __attribute__ ((deprecated)) +#elif defined(_MSC_VER) +#define LIBUSB_DEPRECATED_FOR(f) __declspec(deprecated("Use " #f " instead")) #else #define LIBUSB_DEPRECATED_FOR(f) #endif /* __GNUC__ */ +#if defined(__GNUC__) +#define LIBUSB_PACKED __attribute__ ((packed)) +#else +#define LIBUSB_PACKED +#endif /* __GNUC__ */ + /** \def LIBUSB_CALL * \ingroup libusb_misc * libusb's Windows calling convention. @@ -115,22 +115,27 @@ typedef unsigned __int32 uint32_t; * return type, before the function name. See internal documentation for * API_EXPORTED. */ -#if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) +#if defined(_WIN32) || defined(__CYGWIN__) #define LIBUSB_CALL WINAPI +#define LIBUSB_CALLV WINAPIV #else #define LIBUSB_CALL -#endif +#define LIBUSB_CALLV +#endif /* _WIN32 || __CYGWIN__ */ /** \def LIBUSB_API_VERSION * \ingroup libusb_misc * libusb's API version. * - * Since version 1.0.13, to help with feature detection, libusb defines + * Since version 1.0.18, to help with feature detection, libusb defines * a LIBUSB_API_VERSION macro that gets increased every time there is a * significant change to the API, such as the introduction of a new call, * the definition of a new macro/enum member, or any other element that * libusb applications may want to detect at compilation time. * + * Between versions 1.0.13 and 1.0.17 (inclusive) the older spelling of + * LIBUSBX_API_VERSION was used. + * * The macro is typically used in an application as follows: * \code * #if defined(LIBUSB_API_VERSION) && (LIBUSB_API_VERSION >= 0x01001234) @@ -140,13 +145,40 @@ typedef unsigned __int32 uint32_t; * * Internally, LIBUSB_API_VERSION is defined as follows: * (libusb major << 24) | (libusb minor << 16) | (16 bit incremental) + * + * The incremental component has changed as follows: + *

*/ -#define LIBUSB_API_VERSION 0x01000105 +#define LIBUSB_API_VERSION 0x0100010C -/* The following is kept for compatibility, but will be deprecated in the future */ +/** \def LIBUSBX_API_VERSION + * \ingroup libusb_misc + * + * This is the older spelling, kept for backwards compatibility of code + * needing to test for older library versions where the newer spelling + * did not exist. */ #define LIBUSBX_API_VERSION LIBUSB_API_VERSION -#ifdef __cplusplus +#if defined(__cplusplus) extern "C" { #endif @@ -158,7 +190,7 @@ extern "C" { * \param x the host-endian value to convert * \returns the value in little-endian byte order */ -static inline uint16_t libusb_cpu_to_le16(const uint16_t x) +static inline uint16_t libusb_cpu_to_le16(uint16_t x) { union { uint8_t b8[2]; @@ -188,35 +220,35 @@ enum libusb_class_code { * this bDeviceClass value indicates that each interface specifies its * own class information and all interfaces operate independently. */ - LIBUSB_CLASS_PER_INTERFACE = 0, + LIBUSB_CLASS_PER_INTERFACE = 0x00, /** Audio class */ - LIBUSB_CLASS_AUDIO = 1, + LIBUSB_CLASS_AUDIO = 0x01, /** Communications class */ - LIBUSB_CLASS_COMM = 2, + LIBUSB_CLASS_COMM = 0x02, /** Human Interface Device class */ - LIBUSB_CLASS_HID = 3, + LIBUSB_CLASS_HID = 0x03, /** Physical */ - LIBUSB_CLASS_PHYSICAL = 5, - - /** Printer class */ - LIBUSB_CLASS_PRINTER = 7, + LIBUSB_CLASS_PHYSICAL = 0x05, /** Image class */ - LIBUSB_CLASS_PTP = 6, /* legacy name from libusb-0.1 usb.h */ - LIBUSB_CLASS_IMAGE = 6, + LIBUSB_CLASS_IMAGE = 0x06, + LIBUSB_CLASS_PTP = 0x06, /* legacy name from libusb-0.1 usb.h */ + + /** Printer class */ + LIBUSB_CLASS_PRINTER = 0x07, /** Mass storage class */ - LIBUSB_CLASS_MASS_STORAGE = 8, + LIBUSB_CLASS_MASS_STORAGE = 0x08, /** Hub class */ - LIBUSB_CLASS_HUB = 9, + LIBUSB_CLASS_HUB = 0x09, /** Data class */ - LIBUSB_CLASS_DATA = 10, + LIBUSB_CLASS_DATA = 0x0a, /** Smart Card */ LIBUSB_CLASS_SMART_CARD = 0x0b, @@ -236,6 +268,9 @@ enum libusb_class_code { /** Wireless class */ LIBUSB_CLASS_WIRELESS = 0xe0, + /** Miscellaneous class */ + LIBUSB_CLASS_MISCELLANEOUS = 0xef, + /** Application class */ LIBUSB_CLASS_APPLICATION = 0xfe, @@ -261,6 +296,10 @@ enum libusb_descriptor_type { /** Endpoint descriptor. See libusb_endpoint_descriptor. */ LIBUSB_DT_ENDPOINT = 0x05, + /** Interface Association Descriptor. + * See libusb_interface_association_descriptor */ + LIBUSB_DT_INTERFACE_ASSOCIATION = 0x0b, + /** BOS descriptor */ LIBUSB_DT_BOS = 0x0f, @@ -296,19 +335,23 @@ enum libusb_descriptor_type { #define LIBUSB_DT_SS_ENDPOINT_COMPANION_SIZE 6 #define LIBUSB_DT_BOS_SIZE 5 #define LIBUSB_DT_DEVICE_CAPABILITY_SIZE 3 +#define LIBUSB_DT_INTERFACE_ASSOCIATION_SIZE 8 /* BOS descriptor sizes */ #define LIBUSB_BT_USB_2_0_EXTENSION_SIZE 7 #define LIBUSB_BT_SS_USB_DEVICE_CAPABILITY_SIZE 10 +#define LIBUSB_BT_SSPLUS_USB_DEVICE_CAPABILITY_SIZE 12 #define LIBUSB_BT_CONTAINER_ID_SIZE 20 +#define LIBUSB_BT_PLATFORM_DESCRIPTOR_MIN_SIZE 20 /* We unwrap the BOS => define its max size */ -#define LIBUSB_DT_BOS_MAX_SIZE ((LIBUSB_DT_BOS_SIZE) +\ - (LIBUSB_BT_USB_2_0_EXTENSION_SIZE) +\ - (LIBUSB_BT_SS_USB_DEVICE_CAPABILITY_SIZE) +\ - (LIBUSB_BT_CONTAINER_ID_SIZE)) +#define LIBUSB_DT_BOS_MAX_SIZE \ + (LIBUSB_DT_BOS_SIZE + \ + LIBUSB_BT_USB_2_0_EXTENSION_SIZE + \ + LIBUSB_BT_SS_USB_DEVICE_CAPABILITY_SIZE + \ + LIBUSB_BT_CONTAINER_ID_SIZE) -#define LIBUSB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */ +#define LIBUSB_ENDPOINT_ADDRESS_MASK 0x0f /* in bEndpointAddress */ #define LIBUSB_ENDPOINT_DIR_MASK 0x80 /** \ingroup libusb_desc @@ -316,34 +359,31 @@ enum libusb_descriptor_type { * \ref libusb_endpoint_descriptor::bEndpointAddress "endpoint address" scheme. */ enum libusb_endpoint_direction { - /** In: device-to-host */ - LIBUSB_ENDPOINT_IN = 0x80, - /** Out: host-to-device */ - LIBUSB_ENDPOINT_OUT = 0x00 + LIBUSB_ENDPOINT_OUT = 0x00, + + /** In: device-to-host */ + LIBUSB_ENDPOINT_IN = 0x80 }; -#define LIBUSB_TRANSFER_TYPE_MASK 0x03 /* in bmAttributes */ +#define LIBUSB_TRANSFER_TYPE_MASK 0x03 /* in bmAttributes */ /** \ingroup libusb_desc * Endpoint transfer type. Values for bits 0:1 of the * \ref libusb_endpoint_descriptor::bmAttributes "endpoint attributes" field. */ -enum libusb_transfer_type { +enum libusb_endpoint_transfer_type { /** Control endpoint */ - LIBUSB_TRANSFER_TYPE_CONTROL = 0, + LIBUSB_ENDPOINT_TRANSFER_TYPE_CONTROL = 0x0, /** Isochronous endpoint */ - LIBUSB_TRANSFER_TYPE_ISOCHRONOUS = 1, + LIBUSB_ENDPOINT_TRANSFER_TYPE_ISOCHRONOUS = 0x1, /** Bulk endpoint */ - LIBUSB_TRANSFER_TYPE_BULK = 2, + LIBUSB_ENDPOINT_TRANSFER_TYPE_BULK = 0x2, /** Interrupt endpoint */ - LIBUSB_TRANSFER_TYPE_INTERRUPT = 3, - - /** Stream endpoint */ - LIBUSB_TRANSFER_TYPE_BULK_STREAM = 4, + LIBUSB_ENDPOINT_TRANSFER_TYPE_INTERRUPT = 0x3 }; /** \ingroup libusb_misc @@ -378,20 +418,20 @@ enum libusb_standard_request { LIBUSB_REQUEST_SET_CONFIGURATION = 0x09, /** Return the selected alternate setting for the specified interface */ - LIBUSB_REQUEST_GET_INTERFACE = 0x0A, + LIBUSB_REQUEST_GET_INTERFACE = 0x0a, /** Select an alternate interface for the specified interface */ - LIBUSB_REQUEST_SET_INTERFACE = 0x0B, + LIBUSB_REQUEST_SET_INTERFACE = 0x0b, /** Set then report an endpoint's synchronization frame */ - LIBUSB_REQUEST_SYNCH_FRAME = 0x0C, + LIBUSB_REQUEST_SYNCH_FRAME = 0x0c, /** Sets both the U1 and U2 Exit Latency */ LIBUSB_REQUEST_SET_SEL = 0x30, /** Delay from the time a host transmits a packet to the time it is * received by the device. */ - LIBUSB_SET_ISOCH_DELAY = 0x31, + LIBUSB_SET_ISOCH_DELAY = 0x31 }; /** \ingroup libusb_misc @@ -427,10 +467,10 @@ enum libusb_request_recipient { LIBUSB_RECIPIENT_ENDPOINT = 0x02, /** Other */ - LIBUSB_RECIPIENT_OTHER = 0x03, + LIBUSB_RECIPIENT_OTHER = 0x03 }; -#define LIBUSB_ISO_SYNC_TYPE_MASK 0x0C +#define LIBUSB_ISO_SYNC_TYPE_MASK 0x0c /** \ingroup libusb_desc * Synchronization type for isochronous endpoints. Values for bits 2:3 of the @@ -439,19 +479,19 @@ enum libusb_request_recipient { */ enum libusb_iso_sync_type { /** No synchronization */ - LIBUSB_ISO_SYNC_TYPE_NONE = 0, + LIBUSB_ISO_SYNC_TYPE_NONE = 0x0, /** Asynchronous */ - LIBUSB_ISO_SYNC_TYPE_ASYNC = 1, + LIBUSB_ISO_SYNC_TYPE_ASYNC = 0x1, /** Adaptive */ - LIBUSB_ISO_SYNC_TYPE_ADAPTIVE = 2, + LIBUSB_ISO_SYNC_TYPE_ADAPTIVE = 0x2, /** Synchronous */ - LIBUSB_ISO_SYNC_TYPE_SYNC = 3 + LIBUSB_ISO_SYNC_TYPE_SYNC = 0x3 }; -#define LIBUSB_ISO_USAGE_TYPE_MASK 0x30 +#define LIBUSB_ISO_USAGE_TYPE_MASK 0x30 /** \ingroup libusb_desc * Usage type for isochronous endpoints. Values for bits 4:5 of the @@ -460,13 +500,74 @@ enum libusb_iso_sync_type { */ enum libusb_iso_usage_type { /** Data endpoint */ - LIBUSB_ISO_USAGE_TYPE_DATA = 0, + LIBUSB_ISO_USAGE_TYPE_DATA = 0x0, /** Feedback endpoint */ - LIBUSB_ISO_USAGE_TYPE_FEEDBACK = 1, + LIBUSB_ISO_USAGE_TYPE_FEEDBACK = 0x1, /** Implicit feedback Data endpoint */ - LIBUSB_ISO_USAGE_TYPE_IMPLICIT = 2, + LIBUSB_ISO_USAGE_TYPE_IMPLICIT = 0x2 +}; + +/** \ingroup libusb_desc + * Supported speeds (wSpeedSupported) bitfield. Indicates what + * speeds the device supports. + */ +enum libusb_supported_speed { + /** Low speed operation supported (1.5MBit/s). */ + LIBUSB_LOW_SPEED_OPERATION = (1 << 0), + + /** Full speed operation supported (12MBit/s). */ + LIBUSB_FULL_SPEED_OPERATION = (1 << 1), + + /** High speed operation supported (480MBit/s). */ + LIBUSB_HIGH_SPEED_OPERATION = (1 << 2), + + /** Superspeed operation supported (5000MBit/s). */ + LIBUSB_SUPER_SPEED_OPERATION = (1 << 3) +}; + +/** \ingroup libusb_desc + * Masks for the bits of the + * \ref libusb_usb_2_0_extension_descriptor::bmAttributes "bmAttributes" field + * of the USB 2.0 Extension descriptor. + */ +enum libusb_usb_2_0_extension_attributes { + /** Supports Link Power Management (LPM) */ + LIBUSB_BM_LPM_SUPPORT = (1 << 1) +}; + +/** \ingroup libusb_desc + * Masks for the bits of the + * \ref libusb_ss_usb_device_capability_descriptor::bmAttributes "bmAttributes" field + * field of the SuperSpeed USB Device Capability descriptor. + */ +enum libusb_ss_usb_device_capability_attributes { + /** Supports Latency Tolerance Messages (LTM) */ + LIBUSB_BM_LTM_SUPPORT = (1 << 1) +}; + +/** \ingroup libusb_desc + * USB capability types + */ +enum libusb_bos_type { + /** Wireless USB device capability */ + LIBUSB_BT_WIRELESS_USB_DEVICE_CAPABILITY = 0x01, + + /** USB 2.0 extensions */ + LIBUSB_BT_USB_2_0_EXTENSION = 0x02, + + /** SuperSpeed USB device capability */ + LIBUSB_BT_SS_USB_DEVICE_CAPABILITY = 0x03, + + /** Container ID type */ + LIBUSB_BT_CONTAINER_ID = 0x04, + + /** Platform descriptor */ + LIBUSB_BT_PLATFORM_DESCRIPTOR = 0x05, + + /** SuperSpeedPlus device capability */ + LIBUSB_BT_SUPERSPEED_PLUS_CAPABILITY = 0x0A, }; /** \ingroup libusb_desc @@ -539,17 +640,15 @@ struct libusb_endpoint_descriptor { /** The address of the endpoint described by this descriptor. Bits 0:3 are * the endpoint number. Bits 4:6 are reserved. Bit 7 indicates direction, - * see \ref libusb_endpoint_direction. - */ + * see \ref libusb_endpoint_direction. */ uint8_t bEndpointAddress; /** Attributes which apply to the endpoint when it is configured using * the bConfigurationValue. Bits 0:1 determine the transfer type and - * correspond to \ref libusb_transfer_type. Bits 2:3 are only used for - * isochronous endpoints and correspond to \ref libusb_iso_sync_type. + * correspond to \ref libusb_endpoint_transfer_type. Bits 2:3 are only used + * for isochronous endpoints and correspond to \ref libusb_iso_sync_type. * Bits 4:5 are also only used for isochronous endpoints and correspond to - * \ref libusb_iso_usage_type. Bits 6:7 are reserved. - */ + * \ref libusb_iso_usage_type. Bits 6:7 are reserved. */ uint8_t bmAttributes; /** Maximum packet size this endpoint is capable of sending/receiving. */ @@ -569,10 +668,69 @@ struct libusb_endpoint_descriptor { * it will store them here, should you wish to parse them. */ const unsigned char *extra; - /** Length of the extra descriptors, in bytes. */ + /** Length of the extra descriptors, in bytes. Must be non-negative. */ int extra_length; }; +/** \ingroup libusb_desc + * A structure representing the standard USB interface association descriptor. + * This descriptor is documented in section 9.6.4 of the USB 3.0 specification. + * All multiple-byte fields are represented in host-endian format. + */ +struct libusb_interface_association_descriptor { + /** Size of this descriptor (in bytes) */ + uint8_t bLength; + + /** Descriptor type. Will have value + * \ref libusb_descriptor_type::LIBUSB_DT_INTERFACE_ASSOCIATION + * LIBUSB_DT_INTERFACE_ASSOCIATION in this context. */ + uint8_t bDescriptorType; + + /** Interface number of the first interface that is associated + * with this function */ + uint8_t bFirstInterface; + + /** Number of contiguous interfaces that are associated with + * this function */ + uint8_t bInterfaceCount; + + /** USB-IF class code for this function. + * A value of zero is not allowed in this descriptor. + * If this field is 0xff, the function class is vendor-specific. + * All other values are reserved for assignment by the USB-IF. + */ + uint8_t bFunctionClass; + + /** USB-IF subclass code for this function. + * If this field is not set to 0xff, all values are reserved + * for assignment by the USB-IF + */ + uint8_t bFunctionSubClass; + + /** USB-IF protocol code for this function. + * These codes are qualified by the values of the bFunctionClass + * and bFunctionSubClass fields. + */ + uint8_t bFunctionProtocol; + + /** Index of string descriptor describing this function */ + uint8_t iFunction; +}; + +/** \ingroup libusb_desc + * Structure containing an array of 0 or more interface association + * descriptors + */ +struct libusb_interface_association_descriptor_array { + /** Array of interface association descriptors. The size of this array + * is determined by the length field. + */ + const struct libusb_interface_association_descriptor *iad; + + /** Number of interface association descriptors contained. Read-only. */ + int length; +}; + /** \ingroup libusb_desc * A structure representing the standard USB interface descriptor. This * descriptor is documented in section 9.6.5 of the USB 3.0 specification. @@ -619,7 +777,7 @@ struct libusb_interface_descriptor { * it will store them here, should you wish to parse them. */ const unsigned char *extra; - /** Length of the extra descriptors, in bytes. */ + /** Length of the extra descriptors, in bytes. Must be non-negative. */ int extra_length; }; @@ -631,7 +789,8 @@ struct libusb_interface { * by the num_altsetting field. */ const struct libusb_interface_descriptor *altsetting; - /** The number of alternate settings that belong to this interface */ + /** The number of alternate settings that belong to this interface. + * Must be non-negative. */ int num_altsetting; }; @@ -678,7 +837,7 @@ struct libusb_config_descriptor { * descriptors, it will store them here, should you wish to parse them. */ const unsigned char *extra; - /** Length of the extra descriptors, in bytes. */ + /** Length of the extra descriptors, in bytes. Must be non-negative. */ int extra_length; }; @@ -689,7 +848,6 @@ struct libusb_config_descriptor { * host-endian format. */ struct libusb_ss_endpoint_companion_descriptor { - /** Size of this descriptor (in bytes) */ uint8_t bLength; @@ -698,19 +856,18 @@ struct libusb_ss_endpoint_companion_descriptor { * this context. */ uint8_t bDescriptorType; - /** The maximum number of packets the endpoint can send or * receive as part of a burst. */ uint8_t bMaxBurst; - /** In bulk EP: bits 4:0 represents the maximum number of - * streams the EP supports. In isochronous EP: bits 1:0 - * represents the Mult - a zero based value that determines - * the maximum number of packets within a service interval */ + /** In bulk EP: bits 4:0 represents the maximum number of + * streams the EP supports. In isochronous EP: bits 1:0 + * represents the Mult - a zero based value that determines + * the maximum number of packets within a service interval */ uint8_t bmAttributes; - /** The total number of bytes this EP will transfer every - * service interval. valid only for periodic EPs. */ + /** The total number of bytes this EP will transfer every + * service interval. Valid only for periodic EPs. */ uint16_t wBytesPerInterval; }; @@ -721,21 +878,18 @@ struct libusb_ss_endpoint_companion_descriptor { */ struct libusb_bos_dev_capability_descriptor { /** Size of this descriptor (in bytes) */ - uint8_t bLength; + uint8_t bLength; + /** Descriptor type. Will have value * \ref libusb_descriptor_type::LIBUSB_DT_DEVICE_CAPABILITY * LIBUSB_DT_DEVICE_CAPABILITY in this context. */ - uint8_t bDescriptorType; + uint8_t bDescriptorType; + /** Device Capability type */ - uint8_t bDevCapabilityType; + uint8_t bDevCapabilityType; + /** Device Capability data (bLength - 3 bytes) */ - uint8_t dev_capability_data -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - [] /* valid C99 code */ -#else - [0] /* non-standard, but usually working code */ -#endif - ; + uint8_t dev_capability_data[LIBUSB_FLEXIBLE_ARRAY]; }; /** \ingroup libusb_desc @@ -760,13 +914,7 @@ struct libusb_bos_descriptor { uint8_t bNumDeviceCaps; /** bNumDeviceCap Device Capability Descriptors */ - struct libusb_bos_dev_capability_descriptor *dev_capability -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - [] /* valid C99 code */ -#else - [0] /* non-standard, but usually working code */ -#endif - ; + struct libusb_bos_dev_capability_descriptor *dev_capability[LIBUSB_FLEXIBLE_ARRAY]; }; /** \ingroup libusb_desc @@ -784,7 +932,7 @@ struct libusb_usb_2_0_extension_descriptor { uint8_t bDescriptorType; /** Capability type. Will have value - * \ref libusb_capability_type::LIBUSB_BT_USB_2_0_EXTENSION + * \ref libusb_bos_type::LIBUSB_BT_USB_2_0_EXTENSION * LIBUSB_BT_USB_2_0_EXTENSION in this context. */ uint8_t bDevCapabilityType; @@ -792,7 +940,7 @@ struct libusb_usb_2_0_extension_descriptor { * A value of one in a bit location indicates a feature is * supported; a value of zero indicates it is not supported. * See \ref libusb_usb_2_0_extension_attributes. */ - uint32_t bmAttributes; + uint32_t bmAttributes; }; /** \ingroup libusb_desc @@ -810,7 +958,7 @@ struct libusb_ss_usb_device_capability_descriptor { uint8_t bDescriptorType; /** Capability type. Will have value - * \ref libusb_capability_type::LIBUSB_BT_SS_USB_DEVICE_CAPABILITY + * \ref libusb_bos_type::LIBUSB_BT_SS_USB_DEVICE_CAPABILITY * LIBUSB_BT_SS_USB_DEVICE_CAPABILITY in this context. */ uint8_t bDevCapabilityType; @@ -837,6 +985,100 @@ struct libusb_ss_usb_device_capability_descriptor { uint16_t bU2DevExitLat; }; +/** \ingroup libusb_desc + * enum used in \ref libusb_ssplus_sublink_attribute + */ +enum libusb_superspeedplus_sublink_attribute_sublink_type { + LIBUSB_SSPLUS_ATTR_TYPE_SYM = 0, + LIBUSB_SSPLUS_ATTR_TYPE_ASYM = 1, +}; + +/** \ingroup libusb_desc + * enum used in \ref libusb_ssplus_sublink_attribute + */ +enum libusb_superspeedplus_sublink_attribute_sublink_direction { + LIBUSB_SSPLUS_ATTR_DIR_RX = 0, + LIBUSB_SSPLUS_ATTR_DIR_TX = 1, +}; + +/** \ingroup libusb_desc + * enum used in \ref libusb_ssplus_sublink_attribute + * Bit = Bits per second + * Kb = Kbps + * Mb = Mbps + * Gb = Gbps + */ +enum libusb_superspeedplus_sublink_attribute_exponent { + LIBUSB_SSPLUS_ATTR_EXP_BPS = 0, + LIBUSB_SSPLUS_ATTR_EXP_KBS = 1, + LIBUSB_SSPLUS_ATTR_EXP_MBS = 2, + LIBUSB_SSPLUS_ATTR_EXP_GBS = 3, +}; + +/** \ingroup libusb_desc + * enum used in \ref libusb_ssplus_sublink_attribute + */ +enum libusb_superspeedplus_sublink_attribute_link_protocol { + LIBUSB_SSPLUS_ATTR_PROT_SS = 0, + LIBUSB_SSPLUS_ATTR_PROT_SSPLUS = 1, +}; + +/** \ingroup libusb_desc + * Expose \ref libusb_ssplus_usb_device_capability_descriptor.sublinkSpeedAttributes + */ +struct libusb_ssplus_sublink_attribute { + /** Sublink Speed Attribute ID (SSID). + This field is an ID that uniquely identifies the speed of this sublink */ + uint8_t ssid; + + /** This field defines the + base 10 exponent times 3, that shall be applied to the + mantissa. */ + enum libusb_superspeedplus_sublink_attribute_exponent exponent; + + /** This field identifies whether the + Sublink Speed Attribute defines a symmetric or + asymmetric bit rate.*/ + enum libusb_superspeedplus_sublink_attribute_sublink_type type; + + /** This field indicates if this + Sublink Speed Attribute defines the receive or + transmit bit rate. */ + enum libusb_superspeedplus_sublink_attribute_sublink_direction direction; + + /** This field identifies the protocol + supported by the link. */ + enum libusb_superspeedplus_sublink_attribute_link_protocol protocol; + + /** This field defines the mantissa that shall be applied to the exponent when + calculating the maximum bit rate. */ + uint16_t mantissa; +}; + +/** \ingroup libusb_desc + * A structure representing the SuperSpeedPlus descriptor + * This descriptor is documented in section 9.6.2.5 of the USB 3.1 specification. + */ +struct libusb_ssplus_usb_device_capability_descriptor { + /** Sublink Speed Attribute Count */ + uint8_t numSublinkSpeedAttributes; + + /** Sublink Speed ID Count */ + uint8_t numSublinkSpeedIDs; + + /** Unique ID to indicates the minimum lane speed */ + uint8_t ssid; + + /** This field indicates the minimum receive lane count.*/ + uint8_t minRxLaneCount; + + /** This field indicates the minimum transmit lane count*/ + uint8_t minTxLaneCount; + + /** Array size is \ref libusb_ssplus_usb_device_capability_descriptor.numSublinkSpeedAttributes */ + struct libusb_ssplus_sublink_attribute sublinkSpeedAttributes[]; +}; + /** \ingroup libusb_desc * A structure representing the Container ID descriptor. * This descriptor is documented in section 9.6.2.3 of the USB 3.0 specification. @@ -852,19 +1094,50 @@ struct libusb_container_id_descriptor { uint8_t bDescriptorType; /** Capability type. Will have value - * \ref libusb_capability_type::LIBUSB_BT_CONTAINER_ID + * \ref libusb_bos_type::LIBUSB_BT_CONTAINER_ID * LIBUSB_BT_CONTAINER_ID in this context. */ uint8_t bDevCapabilityType; /** Reserved field */ - uint8_t bReserved; + uint8_t bReserved; /** 128 bit UUID */ uint8_t ContainerID[16]; }; +/** \ingroup libusb_desc + * A structure representing a Platform descriptor. + * This descriptor is documented in section 9.6.2.4 of the USB 3.2 specification. + */ +struct libusb_platform_descriptor { + /** Size of this descriptor (in bytes) */ + uint8_t bLength; + + /** Descriptor type. Will have value + * \ref libusb_descriptor_type::LIBUSB_DT_DEVICE_CAPABILITY + * LIBUSB_DT_DEVICE_CAPABILITY in this context. */ + uint8_t bDescriptorType; + + /** Capability type. Will have value + * \ref libusb_bos_type::LIBUSB_BT_PLATFORM_DESCRIPTOR + * LIBUSB_BT_CONTAINER_ID in this context. */ + uint8_t bDevCapabilityType; + + /** Reserved field */ + uint8_t bReserved; + + /** 128 bit UUID */ + uint8_t PlatformCapabilityUUID[16]; + + /** Capability data (bLength - 20) */ + uint8_t CapabilityData[LIBUSB_FLEXIBLE_ARRAY]; +}; + /** \ingroup libusb_asyncio * Setup packet for control transfers. */ +#if defined(_MSC_VER) || defined(__WATCOMC__) +#pragma pack(push, 1) +#endif struct libusb_control_setup { /** Request type. Bits 0:4 determine recipient, see * \ref libusb_request_recipient. Bits 5:6 determine type, see @@ -889,7 +1162,10 @@ struct libusb_control_setup { /** Number of bytes to transfer */ uint16_t wLength; -}; +} LIBUSB_PACKED; +#if defined(_MSC_VER) || defined(__WATCOMC__) +#pragma pack(pop) +#endif #define LIBUSB_CONTROL_SETUP_SIZE (sizeof(struct libusb_control_setup)) @@ -904,22 +1180,22 @@ struct libusb_device_handle; */ struct libusb_version { /** Library major version. */ - const uint16_t major; + uint16_t major; /** Library minor version. */ - const uint16_t minor; + uint16_t minor; /** Library micro version. */ - const uint16_t micro; + uint16_t micro; /** Library nano version. */ - const uint16_t nano; + uint16_t nano; /** Library release candidate suffix string, e.g. "-rc4". */ const char *rc; /** For ABI compatibility only. */ - const char* describe; + const char *describe; }; /** \ingroup libusb_lib @@ -927,15 +1203,16 @@ struct libusb_version { * sessions allows for your program to use two libraries (or dynamically * load two modules) which both independently use libusb. This will prevent * interference between the individual libusb users - for example - * libusb_set_debug() will not affect the other user of the library, and + * libusb_set_option() will not affect the other user of the library, and * libusb_exit() will not destroy resources that the other user is still * using. * - * Sessions are created by libusb_init() and destroyed through libusb_exit(). + * Sessions are created by libusb_init_context() and destroyed through libusb_exit(). * If your application is guaranteed to only ever include a single libusb * user (i.e. you), you do not have to worry about contexts: pass NULL in - * every function call where a context is required. The default context - * will be used. + * every function call where a context is required, and the default context + * will be used. Note that libusb_set_option(NULL, ...) is special, and adds + * an option to a list of default options for new contexts. * * For more information, see \ref libusb_contexts. */ @@ -944,7 +1221,7 @@ typedef struct libusb_context libusb_context; /** \ingroup libusb_dev * Structure representing a USB device detected on the system. This is an * opaque type for which you are only ever provided with a pointer, usually - * originating from libusb_get_device_list(). + * originating from libusb_get_device_list() or libusb_hotplug_register_callback(). * * Certain operations can be performed on a device, but in order to do any * I/O you will have to first obtain a device handle using libusb_open(). @@ -987,61 +1264,12 @@ enum libusb_speed { /** The device is operating at super speed (5000MBit/s). */ LIBUSB_SPEED_SUPER = 4, -}; - -/** \ingroup libusb_dev - * Supported speeds (wSpeedSupported) bitfield. Indicates what - * speeds the device supports. - */ -enum libusb_supported_speed { - /** Low speed operation supported (1.5MBit/s). */ - LIBUSB_LOW_SPEED_OPERATION = 1, - /** Full speed operation supported (12MBit/s). */ - LIBUSB_FULL_SPEED_OPERATION = 2, - - /** High speed operation supported (480MBit/s). */ - LIBUSB_HIGH_SPEED_OPERATION = 4, - - /** Superspeed operation supported (5000MBit/s). */ - LIBUSB_SUPER_SPEED_OPERATION = 8, -}; + /** The device is operating at super speed plus (10000MBit/s). */ + LIBUSB_SPEED_SUPER_PLUS = 5, -/** \ingroup libusb_dev - * Masks for the bits of the - * \ref libusb_usb_2_0_extension_descriptor::bmAttributes "bmAttributes" field - * of the USB 2.0 Extension descriptor. - */ -enum libusb_usb_2_0_extension_attributes { - /** Supports Link Power Management (LPM) */ - LIBUSB_BM_LPM_SUPPORT = 2, -}; - -/** \ingroup libusb_dev - * Masks for the bits of the - * \ref libusb_ss_usb_device_capability_descriptor::bmAttributes "bmAttributes" field - * field of the SuperSpeed USB Device Capability descriptor. - */ -enum libusb_ss_usb_device_capability_attributes { - /** Supports Latency Tolerance Messages (LTM) */ - LIBUSB_BM_LTM_SUPPORT = 2, -}; - -/** \ingroup libusb_dev - * USB capability types - */ -enum libusb_bos_type { - /** Wireless USB device capability */ - LIBUSB_BT_WIRELESS_USB_DEVICE_CAPABILITY = 1, - - /** USB 2.0 extensions */ - LIBUSB_BT_USB_2_0_EXTENSION = 2, - - /** SuperSpeed USB device capability */ - LIBUSB_BT_SS_USB_DEVICE_CAPABILITY = 3, - - /** Container ID type */ - LIBUSB_BT_CONTAINER_ID = 4, + /** The device is operating at super speed plus x2 (20000MBit/s). */ + LIBUSB_SPEED_SUPER_PLUS_X2 = 6, }; /** \ingroup libusb_misc @@ -1095,12 +1323,31 @@ enum libusb_error { message strings in strerror.c when adding new error codes here. */ /** Other error */ - LIBUSB_ERROR_OTHER = -99, + LIBUSB_ERROR_OTHER = -99 }; /* Total number of error codes in enum libusb_error */ #define LIBUSB_ERROR_COUNT 14 +/** \ingroup libusb_asyncio + * Transfer type */ +enum libusb_transfer_type { + /** Control transfer */ + LIBUSB_TRANSFER_TYPE_CONTROL = 0U, + + /** Isochronous transfer */ + LIBUSB_TRANSFER_TYPE_ISOCHRONOUS = 1U, + + /** Bulk transfer */ + LIBUSB_TRANSFER_TYPE_BULK = 2U, + + /** Interrupt transfer */ + LIBUSB_TRANSFER_TYPE_INTERRUPT = 3U, + + /** Bulk stream transfer */ + LIBUSB_TRANSFER_TYPE_BULK_STREAM = 4U +}; + /** \ingroup libusb_asyncio * Transfer status codes */ enum libusb_transfer_status { @@ -1125,7 +1372,7 @@ enum libusb_transfer_status { LIBUSB_TRANSFER_NO_DEVICE, /** Device sent more data than requested */ - LIBUSB_TRANSFER_OVERFLOW, + LIBUSB_TRANSFER_OVERFLOW /* NB! Remember to update libusb_error_name() when adding new status codes here. */ @@ -1135,19 +1382,19 @@ enum libusb_transfer_status { * libusb_transfer.flags values */ enum libusb_transfer_flags { /** Report short frames as errors */ - LIBUSB_TRANSFER_SHORT_NOT_OK = 1<<0, + LIBUSB_TRANSFER_SHORT_NOT_OK = (1U << 0), /** Automatically free() transfer buffer during libusb_free_transfer(). * Note that buffers allocated with libusb_dev_mem_alloc() should not * be attempted freed in this way, since free() is not an appropriate * way to release such memory. */ - LIBUSB_TRANSFER_FREE_BUFFER = 1<<1, + LIBUSB_TRANSFER_FREE_BUFFER = (1U << 1), /** Automatically call libusb_free_transfer() after callback returns. * If this flag is set, it is illegal to call libusb_free_transfer() * from your transfer callback, as this will result in a double-free * when this flag is acted upon. */ - LIBUSB_TRANSFER_FREE_TRANSFER = 1<<2, + LIBUSB_TRANSFER_FREE_TRANSFER = (1U << 2), /** Terminate transfers that are a multiple of the endpoint's * wMaxPacketSize with an extra zero length packet. This is useful @@ -1168,11 +1415,12 @@ enum libusb_transfer_flags { * * This flag is currently only supported on Linux. * On other systems, libusb_submit_transfer() will return - * LIBUSB_ERROR_NOT_SUPPORTED for every transfer where this flag is set. + * \ref LIBUSB_ERROR_NOT_SUPPORTED for every transfer where this + * flag is set. * * Available since libusb-1.0.9. */ - LIBUSB_TRANSFER_ADD_ZERO_PACKET = 1 << 3, + LIBUSB_TRANSFER_ADD_ZERO_PACKET = (1U << 3) }; /** \ingroup libusb_asyncio @@ -1217,10 +1465,10 @@ struct libusb_transfer { /** Address of the endpoint where this transfer will be sent. */ unsigned char endpoint; - /** Type of the endpoint from \ref libusb_transfer_type */ + /** Type of the transfer from \ref libusb_transfer_type */ unsigned char type; - /** Timeout for this transfer in millseconds. A value of 0 indicates no + /** Timeout for this transfer in milliseconds. A value of 0 indicates no * timeout. */ unsigned int timeout; @@ -1233,7 +1481,7 @@ struct libusb_transfer { * to determine if errors occurred. */ enum libusb_transfer_status status; - /** Length of the data buffer */ + /** Length of the data buffer. Must be non-negative. */ int length; /** Actual length of data that was transferred. Read-only, and only for @@ -1245,24 +1493,27 @@ struct libusb_transfer { * fails, or is cancelled. */ libusb_transfer_cb_fn callback; - /** User context data to pass to the callback function. */ + /** User context data. Useful for associating specific data to a transfer + * that can be accessed from within the callback function. + * + * This field may be set manually or is taken as the `user_data` parameter + * of the following functions: + * - libusb_fill_bulk_transfer() + * - libusb_fill_bulk_stream_transfer() + * - libusb_fill_control_transfer() + * - libusb_fill_interrupt_transfer() + * - libusb_fill_iso_transfer() */ void *user_data; /** Data buffer */ unsigned char *buffer; /** Number of isochronous packets. Only used for I/O with isochronous - * endpoints. */ + * endpoints. Must be non-negative. */ int num_iso_packets; /** Isochronous packet descriptors, for isochronous transfers only. */ - struct libusb_iso_packet_descriptor iso_packet_desc -#if defined(__STDC_VERSION__) && (__STDC_VERSION__ >= 199901L) - [] /* valid C99 code */ -#else - [0] /* non-standard, but usually working code */ -#endif - ; + struct libusb_iso_packet_descriptor iso_packet_desc[LIBUSB_FLEXIBLE_ARRAY]; }; /** \ingroup libusb_misc @@ -1272,45 +1523,192 @@ struct libusb_transfer { */ enum libusb_capability { /** The libusb_has_capability() API is available. */ - LIBUSB_CAP_HAS_CAPABILITY = 0x0000, + LIBUSB_CAP_HAS_CAPABILITY = 0x0000U, + /** Hotplug support is available on this platform. */ - LIBUSB_CAP_HAS_HOTPLUG = 0x0001, + LIBUSB_CAP_HAS_HOTPLUG = 0x0001U, + /** The library can access HID devices without requiring user intervention. * Note that before being able to actually access an HID device, you may * still have to call additional libusb functions such as * \ref libusb_detach_kernel_driver(). */ - LIBUSB_CAP_HAS_HID_ACCESS = 0x0100, - /** The library supports detaching of the default USB driver, using + LIBUSB_CAP_HAS_HID_ACCESS = 0x0100U, + + /** The library supports detaching of the default USB driver, using * \ref libusb_detach_kernel_driver(), if one is set by the OS kernel */ - LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER = 0x0101 + LIBUSB_CAP_SUPPORTS_DETACH_KERNEL_DRIVER = 0x0101U }; /** \ingroup libusb_lib * Log message levels. - * - LIBUSB_LOG_LEVEL_NONE (0) : no messages ever printed by the library (default) - * - LIBUSB_LOG_LEVEL_ERROR (1) : error messages are printed to stderr - * - LIBUSB_LOG_LEVEL_WARNING (2) : warning and error messages are printed to stderr - * - LIBUSB_LOG_LEVEL_INFO (3) : informational messages are printed to stdout, warning - * and error messages are printed to stderr - * - LIBUSB_LOG_LEVEL_DEBUG (4) : debug and informational messages are printed to stdout, - * warnings and errors to stderr */ enum libusb_log_level { + /** (0) : No messages ever emitted by the library (default) */ LIBUSB_LOG_LEVEL_NONE = 0, - LIBUSB_LOG_LEVEL_ERROR, - LIBUSB_LOG_LEVEL_WARNING, - LIBUSB_LOG_LEVEL_INFO, - LIBUSB_LOG_LEVEL_DEBUG, + + /** (1) : Error messages are emitted */ + LIBUSB_LOG_LEVEL_ERROR = 1, + + /** (2) : Warning and error messages are emitted */ + LIBUSB_LOG_LEVEL_WARNING = 2, + + /** (3) : Informational, warning and error messages are emitted */ + LIBUSB_LOG_LEVEL_INFO = 3, + + /** (4) : All messages are emitted */ + LIBUSB_LOG_LEVEL_DEBUG = 4 +}; + +/** \ingroup libusb_lib + * Log callback mode. + * + * Since version 1.0.23, \ref LIBUSB_API_VERSION >= 0x01000107 + * + * \see libusb_set_log_cb() + */ +enum libusb_log_cb_mode { + /** Callback function handling all log messages. */ + LIBUSB_LOG_CB_GLOBAL = (1 << 0), + + /** Callback function handling context related log messages. */ + LIBUSB_LOG_CB_CONTEXT = (1 << 1) +}; + +/** \ingroup libusb_lib + * Available option values for libusb_set_option() and libusb_init_context(). + */ +enum libusb_option { + /** Set the log message verbosity. + * + * This option must be provided an argument of type \ref libusb_log_level. + * The default level is LIBUSB_LOG_LEVEL_NONE, which means no messages are ever + * printed. If you choose to increase the message verbosity level, ensure + * that your application does not close the stderr file descriptor. + * + * You are advised to use level LIBUSB_LOG_LEVEL_WARNING. libusb is conservative + * with its message logging and most of the time, will only log messages that + * explain error conditions and other oddities. This will help you debug + * your software. + * + * If the LIBUSB_DEBUG environment variable was set when libusb was + * initialized, this option does nothing: the message verbosity is fixed + * to the value in the environment variable. + * + * If libusb was compiled without any message logging, this option does + * nothing: you'll never get any messages. + * + * If libusb was compiled with verbose debug message logging, this option + * does nothing: you'll always get messages from all levels. + */ + LIBUSB_OPTION_LOG_LEVEL = 0, + + /** Use the UsbDk backend for a specific context, if available. + * + * This option should be set at initialization with libusb_init_context() + * otherwise unspecified behavior may occur. + * + * Only valid on Windows. Ignored on all other platforms. + */ + LIBUSB_OPTION_USE_USBDK = 1, + + /** Do not scan for devices + * + * With this option set, libusb will skip scanning devices in + * libusb_init_context(). + * + * Hotplug functionality will also be deactivated. + * + * The option is useful in combination with libusb_wrap_sys_device(), + * which can access a device directly without prior device scanning. + * + * This is typically needed on Android, where access to USB devices + * is limited. + * + * This option should only be used with libusb_init_context() + * otherwise unspecified behavior may occur. + * + * Only valid on Linux. Ignored on all other platforms. + */ + LIBUSB_OPTION_NO_DEVICE_DISCOVERY = 2, + +#define LIBUSB_OPTION_WEAK_AUTHORITY LIBUSB_OPTION_NO_DEVICE_DISCOVERY + + /** Set the context log callback function. + * + * Set the log callback function either on a context or globally. This + * option must be provided an argument of type \ref libusb_log_cb. + * Using this option with a NULL context is equivalent to calling + * libusb_set_log_cb() with mode \ref LIBUSB_LOG_CB_GLOBAL. + * Using it with a non-NULL context is equivalent to calling + * libusb_set_log_cb() with mode \ref LIBUSB_LOG_CB_CONTEXT. + */ + LIBUSB_OPTION_LOG_CB = 3, + + LIBUSB_OPTION_MAX = 4 +}; + +/** \ingroup libusb_desc + * The device string type. + */ +enum libusb_device_string_type { + LIBUSB_DEVICE_STRING_MANUFACTURER, + LIBUSB_DEVICE_STRING_PRODUCT, + LIBUSB_DEVICE_STRING_SERIAL_NUMBER, + LIBUSB_DEVICE_STRING_COUNT /* The total number of string types. */ +}; + +/** \ingroup libusb_desc + * The maximum length for a device string descriptor in UTF-8. + * + * 255 max descriptor length with 2 byte header + * => 253 bytes UTF-16LE, no null termination (USB 2.0 9.6.7) + * => 126.5 codepoints + * => 126 * 3 + 1 + * => 382 bytes + * + * Stay with 256 * 2/3 = 384 to be safe. + */ +#define LIBUSB_DEVICE_STRING_BYTES_MAX (384U) + +/** \ingroup libusb_lib + * Callback function for handling log messages. + * \param ctx the context which is related to the log message, or NULL if it + * is a global log message + * \param level the log level, see \ref libusb_log_level for a description + * \param str the log message + * + * Since version 1.0.23, \ref LIBUSB_API_VERSION >= 0x01000107 + * + * \see libusb_set_log_cb() + */ +typedef void (LIBUSB_CALL *libusb_log_cb)(libusb_context *ctx, + enum libusb_log_level level, const char *str); + +/** \ingroup libusb_lib + * Structure used for setting options through \ref libusb_init_context. + * + */ +struct libusb_init_option { + /** Which option to set */ + enum libusb_option option; + /** An integer value used by the option (if applicable). */ + union { + int ival; + libusb_log_cb log_cbval; + } value; }; int LIBUSB_CALL libusb_init(libusb_context **ctx); +int LIBUSB_CALL libusb_init_context(libusb_context **ctx, const struct libusb_init_option options[], int num_options); void LIBUSB_CALL libusb_exit(libusb_context *ctx); void LIBUSB_CALL libusb_set_debug(libusb_context *ctx, int level); +/* may be deprecated in the future in favor of lubusb_init_context()+libusb_set_option() */ +void LIBUSB_CALL libusb_set_log_cb(libusb_context *ctx, libusb_log_cb cb, int mode); const struct libusb_version * LIBUSB_CALL libusb_get_version(void); int LIBUSB_CALL libusb_has_capability(uint32_t capability); -const char * LIBUSB_CALL libusb_error_name(int errcode); +const char * LIBUSB_CALL libusb_error_name(int error_code); int LIBUSB_CALL libusb_setlocale(const char *locale); -const char * LIBUSB_CALL libusb_strerror(enum libusb_error errcode); +const char * LIBUSB_CALL libusb_strerror(int errcode); ssize_t LIBUSB_CALL libusb_get_device_list(libusb_context *ctx, libusb_device ***list); @@ -1319,6 +1717,8 @@ void LIBUSB_CALL libusb_free_device_list(libusb_device **list, libusb_device * LIBUSB_CALL libusb_ref_device(libusb_device *dev); void LIBUSB_CALL libusb_unref_device(libusb_device *dev); +int LIBUSB_CALL libusb_get_device_string(libusb_device *dev, + enum libusb_device_string_type string_type, char *data, int length); int LIBUSB_CALL libusb_get_configuration(libusb_device_handle *dev, int *config); int LIBUSB_CALL libusb_get_device_descriptor(libusb_device *dev, @@ -1332,7 +1732,7 @@ int LIBUSB_CALL libusb_get_config_descriptor_by_value(libusb_device *dev, void LIBUSB_CALL libusb_free_config_descriptor( struct libusb_config_descriptor *config); int LIBUSB_CALL libusb_get_ss_endpoint_companion_descriptor( - struct libusb_context *ctx, + libusb_context *ctx, const struct libusb_endpoint_descriptor *endpoint, struct libusb_ss_endpoint_companion_descriptor **ep_comp); void LIBUSB_CALL libusb_free_ss_endpoint_companion_descriptor( @@ -1341,27 +1741,39 @@ int LIBUSB_CALL libusb_get_bos_descriptor(libusb_device_handle *dev_handle, struct libusb_bos_descriptor **bos); void LIBUSB_CALL libusb_free_bos_descriptor(struct libusb_bos_descriptor *bos); int LIBUSB_CALL libusb_get_usb_2_0_extension_descriptor( - struct libusb_context *ctx, + libusb_context *ctx, struct libusb_bos_dev_capability_descriptor *dev_cap, struct libusb_usb_2_0_extension_descriptor **usb_2_0_extension); void LIBUSB_CALL libusb_free_usb_2_0_extension_descriptor( struct libusb_usb_2_0_extension_descriptor *usb_2_0_extension); int LIBUSB_CALL libusb_get_ss_usb_device_capability_descriptor( - struct libusb_context *ctx, + libusb_context *ctx, struct libusb_bos_dev_capability_descriptor *dev_cap, struct libusb_ss_usb_device_capability_descriptor **ss_usb_device_cap); void LIBUSB_CALL libusb_free_ss_usb_device_capability_descriptor( struct libusb_ss_usb_device_capability_descriptor *ss_usb_device_cap); -int LIBUSB_CALL libusb_get_container_id_descriptor(struct libusb_context *ctx, +int LIBUSB_CALL libusb_get_ssplus_usb_device_capability_descriptor( + libusb_context *ctx, + struct libusb_bos_dev_capability_descriptor *dev_cap, + struct libusb_ssplus_usb_device_capability_descriptor **ssplus_usb_device_cap); +void LIBUSB_CALL libusb_free_ssplus_usb_device_capability_descriptor( + struct libusb_ssplus_usb_device_capability_descriptor *ssplus_usb_device_cap); +int LIBUSB_CALL libusb_get_container_id_descriptor(libusb_context *ctx, struct libusb_bos_dev_capability_descriptor *dev_cap, struct libusb_container_id_descriptor **container_id); void LIBUSB_CALL libusb_free_container_id_descriptor( struct libusb_container_id_descriptor *container_id); +int LIBUSB_CALL libusb_get_platform_descriptor(libusb_context *ctx, + struct libusb_bos_dev_capability_descriptor *dev_cap, + struct libusb_platform_descriptor **platform_descriptor); +void LIBUSB_CALL libusb_free_platform_descriptor( + struct libusb_platform_descriptor *platform_descriptor); +unsigned long LIBUSB_CALL libusb_get_session_data(libusb_device *dev); uint8_t LIBUSB_CALL libusb_get_bus_number(libusb_device *dev); uint8_t LIBUSB_CALL libusb_get_port_number(libusb_device *dev); -int LIBUSB_CALL libusb_get_port_numbers(libusb_device *dev, uint8_t* port_numbers, int port_numbers_len); +int LIBUSB_CALL libusb_get_port_numbers(libusb_device *dev, uint8_t *port_numbers, int port_numbers_len); LIBUSB_DEPRECATED_FOR(libusb_get_port_numbers) -int LIBUSB_CALL libusb_get_port_path(libusb_context *ctx, libusb_device *dev, uint8_t* path, uint8_t path_length); +int LIBUSB_CALL libusb_get_port_path(libusb_context *ctx, libusb_device *dev, uint8_t *path, uint8_t path_length); libusb_device * LIBUSB_CALL libusb_get_parent(libusb_device *dev); uint8_t LIBUSB_CALL libusb_get_device_address(libusb_device *dev); int LIBUSB_CALL libusb_get_device_speed(libusb_device *dev); @@ -1369,8 +1781,17 @@ int LIBUSB_CALL libusb_get_max_packet_size(libusb_device *dev, unsigned char endpoint); int LIBUSB_CALL libusb_get_max_iso_packet_size(libusb_device *dev, unsigned char endpoint); +int LIBUSB_CALL libusb_get_max_alt_packet_size(libusb_device *dev, + int interface_number, int alternate_setting, unsigned char endpoint); -int LIBUSB_CALL libusb_wrap_fd(libusb_context *ctx, int fd, libusb_device_handle **dev_handle); +int LIBUSB_CALL libusb_get_interface_association_descriptors(libusb_device *dev, + uint8_t config_index, struct libusb_interface_association_descriptor_array **iad_array); +int LIBUSB_CALL libusb_get_active_interface_association_descriptors(libusb_device *dev, + struct libusb_interface_association_descriptor_array **iad_array); +void LIBUSB_CALL libusb_free_interface_association_descriptors( + struct libusb_interface_association_descriptor_array *iad_array); + +int LIBUSB_CALL libusb_wrap_sys_device(libusb_context *ctx, intptr_t sys_dev, libusb_device_handle **dev_handle); int LIBUSB_CALL libusb_open(libusb_device *dev, libusb_device_handle **dev_handle); void LIBUSB_CALL libusb_close(libusb_device_handle *dev_handle); libusb_device * LIBUSB_CALL libusb_get_device(libusb_device_handle *dev_handle); @@ -1410,6 +1831,14 @@ int LIBUSB_CALL libusb_attach_kernel_driver(libusb_device_handle *dev_handle, int LIBUSB_CALL libusb_set_auto_detach_kernel_driver( libusb_device_handle *dev_handle, int enable); +int LIBUSB_CALL libusb_endpoint_supports_raw_io(libusb_device_handle* dev_handle, + uint8_t endpoint); +int LIBUSB_CALL libusb_endpoint_set_raw_io(libusb_device_handle *dev_handle, + uint8_t endpoint, int enable); +int LIBUSB_CALL libusb_get_max_raw_io_transfer_size( + libusb_device_handle *dev_handle, + uint8_t endpoint); + /* async I/O */ /** \ingroup libusb_asyncio @@ -1445,7 +1874,7 @@ static inline unsigned char *libusb_control_transfer_get_data( static inline struct libusb_control_setup *libusb_control_transfer_get_setup( struct libusb_transfer *transfer) { - return (struct libusb_control_setup *)(void *) transfer->buffer; + return (struct libusb_control_setup *)(void *)transfer->buffer; } /** \ingroup libusb_asyncio @@ -1475,7 +1904,7 @@ static inline void libusb_fill_control_setup(unsigned char *buffer, uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, uint16_t wLength) { - struct libusb_control_setup *setup = (struct libusb_control_setup *)(void *) buffer; + struct libusb_control_setup *setup = (struct libusb_control_setup *)(void *)buffer; setup->bmRequestType = bmRequestType; setup->bRequest = bRequest; setup->wValue = libusb_cpu_to_le16(wValue); @@ -1525,7 +1954,7 @@ static inline void libusb_fill_control_transfer( unsigned char *buffer, libusb_transfer_cb_fn callback, void *user_data, unsigned int timeout) { - struct libusb_control_setup *setup = (struct libusb_control_setup *)(void *) buffer; + struct libusb_control_setup *setup = (struct libusb_control_setup *)(void *)buffer; transfer->dev_handle = dev_handle; transfer->endpoint = 0; transfer->type = LIBUSB_TRANSFER_TYPE_CONTROL; @@ -1664,6 +2093,7 @@ static inline void libusb_set_iso_packet_lengths( struct libusb_transfer *transfer, unsigned int length) { int i; + for (i = 0; i < transfer->num_iso_packets; i++) transfer->iso_packet_desc[i].length = length; } @@ -1747,16 +2177,16 @@ static inline unsigned char *libusb_get_iso_packet_buffer_simple( /* sync I/O */ int LIBUSB_CALL libusb_control_transfer(libusb_device_handle *dev_handle, - uint8_t request_type, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, + uint8_t bmRequestType, uint8_t bRequest, uint16_t wValue, uint16_t wIndex, unsigned char *data, uint16_t wLength, unsigned int timeout); int LIBUSB_CALL libusb_bulk_transfer(libusb_device_handle *dev_handle, unsigned char endpoint, unsigned char *data, int length, - int *actual_length, unsigned int timeout); + int *transferred, unsigned int timeout); int LIBUSB_CALL libusb_interrupt_transfer(libusb_device_handle *dev_handle, unsigned char endpoint, unsigned char *data, int length, - int *actual_length, unsigned int timeout); + int *transferred, unsigned int timeout); /** \ingroup libusb_desc * Retrieve a descriptor from the default control pipe. @@ -1878,7 +2308,7 @@ void LIBUSB_CALL libusb_set_pollfd_notifiers(libusb_context *ctx, * Callbacks handles are generated by libusb_hotplug_register_callback() * and can be used to deregister callbacks. Callback handles are unique * per libusb_context and it is safe to call libusb_hotplug_deregister_callback() - * on an already deregisted callback. + * on an already deregistered callback. * * Since version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102 * @@ -1890,29 +2320,30 @@ typedef int libusb_hotplug_callback_handle; * * Since version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102 * - * Flags for hotplug events */ + * Hotplug events */ typedef enum { - /** Default value when not using any flags. */ - LIBUSB_HOTPLUG_NO_FLAGS = 0, + /** A device has been plugged in and is ready to use */ + LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED = (1 << 0), - /** Arm the callback and fire it for all matching currently attached devices. */ - LIBUSB_HOTPLUG_ENUMERATE = 1<<0, -} libusb_hotplug_flag; + /** A device has left and is no longer available. + * It is the user's responsibility to call libusb_close on any handle associated with a disconnected device. + * It is safe to call libusb_get_device_descriptor on a device that has left */ + LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT = (1 << 1) +} libusb_hotplug_event; /** \ingroup libusb_hotplug * * Since version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102 * - * Hotplug events */ + * Hotplug flags */ typedef enum { - /** A device has been plugged in and is ready to use */ - LIBUSB_HOTPLUG_EVENT_DEVICE_ARRIVED = 0x01, + /** Arm the callback and fire it for all matching currently attached devices. */ + LIBUSB_HOTPLUG_ENUMERATE = (1 << 0) +} libusb_hotplug_flag; - /** A device has left and is no longer available. - * It is the user's responsibility to call libusb_close on any handle associated with a disconnected device. - * It is safe to call libusb_get_device_descriptor on a device that has left */ - LIBUSB_HOTPLUG_EVENT_DEVICE_LEFT = 0x02, -} libusb_hotplug_event; +/** \ingroup libusb_hotplug + * Convenience macro when not using any flags */ +#define LIBUSB_HOTPLUG_NO_FLAGS 0 /** \ingroup libusb_hotplug * Wildcard matching for hotplug events */ @@ -1941,9 +2372,7 @@ typedef enum { * returning 1 will cause this callback to be deregistered */ typedef int (LIBUSB_CALL *libusb_hotplug_callback_fn)(libusb_context *ctx, - libusb_device *device, - libusb_hotplug_event event, - void *user_data); + libusb_device *device, libusb_hotplug_event event, void *user_data); /** \ingroup libusb_hotplug * Register a hotplug callback function @@ -1968,25 +2397,23 @@ typedef int (LIBUSB_CALL *libusb_hotplug_callback_fn)(libusb_context *ctx, * Since version 1.0.16, \ref LIBUSB_API_VERSION >= 0x01000102 * * \param[in] ctx context to register this callback with - * \param[in] events bitwise or of events that will trigger this callback. See \ref - * libusb_hotplug_event - * \param[in] flags hotplug callback flags. See \ref libusb_hotplug_flag + * \param[in] events bitwise or of hotplug events that will trigger this callback. + * See \ref libusb_hotplug_event + * \param[in] flags bitwise or of hotplug flags that affect registration. + * See \ref libusb_hotplug_flag * \param[in] vendor_id the vendor id to match or \ref LIBUSB_HOTPLUG_MATCH_ANY * \param[in] product_id the product id to match or \ref LIBUSB_HOTPLUG_MATCH_ANY * \param[in] dev_class the device class to match or \ref LIBUSB_HOTPLUG_MATCH_ANY * \param[in] cb_fn the function to be invoked on a matching event/device * \param[in] user_data user data to pass to the callback function * \param[out] callback_handle pointer to store the handle of the allocated callback (can be NULL) - * \returns LIBUSB_SUCCESS on success LIBUSB_ERROR code on failure + * \returns \ref LIBUSB_SUCCESS on success LIBUSB_ERROR code on failure */ int LIBUSB_CALL libusb_hotplug_register_callback(libusb_context *ctx, - libusb_hotplug_event events, - libusb_hotplug_flag flags, - int vendor_id, int product_id, - int dev_class, - libusb_hotplug_callback_fn cb_fn, - void *user_data, - libusb_hotplug_callback_handle *callback_handle); + int events, int flags, + int vendor_id, int product_id, int dev_class, + libusb_hotplug_callback_fn cb_fn, void *user_data, + libusb_hotplug_callback_handle *callback_handle); /** \ingroup libusb_hotplug * Deregisters a hotplug callback. @@ -2000,9 +2427,26 @@ int LIBUSB_CALL libusb_hotplug_register_callback(libusb_context *ctx, * \param[in] callback_handle the handle of the callback to deregister */ void LIBUSB_CALL libusb_hotplug_deregister_callback(libusb_context *ctx, - libusb_hotplug_callback_handle callback_handle); + libusb_hotplug_callback_handle callback_handle); + +/** \ingroup libusb_hotplug + * Gets the user_data associated with a hotplug callback. + * + * Since version v1.0.24 \ref LIBUSB_API_VERSION >= 0x01000108 + * + * \param[in] ctx context this callback is registered with + * \param[in] callback_handle the handle of the callback to get the user_data of + */ +void * LIBUSB_CALL libusb_hotplug_get_user_data(libusb_context *ctx, + libusb_hotplug_callback_handle callback_handle); + +int LIBUSB_CALLV libusb_set_option(libusb_context *ctx, enum libusb_option option, ...); + +#ifdef _MSC_VER +#pragma warning(pop) +#endif -#ifdef __cplusplus +#if defined(__cplusplus) } #endif diff --git a/Desktop_Interface/build_android/package_source/AndroidManifest.xml b/Desktop_Interface/build_android/package_source/AndroidManifest.xml index 68a61264d..358807d69 100644 --- a/Desktop_Interface/build_android/package_source/AndroidManifest.xml +++ b/Desktop_Interface/build_android/package_source/AndroidManifest.xml @@ -1,6 +1,6 @@ - + @@ -12,13 +12,14 @@ - + + android:icon="@mipmap/ic_launcher" + android:exported="true"> @@ -37,12 +38,10 @@ - - - + diff --git a/Desktop_Interface/build_android/package_source/src/androidInterface.java b/Desktop_Interface/build_android/package_source/src/androidInterface.java index 5f2913504..fb7e84b10 100644 --- a/Desktop_Interface/build_android/package_source/src/androidInterface.java +++ b/Desktop_Interface/build_android/package_source/src/androidInterface.java @@ -5,6 +5,8 @@ import android.util.Log; +import android.os.Build; + import android.hardware.usb.UsbDevice; import android.hardware.usb.UsbManager; import android.hardware.usb.UsbDeviceConnection; @@ -42,7 +44,12 @@ public void nonStaticTest() public void findDevice() { Log.d(QtApplication.QtTAG, "findDevice"); - PendingIntent mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); //??? + PendingIntent mPermissionIntent; + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) { + mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), PendingIntent.FLAG_MUTABLE); //??? + } else { + mPermissionIntent = PendingIntent.getBroadcast(this, 0, new Intent(ACTION_USB_PERMISSION), 0); //??? + } UsbManager manager = (UsbManager) getSystemService(Context.USB_SERVICE); //Handle to system USB service? HashMap deviceList = manager.getDeviceList(); Iterator deviceIterator = deviceList.values().iterator(); From 19ba050a048e49eaec5115898ed3130a91b87b87 Mon Sep 17 00:00:00 2001 From: brentfpage Date: Fri, 2 Jan 2026 23:32:37 -0800 Subject: [PATCH 7/7] further reduced number of changes relative to master; mostly only the core sig gen triggering functionality is retained --- Desktop_Interface/isobuffer.cpp | 120 +++++++++++++-------------- Desktop_Interface/isobuffer.h | 16 +--- Desktop_Interface/isobuffer_file.cpp | 2 +- Desktop_Interface/isodriver.cpp | 43 ++++++---- 4 files changed, 89 insertions(+), 92 deletions(-) diff --git a/Desktop_Interface/isobuffer.cpp b/Desktop_Interface/isobuffer.cpp index 852e58886..0f0bd6e54 100644 --- a/Desktop_Interface/isobuffer.cpp +++ b/Desktop_Interface/isobuffer.cpp @@ -38,7 +38,6 @@ isoBuffer::isoBuffer(QWidget* parent, int bufferLen, isoDriver* caller, unsigned , m_channel(channel_value) , m_bufferPtr(std::make_unique(bufferLen*2)) , m_bufferLen(bufferLen) - , m_isTriggeredPtr(std::make_unique(bufferLen*2)) #ifndef DISABLE_SPECTRUM , m_window_capacity(windowLen) #endif @@ -47,7 +46,6 @@ isoBuffer::isoBuffer(QWidget* parent, int bufferLen, isoDriver* caller, unsigned , m_virtualParent(caller) { m_buffer = m_bufferPtr.get(); - m_isTriggered = m_isTriggeredPtr.get(); #ifndef DISABLE_SPECTRUM m_window.reserve(m_window_capacity); m_window_iter = m_window.begin(); @@ -101,7 +99,7 @@ void isoBuffer::insertIntoBuffer(short item) } #endif - checkTriggered(m_back); + checkTriggered(); } short isoBuffer::bufferAt(uint32_t idx) const @@ -146,7 +144,7 @@ void isoBuffer::writeBuffer_short(short* data, int len) writeBuffer(data, len, 2048, [](short item) -> short {return item >> 4;}); } -std::vector isoBuffer::readBuffer(double sampleWindow, int numSamples, bool singleBit, int delaySamples) +std::vector isoBuffer::readBuffer(double sampleWindow, int numSamples, bool singleBit, double delayOffset) { /* * The expected behavior is to run backwards over the buffer with a stride @@ -159,7 +157,8 @@ std::vector isoBuffer::readBuffer(double sampleWindow, int numSamples, bo * * (1) m_insertedCount < (delayOffset + sampleWindow) * m_samplesPerSecond */ - const double timeBetweenSamples = sampleWindow * m_samplesPerSecond / (numSamples-1); + const double timeBetweenSamples = sampleWindow * m_samplesPerSecond / numSamples; + const int delaySamples = delayOffset * m_samplesPerSecond; auto readData = std::vector(numSamples, short(0)); @@ -210,9 +209,6 @@ void isoBuffer::clearBuffer() m_window.clear(); m_window_iter = m_window.begin(); #endif - - resetTrigger(); - } void isoBuffer::gainBuffer(int gain_log) @@ -432,7 +428,6 @@ void isoBuffer::setTriggerType(TriggerType newType) qDebug() << "Trigger Type: " << (uint8_t)newType; if(newType != m_triggerType){ m_triggerType = newType; - resetTrigger(); m_lastTriggerDeltaT = 0; } } @@ -454,27 +449,15 @@ void isoBuffer::setSigGenTriggerFreq(functionGen::ChannelID channelID, int clkSe double bufferSamplesPerWfCycle = wfSize * (timerPeriod+1) / freq_ratio; - if(channelID==functionGen::ChannelID::CH1) { - if(bufferSamplesPerCH1WfCycle!=bufferSamplesPerWfCycle){ - bufferSamplesPerCH1WfCycle = bufferSamplesPerWfCycle; - if(m_triggerType==TriggerType::CH1SigGen){ - resetTrigger(); - } - } - } else if (channelID==functionGen::ChannelID::CH2) { - qDebug() << "bufferSamplesPerCH2WfCycle set"; - if(bufferSamplesPerCH2WfCycle!=bufferSamplesPerWfCycle){ - bufferSamplesPerCH2WfCycle = bufferSamplesPerWfCycle; - if(m_triggerType==TriggerType::CH2SigGen){ - resetTrigger(); - } - } - } + if(channelID==functionGen::ChannelID::CH1) + bufferSamplesPerCH1WfCycle = bufferSamplesPerWfCycle; + else if (channelID==functionGen::ChannelID::CH2) + bufferSamplesPerCH2WfCycle = bufferSamplesPerWfCycle; } // TODO: Clear trigger // FIXME: AC changes will not be reflected here -void isoBuffer::checkTriggered(int m_back) +void isoBuffer::checkTriggered() { static uint32_t s_lastPosition = 0; if (m_triggerType == TriggerType::Disabled) @@ -488,19 +471,12 @@ void isoBuffer::checkTriggered(int m_back) diff += m_bufferLen; } int n_cycles = diff/bufferSamplesPerWfCycle; - if( triggerIsReset || (diff-n_cycles*bufferSamplesPerWfCycle == 0) ) { + if( (m_triggerPositionList.size()==0) || (diff-n_cycles*bufferSamplesPerWfCycle == 0) ) { addTriggerPosition(m_back, s_lastPosition, n_cycles); s_lastPosition=m_back; - } else { - m_isTriggered[m_back]=false; - m_isTriggered[m_back+m_bufferLen]=false; } - triggerIsReset = false; } else { - m_isTriggered[m_back] = false; - m_isTriggered[m_back+m_bufferLen] = false; - if ((bufferAt(0) >= (m_triggerLevel + m_triggerSensitivity)) && (m_triggerSeekState == TriggerSeekState::BelowTriggerLevel)) { // Rising Edge @@ -522,29 +498,55 @@ void isoBuffer::checkTriggered(int m_back) } } -void isoBuffer::getDelayedTriggerPoint(double delay, double window, int* fullDelaySamples, bool* triggering) +double isoBuffer::getDelayedTriggerPoint(double delay) { + if (m_triggerPositionList.size() == 0) + return 0; + const uint32_t delaySamples = delay * m_samplesPerSecond; - const uint32_t windowSamples = window * m_samplesPerSecond; - - const uint32_t delayPosition = m_back + m_bufferLen - delaySamples; - -// starting from the delay position, go back in time until finding a trigger position, making sure that a full windowSamples's worth of samples is available from the trigger position to the earliest available sample - if(m_triggerType==TriggerType::Disabled) { - *fullDelaySamples = delaySamples; - *triggering=false; - return; - } else { - for (int i = delayPosition-1; i > delayPosition - (m_bufferLen-delaySamples-windowSamples); i--){ - if(m_isTriggered[i]){ - *fullDelaySamples = (delayPosition - i + delaySamples); - *triggering=true; - return; - } - } - *fullDelaySamples = delaySamples; - *triggering=false; + + auto isValid = [=](uint32_t index)->bool + { + if (m_back > delaySamples) + return (index < m_back - delaySamples) || (index >= m_back); + else + return (index < m_bufferLen + m_back - delaySamples) && (index >= m_back); + }; + + auto getDelay = [=](uint32_t index)->double + { + if (m_back > index) + return (m_back - index) / static_cast(m_samplesPerSecond); + else + return (m_bufferLen + (m_back - 1) - index) / static_cast(m_samplesPerSecond); + }; + + // Like std::find_if but returns the last element matching the predicate instead of the first one + // TODO: Move this elsewhere (maybe a utils / algorithms file??) + // requires first and last to be Bidirectional iters, and form a valid range + // requires p to be a valid unaryPredicate + // Full signature would be: + // template + // It find_last_if(It begin, It end, Predicate p) + auto find_last_if = [](auto begin, auto end, auto p) + { + using It = decltype(begin); // TODO: remove this line once this is a proper function + std::reverse_iterator rlast(begin), rfirst(end); + auto found = std::find_if(rfirst, rlast, p); + return found == rlast + ? end + : std::prev(found.base()); + }; + + auto it = find_last_if(m_triggerPositionList.begin(), m_triggerPositionList.end(), isValid); + if (it != m_triggerPositionList.end()) + { + // NOTE: vector::erase does not remove the element pointed to by the second iterator. + m_triggerPositionList.erase(m_triggerPositionList.begin(), it); + return getDelay(m_triggerPositionList[0]); } + + return 0; } double isoBuffer::getTriggerFrequencyHz() @@ -554,17 +556,9 @@ double isoBuffer::getTriggerFrequencyHz() void isoBuffer::addTriggerPosition(uint32_t position, uint32_t s_lastPosition, int n_cycles) { + m_triggerPositionList.push_back(m_back - 1); uint32_t delta_samples = (position > s_lastPosition) ? (position - s_lastPosition) : position + m_bufferLen - s_lastPosition; m_lastTriggerDeltaT = delta_samples / static_cast(m_samplesPerSecond) / n_cycles; - m_isTriggered[position] = true; - m_isTriggered[position+m_bufferLen] = true; //qDebug() << position << s_lastPosition << static_cast(m_samplesPerSecond) / static_cast(m_lastTriggerDeltaT) << "Hz"; } - -void isoBuffer::resetTrigger() { - for(int i = 0; i < 2*m_bufferLen; i++) { - m_isTriggered[i] = false; - } - triggerIsReset = true; -} diff --git a/Desktop_Interface/isobuffer.h b/Desktop_Interface/isobuffer.h index 7cc891c4d..a3baa202d 100644 --- a/Desktop_Interface/isobuffer.h +++ b/Desktop_Interface/isobuffer.h @@ -76,7 +76,7 @@ class isoBuffer : public QWidget void writeBuffer_char(char* data, int len); void writeBuffer_short(short* data, int len); - std::vector readBuffer(double sampleWindow, int numSamples, bool singleBit, int delaySamples); + std::vector readBuffer(double sampleWindow, int numSamples, bool singleBit, double delayOffset); #ifndef DISABLE_SPECTRUM std::vector readWindow(); #endif @@ -91,7 +91,7 @@ class isoBuffer : public QWidget private: template int capSample(int offset, int target, double seconds, double value, Function comp); - void checkTriggered(int m_back); + void checkTriggered(); public: int cap_x0fromLast(double seconds, double vbot); int cap_x1fromLast(double seconds, int x0, double vbot); @@ -99,7 +99,7 @@ class isoBuffer : public QWidget void serialManage(double baudRate, UartParity parity, bool hexDisplay); void setTriggerType(TriggerType newType); void setTriggerLevel(double voltageLevel, uint16_t top, bool acCoupled); - void getDelayedTriggerPoint(double delay, double window, int* fullDelaySamples, bool* triggering); + double getDelayedTriggerPoint(double delay); double getTriggerFrequencyHz(); void setSigGenTriggerFreq(functionGen::ChannelID channelID, int clkSetting, int timerPeriod, int wfSize); @@ -119,15 +119,6 @@ class isoBuffer : public QWidget uint32_t m_back = 0; uint32_t m_insertedCount = 0; uint32_t m_bufferLen; - uint32_t m_back_prev = 0; - - std::unique_ptr m_isTriggeredPtr; - bool* m_isTriggered; - bool triggerIsReset = true; - void resetTrigger(); - - - #ifndef DISABLE_SPECTRUM private: @@ -152,6 +143,7 @@ class isoBuffer : public QWidget TriggerSeekState m_triggerSeekState = TriggerSeekState::BelowTriggerLevel; short m_triggerLevel = 0; short m_triggerSensitivity = 0; + std::vector m_triggerPositionList = {}; // UARTS decoding uartStyleDecoder* m_decoder = NULL; bool m_isDecoding = true; diff --git a/Desktop_Interface/isobuffer_file.cpp b/Desktop_Interface/isobuffer_file.cpp index 394e0528c..3c5b28f9f 100644 --- a/Desktop_Interface/isobuffer_file.cpp +++ b/Desktop_Interface/isobuffer_file.cpp @@ -24,7 +24,7 @@ void isoBuffer_file::writeBuffer_float(float* data, int len) float *isoBuffer_file::readBuffer(double sampleWindow, int numSamples, bool singleBit, double delayOffset) { //ignore singleBit for now - double timeBetweenSamples = (double) sampleWindow * samplesPerSecond / ((double) numSamples - 1); + double timeBetweenSamples = (double) sampleWindow * samplesPerSecond / (double) numSamples; double accumulatedDelay = 0; int delaySamples = (int)((double)delayOffset * samplesPerSecond); diff --git a/Desktop_Interface/isodriver.cpp b/Desktop_Interface/isodriver.cpp index 5072c6662..256e06e4a 100644 --- a/Desktop_Interface/isodriver.cpp +++ b/Desktop_Interface/isodriver.cpp @@ -872,13 +872,19 @@ void isoDriver::frameActionGeneric(char CH1_mode, char CH2_mode) auto internalBuffer_CH1 = (CH1_mode == -1) ? internalBuffer750 : internalBuffer375_CH1; auto internalBuffer_CH2 = internalBuffer375_CH2; - int fullDelaySamples; - bool triggering; - if((triggerMode<2)||(triggerMode>=4)) - internalBuffer_CH1->getDelayedTriggerPoint(display->delay,display->window,&fullDelaySamples,&triggering); - else - internalBuffer_CH2->getDelayedTriggerPoint(display->delay, display->window,&fullDelaySamples,&triggering); - if(singleShotEnabled && triggering) + double triggerDelay = 0; + if (triggerEnabled) + { + if((triggerMode<2)||(triggerMode>=4)) + triggerDelay = internalBuffer_CH1->getDelayedTriggerPoint(display->window) - display->window; + else + triggerDelay = internalBuffer_CH2->getDelayedTriggerPoint(display->window) - display->window; + + if (triggerDelay < 0) + triggerDelay = 0; + } + + if(singleShotEnabled && (triggerDelay != 0)) singleShotTriggered(1); std::vector readData_CH1; @@ -896,17 +902,17 @@ void isoDriver::frameActionGeneric(char CH1_mode, char CH2_mode) readData_CH2 = internalBuffer_CH2->readWindow(); } else if (freqResp) { double freqResp_window = 1/freqValue_CH1->value(); - readData_CH1 = internalBuffer_CH1->readBuffer(freqResp_window, internalBuffer_CH1->freqResp_samples, CH1_mode == 2, fullDelaySamples); - readData_CH2 = internalBuffer_CH2->readBuffer(freqResp_window, internalBuffer_CH2->freqResp_samples, CH2_mode == 2, fullDelaySamples); + readData_CH1 = internalBuffer_CH1->readBuffer(freqResp_window, internalBuffer_CH1->freqResp_samples, CH1_mode == 2, triggerDelay); + readData_CH2 = internalBuffer_CH2->readBuffer(freqResp_window, internalBuffer_CH2->freqResp_samples, CH2_mode == 2, triggerDelay); } else #endif { if (CH1_mode == -2) readDataFile = internalBufferFile->readBuffer(display->window, GRAPH_SAMPLES, false, display->delay); else if (CH1_mode) - readData_CH1 = internalBuffer_CH1->readBuffer(display->window, GRAPH_SAMPLES, CH1_mode == 2, fullDelaySamples); + readData_CH1 = internalBuffer_CH1->readBuffer(display->window, GRAPH_SAMPLES, CH1_mode == 2, display->delay + triggerDelay); if (CH2_mode) - readData_CH2 = internalBuffer_CH2->readBuffer(display->window, GRAPH_SAMPLES, CH2_mode == 2, fullDelaySamples); + readData_CH2 = internalBuffer_CH2->readBuffer(display->window, GRAPH_SAMPLES, CH2_mode == 2, display->delay + triggerDelay); } QVector CH1, CH2; @@ -1353,14 +1359,19 @@ void isoDriver::multimeterAction(){ } } - int fullDelaySamples; - bool triggering; - internalBuffer375_CH1->getDelayedTriggerPoint(display->delay, display->window, &fullDelaySamples, &triggering); + double triggerDelay = 0; + if (triggerEnabled) + { + triggerDelay = internalBuffer375_CH1->getDelayedTriggerPoint(display->window) - display->window; + + if (triggerDelay < 0) + triggerDelay = 0; + } - if(singleShotEnabled && triggering) + if(singleShotEnabled && (triggerDelay != 0)) singleShotTriggered(1); - auto readData_CH1 = internalBuffer375_CH1->readBuffer(display->window, GRAPH_SAMPLES, false, fullDelaySamples); + auto readData_CH1 = internalBuffer375_CH1->readBuffer(display->window, GRAPH_SAMPLES, false, display->delay + triggerDelay); auto CH1 = analogConvert(readData_CH1, 2048, 0, 1); //No AC coupling! QVector x(CH1.size());