1
0
mirror of https://github.com/f4exb/sdrangel.git synced 2025-08-10 09:42:32 -04:00

Merge pull request #2365 from srcejon/usrp_gpio

Add GPIO support for USRP devices
This commit is contained in:
Edouard Griffiths 2024-12-25 21:02:23 +01:00 committed by GitHub
commit 51b540cf72
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
21 changed files with 441 additions and 24 deletions

View File

@ -881,8 +881,8 @@ RemoteTCPProtocol::Device RemoteTCPSinkSink::getDevice()
void RemoteTCPSinkSink::acceptWebConnection() void RemoteTCPSinkSink::acceptWebConnection()
{ {
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
QWebSocket *client = m_webSocketServer->nextPendingConnection(); QWebSocket *client = m_webSocketServer->nextPendingConnection();
connect(client, &QWebSocket::binaryMessageReceived, this, &RemoteTCPSinkSink::processCommand); connect(client, &QWebSocket::binaryMessageReceived, this, &RemoteTCPSinkSink::processCommand);
connect(client, &QWebSocket::disconnected, this, &RemoteTCPSinkSink::disconnected); connect(client, &QWebSocket::disconnected, this, &RemoteTCPSinkSink::disconnected);
@ -891,8 +891,11 @@ void RemoteTCPSinkSink::acceptWebConnection()
// https://bugreports.qt.io/browse/QTBUG-125874 // https://bugreports.qt.io/browse/QTBUG-125874
QTimer::singleShot(200, this, [this, client] () { QTimer::singleShot(200, this, [this, client] () {
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
m_clients.append(new WebSocket(client)); if (client->isValid())
acceptConnection(m_clients.last()); {
m_clients.append(new WebSocket(client));
acceptConnection(m_clients.last());
}
}); });
} }
@ -912,8 +915,11 @@ void RemoteTCPSinkSink::acceptTCPConnection()
QTimer::singleShot(200, this, [this, client] () { QTimer::singleShot(200, this, [this, client] () {
QMutexLocker mutexLocker(&m_mutex); QMutexLocker mutexLocker(&m_mutex);
m_clients.append(new TCPSocket(client)); if (client->isValid())
acceptConnection(m_clients.last()); {
m_clients.append(new TCPSocket(client));
acceptConnection(m_clients.last());
}
}); });
} }

View File

@ -123,3 +123,10 @@ This label turns green when data has been transmitted to the device.
- **D**: turns red if stream experiences packet drop outs - **D**: turns red if stream experiences packet drop outs
The stream warning indicators are reset when the acquisition is started. The stream warning indicators are reset when the acquisition is started.
<h2>GPIOs</h2>
The USRP device settings supports 8-bit `gpioDir` and `gpioPins` settings. These can be set via the Web API or Simple PTT feature.
`gpioDir` can be set to 0 for default ATR (automatic transmit/receive) functionality or 1 for GPIO output.
On the b210, the GPIOs are on J504 header. Bit 0 corresponds to pin 1.
On other USRP devices, that may have multiple GPIO banks, these settings correspond to bank `FP0` (Front panel).

View File

@ -813,6 +813,25 @@ bool USRPOutput::applySettings(const USRPOutputSettings& settings, const QList<Q
} }
} }
if (settingsKeys.contains("gpioDir") || force)
{
if (m_deviceShared.m_deviceParams->getDevice())
{
m_deviceShared.m_deviceParams->getDevice()->set_gpio_attr("FP0", "CTRL", ~settings.m_gpioDir, 0xff); // 0 for GPIO, 1 for ATR
m_deviceShared.m_deviceParams->getDevice()->set_gpio_attr("FP0", "DDR", settings.m_gpioDir, 0xff); // 0 for input, 1 for output
qDebug() << "USRPOutput::applySettings: set GPIO dir to " << settings.m_gpioDir;
}
}
if (settingsKeys.contains("gpioPins") || force)
{
if (m_deviceShared.m_deviceParams->getDevice())
{
m_deviceShared.m_deviceParams->getDevice()->set_gpio_attr("FP0", "OUT", settings.m_gpioPins, 0xff);
qDebug() << "USRPOutput::applySettings: set GPIO pins to " << settings.m_gpioPins;
}
}
if (settingsKeys.contains("useReverseAPI")) if (settingsKeys.contains("useReverseAPI"))
{ {
bool fullUpdate = (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) || bool fullUpdate = (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) ||
@ -1036,6 +1055,12 @@ void USRPOutput::webapiUpdateDeviceSettings(
if (deviceSettingsKeys.contains("transverterMode")) { if (deviceSettingsKeys.contains("transverterMode")) {
settings.m_transverterMode = response.getUsrpOutputSettings()->getTransverterMode() != 0; settings.m_transverterMode = response.getUsrpOutputSettings()->getTransverterMode() != 0;
} }
if (deviceSettingsKeys.contains("gpioDir")) {
settings.m_gpioDir = response.getUsrpOutputSettings()->getGpioDir();
}
if (deviceSettingsKeys.contains("gpioPins")) {
settings.m_gpioPins = response.getUsrpOutputSettings()->getGpioPins();
}
if (deviceSettingsKeys.contains("useReverseAPI")) { if (deviceSettingsKeys.contains("useReverseAPI")) {
settings.m_useReverseAPI = response.getUsrpOutputSettings()->getUseReverseApi() != 0; settings.m_useReverseAPI = response.getUsrpOutputSettings()->getUseReverseApi() != 0;
} }
@ -1072,6 +1097,8 @@ void USRPOutput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& resp
response.getUsrpOutputSettings()->setLpfBw(settings.m_lpfBW); response.getUsrpOutputSettings()->setLpfBw(settings.m_lpfBW);
response.getUsrpOutputSettings()->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency); response.getUsrpOutputSettings()->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency);
response.getUsrpOutputSettings()->setTransverterMode(settings.m_transverterMode ? 1 : 0); response.getUsrpOutputSettings()->setTransverterMode(settings.m_transverterMode ? 1 : 0);
response.getUsrpOutputSettings()->setGpioDir(settings.m_gpioDir);
response.getUsrpOutputSettings()->setGpioPins(settings.m_gpioPins);
response.getUsrpOutputSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0); response.getUsrpOutputSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0);
if (response.getUsrpOutputSettings()->getReverseApiAddress()) { if (response.getUsrpOutputSettings()->getReverseApiAddress()) {
@ -1172,6 +1199,12 @@ void USRPOutput::webapiReverseSendSettings(const QList<QString>& deviceSettingsK
if (deviceSettingsKeys.contains("transverterMode") || force) { if (deviceSettingsKeys.contains("transverterMode") || force) {
swgUsrpOutputSettings->setTransverterMode(settings.m_transverterMode ? 1 : 0); swgUsrpOutputSettings->setTransverterMode(settings.m_transverterMode ? 1 : 0);
} }
if (deviceSettingsKeys.contains("gpioDir") || force) {
swgUsrpOutputSettings->setGpioDir(settings.m_gpioDir);
}
if (deviceSettingsKeys.contains("gpioPins") || force) {
swgUsrpOutputSettings->setGpioPins(settings.m_gpioPins);
}
QString deviceSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/settings") QString deviceSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/settings")
.arg(settings.m_reverseAPIAddress) .arg(settings.m_reverseAPIAddress)

View File

@ -40,6 +40,8 @@ void USRPOutputSettings::resetToDefaults()
m_clockSource = "internal"; m_clockSource = "internal";
m_transverterMode = false; m_transverterMode = false;
m_transverterDeltaFrequency = 0; m_transverterDeltaFrequency = 0;
m_gpioDir = 0;
m_gpioPins = 0;
m_useReverseAPI = false; m_useReverseAPI = false;
m_reverseAPIAddress = "127.0.0.1"; m_reverseAPIAddress = "127.0.0.1";
m_reverseAPIPort = 8888; m_reverseAPIPort = 8888;
@ -63,6 +65,8 @@ QByteArray USRPOutputSettings::serialize() const
s.writeU32(11, m_reverseAPIPort); s.writeU32(11, m_reverseAPIPort);
s.writeU32(12, m_reverseAPIDeviceIndex); s.writeU32(12, m_reverseAPIDeviceIndex);
s.writeS32(13, m_loOffset); s.writeS32(13, m_loOffset);
s.writeU32(14, m_gpioDir);
s.writeU32(15, m_gpioPins);
return s.final(); return s.final();
} }
@ -102,6 +106,10 @@ bool USRPOutputSettings::deserialize(const QByteArray& data)
d.readU32(12, &uintval, 0); d.readU32(12, &uintval, 0);
m_reverseAPIDeviceIndex = uintval > 99 ? 99 : uintval; m_reverseAPIDeviceIndex = uintval > 99 ? 99 : uintval;
d.readS32(13, &m_loOffset, 0); d.readS32(13, &m_loOffset, 0);
d.readU32(14, &uintval, 0);
m_gpioDir = uintval & 0xFF;
d.readU32(15, &uintval, 0);
m_gpioPins = uintval & 0xFF;
return true; return true;
} }
@ -148,6 +156,12 @@ void USRPOutputSettings::applySettings(const QStringList& settingsKeys, const US
if (settingsKeys.contains("transverterDeltaFrequency")) { if (settingsKeys.contains("transverterDeltaFrequency")) {
m_transverterDeltaFrequency = settings.m_transverterDeltaFrequency; m_transverterDeltaFrequency = settings.m_transverterDeltaFrequency;
} }
if (settingsKeys.contains("gpioDir")) {
m_gpioDir = settings.m_gpioDir;
}
if (settingsKeys.contains("gpioPins")) {
m_gpioPins = settings.m_gpioPins;
}
if (settingsKeys.contains("useReverseAPI")) { if (settingsKeys.contains("useReverseAPI")) {
m_useReverseAPI = settings.m_useReverseAPI; m_useReverseAPI = settings.m_useReverseAPI;
} }
@ -199,6 +213,12 @@ QString USRPOutputSettings::getDebugString(const QStringList& settingsKeys, bool
if (settingsKeys.contains("transverterDeltaFrequency") || force) { if (settingsKeys.contains("transverterDeltaFrequency") || force) {
ostr << " m_transverterDeltaFrequency: " << m_transverterDeltaFrequency; ostr << " m_transverterDeltaFrequency: " << m_transverterDeltaFrequency;
} }
if (settingsKeys.contains("gpioDir") || force) {
ostr << " m_gpioDir: " << (int) m_gpioDir;
}
if (settingsKeys.contains("gpioPins") || force) {
ostr << " m_gpioPins: " << (int) m_gpioPins;
}
if (settingsKeys.contains("useReverseAPI") || force) { if (settingsKeys.contains("useReverseAPI") || force) {
ostr << " m_useReverseAPI: " << m_useReverseAPI; ostr << " m_useReverseAPI: " << m_useReverseAPI;
} }

View File

@ -45,6 +45,8 @@ struct USRPOutputSettings
QString m_clockSource; QString m_clockSource;
bool m_transverterMode; bool m_transverterMode;
qint64 m_transverterDeltaFrequency; qint64 m_transverterDeltaFrequency;
uint8_t m_gpioDir; //!< GPIO pin direction; 0 ATR (automatic transmit/receive), 1 output
uint8_t m_gpioPins; //!< GPIO pins levels for outputs
bool m_useReverseAPI; bool m_useReverseAPI;
QString m_reverseAPIAddress; QString m_reverseAPIAddress;
uint16_t m_reverseAPIPort; uint16_t m_reverseAPIPort;

View File

@ -143,3 +143,10 @@ On Ubuntu 20, the libuhd-dev package should be installed. The FPGA images then n
```shell ```shell
sudo /usr/lib/uhd/utils/uhd_images_downloader.py sudo /usr/lib/uhd/utils/uhd_images_downloader.py
``` ```
<h2>GPIOs</h2>
The USRP device settings supports 8-bit `gpioDir` and `gpioPins` settings. These can be set via the Web API or Simple PTT feature.
`gpioDir` can be set to 0 for default ATR (automatic transmit/receive) functionality or 1 for GPIO output.
On the b210, the GPIOs are on J504 header. Bit 0 corresponds to pin 1.
On other USRP devices, that may have multiple GPIO banks, these settings correspond to bank `FP0` (Front panel).

View File

@ -895,6 +895,25 @@ bool USRPInput::applySettings(const USRPInputSettings& settings, const QList<QSt
} }
} }
if (settingsKeys.contains("gpioDir") || force)
{
if (m_deviceShared.m_deviceParams->getDevice())
{
m_deviceShared.m_deviceParams->getDevice()->set_gpio_attr("FP0", "CTRL", ~settings.m_gpioDir, 0xff); // 0 for GPIO, 1 for ATR
m_deviceShared.m_deviceParams->getDevice()->set_gpio_attr("FP0", "DDR", settings.m_gpioDir, 0xff); // 0 for input, 1 for output
qDebug() << "USRPInput::applySettings: set GPIO dir to " << settings.m_gpioDir;
}
}
if (settingsKeys.contains("gpioPins") || force)
{
if (m_deviceShared.m_deviceParams->getDevice())
{
m_deviceShared.m_deviceParams->getDevice()->set_gpio_attr("FP0", "OUT", settings.m_gpioPins, 0xff);
qDebug() << "USRPInput::applySettings: set GPIO pins to " << settings.m_gpioPins;
}
}
if (settingsKeys.contains("useReverseAPI")) if (settingsKeys.contains("useReverseAPI"))
{ {
bool fullUpdate = (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) || bool fullUpdate = (settingsKeys.contains("useReverseAPI") && settings.m_useReverseAPI) ||
@ -1162,6 +1181,12 @@ void USRPInput::webapiUpdateDeviceSettings(
if (deviceSettingsKeys.contains("transverterMode")) { if (deviceSettingsKeys.contains("transverterMode")) {
settings.m_transverterMode = response.getUsrpInputSettings()->getTransverterMode() != 0; settings.m_transverterMode = response.getUsrpInputSettings()->getTransverterMode() != 0;
} }
if (deviceSettingsKeys.contains("gpioDir")) {
settings.m_gpioDir = response.getUsrpInputSettings()->getGpioDir();
}
if (deviceSettingsKeys.contains("gpioPins")) {
settings.m_gpioPins = response.getUsrpInputSettings()->getGpioPins();
}
if (deviceSettingsKeys.contains("useReverseAPI")) { if (deviceSettingsKeys.contains("useReverseAPI")) {
settings.m_useReverseAPI = response.getUsrpInputSettings()->getUseReverseApi() != 0; settings.m_useReverseAPI = response.getUsrpInputSettings()->getUseReverseApi() != 0;
} }
@ -1191,6 +1216,8 @@ void USRPInput::webapiFormatDeviceSettings(SWGSDRangel::SWGDeviceSettings& respo
response.getUsrpInputSettings()->setLpfBw(settings.m_lpfBW); response.getUsrpInputSettings()->setLpfBw(settings.m_lpfBW);
response.getUsrpInputSettings()->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency); response.getUsrpInputSettings()->setTransverterDeltaFrequency(settings.m_transverterDeltaFrequency);
response.getUsrpInputSettings()->setTransverterMode(settings.m_transverterMode ? 1 : 0); response.getUsrpInputSettings()->setTransverterMode(settings.m_transverterMode ? 1 : 0);
response.getUsrpInputSettings()->setGpioDir(settings.m_gpioDir);
response.getUsrpInputSettings()->setGpioPins(settings.m_gpioPins);
response.getUsrpInputSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0); response.getUsrpInputSettings()->setUseReverseApi(settings.m_useReverseAPI ? 1 : 0);
if (response.getUsrpInputSettings()->getReverseApiAddress()) { if (response.getUsrpInputSettings()->getReverseApiAddress()) {
@ -1311,6 +1338,12 @@ void USRPInput::webapiReverseSendSettings(const QList<QString>& deviceSettingsKe
if (deviceSettingsKeys.contains("transverterMode") || force) { if (deviceSettingsKeys.contains("transverterMode") || force) {
swgUsrpInputSettings->setTransverterMode(settings.m_transverterMode ? 1 : 0); swgUsrpInputSettings->setTransverterMode(settings.m_transverterMode ? 1 : 0);
} }
if (deviceSettingsKeys.contains("gpioDir") || force) {
swgUsrpInputSettings->setGpioDir(settings.m_gpioDir);
}
if (deviceSettingsKeys.contains("gpioPins") || force) {
swgUsrpInputSettings->setGpioPins(settings.m_gpioPins);
}
QString deviceSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/settings") QString deviceSettingsURL = QString("http://%1:%2/sdrangel/deviceset/%3/device/settings")
.arg(settings.m_reverseAPIAddress) .arg(settings.m_reverseAPIAddress)

View File

@ -46,6 +46,8 @@ void USRPInputSettings::resetToDefaults()
m_replayLength = 20.0f; m_replayLength = 20.0f;
m_replayStep = 5.0f; m_replayStep = 5.0f;
m_replayLoop = false; m_replayLoop = false;
m_gpioDir = 0;
m_gpioPins = 0;
m_useReverseAPI = false; m_useReverseAPI = false;
m_reverseAPIAddress = "127.0.0.1"; m_reverseAPIAddress = "127.0.0.1";
m_reverseAPIPort = 8888; m_reverseAPIPort = 8888;
@ -76,6 +78,8 @@ QByteArray USRPInputSettings::serialize() const
s.writeFloat(18, m_replayLength); s.writeFloat(18, m_replayLength);
s.writeFloat(19, m_replayStep); s.writeFloat(19, m_replayStep);
s.writeBool(20, m_replayLoop); s.writeBool(20, m_replayLoop);
s.writeU32(21, m_gpioDir);
s.writeU32(22, m_gpioPins);
return s.final(); return s.final();
} }
@ -124,6 +128,10 @@ bool USRPInputSettings::deserialize(const QByteArray& data)
d.readFloat(18, &m_replayLength, 20.0f); d.readFloat(18, &m_replayLength, 20.0f);
d.readFloat(19, &m_replayStep, 5.0f); d.readFloat(19, &m_replayStep, 5.0f);
d.readBool(20, &m_replayLoop, false); d.readBool(20, &m_replayLoop, false);
d.readU32(21, &uintval, 0);
m_gpioDir = uintval & 0xFF;
d.readU32(22, &uintval, 0);
m_gpioPins = uintval & 0xFF;
return true; return true;
} }
@ -191,6 +199,12 @@ void USRPInputSettings::applySettings(const QStringList& settingsKeys, const USR
if (settingsKeys.contains("replayLoop")) { if (settingsKeys.contains("replayLoop")) {
m_replayLoop = settings.m_replayLoop; m_replayLoop = settings.m_replayLoop;
} }
if (settingsKeys.contains("gpioDir")) {
m_gpioDir = settings.m_gpioDir;
}
if (settingsKeys.contains("gpioPins")) {
m_gpioPins = settings.m_gpioPins;
}
if (settingsKeys.contains("useReverseAPI")) { if (settingsKeys.contains("useReverseAPI")) {
m_useReverseAPI = settings.m_useReverseAPI; m_useReverseAPI = settings.m_useReverseAPI;
} }
@ -263,6 +277,12 @@ QString USRPInputSettings::getDebugString(const QStringList& settingsKeys, bool
if (settingsKeys.contains("replayLoop") || force) { if (settingsKeys.contains("replayLoop") || force) {
ostr << " m_replayLoop: " << m_replayLoop; ostr << " m_replayLoop: " << m_replayLoop;
} }
if (settingsKeys.contains("gpioDir") || force) {
ostr << " m_gpioDir: " << (int) m_gpioDir;
}
if (settingsKeys.contains("gpioPins") || force) {
ostr << " m_gpioPins: " << (int) m_gpioPins;
}
if (settingsKeys.contains("useReverseAPI") || force) { if (settingsKeys.contains("useReverseAPI") || force) {
ostr << " m_useReverseAPI: " << m_useReverseAPI; ostr << " m_useReverseAPI: " << m_useReverseAPI;
} }

View File

@ -52,10 +52,12 @@ struct USRPInputSettings
QString m_clockSource; QString m_clockSource;
bool m_transverterMode; bool m_transverterMode;
qint64 m_transverterDeltaFrequency; qint64 m_transverterDeltaFrequency;
float m_replayOffset; //!< Replay offset in seconds float m_replayOffset; //!< Replay offset in seconds
float m_replayLength; //!< Replay buffer size in seconds float m_replayLength; //!< Replay buffer size in seconds
float m_replayStep; //!< Replay forward/back step size in seconds float m_replayStep; //!< Replay forward/back step size in seconds
bool m_replayLoop; //!< Replay buffer repeatedly without recording new data bool m_replayLoop; //!< Replay buffer repeatedly without recording new data
uint8_t m_gpioDir; //!< GPIO pin direction; 0 ATR (automatic transmit/receive), 1 output
uint8_t m_gpioPins; //!< GPIO pins levels for outputs
bool m_useReverseAPI; bool m_useReverseAPI;
QString m_reverseAPIAddress; QString m_reverseAPIAddress;
uint16_t m_reverseAPIPort; uint16_t m_reverseAPIPort;

View File

@ -1319,9 +1319,15 @@ bool ChannelWebAPIUtils::patchDeviceSetting(unsigned int deviceIndex, const QStr
SWGSDRangel::SWGErrorResponse errorResponse2; SWGSDRangel::SWGErrorResponse errorResponse2;
delete jsonObj; delete jsonObj;
DeviceSampleSource *source = deviceSet->m_deviceAPI->getSampleSource(); if (DeviceSampleSource *source = deviceSet->m_deviceAPI->getSampleSource()) {
httpRC = source->webapiSettingsPutPatch(false, deviceSettingsKeys, deviceSettingsResponse, *errorResponse2.getMessage());
httpRC = source->webapiSettingsPutPatch(false, deviceSettingsKeys, deviceSettingsResponse, *errorResponse2.getMessage()); } else if (DeviceSampleSink *sink = deviceSet->m_deviceAPI->getSampleSink()) {
httpRC = sink->webapiSettingsPutPatch(false, deviceSettingsKeys, deviceSettingsResponse, *errorResponse2.getMessage());
} else if (DeviceSampleMIMO *mimo = deviceSet->m_deviceAPI->getSampleMIMO()) {
httpRC = mimo->webapiSettingsPutPatch(false, deviceSettingsKeys, deviceSettingsResponse, *errorResponse2.getMessage());
} else {
httpRC = 404;
}
if (httpRC/100 == 2) if (httpRC/100 == 2)
{ {

View File

@ -13451,6 +13451,18 @@ margin-bottom: 20px;
"properties" : { "properties" : {
"sampleRate" : { "sampleRate" : {
"type" : "integer" "type" : "integer"
},
"latitude" : {
"type" : "number",
"format" : "float"
},
"longitude" : {
"type" : "number",
"format" : "float"
},
"altitude" : {
"type" : "number",
"format" : "float"
} }
}, },
"description" : "RemoteTCPInput" "description" : "RemoteTCPInput"
@ -16824,6 +16836,14 @@ margin-bottom: 20px;
"type" : "integer", "type" : "integer",
"format" : "int64" "format" : "int64"
}, },
"gpioDir" : {
"type" : "integer",
"format" : "int8"
},
"gpioPins" : {
"type" : "integer",
"format" : "int8"
},
"useReverseAPI" : { "useReverseAPI" : {
"type" : "integer", "type" : "integer",
"description" : "Synchronize with reverse API (1 for yes, 0 for no)" "description" : "Synchronize with reverse API (1 for yes, 0 for no)"
@ -16893,6 +16913,14 @@ margin-bottom: 20px;
"type" : "integer", "type" : "integer",
"format" : "int64" "format" : "int64"
}, },
"gpioDir" : {
"type" : "integer",
"format" : "int8"
},
"gpioPins" : {
"type" : "integer",
"format" : "int8"
},
"useReverseAPI" : { "useReverseAPI" : {
"type" : "integer", "type" : "integer",
"description" : "Synchronize with reverse API (1 for yes, 0 for no)" "description" : "Synchronize with reverse API (1 for yes, 0 for no)"
@ -59441,7 +59469,7 @@ except ApiException as e:
</div> </div>
<div id="generator"> <div id="generator">
<div class="content"> <div class="content">
Generated 2024-07-16T23:20:27.082+02:00 Generated 2024-12-24T11:56:24.260+01:00
</div> </div>
</div> </div>
</div> </div>

View File

@ -61,3 +61,12 @@ RemoteTCPInputReport:
properties: properties:
sampleRate: sampleRate:
type: integer type: integer
latitude:
type: number
format: float
longitude:
type: number
format: float
altitude:
type: number
format: float

View File

@ -30,6 +30,12 @@ USRPInputSettings:
transverterDeltaFrequency: transverterDeltaFrequency:
type: integer type: integer
format: int64 format: int64
gpioDir:
type: integer
format: int8
gpioPins:
type: integer
format: int8
useReverseAPI: useReverseAPI:
description: Synchronize with reverse API (1 for yes, 0 for no) description: Synchronize with reverse API (1 for yes, 0 for no)
type: integer type: integer
@ -65,6 +71,12 @@ USRPOutputSettings:
transverterDeltaFrequency: transverterDeltaFrequency:
type: integer type: integer
format: int64 format: int64
gpioDir:
type: integer
format: int8
gpioPins:
type: integer
format: int8
useReverseAPI: useReverseAPI:
description: Synchronize with reverse API (1 for yes, 0 for no) description: Synchronize with reverse API (1 for yes, 0 for no)
type: integer type: integer

View File

@ -30,6 +30,12 @@ USRPInputSettings:
transverterDeltaFrequency: transverterDeltaFrequency:
type: integer type: integer
format: int64 format: int64
gpioDir:
type: integer
format: int8
gpioPins:
type: integer
format: int8
useReverseAPI: useReverseAPI:
description: Synchronize with reverse API (1 for yes, 0 for no) description: Synchronize with reverse API (1 for yes, 0 for no)
type: integer type: integer
@ -65,6 +71,12 @@ USRPOutputSettings:
transverterDeltaFrequency: transverterDeltaFrequency:
type: integer type: integer
format: int64 format: int64
gpioDir:
type: integer
format: int8
gpioPins:
type: integer
format: int8
useReverseAPI: useReverseAPI:
description: Synchronize with reverse API (1 for yes, 0 for no) description: Synchronize with reverse API (1 for yes, 0 for no)
type: integer type: integer

View File

@ -13451,6 +13451,18 @@ margin-bottom: 20px;
"properties" : { "properties" : {
"sampleRate" : { "sampleRate" : {
"type" : "integer" "type" : "integer"
},
"latitude" : {
"type" : "number",
"format" : "float"
},
"longitude" : {
"type" : "number",
"format" : "float"
},
"altitude" : {
"type" : "number",
"format" : "float"
} }
}, },
"description" : "RemoteTCPInput" "description" : "RemoteTCPInput"
@ -16824,6 +16836,14 @@ margin-bottom: 20px;
"type" : "integer", "type" : "integer",
"format" : "int64" "format" : "int64"
}, },
"gpioDir" : {
"type" : "integer",
"format" : "int8"
},
"gpioPins" : {
"type" : "integer",
"format" : "int8"
},
"useReverseAPI" : { "useReverseAPI" : {
"type" : "integer", "type" : "integer",
"description" : "Synchronize with reverse API (1 for yes, 0 for no)" "description" : "Synchronize with reverse API (1 for yes, 0 for no)"
@ -16893,6 +16913,14 @@ margin-bottom: 20px;
"type" : "integer", "type" : "integer",
"format" : "int64" "format" : "int64"
}, },
"gpioDir" : {
"type" : "integer",
"format" : "int8"
},
"gpioPins" : {
"type" : "integer",
"format" : "int8"
},
"useReverseAPI" : { "useReverseAPI" : {
"type" : "integer", "type" : "integer",
"description" : "Synchronize with reverse API (1 for yes, 0 for no)" "description" : "Synchronize with reverse API (1 for yes, 0 for no)"
@ -59441,7 +59469,7 @@ except ApiException as e:
</div> </div>
<div id="generator"> <div id="generator">
<div class="content"> <div class="content">
Generated 2024-07-16T23:20:27.082+02:00 Generated 2024-12-24T11:56:24.260+01:00
</div> </div>
</div> </div>
</div> </div>

View File

@ -1,6 +1,6 @@
/** /**
* SDRangel * SDRangel
* This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time --- * This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time ---
* *
* OpenAPI spec version: 7.0.0 * OpenAPI spec version: 7.0.0
* Contact: f4exb06@gmail.com * Contact: f4exb06@gmail.com
@ -30,6 +30,12 @@ SWGRemoteTCPInputReport::SWGRemoteTCPInputReport(QString* json) {
SWGRemoteTCPInputReport::SWGRemoteTCPInputReport() { SWGRemoteTCPInputReport::SWGRemoteTCPInputReport() {
sample_rate = 0; sample_rate = 0;
m_sample_rate_isSet = false; m_sample_rate_isSet = false;
latitude = 0.0f;
m_latitude_isSet = false;
longitude = 0.0f;
m_longitude_isSet = false;
altitude = 0.0f;
m_altitude_isSet = false;
} }
SWGRemoteTCPInputReport::~SWGRemoteTCPInputReport() { SWGRemoteTCPInputReport::~SWGRemoteTCPInputReport() {
@ -40,11 +46,20 @@ void
SWGRemoteTCPInputReport::init() { SWGRemoteTCPInputReport::init() {
sample_rate = 0; sample_rate = 0;
m_sample_rate_isSet = false; m_sample_rate_isSet = false;
latitude = 0.0f;
m_latitude_isSet = false;
longitude = 0.0f;
m_longitude_isSet = false;
altitude = 0.0f;
m_altitude_isSet = false;
} }
void void
SWGRemoteTCPInputReport::cleanup() { SWGRemoteTCPInputReport::cleanup() {
} }
SWGRemoteTCPInputReport* SWGRemoteTCPInputReport*
@ -59,7 +74,13 @@ SWGRemoteTCPInputReport::fromJson(QString &json) {
void void
SWGRemoteTCPInputReport::fromJsonObject(QJsonObject &pJson) { SWGRemoteTCPInputReport::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&sample_rate, pJson["sampleRate"], "qint32", ""); ::SWGSDRangel::setValue(&sample_rate, pJson["sampleRate"], "qint32", "");
::SWGSDRangel::setValue(&latitude, pJson["latitude"], "float", "");
::SWGSDRangel::setValue(&longitude, pJson["longitude"], "float", "");
::SWGSDRangel::setValue(&altitude, pJson["altitude"], "float", "");
} }
QString QString
@ -79,9 +100,15 @@ SWGRemoteTCPInputReport::asJsonObject() {
if(m_sample_rate_isSet){ if(m_sample_rate_isSet){
obj->insert("sampleRate", QJsonValue(sample_rate)); obj->insert("sampleRate", QJsonValue(sample_rate));
} }
obj->insert("latitude", QJsonValue(latitude)); if(m_latitude_isSet){
obj->insert("longitude", QJsonValue(longitude)); obj->insert("latitude", QJsonValue(latitude));
obj->insert("altitude", QJsonValue(altitude)); }
if(m_longitude_isSet){
obj->insert("longitude", QJsonValue(longitude));
}
if(m_altitude_isSet){
obj->insert("altitude", QJsonValue(altitude));
}
return obj; return obj;
} }
@ -96,6 +123,36 @@ SWGRemoteTCPInputReport::setSampleRate(qint32 sample_rate) {
this->m_sample_rate_isSet = true; this->m_sample_rate_isSet = true;
} }
float
SWGRemoteTCPInputReport::getLatitude() {
return latitude;
}
void
SWGRemoteTCPInputReport::setLatitude(float latitude) {
this->latitude = latitude;
this->m_latitude_isSet = true;
}
float
SWGRemoteTCPInputReport::getLongitude() {
return longitude;
}
void
SWGRemoteTCPInputReport::setLongitude(float longitude) {
this->longitude = longitude;
this->m_longitude_isSet = true;
}
float
SWGRemoteTCPInputReport::getAltitude() {
return altitude;
}
void
SWGRemoteTCPInputReport::setAltitude(float altitude) {
this->altitude = altitude;
this->m_altitude_isSet = true;
}
bool bool
SWGRemoteTCPInputReport::isSet(){ SWGRemoteTCPInputReport::isSet(){
@ -104,6 +161,15 @@ SWGRemoteTCPInputReport::isSet(){
if(m_sample_rate_isSet){ if(m_sample_rate_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }
if(m_latitude_isSet){
isObjectUpdated = true; break;
}
if(m_longitude_isSet){
isObjectUpdated = true; break;
}
if(m_altitude_isSet){
isObjectUpdated = true; break;
}
}while(false); }while(false);
return isObjectUpdated; return isObjectUpdated;
} }

View File

@ -1,6 +1,6 @@
/** /**
* SDRangel * SDRangel
* This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time --- * This is the web REST/JSON API of SDRangel SDR software. SDRangel is an Open Source Qt5/OpenGL 3.0+ (4.3+ in Windows) GUI and server Software Defined Radio and signal analyzer in software. It supports Airspy, BladeRF, HackRF, LimeSDR, PlutoSDR, RTL-SDR, SDRplay RSP1 and FunCube --- Limitations and specifcities: * In SDRangel GUI the first Rx device set cannot be deleted. Conversely the server starts with no device sets and its number of device sets can be reduced to zero by as many calls as necessary to /sdrangel/deviceset with DELETE method. * Preset import and export from/to file is a server only feature. * Device set focus is a GUI only feature. * The following channels are not implemented (status 501 is returned): ATV and DATV demodulators, Channel Analyzer NG, LoRa demodulator * The device settings and report structures contains only the sub-structure corresponding to the device type. The DeviceSettings and DeviceReport structures documented here shows all of them but only one will be or should be present at a time * The channel settings and report structures contains only the sub-structure corresponding to the channel type. The ChannelSettings and ChannelReport structures documented here shows all of them but only one will be or should be present at a time ---
* *
* OpenAPI spec version: 7.0.0 * OpenAPI spec version: 7.0.0
* Contact: f4exb06@gmail.com * Contact: f4exb06@gmail.com
@ -43,21 +43,31 @@ public:
qint32 getSampleRate(); qint32 getSampleRate();
void setSampleRate(qint32 sample_rate); void setSampleRate(qint32 sample_rate);
float getLatitude() { return latitude; }
float getLongitude() { return longitude; } float getLatitude();
float getAltitude() { return altitude; } void setLatitude(float latitude);
void setLatitude(float latitude) { this->latitude = latitude; }
void setLongitude(float longitude) { this->longitude = longitude; } float getLongitude();
void setAltitude(float altitude) { this->altitude = altitude; } void setLongitude(float longitude);
float getAltitude();
void setAltitude(float altitude);
virtual bool isSet() override; virtual bool isSet() override;
private: private:
qint32 sample_rate; qint32 sample_rate;
bool m_sample_rate_isSet; bool m_sample_rate_isSet;
float latitude; float latitude;
bool m_latitude_isSet;
float longitude; float longitude;
bool m_longitude_isSet;
float altitude; float altitude;
bool m_altitude_isSet;
}; };

View File

@ -54,6 +54,10 @@ SWGUSRPInputSettings::SWGUSRPInputSettings() {
m_transverter_mode_isSet = false; m_transverter_mode_isSet = false;
transverter_delta_frequency = 0L; transverter_delta_frequency = 0L;
m_transverter_delta_frequency_isSet = false; m_transverter_delta_frequency_isSet = false;
gpio_dir = 0;
m_gpio_dir_isSet = false;
gpio_pins = 0;
m_gpio_pins_isSet = false;
use_reverse_api = 0; use_reverse_api = 0;
m_use_reverse_api_isSet = false; m_use_reverse_api_isSet = false;
reverse_api_address = nullptr; reverse_api_address = nullptr;
@ -96,6 +100,10 @@ SWGUSRPInputSettings::init() {
m_transverter_mode_isSet = false; m_transverter_mode_isSet = false;
transverter_delta_frequency = 0L; transverter_delta_frequency = 0L;
m_transverter_delta_frequency_isSet = false; m_transverter_delta_frequency_isSet = false;
gpio_dir = 0;
m_gpio_dir_isSet = false;
gpio_pins = 0;
m_gpio_pins_isSet = false;
use_reverse_api = 0; use_reverse_api = 0;
m_use_reverse_api_isSet = false; m_use_reverse_api_isSet = false;
reverse_api_address = new QString(""); reverse_api_address = new QString("");
@ -126,6 +134,8 @@ SWGUSRPInputSettings::cleanup() {
if(reverse_api_address != nullptr) { if(reverse_api_address != nullptr) {
delete reverse_api_address; delete reverse_api_address;
} }
@ -170,6 +180,10 @@ SWGUSRPInputSettings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&transverter_delta_frequency, pJson["transverterDeltaFrequency"], "qint64", ""); ::SWGSDRangel::setValue(&transverter_delta_frequency, pJson["transverterDeltaFrequency"], "qint64", "");
::SWGSDRangel::setValue(&gpio_dir, pJson["gpioDir"], "qint32", "");
::SWGSDRangel::setValue(&gpio_pins, pJson["gpioPins"], "qint32", "");
::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", ""); ::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", "");
::SWGSDRangel::setValue(&reverse_api_address, pJson["reverseAPIAddress"], "QString", "QString"); ::SWGSDRangel::setValue(&reverse_api_address, pJson["reverseAPIAddress"], "QString", "QString");
@ -233,6 +247,12 @@ SWGUSRPInputSettings::asJsonObject() {
if(m_transverter_delta_frequency_isSet){ if(m_transverter_delta_frequency_isSet){
obj->insert("transverterDeltaFrequency", QJsonValue(transverter_delta_frequency)); obj->insert("transverterDeltaFrequency", QJsonValue(transverter_delta_frequency));
} }
if(m_gpio_dir_isSet){
obj->insert("gpioDir", QJsonValue(gpio_dir));
}
if(m_gpio_pins_isSet){
obj->insert("gpioPins", QJsonValue(gpio_pins));
}
if(m_use_reverse_api_isSet){ if(m_use_reverse_api_isSet){
obj->insert("useReverseAPI", QJsonValue(use_reverse_api)); obj->insert("useReverseAPI", QJsonValue(use_reverse_api));
} }
@ -379,6 +399,26 @@ SWGUSRPInputSettings::setTransverterDeltaFrequency(qint64 transverter_delta_freq
this->m_transverter_delta_frequency_isSet = true; this->m_transverter_delta_frequency_isSet = true;
} }
qint32
SWGUSRPInputSettings::getGpioDir() {
return gpio_dir;
}
void
SWGUSRPInputSettings::setGpioDir(qint32 gpio_dir) {
this->gpio_dir = gpio_dir;
this->m_gpio_dir_isSet = true;
}
qint32
SWGUSRPInputSettings::getGpioPins() {
return gpio_pins;
}
void
SWGUSRPInputSettings::setGpioPins(qint32 gpio_pins) {
this->gpio_pins = gpio_pins;
this->m_gpio_pins_isSet = true;
}
qint32 qint32
SWGUSRPInputSettings::getUseReverseApi() { SWGUSRPInputSettings::getUseReverseApi() {
return use_reverse_api; return use_reverse_api;
@ -463,6 +503,12 @@ SWGUSRPInputSettings::isSet(){
if(m_transverter_delta_frequency_isSet){ if(m_transverter_delta_frequency_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }
if(m_gpio_dir_isSet){
isObjectUpdated = true; break;
}
if(m_gpio_pins_isSet){
isObjectUpdated = true; break;
}
if(m_use_reverse_api_isSet){ if(m_use_reverse_api_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }

View File

@ -81,6 +81,12 @@ public:
qint64 getTransverterDeltaFrequency(); qint64 getTransverterDeltaFrequency();
void setTransverterDeltaFrequency(qint64 transverter_delta_frequency); void setTransverterDeltaFrequency(qint64 transverter_delta_frequency);
qint32 getGpioDir();
void setGpioDir(qint32 gpio_dir);
qint32 getGpioPins();
void setGpioPins(qint32 gpio_pins);
qint32 getUseReverseApi(); qint32 getUseReverseApi();
void setUseReverseApi(qint32 use_reverse_api); void setUseReverseApi(qint32 use_reverse_api);
@ -136,6 +142,12 @@ private:
qint64 transverter_delta_frequency; qint64 transverter_delta_frequency;
bool m_transverter_delta_frequency_isSet; bool m_transverter_delta_frequency_isSet;
qint32 gpio_dir;
bool m_gpio_dir_isSet;
qint32 gpio_pins;
bool m_gpio_pins_isSet;
qint32 use_reverse_api; qint32 use_reverse_api;
bool m_use_reverse_api_isSet; bool m_use_reverse_api_isSet;

View File

@ -48,6 +48,10 @@ SWGUSRPOutputSettings::SWGUSRPOutputSettings() {
m_transverter_mode_isSet = false; m_transverter_mode_isSet = false;
transverter_delta_frequency = 0L; transverter_delta_frequency = 0L;
m_transverter_delta_frequency_isSet = false; m_transverter_delta_frequency_isSet = false;
gpio_dir = 0;
m_gpio_dir_isSet = false;
gpio_pins = 0;
m_gpio_pins_isSet = false;
use_reverse_api = 0; use_reverse_api = 0;
m_use_reverse_api_isSet = false; m_use_reverse_api_isSet = false;
reverse_api_address = nullptr; reverse_api_address = nullptr;
@ -84,6 +88,10 @@ SWGUSRPOutputSettings::init() {
m_transverter_mode_isSet = false; m_transverter_mode_isSet = false;
transverter_delta_frequency = 0L; transverter_delta_frequency = 0L;
m_transverter_delta_frequency_isSet = false; m_transverter_delta_frequency_isSet = false;
gpio_dir = 0;
m_gpio_dir_isSet = false;
gpio_pins = 0;
m_gpio_pins_isSet = false;
use_reverse_api = 0; use_reverse_api = 0;
m_use_reverse_api_isSet = false; m_use_reverse_api_isSet = false;
reverse_api_address = new QString(""); reverse_api_address = new QString("");
@ -111,6 +119,8 @@ SWGUSRPOutputSettings::cleanup() {
if(reverse_api_address != nullptr) { if(reverse_api_address != nullptr) {
delete reverse_api_address; delete reverse_api_address;
} }
@ -149,6 +159,10 @@ SWGUSRPOutputSettings::fromJsonObject(QJsonObject &pJson) {
::SWGSDRangel::setValue(&transverter_delta_frequency, pJson["transverterDeltaFrequency"], "qint64", ""); ::SWGSDRangel::setValue(&transverter_delta_frequency, pJson["transverterDeltaFrequency"], "qint64", "");
::SWGSDRangel::setValue(&gpio_dir, pJson["gpioDir"], "qint32", "");
::SWGSDRangel::setValue(&gpio_pins, pJson["gpioPins"], "qint32", "");
::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", ""); ::SWGSDRangel::setValue(&use_reverse_api, pJson["useReverseAPI"], "qint32", "");
::SWGSDRangel::setValue(&reverse_api_address, pJson["reverseAPIAddress"], "QString", "QString"); ::SWGSDRangel::setValue(&reverse_api_address, pJson["reverseAPIAddress"], "QString", "QString");
@ -203,6 +217,12 @@ SWGUSRPOutputSettings::asJsonObject() {
if(m_transverter_delta_frequency_isSet){ if(m_transverter_delta_frequency_isSet){
obj->insert("transverterDeltaFrequency", QJsonValue(transverter_delta_frequency)); obj->insert("transverterDeltaFrequency", QJsonValue(transverter_delta_frequency));
} }
if(m_gpio_dir_isSet){
obj->insert("gpioDir", QJsonValue(gpio_dir));
}
if(m_gpio_pins_isSet){
obj->insert("gpioPins", QJsonValue(gpio_pins));
}
if(m_use_reverse_api_isSet){ if(m_use_reverse_api_isSet){
obj->insert("useReverseAPI", QJsonValue(use_reverse_api)); obj->insert("useReverseAPI", QJsonValue(use_reverse_api));
} }
@ -319,6 +339,26 @@ SWGUSRPOutputSettings::setTransverterDeltaFrequency(qint64 transverter_delta_fre
this->m_transverter_delta_frequency_isSet = true; this->m_transverter_delta_frequency_isSet = true;
} }
qint32
SWGUSRPOutputSettings::getGpioDir() {
return gpio_dir;
}
void
SWGUSRPOutputSettings::setGpioDir(qint32 gpio_dir) {
this->gpio_dir = gpio_dir;
this->m_gpio_dir_isSet = true;
}
qint32
SWGUSRPOutputSettings::getGpioPins() {
return gpio_pins;
}
void
SWGUSRPOutputSettings::setGpioPins(qint32 gpio_pins) {
this->gpio_pins = gpio_pins;
this->m_gpio_pins_isSet = true;
}
qint32 qint32
SWGUSRPOutputSettings::getUseReverseApi() { SWGUSRPOutputSettings::getUseReverseApi() {
return use_reverse_api; return use_reverse_api;
@ -394,6 +434,12 @@ SWGUSRPOutputSettings::isSet(){
if(m_transverter_delta_frequency_isSet){ if(m_transverter_delta_frequency_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }
if(m_gpio_dir_isSet){
isObjectUpdated = true; break;
}
if(m_gpio_pins_isSet){
isObjectUpdated = true; break;
}
if(m_use_reverse_api_isSet){ if(m_use_reverse_api_isSet){
isObjectUpdated = true; break; isObjectUpdated = true; break;
} }

View File

@ -72,6 +72,12 @@ public:
qint64 getTransverterDeltaFrequency(); qint64 getTransverterDeltaFrequency();
void setTransverterDeltaFrequency(qint64 transverter_delta_frequency); void setTransverterDeltaFrequency(qint64 transverter_delta_frequency);
qint32 getGpioDir();
void setGpioDir(qint32 gpio_dir);
qint32 getGpioPins();
void setGpioPins(qint32 gpio_pins);
qint32 getUseReverseApi(); qint32 getUseReverseApi();
void setUseReverseApi(qint32 use_reverse_api); void setUseReverseApi(qint32 use_reverse_api);
@ -118,6 +124,12 @@ private:
qint64 transverter_delta_frequency; qint64 transverter_delta_frequency;
bool m_transverter_delta_frequency_isSet; bool m_transverter_delta_frequency_isSet;
qint32 gpio_dir;
bool m_gpio_dir_isSet;
qint32 gpio_pins;
bool m_gpio_pins_isSet;
qint32 use_reverse_api; qint32 use_reverse_api;
bool m_use_reverse_api_isSet; bool m_use_reverse_api_isSet;