More fixes idk

This commit is contained in:
Ryzerth 2021-05-03 04:20:48 +02:00
parent 0bc1bd8549
commit 4634c8187f
3 changed files with 23 additions and 22 deletions

View File

@ -33,7 +33,7 @@ else (MSVC)
# Include it because for some reason pkgconfig doesn't look here? # Include it because for some reason pkgconfig doesn't look here?
if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin") if (${CMAKE_SYSTEM_NAME} MATCHES "Darwin")
target_include_directories(airspy_source PUBLIC "/usr/local/include") target_include_directories(airspyhf_source PUBLIC "/usr/local/include")
endif() endif()
endif () endif ()

View File

@ -70,7 +70,7 @@ public:
BladeRFSourceModule(std::string name) { BladeRFSourceModule(std::string name) {
this->name = name; this->name = name;
sampleRate = 768000.0; sampleRate = 1000000.0;
handler.ctx = this; handler.ctx = this;
handler.selectHandler = menuSelected; handler.selectHandler = menuSelected;
@ -119,7 +119,8 @@ public:
return; return;
} }
for (int i = 0; i < devCount; i++) { for (int i = 0; i < devCount; i++) {
devListTxt += devInfoList[i].serial; // Keep only the first 32 character of the serial number for display
devListTxt += std::string(devInfoList[i].serial).substr(0, 32);
devListTxt += '\0'; devListTxt += '\0';
} }
} }
@ -135,15 +136,14 @@ public:
return; return;
} }
// Gather info about the BladeRF // Gather info about the BladeRF's ranges
channelCount = bladerf_get_channel_count(openDev, BLADERF_RX); channelCount = bladerf_get_channel_count(openDev, BLADERF_RX);
bladerf_get_sample_rate_range(openDev, BLADERF_CHANNEL_RX(0), &srRange); bladerf_get_sample_rate_range(openDev, BLADERF_CHANNEL_RX(0), &srRange);
bladerf_get_bandwidth_range(openDev, BLADERF_CHANNEL_RX(0), &bwRange); bladerf_get_bandwidth_range(openDev, BLADERF_CHANNEL_RX(0), &bwRange);
bladerf_get_gain_range(openDev, BLADERF_CHANNEL_RX(0), &gainRange); bladerf_get_gain_range(openDev, BLADERF_CHANNEL_RX(0), &gainRange);
spdlog::warn("SR Range: {0}, {1}, {2}, {3}", srRange->min, srRange->max, srRange->step, srRange->scale); srId = 1;
spdlog::warn("BW Range: {0}, {1}, {2}, {3}", bwRange->min, bwRange->max, bwRange->step, bwRange->scale); sampleRate = sampleRates[1];
spdlog::warn("Gain Range: {0}, {1}, {2}, {3}", gainRange->min, gainRange->max, gainRange->step, gainRange->scale);
// TODO: Gen sample rate list automatically by detecting which version is selected // TODO: Gen sample rate list automatically by detecting which version is selected
@ -191,28 +191,23 @@ private:
return; return;
} }
// Calculate buffer size, must be a multiple of 1024
_this->bufferSize = _this->sampleRate / 200.0; _this->bufferSize = _this->sampleRate / 200.0;
_this->bufferSize /= 1024; _this->bufferSize /= 1024;
_this->bufferSize *= 1024; _this->bufferSize *= 1024;
if (_this->bufferSize < 1024) { _this->bufferSize = 1024; } if (_this->bufferSize < 1024) { _this->bufferSize = 1024; }
bladerf_sample_rate wantedSr = _this->sampleRate; // Setup device parameters
bladerf_sample_rate actualSr; bladerf_set_sample_rate(_this->openDev, BLADERF_CHANNEL_RX(0), _this->sampleRate, NULL);
bladerf_sample_rate actualBw;
bladerf_set_sample_rate(_this->openDev, BLADERF_CHANNEL_RX(0), wantedSr, &actualSr);
bladerf_set_frequency(_this->openDev, BLADERF_CHANNEL_RX(0), _this->freq); bladerf_set_frequency(_this->openDev, BLADERF_CHANNEL_RX(0), _this->freq);
bladerf_set_bandwidth(_this->openDev, BLADERF_CHANNEL_RX(0), 56000000, &actualBw); bladerf_set_bandwidth(_this->openDev, BLADERF_CHANNEL_RX(0), 56000000, NULL);
bladerf_set_gain_mode(_this->openDev, BLADERF_CHANNEL_RX(0), BLADERF_GAIN_MANUAL); bladerf_set_gain_mode(_this->openDev, BLADERF_CHANNEL_RX(0), BLADERF_GAIN_MANUAL);
bladerf_set_gain(_this->openDev, BLADERF_CHANNEL_RX(0), _this->testGain); bladerf_set_gain(_this->openDev, BLADERF_CHANNEL_RX(0), _this->testGain);
if (actualSr != wantedSr) {
spdlog::warn("Sample rate rejected: {0} vs {1}", actualSr, wantedSr);
return;
}
// Setup syncronous transfer // Setup syncronous transfer
bladerf_sync_config(_this->openDev, BLADERF_RX_X1, BLADERF_FORMAT_SC16_Q11, 16, _this->bufferSize, 8, 3500); bladerf_sync_config(_this->openDev, BLADERF_RX_X1, BLADERF_FORMAT_SC16_Q11, 16, _this->bufferSize, 8, 3500);
// Enable streaming
bladerf_enable_module(_this->openDev, BLADERF_CHANNEL_RX(0), true); bladerf_enable_module(_this->openDev, BLADERF_CHANNEL_RX(0), true);
_this->running = true; _this->running = true;
@ -229,11 +224,15 @@ private:
_this->running = false; _this->running = false;
_this->stream.stopWriter(); _this->stream.stopWriter();
// Disable streaming
bladerf_enable_module(_this->openDev, BLADERF_CHANNEL_RX(0), false); bladerf_enable_module(_this->openDev, BLADERF_CHANNEL_RX(0), false);
// Wait for read worker to terminate
if (_this->workerThread.joinable()) { if (_this->workerThread.joinable()) {
_this->workerThread.join(); _this->workerThread.join();
} }
// Close device
bladerf_close(_this->openDev); bladerf_close(_this->openDev);
_this->stream.clearWriteStop(); _this->stream.clearWriteStop();
@ -294,12 +293,17 @@ private:
void worker() { void worker() {
int16_t* buffer = new int16_t[bufferSize * 2]; int16_t* buffer = new int16_t[bufferSize * 2];
bladerf_metadata meta; bladerf_metadata meta;
while (true) { while (true) {
// Receive from the stream and break on error
int ret = bladerf_sync_rx(openDev, buffer, bufferSize, &meta, 3500); int ret = bladerf_sync_rx(openDev, buffer, bufferSize, &meta, 3500);
if (ret != 0) { printf("Error: %d\n", ret); break; } if (ret != 0) { break; }
// Convert to complex float and swap buffers
volk_16i_s32f_convert_32f((float*)stream.writeBuf, buffer, 32768.0f, bufferSize * 2); volk_16i_s32f_convert_32f((float*)stream.writeBuf, buffer, 32768.0f, bufferSize * 2);
if (!stream.swap(bufferSize)) { break; } if (!stream.swap(bufferSize)) { break; }
} }
delete[] buffer; delete[] buffer;
} }

View File

@ -128,10 +128,7 @@ private:
while (true) { while (true) {
_this->reader->readSamples(inBuf, blockSize * 2 * sizeof(int16_t)); _this->reader->readSamples(inBuf, blockSize * 2 * sizeof(int16_t));
for (int i = 0; i < blockSize; i++) { volk_16i_s32f_convert_32f((float*)_this->stream.writeBuf, inBuf, 32768.0f, blockSize * 2);
_this->stream.writeBuf[i].re = (float)inBuf[i * 2] / (float)0x7FFF;
_this->stream.writeBuf[i].im = (float)inBuf[(i * 2) + 1] / (float)0x7FFF;
}
if (!_this->stream.swap(blockSize)) { break; }; if (!_this->stream.swap(blockSize)) { break; };
} }