Add helper functions for parsing frequency arguments
This commit is contained in:
@ -254,6 +254,22 @@ int parse_u32(char* s, uint32_t* const value) {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* Parse frequencies as doubles to take advantage of notation parsing */
|
||||||
|
int parse_frequency_i64(char* optarg, char* endptr, int64_t* value) {
|
||||||
|
*value = (int64_t) strtod(optarg, &endptr);
|
||||||
|
if (optarg == endptr) {
|
||||||
|
return HACKRF_ERROR_INVALID_PARAM;
|
||||||
|
}
|
||||||
|
return HACKRF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
|
int parse_frequency_u32(char* optarg, char* endptr, uint32_t* value) {
|
||||||
|
*value = (uint32_t) strtod(optarg, &endptr);
|
||||||
|
if (optarg == endptr) {
|
||||||
|
return HACKRF_ERROR_INVALID_PARAM;
|
||||||
|
}
|
||||||
|
return HACKRF_SUCCESS;
|
||||||
|
}
|
||||||
|
|
||||||
static char *stringrev(char *str)
|
static char *stringrev(char *str)
|
||||||
{
|
{
|
||||||
@ -537,8 +553,7 @@ int main(int argc, char** argv) {
|
|||||||
char date_time[DATE_TIME_MAX_LEN];
|
char date_time[DATE_TIME_MAX_LEN];
|
||||||
const char* path = NULL;
|
const char* path = NULL;
|
||||||
const char* serial_number = NULL;
|
const char* serial_number = NULL;
|
||||||
char* endptr;
|
char* endptr = NULL;
|
||||||
double f_hz;
|
|
||||||
int result;
|
int result;
|
||||||
time_t rawtime;
|
time_t rawtime;
|
||||||
struct tm * timeinfo;
|
struct tm * timeinfo;
|
||||||
@ -584,32 +599,17 @@ int main(int argc, char** argv) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'f':
|
case 'f':
|
||||||
f_hz = strtod(optarg, &endptr);
|
result = parse_frequency_i64(optarg, endptr, &freq_hz);
|
||||||
if (optarg == endptr) {
|
|
||||||
result = HACKRF_ERROR_INVALID_PARAM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
freq_hz = f_hz;
|
|
||||||
automatic_tuning = true;
|
automatic_tuning = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'i':
|
case 'i':
|
||||||
f_hz = strtod(optarg, &endptr);
|
result = parse_frequency_i64(optarg, endptr, &if_freq_hz);
|
||||||
if (optarg == endptr) {
|
|
||||||
result = HACKRF_ERROR_INVALID_PARAM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
if_freq_hz = f_hz;
|
|
||||||
if_freq = true;
|
if_freq = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case 'o':
|
case 'o':
|
||||||
f_hz = strtod(optarg, &endptr);
|
result = parse_frequency_i64(optarg, endptr, &lo_freq_hz);
|
||||||
if (optarg == endptr) {
|
|
||||||
result = HACKRF_ERROR_INVALID_PARAM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
lo_freq_hz = f_hz;
|
|
||||||
lo_freq = true;
|
lo_freq = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -641,12 +641,7 @@ int main(int argc, char** argv) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 's':
|
case 's':
|
||||||
f_hz = strtod(optarg, &endptr);
|
result = parse_frequency_u32(optarg, endptr, &sample_rate_hz);
|
||||||
if (optarg == endptr) {
|
|
||||||
result = HACKRF_ERROR_INVALID_PARAM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
sample_rate_hz = f_hz;
|
|
||||||
sample_rate = true;
|
sample_rate = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -657,12 +652,7 @@ int main(int argc, char** argv) {
|
|||||||
break;
|
break;
|
||||||
|
|
||||||
case 'b':
|
case 'b':
|
||||||
f_hz = strtod(optarg, &endptr);
|
result = parse_frequency_u32(optarg, endptr, &baseband_filter_bw_hz);
|
||||||
if (optarg == endptr) {
|
|
||||||
result = HACKRF_ERROR_INVALID_PARAM;
|
|
||||||
break;
|
|
||||||
}
|
|
||||||
baseband_filter_bw_hz = f_hz;
|
|
||||||
baseband_filter_bw = true;
|
baseband_filter_bw = true;
|
||||||
break;
|
break;
|
||||||
|
|
||||||
@ -758,7 +748,7 @@ int main(int argc, char** argv) {
|
|||||||
freq_hz = if_freq_hz;
|
freq_hz = if_freq_hz;
|
||||||
break;
|
break;
|
||||||
case RF_PATH_FILTER_LOW_PASS:
|
case RF_PATH_FILTER_LOW_PASS:
|
||||||
freq_hz = labs(if_freq_hz - lo_freq_hz);
|
freq_hz = labs((long int) if_freq_hz - lo_freq_hz);
|
||||||
break;
|
break;
|
||||||
case RF_PATH_FILTER_HIGH_PASS:
|
case RF_PATH_FILTER_HIGH_PASS:
|
||||||
freq_hz = if_freq_hz + lo_freq_hz;
|
freq_hz = if_freq_hz + lo_freq_hz;
|
||||||
|
Reference in New Issue
Block a user