limesdr: try to select an appropriate antenna based on the limesuite antenna metadata.
This commit is contained in:
parent
b70898cd27
commit
9520740a12
|
|
@ -153,6 +153,51 @@ bool limesdrHandleOption(int argc, char **argv, int *jptr)
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static size_t selectAntenna()
|
||||||
|
{
|
||||||
|
int result = LMS_PATH_AUTO;
|
||||||
|
lms_name_t *names = NULL;
|
||||||
|
|
||||||
|
int numAntennas = LMS_GetAntennaList(LimeSDR.dev, LMS_CH_RX, LimeSDR.stream.channel, NULL);
|
||||||
|
if (numAntennas <= 0) {
|
||||||
|
limesdrLogHandler(LMS_LOG_ERROR, "unable to get antenna list");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
names = calloc(numAntennas, sizeof(lms_name_t));
|
||||||
|
if (!names) {
|
||||||
|
limesdrLogHandler(LMS_LOG_ERROR, "unable to get antenna list");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
numAntennas = LMS_GetAntennaList(LimeSDR.dev, LMS_CH_RX, LimeSDR.stream.channel, names);
|
||||||
|
if (numAntennas < 0) {
|
||||||
|
limesdrLogHandler(LMS_LOG_ERROR, "unable to get antenna list");
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (int i = 0; i < numAntennas; ++i) {
|
||||||
|
lms_range_t range;
|
||||||
|
if (LMS_GetAntennaBW(LimeSDR.dev, LMS_CH_RX, LimeSDR.stream.channel, i, &range) < 0) {
|
||||||
|
fprintf(stderr, "limesdr: unable to get antenna bandwidth for antenna %d (%s)", i, names[i]);
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (range.min <= Modes.freq && range.max >= Modes.freq) {
|
||||||
|
fprintf(stderr, "limesdr: selected rx antenna %d (%s) with bandwidth %.1f .. %.1fMHz", i, names[i], range.min / 1e6, range.max / 1e6);
|
||||||
|
result = i;
|
||||||
|
goto done;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
done:
|
||||||
|
if (result == LMS_PATH_AUTO)
|
||||||
|
limesdrLogHandler(LMS_LOG_INFO, "limesdr: no suitable antenna found, letting LimeSuite do automatic antenna selection");
|
||||||
|
if (names)
|
||||||
|
free(names);
|
||||||
|
return result;
|
||||||
|
}
|
||||||
|
|
||||||
bool limesdrOpen(void)
|
bool limesdrOpen(void)
|
||||||
{
|
{
|
||||||
const size_t devCountMax = 8;
|
const size_t devCountMax = 8;
|
||||||
|
|
@ -208,13 +253,13 @@ bool limesdrOpen(void)
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LMS_SetLOFrequency(LimeSDR.dev, LMS_CH_RX, LimeSDR.stream.channel, Modes.freq)) {
|
if (LMS_SetAntenna(LimeSDR.dev, LMS_CH_RX, LimeSDR.stream.channel, selectAntenna())) {
|
||||||
limesdrLogHandler(LMS_LOG_ERROR, "unable to set frequency");
|
limesdrLogHandler(LMS_LOG_ERROR, "unable to set RF port");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (LMS_SetAntenna(LimeSDR.dev, LMS_CH_RX, LimeSDR.stream.channel, LMS_PATH_LNAL)) {
|
if (LMS_SetLOFrequency(LimeSDR.dev, LMS_CH_RX, LimeSDR.stream.channel, Modes.freq)) {
|
||||||
limesdrLogHandler(LMS_LOG_ERROR, "unable to set RF port");
|
limesdrLogHandler(LMS_LOG_ERROR, "unable to set frequency");
|
||||||
goto error;
|
goto error;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue