Add helper functions for parsing frequency arguments

This commit is contained in:
Dominic Spill
2018-03-27 11:57:52 -06:00
parent 9f0a46d818
commit d4d74db27c

View File

@ -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;