//
// Copyright 2015 Ettus Research LLC
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
//
#include
#include
#include
/*
* RX metadata
*/
uhd_error uhd_rx_metadata_make(
uhd_rx_metadata_handle* handle
){
UHD_SAFE_C(
*handle = new uhd_rx_metadata_t;
)
}
uhd_error uhd_rx_metadata_free(
uhd_rx_metadata_handle* handle
){
UHD_SAFE_C(
delete *handle;
*handle = NULL;
)
}
uhd_error uhd_rx_metadata_has_time_spec(
uhd_rx_metadata_handle h,
bool *result_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*result_out = h->rx_metadata_cpp.has_time_spec;
)
}
uhd_error uhd_rx_metadata_time_spec(
uhd_rx_metadata_handle h,
time_t *full_secs_out,
double *frac_secs_out
){
UHD_SAFE_C_SAVE_ERROR(h,
uhd::time_spec_t time_spec_cpp = h->rx_metadata_cpp.time_spec;
*full_secs_out = time_spec_cpp.get_full_secs();
*frac_secs_out = time_spec_cpp.get_frac_secs();
)
}
uhd_error uhd_rx_metadata_more_fragments(
uhd_rx_metadata_handle h,
bool *result_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*result_out = h->rx_metadata_cpp.more_fragments;
)
}
uhd_error uhd_rx_metadata_fragment_offset(
uhd_rx_metadata_handle h,
size_t *fragment_offset_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*fragment_offset_out = h->rx_metadata_cpp.fragment_offset;
)
}
uhd_error uhd_rx_metadata_start_of_burst(
uhd_rx_metadata_handle h,
bool *result_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*result_out = h->rx_metadata_cpp.start_of_burst;
)
}
uhd_error uhd_rx_metadata_end_of_burst(
uhd_rx_metadata_handle h,
bool *result_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*result_out = h->rx_metadata_cpp.end_of_burst;
)
}
uhd_error uhd_rx_metadata_out_of_sequence(
uhd_rx_metadata_handle h,
bool *result_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*result_out = h->rx_metadata_cpp.out_of_sequence;
)
}
uhd_error uhd_rx_metadata_to_pp_string(
uhd_rx_metadata_handle h,
char* pp_string_out,
size_t strbuffer_len
){
UHD_SAFE_C_SAVE_ERROR(h,
std::string pp_string_cpp = h->rx_metadata_cpp.to_pp_string();
memset(pp_string_out, '\0', strbuffer_len);
strncpy(pp_string_out, pp_string_cpp.c_str(), strbuffer_len);
)
}
uhd_error uhd_rx_metadata_error_code(
uhd_rx_metadata_handle h,
uhd_rx_metadata_error_code_t *error_code_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*error_code_out = uhd_rx_metadata_error_code_t(h->rx_metadata_cpp.error_code);
)
}
uhd_error uhd_rx_metadata_strerror(
uhd_rx_metadata_handle h,
char* strerror_out,
size_t strbuffer_len
){
UHD_SAFE_C_SAVE_ERROR(h,
std::string strerror_cpp = h->rx_metadata_cpp.strerror();
memset(strerror_out, '\0', strbuffer_len);
strncpy(strerror_out, strerror_cpp.c_str(), strbuffer_len);
)
}
uhd_error uhd_rx_metadata_last_error(
uhd_rx_metadata_handle h,
char* error_out,
size_t strbuffer_len
){
UHD_SAFE_C(
memset(error_out, '\0', strbuffer_len);
strncpy(error_out, h->last_error.c_str(), strbuffer_len);
)
}
/*
* TX metadata
*/
uhd_error uhd_tx_metadata_make(
uhd_tx_metadata_handle* handle,
bool has_time_spec,
time_t full_secs,
double frac_secs,
bool start_of_burst,
bool end_of_burst
){
UHD_SAFE_C(
*handle = new uhd_tx_metadata_t;
(*handle)->tx_metadata_cpp.has_time_spec = has_time_spec;
if(has_time_spec){
(*handle)->tx_metadata_cpp.time_spec = uhd::time_spec_t(full_secs, frac_secs);
}
(*handle)->tx_metadata_cpp.start_of_burst = start_of_burst;
(*handle)->tx_metadata_cpp.end_of_burst = end_of_burst;
)
}
uhd_error uhd_tx_metadata_free(
uhd_tx_metadata_handle* handle
){
UHD_SAFE_C(
delete *handle;
*handle = NULL;
)
}
uhd_error uhd_tx_metadata_has_time_spec(
uhd_tx_metadata_handle h,
bool *result_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*result_out = h->tx_metadata_cpp.has_time_spec;
)
}
uhd_error uhd_tx_metadata_time_spec(
uhd_tx_metadata_handle h,
time_t *full_secs_out,
double *frac_secs_out
){
UHD_SAFE_C_SAVE_ERROR(h,
uhd::time_spec_t time_spec_cpp = h->tx_metadata_cpp.time_spec;
*full_secs_out = time_spec_cpp.get_full_secs();
*frac_secs_out = time_spec_cpp.get_frac_secs();
)
}
uhd_error uhd_tx_metadata_start_of_burst(
uhd_tx_metadata_handle h,
bool *result_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*result_out = h->tx_metadata_cpp.start_of_burst;
)
}
uhd_error uhd_tx_metadata_end_of_burst(
uhd_tx_metadata_handle h,
bool *result_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*result_out = h->tx_metadata_cpp.end_of_burst;
)
}
uhd_error uhd_tx_metadata_last_error(
uhd_tx_metadata_handle h,
char* error_out,
size_t strbuffer_len
){
UHD_SAFE_C(
memset(error_out, '\0', strbuffer_len);
strncpy(error_out, h->last_error.c_str(), strbuffer_len);
)
}
/*
* Async metadata
*/
uhd_error uhd_async_metadata_make(
uhd_async_metadata_handle* handle
){
UHD_SAFE_C(
*handle = new uhd_async_metadata_t;
)
}
uhd_error uhd_async_metadata_free(
uhd_async_metadata_handle* handle
){
UHD_SAFE_C(
delete *handle;
*handle = NULL;
)
}
uhd_error uhd_async_metadata_channel(
uhd_async_metadata_handle h,
size_t *channel_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*channel_out = h->async_metadata_cpp.channel;
)
}
uhd_error uhd_async_metadata_has_time_spec(
uhd_async_metadata_handle h,
bool *result_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*result_out = h->async_metadata_cpp.has_time_spec;
)
}
uhd_error uhd_async_metadata_time_spec(
uhd_async_metadata_handle h,
time_t *full_secs_out,
double *frac_secs_out
){
UHD_SAFE_C_SAVE_ERROR(h,
uhd::time_spec_t time_spec_cpp = h->async_metadata_cpp.time_spec;
*full_secs_out = time_spec_cpp.get_full_secs();
*frac_secs_out = time_spec_cpp.get_frac_secs();
)
}
uhd_error uhd_async_metadata_event_code(
uhd_async_metadata_handle h,
uhd_async_metadata_event_code_t *event_code_out
){
UHD_SAFE_C_SAVE_ERROR(h,
*event_code_out = uhd_async_metadata_event_code_t(h->async_metadata_cpp.event_code);
)
}
uhd_error uhd_async_metadata_user_payload(
uhd_async_metadata_handle h,
uint32_t user_payload_out[4]
){
UHD_SAFE_C_SAVE_ERROR(h,
memcpy(user_payload_out, h->async_metadata_cpp.user_payload, 4*sizeof(uint32_t));
)
}
uhd_error uhd_async_metadata_last_error(
uhd_async_metadata_handle h,
char* error_out,
size_t strbuffer_len
){
UHD_SAFE_C(
memset(error_out, '\0', strbuffer_len);
strncpy(error_out, h->last_error.c_str(), strbuffer_len);
)
}