1
0
mirror of https://github.com/gnss-sdr/gnss-sdr synced 2025-08-03 20:33:49 +00:00

Updated array driver (added 16 + 16 bits snapshot transport support)

Fix compilation issues with mac osx

git-svn-id: https://svn.code.sf.net/p/gnss-sdr/code/trunk@483 64b25241-fba3-4117-9849-534c7e92360d
This commit is contained in:
Javier Arribas 2014-03-14 15:04:23 +00:00
parent 28d6b9a122
commit 851f98f879
3 changed files with 124 additions and 66 deletions

View File

@ -57,7 +57,7 @@ set(Boost_ADDITIONAL_VERSIONS
"1.60.0" "1.60" "1.61.0" "1.61" "1.62.0" "1.62" "1.63.0" "1.63" "1.64.0" "1.64"
"1.65.0" "1.65" "1.66.0" "1.66" "1.67.0" "1.67" "1.68.0" "1.68" "1.69.0" "1.69"
)
find_package(Boost "1.35" COMPONENTS filesystem system)
find_package(Boost "1.35" COMPONENTS filesystem system thread)
if(NOT Boost_FOUND)
message(FATAL_ERROR "Boost required to compile dbfcttc")

View File

@ -78,6 +78,7 @@ namespace gr {
d_fifo_full=false;
d_last_frame_counter=0;
d_num_rx_errors=0;
flag_16_bits_sample=true;
//allocate signal samples buffer
//TODO: Check memory pointers
@ -297,14 +298,84 @@ namespace gr {
//std::cout<<"number_of_channels="<<number_of_channels<<std::endl;
snapshots_per_frame=packet[15] << 8 | packet[16];
//std::cout<<"snapshots_per_frame="<<snapshots_per_frame<<std::endl;
//frame counter check for overflows!
numframebyte=(unsigned char)packet[16+snapshots_per_frame*2*number_of_channels+1];
//std::cout<<"numframebyte="<<numframebyte<<std::endl;
//Overflow detector and mitigator
if (d_flag_start_frame == true)
{
d_last_frame_counter=numframebyte;
d_flag_start_frame=false;
}else{
if ((d_last_frame_counter-numframebyte)>1)
{
int missing_frames=abs(d_last_frame_counter-numframebyte);
if (missing_frames!=255 )
{
//fake samples generation to help tracking loops
std::complex<float> last_sample[DBFCTTC_NUM_CHANNELS];
if (fifo_write_ptr == 0)
{
for (int ch=0;ch<number_of_channels;ch++)
{
last_sample[ch]=fifo_buff_ch[ch][FIFO_SIZE];
}
}else{
for (int ch=0;ch<number_of_channels;ch++)
{
last_sample[ch]=fifo_buff_ch[ch][fifo_write_ptr-1];
}
}
for(int i=0;i<(snapshots_per_frame*missing_frames);i++)
{
if (fifo_items <= FIFO_SIZE) {
for (int ch=0;ch<number_of_channels;ch++)
{
fifo_buff_ch[ch][fifo_write_ptr] = last_sample[ch];
}
fifo_write_ptr++;
if (fifo_write_ptr == FIFO_SIZE) fifo_write_ptr = 0;
fifo_items++;
if (d_fifo_full==true)
{
d_fifo_full=false;
}
}else{
if (d_fifo_full==false)
{
printf("FIFO full\n");
fflush(stdout);
d_fifo_full=true;
}
}
}
d_num_rx_errors=d_num_rx_errors + 1;
printf("RAW Array driver overflow RX %d\n",numframebyte);
}
}
}
d_last_frame_counter=numframebyte;
};
//snapshots reading..
for(int i=0;i<snapshots_per_frame;i++)
{
if (fifo_items <= FIFO_SIZE) {
for (int ch=0;ch<number_of_channels;ch++)
{
if (flag_16_bits_sample==true)
{
//(2i+2q)*8channels =32 bytes
real=(signed short int)(packet[17 + ch*4 + i * 32] << 8 | packet[17 + ch*4 + 1 + i * 32]);
imag=(signed short int)(packet[17 + ch*4 + 2 + i * 32] << 8 | packet[17 + ch*4 + 3 + i * 32]);
}else{
//(1i+1q)*8channels =16 bytes
real = (signed char)packet[17 + ch*2 + i * 16];
imag = (signed char)packet[17 + ch*2 + 1 + i * 16];
}
//todo: invert IQ in FPGA
//fifo_buff_ch[ch][fifo_write_ptr] = std::complex<float>(real, imag);
fifo_buff_ch[ch][fifo_write_ptr] = std::complex<float>(imag, real); //inverted due to inversion in front-end
@ -313,6 +384,10 @@ namespace gr {
fifo_write_ptr++;
if (fifo_write_ptr == FIFO_SIZE) fifo_write_ptr = 0;
fifo_items++;
if (d_fifo_full==true)
{
d_fifo_full=false;
}
}else{
if (d_fifo_full==false)
{
@ -323,31 +398,12 @@ namespace gr {
}
}
//frame counter check for overflows!
numframebyte=(unsigned char)packet[16+snapshots_per_frame*2*number_of_channels+1];
//std::cout<<"numframebyte="<<numframebyte<<std::endl;
//test RX
// **** CTTC DBF PACKET DECODER ***
if (d_flag_start_frame == true)
{
d_last_frame_counter=numframebyte;
d_flag_start_frame=false;
}else{
if ((d_last_frame_counter-numframebyte)>1)
{
if (abs(d_last_frame_counter-numframebyte)!=255 )
{
d_num_rx_errors=d_num_rx_errors + 1;
printf("RAW Array driver overflow RX %d\n",numframebyte);
}
}
}
d_last_frame_counter=numframebyte;
};//else{
//else{
//std::cout<<"RX PKT ID="<<(int)packet[12]<<","<<(int)packet[13]<<std::endl;
//}

View File

@ -61,12 +61,14 @@ private:
int d_inter_frame_delay;
int d_sampling_freq;
bool flag_16_bits_sample;
bool d_flag_start_frame;
bool d_fifo_full;
int d_last_frame_counter;
int d_num_rx_errors;
boost::thread *d_pcap_thread;
/*!
* \brief