mirror of
https://github.com/30hours/blah2.git
synced 2024-11-18 12:33:58 +00:00
Fix file saving for RspDuo/Usrp with ofstream
This commit is contained in:
parent
703560e683
commit
82ec0546b4
6 changed files with 38 additions and 46 deletions
|
@ -15,19 +15,19 @@ process:
|
||||||
overlap: 0
|
overlap: 0
|
||||||
ambiguity:
|
ambiguity:
|
||||||
delayMin: -10
|
delayMin: -10
|
||||||
delayMax: 300
|
delayMax: 400
|
||||||
dopplerMin: -300
|
dopplerMin: -200
|
||||||
dopplerMax: 300
|
dopplerMax: 200
|
||||||
clutter:
|
clutter:
|
||||||
delayMin: -10
|
delayMin: -10
|
||||||
delayMax: 300
|
delayMax: 400
|
||||||
detection:
|
detection:
|
||||||
pfa: 0.00001
|
pfa: 0.00001
|
||||||
nGuard: 10
|
nGuard: 2
|
||||||
nTrain: 20
|
nTrain: 6
|
||||||
minDelay: 5
|
minDelay: 5
|
||||||
minDoppler: 15
|
minDoppler: 15
|
||||||
nCentroid: 10
|
nCentroid: 6
|
||||||
tracker:
|
tracker:
|
||||||
initiate:
|
initiate:
|
||||||
M: 3
|
M: 3
|
||||||
|
|
|
@ -5,7 +5,7 @@ capture:
|
||||||
type: "RspDuo"
|
type: "RspDuo"
|
||||||
replay:
|
replay:
|
||||||
state: false
|
state: false
|
||||||
loop: true
|
loop: true
|
||||||
file: '/opt/blah2/replay/file.rspduo'
|
file: '/opt/blah2/replay/file.rspduo'
|
||||||
|
|
||||||
process:
|
process:
|
||||||
|
|
|
@ -20,7 +20,6 @@ Source::Source(std::string _type, uint32_t _fc, uint32_t _fs,
|
||||||
fs = _fs;
|
fs = _fs;
|
||||||
path = _path;
|
path = _path;
|
||||||
saveIq = _saveIq;
|
saveIq = _saveIq;
|
||||||
saveIqFile = NULL;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
std::string Source::open_file()
|
std::string Source::open_file()
|
||||||
|
@ -39,9 +38,9 @@ std::string Source::open_file()
|
||||||
typeLower.begin(), ::tolower);
|
typeLower.begin(), ::tolower);
|
||||||
std::string file = path + timestamp + "." + typeLower + ".iq";
|
std::string file = path + timestamp + "." + typeLower + ".iq";
|
||||||
|
|
||||||
saveIqFile = fopen(file.c_str(), "wb");
|
saveIqFile.open(file, std::ios::binary);
|
||||||
|
|
||||||
if (saveIqFile == NULL)
|
if (!saveIqFile.is_open())
|
||||||
{
|
{
|
||||||
std::cerr << "Error: Can not open file: " << file << std::endl;
|
std::cerr << "Error: Can not open file: " << file << std::endl;
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -53,12 +52,12 @@ std::string Source::open_file()
|
||||||
|
|
||||||
void Source::close_file()
|
void Source::close_file()
|
||||||
{
|
{
|
||||||
if (saveIqFile != NULL)
|
if (!saveIqFile.is_open())
|
||||||
{
|
{
|
||||||
fclose(saveIqFile);
|
saveIqFile.close();
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
std::cerr << "Error: Can not close file pointer." << std::endl;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// switch member with blank file stream
|
||||||
|
std::ofstream blankFile;
|
||||||
|
std::swap(saveIqFile, blankFile);
|
||||||
}
|
}
|
|
@ -8,6 +8,7 @@
|
||||||
|
|
||||||
#include <string>
|
#include <string>
|
||||||
#include <stdint.h>
|
#include <stdint.h>
|
||||||
|
#include <fstream>
|
||||||
#include "data/IqData.h"
|
#include "data/IqData.h"
|
||||||
|
|
||||||
class Source
|
class Source
|
||||||
|
@ -29,8 +30,8 @@ protected:
|
||||||
/// @brief True if IQ data to be saved.
|
/// @brief True if IQ data to be saved.
|
||||||
bool *saveIq;
|
bool *saveIq;
|
||||||
|
|
||||||
/// @brief File pointer to IQ data to be saved.
|
/// @brief File stream to save IQ data.
|
||||||
FILE *saveIqFile;
|
std::ofstream saveIqFile;
|
||||||
|
|
||||||
public:
|
public:
|
||||||
|
|
||||||
|
|
|
@ -8,6 +8,7 @@
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <time.h>
|
#include <time.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
|
#include <fstream>
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
// class static constants
|
// class static constants
|
||||||
|
@ -36,7 +37,7 @@ sdrplay_api_CallbackFnsT cbFns;
|
||||||
sdrplay_api_RxChannelParamsT *chParams;
|
sdrplay_api_RxChannelParamsT *chParams;
|
||||||
|
|
||||||
// global variables
|
// global variables
|
||||||
FILE *out_file_fp = NULL;
|
//FILE *out_file_fp = NULL;
|
||||||
FILE *file_replay = NULL;
|
FILE *file_replay = NULL;
|
||||||
short *buffer_16_ar = NULL;
|
short *buffer_16_ar = NULL;
|
||||||
struct timeval current_tm = {0, 0};
|
struct timeval current_tm = {0, 0};
|
||||||
|
@ -50,7 +51,8 @@ short max_b_nr = 0;
|
||||||
bool run_fg = true;
|
bool run_fg = true;
|
||||||
bool stats_fg = true;
|
bool stats_fg = true;
|
||||||
bool write_fg = true;
|
bool write_fg = true;
|
||||||
bool capture_fg = false;
|
bool *capture_fg;
|
||||||
|
std::ofstream* saveIqFileLocal;
|
||||||
int wait_time_nr = 2;
|
int wait_time_nr = 2;
|
||||||
IqData *buffer1;
|
IqData *buffer1;
|
||||||
IqData *buffer2;
|
IqData *buffer2;
|
||||||
|
@ -72,8 +74,9 @@ RspDuo::RspDuo(std::string _type, uint32_t _fc, uint32_t _fs,
|
||||||
dab_notch_fg = false;
|
dab_notch_fg = false;
|
||||||
chunk_time_nr = DEF_CHUNK_TIME_NR;
|
chunk_time_nr = DEF_CHUNK_TIME_NR;
|
||||||
|
|
||||||
out_file_fp = saveIqFile;
|
//out_file_fp = saveIqFile;
|
||||||
capture_fg = &saveIq;
|
capture_fg = saveIq;
|
||||||
|
saveIqFileLocal = &saveIqFile;
|
||||||
}
|
}
|
||||||
|
|
||||||
void RspDuo::start()
|
void RspDuo::start()
|
||||||
|
@ -526,29 +529,13 @@ void RspDuo::stream_b_callback(short *xi, short *xq, sdrplay_api_StreamCbParamsT
|
||||||
write_fg = true;
|
write_fg = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
// init file open
|
|
||||||
// if (capture_fg && write_fg && run_fg && chunk_tm.tv_sec <= current_tm.tv_sec)
|
|
||||||
// {
|
|
||||||
// if (out_file_fp != NULL)
|
|
||||||
// {
|
|
||||||
// fclose(out_file_fp);
|
|
||||||
// }
|
|
||||||
// out_file_fp = fopen(file.c_str(), "ab");
|
|
||||||
// if (out_file_fp == NULL)
|
|
||||||
// {
|
|
||||||
// std::cerr << "Error - stream_b_callback - opening output file " + file << std::endl;
|
|
||||||
// free(buffer_16_ar);
|
|
||||||
// run_fg = false;
|
|
||||||
// exit(1);
|
|
||||||
// }
|
|
||||||
|
|
||||||
// chunk_tm = current_tm;
|
|
||||||
// }
|
|
||||||
|
|
||||||
// write data to file
|
// write data to file
|
||||||
if (capture_fg && write_fg)
|
if (*capture_fg && write_fg)
|
||||||
{
|
{
|
||||||
if (fwrite(buffer_16_ar, sizeof(short), numSamples * 4, out_file_fp) != (size_t)numSamples * 4)
|
saveIqFileLocal->write(reinterpret_cast<char*>(buffer_16_ar),
|
||||||
|
sizeof(short) * numSamples * 4);
|
||||||
|
|
||||||
|
if (!(*saveIqFileLocal))
|
||||||
{
|
{
|
||||||
std::cerr << "Error - stream_b_callback - not enough samples received" << std::endl;
|
std::cerr << "Error - stream_b_callback - not enough samples received" << std::endl;
|
||||||
free(buffer_16_ar);
|
free(buffer_16_ar);
|
||||||
|
|
|
@ -93,9 +93,14 @@ void Usrp::process(IqData *buffer1, IqData *buffer2)
|
||||||
buffer2->unlock();
|
buffer2->unlock();
|
||||||
|
|
||||||
// save IQ data to file
|
// save IQ data to file
|
||||||
if (saveIq)
|
if (*saveIq)
|
||||||
{
|
{
|
||||||
|
for (const auto& bufferPtr : buff_ptrs)
|
||||||
|
{
|
||||||
|
// Write the buffer data to the file
|
||||||
|
saveIqFile.write(reinterpret_cast<const char*>(
|
||||||
|
bufferPtr), samps_per_buff * sizeof(std::complex<float>));
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue