mirror of
https://github.com/f4exb/sdrangel.git
synced 2025-03-28 15:19:04 -04:00
AIS mod: make it effectively work in server mode with remote control. AIS demod: added baud rate in settings API
This commit is contained in:
parent
af97c872f8
commit
006da4e872
@ -233,6 +233,9 @@ void AISDemod::applySettings(const AISDemodSettings& settings, bool force)
|
|||||||
|
|
||||||
QList<QString> reverseAPIKeys;
|
QList<QString> reverseAPIKeys;
|
||||||
|
|
||||||
|
if ((settings.m_baud != m_settings.m_baud) || force) {
|
||||||
|
reverseAPIKeys.append("baud");
|
||||||
|
}
|
||||||
if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) {
|
if ((settings.m_inputFrequencyOffset != m_settings.m_inputFrequencyOffset) || force) {
|
||||||
reverseAPIKeys.append("inputFrequencyOffset");
|
reverseAPIKeys.append("inputFrequencyOffset");
|
||||||
}
|
}
|
||||||
@ -404,6 +407,9 @@ void AISDemod::webapiUpdateChannelSettings(
|
|||||||
const QStringList& channelSettingsKeys,
|
const QStringList& channelSettingsKeys,
|
||||||
SWGSDRangel::SWGChannelSettings& response)
|
SWGSDRangel::SWGChannelSettings& response)
|
||||||
{
|
{
|
||||||
|
if (channelSettingsKeys.contains("baud")) {
|
||||||
|
settings.m_baud = response.getAisDemodSettings()->getBaud();
|
||||||
|
}
|
||||||
if (channelSettingsKeys.contains("inputFrequencyOffset")) {
|
if (channelSettingsKeys.contains("inputFrequencyOffset")) {
|
||||||
settings.m_inputFrequencyOffset = response.getAisDemodSettings()->getInputFrequencyOffset();
|
settings.m_inputFrequencyOffset = response.getAisDemodSettings()->getInputFrequencyOffset();
|
||||||
}
|
}
|
||||||
@ -462,6 +468,7 @@ void AISDemod::webapiUpdateChannelSettings(
|
|||||||
|
|
||||||
void AISDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const AISDemodSettings& settings)
|
void AISDemod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& response, const AISDemodSettings& settings)
|
||||||
{
|
{
|
||||||
|
response.getAisDemodSettings()->setBaud(settings.m_baud);
|
||||||
response.getAisDemodSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset);
|
response.getAisDemodSettings()->setInputFrequencyOffset(settings.m_inputFrequencyOffset);
|
||||||
response.getAisDemodSettings()->setRfBandwidth(settings.m_rfBandwidth);
|
response.getAisDemodSettings()->setRfBandwidth(settings.m_rfBandwidth);
|
||||||
response.getAisDemodSettings()->setFmDeviation(settings.m_fmDeviation);
|
response.getAisDemodSettings()->setFmDeviation(settings.m_fmDeviation);
|
||||||
@ -535,6 +542,9 @@ void AISDemod::webapiFormatChannelSettings(
|
|||||||
|
|
||||||
// transfer data that has been modified. When force is on transfer all data except reverse API data
|
// transfer data that has been modified. When force is on transfer all data except reverse API data
|
||||||
|
|
||||||
|
if (channelSettingsKeys.contains("baud") || force) {
|
||||||
|
swgAISDemodSettings->setBaud(settings.m_baud);
|
||||||
|
}
|
||||||
if (channelSettingsKeys.contains("fmDeviation") || force) {
|
if (channelSettingsKeys.contains("fmDeviation") || force) {
|
||||||
swgAISDemodSettings->setFmDeviation(settings.m_fmDeviation);
|
swgAISDemodSettings->setFmDeviation(settings.m_fmDeviation);
|
||||||
}
|
}
|
||||||
|
@ -89,9 +89,9 @@ QByteArray AISDemodSettings::serialize() const
|
|||||||
s.writeU32(19, m_reverseAPIDeviceIndex);
|
s.writeU32(19, m_reverseAPIDeviceIndex);
|
||||||
s.writeU32(20, m_reverseAPIChannelIndex);
|
s.writeU32(20, m_reverseAPIChannelIndex);
|
||||||
s.writeBlob(21, m_scopeGUI->serialize());
|
s.writeBlob(21, m_scopeGUI->serialize());
|
||||||
|
|
||||||
s.writeString(22, m_logFilename);
|
s.writeString(22, m_logFilename);
|
||||||
s.writeBool(23, m_logEnabled);
|
s.writeBool(23, m_logEnabled);
|
||||||
|
s.writeS32(24, m_baud);
|
||||||
|
|
||||||
for (int i = 0; i < AISDEMOD_MESSAGE_COLUMNS; i++)
|
for (int i = 0; i < AISDEMOD_MESSAGE_COLUMNS; i++)
|
||||||
s.writeS32(100 + i, m_messageColumnIndexes[i]);
|
s.writeS32(100 + i, m_messageColumnIndexes[i]);
|
||||||
@ -161,6 +161,7 @@ bool AISDemodSettings::deserialize(const QByteArray& data)
|
|||||||
|
|
||||||
d.readString(22, &m_logFilename, "ais_log.csv");
|
d.readString(22, &m_logFilename, "ais_log.csv");
|
||||||
d.readBool(23, &m_logEnabled, false);
|
d.readBool(23, &m_logEnabled, false);
|
||||||
|
d.readS32(24, &m_baud, 9600);
|
||||||
|
|
||||||
for (int i = 0; i < AISDEMOD_MESSAGE_COLUMNS; i++)
|
for (int i = 0; i < AISDEMOD_MESSAGE_COLUMNS; i++)
|
||||||
d.readS32(100 + i, &m_messageColumnIndexes[i], i);
|
d.readS32(100 + i, &m_messageColumnIndexes[i], i);
|
||||||
|
@ -45,7 +45,9 @@
|
|||||||
#include "aismod.h"
|
#include "aismod.h"
|
||||||
|
|
||||||
MESSAGE_CLASS_DEFINITION(AISMod::MsgConfigureAISMod, Message)
|
MESSAGE_CLASS_DEFINITION(AISMod::MsgConfigureAISMod, Message)
|
||||||
MESSAGE_CLASS_DEFINITION(AISMod::MsgTXAISMod, Message)
|
MESSAGE_CLASS_DEFINITION(AISMod::MsgReportData, Message)
|
||||||
|
MESSAGE_CLASS_DEFINITION(AISMod::MsgTx, Message)
|
||||||
|
MESSAGE_CLASS_DEFINITION(AISMod::MsgEncode, Message)
|
||||||
MESSAGE_CLASS_DEFINITION(AISMod::MsgTXPacketBytes, Message)
|
MESSAGE_CLASS_DEFINITION(AISMod::MsgTXPacketBytes, Message)
|
||||||
|
|
||||||
const char* const AISMod::m_channelIdURI = "sdrangel.channel.modais";
|
const char* const AISMod::m_channelIdURI = "sdrangel.channel.modais";
|
||||||
@ -117,15 +119,21 @@ bool AISMod::handleMessage(const Message& cmd)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (MsgTXAISMod::match(cmd))
|
else if (MsgTx::match(cmd))
|
||||||
{
|
{
|
||||||
// Forward a copy to baseband
|
// Forward a copy to baseband
|
||||||
MsgTXAISMod* rep = new MsgTXAISMod((MsgTXAISMod&)cmd);
|
MsgTx* rep = new MsgTx((MsgTx&)cmd);
|
||||||
qDebug() << "AISMod::handleMessage: MsgTXAISMod";
|
qDebug() << "AISMod::handleMessage: MsgTx";
|
||||||
m_basebandSource->getInputMessageQueue()->push(rep);
|
m_basebandSource->getInputMessageQueue()->push(rep);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (MsgEncode::match(cmd))
|
||||||
|
{
|
||||||
|
qDebug() << "AISMod::handleMessage: MsgEncode";
|
||||||
|
encode();
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else if (DSPSignalNotification::match(cmd))
|
else if (DSPSignalNotification::match(cmd))
|
||||||
{
|
{
|
||||||
// Forward to the source
|
// Forward to the source
|
||||||
@ -153,6 +161,118 @@ ScopeVis *AISMod::getScopeSink()
|
|||||||
return m_basebandSource->getScopeSink();
|
return m_basebandSource->getScopeSink();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Convert decimal degrees to 1/10000 minutes
|
||||||
|
int AISMod::degToMinFracs(float decimal)
|
||||||
|
{
|
||||||
|
return std::round(decimal * 60.0f * 10000.0f);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AISMod::encode()
|
||||||
|
{
|
||||||
|
unsigned char bytes[168/8];
|
||||||
|
int mmsi;
|
||||||
|
int latitude;
|
||||||
|
int longitude;
|
||||||
|
|
||||||
|
mmsi = m_settings.m_mmsi.toInt();
|
||||||
|
|
||||||
|
latitude = degToMinFracs(m_settings.m_latitude);
|
||||||
|
longitude = degToMinFracs(m_settings.m_longitude);
|
||||||
|
|
||||||
|
if (m_settings.getMsgId() == 4)
|
||||||
|
{
|
||||||
|
// Base station report
|
||||||
|
QDateTime currentDateTime = QDateTime::currentDateTimeUtc();
|
||||||
|
QDate currentDate = currentDateTime.date();
|
||||||
|
QTime currentTime = currentDateTime.time();
|
||||||
|
|
||||||
|
int year = currentDate.year();
|
||||||
|
int month = currentDate.month();
|
||||||
|
int day = currentDate.day();
|
||||||
|
int hour = currentTime.hour();
|
||||||
|
int minute = currentTime.minute();
|
||||||
|
int second = currentTime.second();
|
||||||
|
|
||||||
|
bytes[0] = (m_settings.getMsgId() << 2); // Repeat indicator = 0
|
||||||
|
bytes[1] = (mmsi >> 22) & 0xff;
|
||||||
|
bytes[2] = (mmsi >> 14) & 0xff;
|
||||||
|
bytes[3] = (mmsi >> 6) & 0xff;
|
||||||
|
bytes[4] = ((mmsi & 0x3f) << 2) | ((year >> 12) & 0x3);
|
||||||
|
bytes[5] = (year >> 4) & 0xff;
|
||||||
|
bytes[6] = ((year & 0xf) << 4) | month;
|
||||||
|
bytes[7] = (day << 3) | ((hour >> 2) & 0x7);
|
||||||
|
bytes[8] = ((hour & 0x3) << 6) | minute;
|
||||||
|
bytes[9] = (second << 2) | (0 << 1) | ((longitude >> 27) & 1);
|
||||||
|
bytes[10] = (longitude >> 19) & 0xff;
|
||||||
|
bytes[11] = (longitude >> 11) & 0xff;
|
||||||
|
bytes[12] = (longitude >> 3) & 0xff;
|
||||||
|
bytes[13] = ((longitude & 0x7) << 5) | ((latitude >> 22) & 0x1f);
|
||||||
|
bytes[14] = (latitude >> 14) & 0xff;
|
||||||
|
bytes[15] = (latitude >> 6) & 0xff;
|
||||||
|
bytes[16] = ((latitude & 0x3f) << 2);
|
||||||
|
bytes[17] = 0;
|
||||||
|
bytes[18] = 0;
|
||||||
|
bytes[19] = 0;
|
||||||
|
bytes[20] = 0;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
// Position report
|
||||||
|
int status;
|
||||||
|
int rateOfTurn = 0x80; // Not available as not currently in GUI
|
||||||
|
int speedOverGround;
|
||||||
|
int courseOverGround;
|
||||||
|
int timestamp;
|
||||||
|
|
||||||
|
timestamp = QDateTime::currentDateTimeUtc().time().second();
|
||||||
|
|
||||||
|
if (m_settings.m_speed >= 102.2)
|
||||||
|
speedOverGround = 1022;
|
||||||
|
else
|
||||||
|
speedOverGround = std::round(m_settings.m_speed * 10.0);
|
||||||
|
|
||||||
|
courseOverGround = std::floor(m_settings.m_course * 10.0);
|
||||||
|
|
||||||
|
if (m_settings.m_status == AISModSettings::StatusNotDefined) // Not defined (last in combo box)
|
||||||
|
status = 15;
|
||||||
|
else
|
||||||
|
status = (int) m_settings.m_status;
|
||||||
|
|
||||||
|
bytes[0] = (m_settings.getMsgId() << 2); // Repeat indicator = 0
|
||||||
|
|
||||||
|
bytes[1] = (mmsi >> 22) & 0xff;
|
||||||
|
bytes[2] = (mmsi >> 14) & 0xff;
|
||||||
|
bytes[3] = (mmsi >> 6) & 0xff;
|
||||||
|
bytes[4] = ((mmsi & 0x3f) << 2) | (status >> 2);
|
||||||
|
|
||||||
|
bytes[5] = ((status & 0x3) << 6) | ((rateOfTurn >> 2) & 0x3f);
|
||||||
|
bytes[6] = ((rateOfTurn & 0x3) << 6) | ((speedOverGround >> 4) & 0x3f);
|
||||||
|
bytes[7] = ((speedOverGround & 0xf) << 4) | (0 << 3) | ((longitude >> 25) & 0x7); // Position accuracy = 0
|
||||||
|
bytes[8] = (longitude >> 17) & 0xff;
|
||||||
|
bytes[9] = (longitude >> 9) & 0xff;
|
||||||
|
bytes[10] = (longitude >> 1) & 0xff;
|
||||||
|
bytes[11] = ((longitude & 0x1) << 7) | ((latitude >> 20) & 0x7f);
|
||||||
|
bytes[12] = (latitude >> 12) & 0xff;
|
||||||
|
bytes[13] = (latitude >> 4) & 0xff;
|
||||||
|
bytes[14] = ((latitude & 0xf) << 4) | ((courseOverGround >> 8) & 0xf);
|
||||||
|
bytes[15] = courseOverGround & 0xff;
|
||||||
|
bytes[16] = ((m_settings.m_heading >> 1) & 0xff);
|
||||||
|
bytes[17] = ((m_settings.m_heading & 0x1) << 7) | ((timestamp & 0x3f) << 1);
|
||||||
|
bytes[18] = 0;
|
||||||
|
bytes[19] = 0;
|
||||||
|
bytes[20] = 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
QByteArray ba((const char *)bytes, sizeof(bytes));
|
||||||
|
m_settings.m_data = ba.toHex();
|
||||||
|
|
||||||
|
if (getMessageQueueToGUI())
|
||||||
|
{
|
||||||
|
MsgReportData *msg = MsgReportData::create(m_settings.m_data);
|
||||||
|
getMessageQueueToGUI()->push(msg);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void AISMod::applySettings(const AISModSettings& settings, bool force)
|
void AISMod::applySettings(const AISModSettings& settings, bool force)
|
||||||
{
|
{
|
||||||
qDebug() << "AISMod::applySettings:"
|
qDebug() << "AISMod::applySettings:"
|
||||||
@ -197,6 +317,10 @@ void AISMod::applySettings(const AISModSettings& settings, bool force)
|
|||||||
reverseAPIKeys.append("repeat");
|
reverseAPIKeys.append("repeat");
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((settings.m_baud != m_settings.m_baud) || force) {
|
||||||
|
reverseAPIKeys.append("baud");
|
||||||
|
}
|
||||||
|
|
||||||
if ((settings.m_repeatDelay != m_settings.m_repeatDelay) || force) {
|
if ((settings.m_repeatDelay != m_settings.m_repeatDelay) || force) {
|
||||||
reverseAPIKeys.append("repeatDelay");
|
reverseAPIKeys.append("repeatDelay");
|
||||||
}
|
}
|
||||||
@ -225,8 +349,8 @@ void AISMod::applySettings(const AISModSettings& settings, bool force)
|
|||||||
reverseAPIKeys.append("writeToFile");
|
reverseAPIKeys.append("writeToFile");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((settings.m_msgId != m_settings.m_msgId) || force) {
|
if ((settings.m_msgType != m_settings.m_msgType) || force) {
|
||||||
reverseAPIKeys.append("msgId");
|
reverseAPIKeys.append("msgType");
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((settings.m_mmsi != m_settings.m_mmsi) || force) {
|
if ((settings.m_mmsi != m_settings.m_mmsi) || force) {
|
||||||
@ -426,6 +550,9 @@ void AISMod::webapiUpdateChannelSettings(
|
|||||||
if (channelSettingsKeys.contains("repeat")) {
|
if (channelSettingsKeys.contains("repeat")) {
|
||||||
settings.m_repeat = response.getAisModSettings()->getRepeat() != 0;
|
settings.m_repeat = response.getAisModSettings()->getRepeat() != 0;
|
||||||
}
|
}
|
||||||
|
if (channelSettingsKeys.contains("baud")) {
|
||||||
|
settings.m_baud = response.getAisModSettings()->getBaud();
|
||||||
|
}
|
||||||
if (channelSettingsKeys.contains("repeatDelay")) {
|
if (channelSettingsKeys.contains("repeatDelay")) {
|
||||||
settings.m_repeatDelay = response.getAisModSettings()->getRepeatDelay();
|
settings.m_repeatDelay = response.getAisModSettings()->getRepeatDelay();
|
||||||
}
|
}
|
||||||
@ -447,11 +574,14 @@ void AISMod::webapiUpdateChannelSettings(
|
|||||||
if (channelSettingsKeys.contains("writeToFile")) {
|
if (channelSettingsKeys.contains("writeToFile")) {
|
||||||
settings.m_writeToFile = response.getAisModSettings()->getWriteToFile() != 0;
|
settings.m_writeToFile = response.getAisModSettings()->getWriteToFile() != 0;
|
||||||
}
|
}
|
||||||
|
if (channelSettingsKeys.contains("msgType")) {
|
||||||
|
settings.m_msgType = (AISModSettings::MsgType) response.getAisModSettings()->getMsgType();
|
||||||
|
}
|
||||||
if (channelSettingsKeys.contains("mmsi")) {
|
if (channelSettingsKeys.contains("mmsi")) {
|
||||||
settings.m_mmsi = *response.getAisModSettings()->getMmsi();
|
settings.m_mmsi = *response.getAisModSettings()->getMmsi();
|
||||||
}
|
}
|
||||||
if (channelSettingsKeys.contains("status")) {
|
if (channelSettingsKeys.contains("status")) {
|
||||||
settings.m_status = response.getAisModSettings()->getStatus();
|
settings.m_status = (AISModSettings::Status) response.getAisModSettings()->getStatus();
|
||||||
}
|
}
|
||||||
if (channelSettingsKeys.contains("latitude")) {
|
if (channelSettingsKeys.contains("latitude")) {
|
||||||
settings.m_latitude = response.getAisModSettings()->getLatitude();
|
settings.m_latitude = response.getAisModSettings()->getLatitude();
|
||||||
@ -532,23 +662,25 @@ int AISMod::webapiActionsPost(
|
|||||||
|
|
||||||
if (swgAISModActions)
|
if (swgAISModActions)
|
||||||
{
|
{
|
||||||
|
if (channelActionsKeys.contains("encode"))
|
||||||
|
{
|
||||||
|
if (swgAISModActions->getEncode() != 0)
|
||||||
|
{
|
||||||
|
AISMod::MsgEncode *msg = AISMod::MsgEncode::create();
|
||||||
|
getInputMessageQueue()->push(msg);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 202;
|
||||||
|
}
|
||||||
if (channelActionsKeys.contains("tx"))
|
if (channelActionsKeys.contains("tx"))
|
||||||
{
|
{
|
||||||
SWGSDRangel::SWGAISModActions_tx* tx = swgAISModActions->getTx();
|
if (swgAISModActions->getTx() != 0)
|
||||||
QString *dataP = tx->getData();
|
|
||||||
if (dataP)
|
|
||||||
{
|
{
|
||||||
QString data(*dataP);
|
AISMod::MsgTx *msg = AISMod::MsgTx::create();
|
||||||
|
|
||||||
AISMod::MsgTXAISMod *msg = AISMod::MsgTXAISMod::create(data);
|
|
||||||
m_basebandSource->getInputMessageQueue()->push(msg);
|
m_basebandSource->getInputMessageQueue()->push(msg);
|
||||||
return 202;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
errorMessage = "Message must contain data";
|
|
||||||
return 400;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return 202;
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
@ -571,6 +703,7 @@ void AISMod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& respon
|
|||||||
response.getAisModSettings()->setRfBandwidth(settings.m_rfBandwidth);
|
response.getAisModSettings()->setRfBandwidth(settings.m_rfBandwidth);
|
||||||
response.getAisModSettings()->setGain(settings.m_gain);
|
response.getAisModSettings()->setGain(settings.m_gain);
|
||||||
response.getAisModSettings()->setChannelMute(settings.m_channelMute ? 1 : 0);
|
response.getAisModSettings()->setChannelMute(settings.m_channelMute ? 1 : 0);
|
||||||
|
response.getAisModSettings()->setBaud(settings.m_baud);
|
||||||
response.getAisModSettings()->setRepeat(settings.m_repeat ? 1 : 0);
|
response.getAisModSettings()->setRepeat(settings.m_repeat ? 1 : 0);
|
||||||
response.getAisModSettings()->setRepeatDelay(settings.m_repeatDelay);
|
response.getAisModSettings()->setRepeatDelay(settings.m_repeatDelay);
|
||||||
response.getAisModSettings()->setRepeatCount(settings.m_repeatCount);
|
response.getAisModSettings()->setRepeatCount(settings.m_repeatCount);
|
||||||
@ -579,13 +712,14 @@ void AISMod::webapiFormatChannelSettings(SWGSDRangel::SWGChannelSettings& respon
|
|||||||
response.getAisModSettings()->setRampRange(settings.m_rampRange);
|
response.getAisModSettings()->setRampRange(settings.m_rampRange);
|
||||||
response.getAisModSettings()->setRfNoise(settings.m_rfNoise ? 1 : 0);
|
response.getAisModSettings()->setRfNoise(settings.m_rfNoise ? 1 : 0);
|
||||||
response.getAisModSettings()->setWriteToFile(settings.m_writeToFile ? 1 : 0);
|
response.getAisModSettings()->setWriteToFile(settings.m_writeToFile ? 1 : 0);
|
||||||
|
response.getAisModSettings()->setMsgType((int) settings.m_msgType);
|
||||||
|
|
||||||
if (response.getAisModSettings()->getMmsi()) {
|
if (response.getAisModSettings()->getMmsi()) {
|
||||||
*response.getAisModSettings()->getMmsi() = settings.m_mmsi;
|
*response.getAisModSettings()->getMmsi() = settings.m_mmsi;
|
||||||
} else {
|
} else {
|
||||||
response.getAisModSettings()->setMmsi(new QString(settings.m_mmsi));
|
response.getAisModSettings()->setMmsi(new QString(settings.m_mmsi));
|
||||||
}
|
}
|
||||||
response.getAisModSettings()->setStatus(settings.m_status);
|
response.getAisModSettings()->setStatus((int) settings.m_status);
|
||||||
response.getAisModSettings()->setLatitude(settings.m_latitude);
|
response.getAisModSettings()->setLatitude(settings.m_latitude);
|
||||||
response.getAisModSettings()->setLongitude(settings.m_longitude);
|
response.getAisModSettings()->setLongitude(settings.m_longitude);
|
||||||
response.getAisModSettings()->setCourse(settings.m_course);
|
response.getAisModSettings()->setCourse(settings.m_course);
|
||||||
@ -709,6 +843,9 @@ void AISMod::webapiFormatChannelSettings(
|
|||||||
if (channelSettingsKeys.contains("channelMute") || force) {
|
if (channelSettingsKeys.contains("channelMute") || force) {
|
||||||
swgAISModSettings->setChannelMute(settings.m_channelMute ? 1 : 0);
|
swgAISModSettings->setChannelMute(settings.m_channelMute ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
if (channelSettingsKeys.contains("baud") || force) {
|
||||||
|
swgAISModSettings->setBaud(settings.m_baud);
|
||||||
|
}
|
||||||
if (channelSettingsKeys.contains("repeat") || force) {
|
if (channelSettingsKeys.contains("repeat") || force) {
|
||||||
swgAISModSettings->setRepeat(settings.m_repeat ? 1 : 0);
|
swgAISModSettings->setRepeat(settings.m_repeat ? 1 : 0);
|
||||||
}
|
}
|
||||||
@ -733,11 +870,14 @@ void AISMod::webapiFormatChannelSettings(
|
|||||||
if (channelSettingsKeys.contains("writeToFile")) {
|
if (channelSettingsKeys.contains("writeToFile")) {
|
||||||
swgAISModSettings->setWriteToFile(settings.m_writeToFile ? 1 : 0);
|
swgAISModSettings->setWriteToFile(settings.m_writeToFile ? 1 : 0);
|
||||||
}
|
}
|
||||||
|
if (channelSettingsKeys.contains("msgType")) {
|
||||||
|
swgAISModSettings->setMsgType((int) settings.m_msgType);
|
||||||
|
}
|
||||||
if (channelSettingsKeys.contains("mmsi")) {
|
if (channelSettingsKeys.contains("mmsi")) {
|
||||||
swgAISModSettings->setMmsi(new QString(settings.m_mmsi));
|
swgAISModSettings->setMmsi(new QString(settings.m_mmsi));
|
||||||
}
|
}
|
||||||
if (channelSettingsKeys.contains("status")) {
|
if (channelSettingsKeys.contains("status")) {
|
||||||
swgAISModSettings->setStatus(settings.m_status);
|
swgAISModSettings->setStatus((int) settings.m_status);
|
||||||
}
|
}
|
||||||
if (channelSettingsKeys.contains("latitude")) {
|
if (channelSettingsKeys.contains("latitude")) {
|
||||||
swgAISModSettings->setLatitude(settings.m_latitude);
|
swgAISModSettings->setLatitude(settings.m_latitude);
|
||||||
|
@ -66,22 +66,49 @@ public:
|
|||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
class MsgTXAISMod : public Message {
|
class MsgReportData : public Message {
|
||||||
MESSAGE_CLASS_DECLARATION
|
MESSAGE_CLASS_DECLARATION
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static MsgTXAISMod* create(QString data)
|
static MsgReportData* create(const QString& data) {
|
||||||
{
|
return new MsgReportData(data);
|
||||||
return new MsgTXAISMod(data);
|
|
||||||
}
|
}
|
||||||
|
const QString& getData() const { return m_data; }
|
||||||
|
|
||||||
|
private:
|
||||||
QString m_data;
|
QString m_data;
|
||||||
|
|
||||||
private:
|
MsgReportData(const QString& data) :
|
||||||
|
|
||||||
MsgTXAISMod(QString data) :
|
|
||||||
Message(),
|
Message(),
|
||||||
m_data(data)
|
m_data(data)
|
||||||
|
{}
|
||||||
|
};
|
||||||
|
|
||||||
|
class MsgTx : public Message {
|
||||||
|
MESSAGE_CLASS_DECLARATION
|
||||||
|
|
||||||
|
public:
|
||||||
|
static MsgTx* create() {
|
||||||
|
return new MsgTx();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
MsgTx() :
|
||||||
|
Message()
|
||||||
|
{ }
|
||||||
|
};
|
||||||
|
|
||||||
|
class MsgEncode : public Message {
|
||||||
|
MESSAGE_CLASS_DECLARATION
|
||||||
|
|
||||||
|
public:
|
||||||
|
static MsgEncode* create() {
|
||||||
|
return new MsgEncode();
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
MsgEncode() :
|
||||||
|
Message()
|
||||||
{ }
|
{ }
|
||||||
};
|
};
|
||||||
|
|
||||||
@ -89,8 +116,7 @@ public:
|
|||||||
MESSAGE_CLASS_DECLARATION
|
MESSAGE_CLASS_DECLARATION
|
||||||
|
|
||||||
public:
|
public:
|
||||||
static MsgTXPacketBytes* create(QByteArray data)
|
static MsgTXPacketBytes* create(const QByteArray& data) {
|
||||||
{
|
|
||||||
return new MsgTXPacketBytes(data);
|
return new MsgTXPacketBytes(data);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -98,7 +124,7 @@ public:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
MsgTXPacketBytes(QByteArray data) :
|
MsgTXPacketBytes(const QByteArray& data) :
|
||||||
Message(),
|
Message(),
|
||||||
m_data(data)
|
m_data(data)
|
||||||
{ }
|
{ }
|
||||||
@ -165,6 +191,7 @@ public:
|
|||||||
double getMagSq() const;
|
double getMagSq() const;
|
||||||
void setLevelMeter(QObject *levelMeter);
|
void setLevelMeter(QObject *levelMeter);
|
||||||
uint32_t getNumberOfDeviceStreams() const;
|
uint32_t getNumberOfDeviceStreams() const;
|
||||||
|
void encode();
|
||||||
|
|
||||||
static const char* const m_channelIdURI;
|
static const char* const m_channelIdURI;
|
||||||
static const char* const m_channelId;
|
static const char* const m_channelId;
|
||||||
@ -201,6 +228,7 @@ private:
|
|||||||
);
|
);
|
||||||
void openUDP(const AISModSettings& settings);
|
void openUDP(const AISModSettings& settings);
|
||||||
void closeUDP();
|
void closeUDP();
|
||||||
|
static int degToMinFracs(float decimal);
|
||||||
|
|
||||||
private slots:
|
private slots:
|
||||||
void networkManagerFinished(QNetworkReply *reply);
|
void networkManagerFinished(QNetworkReply *reply);
|
||||||
|
@ -151,17 +151,16 @@ bool AISModBaseband::handleMessage(const Message& cmd)
|
|||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (AISMod::MsgTXAISMod::match(cmd))
|
else if (AISMod::MsgTx::match(cmd)) // immediate transmission of stored message
|
||||||
{
|
{
|
||||||
AISMod::MsgTXAISMod& tx = (AISMod::MsgTXAISMod&) cmd;
|
m_source.transmit();
|
||||||
m_source.addTXPacket(tx.m_data);
|
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if (AISMod::MsgTXPacketBytes::match(cmd))
|
else if (AISMod::MsgTXPacketBytes::match(cmd)) // This is packet from UDP with immediate transmission
|
||||||
{
|
{
|
||||||
AISMod::MsgTXPacketBytes& tx = (AISMod::MsgTXPacketBytes&) cmd;
|
AISMod::MsgTXPacketBytes& tx = (AISMod::MsgTXPacketBytes&) cmd;
|
||||||
m_source.addTXPacket(tx.m_data);
|
m_source.addTXPacket(tx.m_data);
|
||||||
|
m_source.transmit();
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@ -88,6 +88,13 @@ bool AISModGUI::handleMessage(const Message& message)
|
|||||||
blockApplySettings(false);
|
blockApplySettings(false);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
else if (AISMod::MsgReportData::match(message))
|
||||||
|
{
|
||||||
|
const AISMod::MsgReportData& report = (AISMod::MsgReportData&) message;
|
||||||
|
m_settings.m_data = report.getData();
|
||||||
|
ui->message->setText(m_settings.m_data);
|
||||||
|
return true;
|
||||||
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -104,8 +111,9 @@ void AISModGUI::channelMarkerChangedByCursor()
|
|||||||
void AISModGUI::handleSourceMessages()
|
void AISModGUI::handleSourceMessages()
|
||||||
{
|
{
|
||||||
Message* message;
|
Message* message;
|
||||||
|
MessageQueue *messageQueue = getInputMessageQueue();
|
||||||
|
|
||||||
while ((message = getInputMessageQueue()->pop()) != 0)
|
while ((message = messageQueue->pop()) != 0)
|
||||||
{
|
{
|
||||||
if (handleMessage(*message))
|
if (handleMessage(*message))
|
||||||
{
|
{
|
||||||
@ -123,13 +131,16 @@ void AISModGUI::on_deltaFrequency_changed(qint64 value)
|
|||||||
|
|
||||||
void AISModGUI::on_mode_currentIndexChanged(int value)
|
void AISModGUI::on_mode_currentIndexChanged(int value)
|
||||||
{
|
{
|
||||||
QString mode = ui->mode->currentText();
|
|
||||||
|
|
||||||
// If m_doApplySettings is set, we are here from a call to displaySettings,
|
// If m_doApplySettings is set, we are here from a call to displaySettings,
|
||||||
// so we only want to display the current settings, not update them
|
// so we only want to display the current settings, not update them
|
||||||
// as though a user had selected a new mode
|
// as though a user had selected a new mode
|
||||||
if (m_doApplySettings)
|
if (m_doApplySettings)
|
||||||
m_settings.setMode(mode);
|
{
|
||||||
|
m_settings.m_rfBandwidth = m_settings.getRfBandwidth(value);
|
||||||
|
m_settings.m_fmDeviation = m_settings.getFMDeviation(value);
|
||||||
|
m_settings.m_bt = m_settings.getBT(value);
|
||||||
|
}
|
||||||
|
|
||||||
ui->rfBWText->setText(QString("%1k").arg(m_settings.m_rfBandwidth / 1000.0, 0, 'f', 1));
|
ui->rfBWText->setText(QString("%1k").arg(m_settings.m_rfBandwidth / 1000.0, 0, 'f', 1));
|
||||||
ui->rfBW->setValue(m_settings.m_rfBandwidth / 100.0);
|
ui->rfBW->setValue(m_settings.m_rfBandwidth / 100.0);
|
||||||
@ -138,10 +149,6 @@ void AISModGUI::on_mode_currentIndexChanged(int value)
|
|||||||
ui->btText->setText(QString("%1").arg(m_settings.m_bt, 0, 'f', 1));
|
ui->btText->setText(QString("%1").arg(m_settings.m_bt, 0, 'f', 1));
|
||||||
ui->bt->setValue(m_settings.m_bt * 10);
|
ui->bt->setValue(m_settings.m_bt * 10);
|
||||||
applySettings();
|
applySettings();
|
||||||
|
|
||||||
// Remove custom mode when deselected, as we no longer know how to set it
|
|
||||||
if (value < 2)
|
|
||||||
ui->mode->removeItem(2);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AISModGUI::on_rfBW_valueChanged(int value)
|
void AISModGUI::on_rfBW_valueChanged(int value)
|
||||||
@ -196,12 +203,13 @@ void AISModGUI::on_txButton_clicked()
|
|||||||
|
|
||||||
void AISModGUI::on_message_returnPressed()
|
void AISModGUI::on_message_returnPressed()
|
||||||
{
|
{
|
||||||
transmit();
|
m_settings.m_data = ui->message->text();
|
||||||
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
void AISModGUI::on_msgId_currentIndexChanged(int index)
|
void AISModGUI::on_msgId_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
m_settings.m_msgId = index + 1;
|
m_settings.m_msgType = (AISModSettings::MsgType) index;
|
||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -213,7 +221,7 @@ void AISModGUI::on_mmsi_editingFinished()
|
|||||||
|
|
||||||
void AISModGUI::on_status_currentIndexChanged(int index)
|
void AISModGUI::on_status_currentIndexChanged(int index)
|
||||||
{
|
{
|
||||||
m_settings.m_status = index;
|
m_settings.m_status = (AISModSettings::Status) index;
|
||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -253,114 +261,11 @@ void AISModGUI::on_message_editingFinished()
|
|||||||
applySettings();
|
applySettings();
|
||||||
}
|
}
|
||||||
|
|
||||||
// Convert decimal degrees to 1/10000 minutes
|
// Encode the message specified in individual settings in to a hex string (data settings) and put in message field
|
||||||
static int degToMinFracs(float decimal)
|
|
||||||
{
|
|
||||||
return std::round(decimal * 60.0f * 10000.0f);
|
|
||||||
}
|
|
||||||
|
|
||||||
// Encode the message specified by the GUI controls in to a hex string and put in message field
|
|
||||||
void AISModGUI::on_encode_clicked()
|
void AISModGUI::on_encode_clicked()
|
||||||
{
|
{
|
||||||
unsigned char bytes[168/8];
|
AISMod::MsgEncode *msg = AISMod::MsgEncode::create();
|
||||||
int mmsi;
|
m_aisMod->getInputMessageQueue()->push(msg);
|
||||||
int latitude;
|
|
||||||
int longitude;
|
|
||||||
|
|
||||||
mmsi = m_settings.m_mmsi.toInt();
|
|
||||||
|
|
||||||
latitude = degToMinFracs(m_settings.m_latitude);
|
|
||||||
longitude = degToMinFracs(m_settings.m_longitude);
|
|
||||||
|
|
||||||
if (m_settings.m_msgId == 4)
|
|
||||||
{
|
|
||||||
// Base station report
|
|
||||||
QDateTime currentDateTime = QDateTime::currentDateTimeUtc();
|
|
||||||
QDate currentDate = currentDateTime.date();
|
|
||||||
QTime currentTime = currentDateTime.time();
|
|
||||||
|
|
||||||
int year = currentDate.year();
|
|
||||||
int month = currentDate.month();
|
|
||||||
int day = currentDate.day();
|
|
||||||
int hour = currentTime.hour();
|
|
||||||
int minute = currentTime.minute();
|
|
||||||
int second = currentTime.second();
|
|
||||||
|
|
||||||
bytes[0] = (m_settings.m_msgId << 2); // Repeat indicator = 0
|
|
||||||
bytes[1] = (mmsi >> 22) & 0xff;
|
|
||||||
bytes[2] = (mmsi >> 14) & 0xff;
|
|
||||||
bytes[3] = (mmsi >> 6) & 0xff;
|
|
||||||
bytes[4] = ((mmsi & 0x3f) << 2) | ((year >> 12) & 0x3);
|
|
||||||
bytes[5] = (year >> 4) & 0xff;
|
|
||||||
bytes[6] = ((year & 0xf) << 4) | month;
|
|
||||||
bytes[7] = (day << 3) | ((hour >> 2) & 0x7);
|
|
||||||
bytes[8] = ((hour & 0x3) << 6) | minute;
|
|
||||||
bytes[9] = (second << 2) | (0 << 1) | ((longitude >> 27) & 1);
|
|
||||||
bytes[10] = (longitude >> 19) & 0xff;
|
|
||||||
bytes[11] = (longitude >> 11) & 0xff;
|
|
||||||
bytes[12] = (longitude >> 3) & 0xff;
|
|
||||||
bytes[13] = ((longitude & 0x7) << 5) | ((latitude >> 22) & 0x1f);
|
|
||||||
bytes[14] = (latitude >> 14) & 0xff;
|
|
||||||
bytes[15] = (latitude >> 6) & 0xff;
|
|
||||||
bytes[16] = ((latitude & 0x3f) << 2);
|
|
||||||
bytes[17] = 0;
|
|
||||||
bytes[18] = 0;
|
|
||||||
bytes[19] = 0;
|
|
||||||
bytes[20] = 0;
|
|
||||||
}
|
|
||||||
else
|
|
||||||
{
|
|
||||||
// Position report
|
|
||||||
int status;
|
|
||||||
int rateOfTurn = 0x80; // Not available as not currently in GUI
|
|
||||||
int speedOverGround;
|
|
||||||
int courseOverGround;
|
|
||||||
int timestamp;
|
|
||||||
|
|
||||||
timestamp = QDateTime::currentDateTimeUtc().time().second();
|
|
||||||
|
|
||||||
if (m_settings.m_speed >= 102.2)
|
|
||||||
speedOverGround = 1022;
|
|
||||||
else
|
|
||||||
speedOverGround = std::round(m_settings.m_speed * 10.0);
|
|
||||||
|
|
||||||
courseOverGround = std::floor(m_settings.m_course * 10.0);
|
|
||||||
|
|
||||||
if (m_settings.m_status == 9) // Not defined (last in combo box)
|
|
||||||
status = 15;
|
|
||||||
else
|
|
||||||
status = m_settings.m_status;
|
|
||||||
|
|
||||||
bytes[0] = (m_settings.m_msgId << 2); // Repeat indicator = 0
|
|
||||||
|
|
||||||
bytes[1] = (mmsi >> 22) & 0xff;
|
|
||||||
bytes[2] = (mmsi >> 14) & 0xff;
|
|
||||||
bytes[3] = (mmsi >> 6) & 0xff;
|
|
||||||
bytes[4] = ((mmsi & 0x3f) << 2) | (status >> 2);
|
|
||||||
|
|
||||||
bytes[5] = ((status & 0x3) << 6) | ((rateOfTurn >> 2) & 0x3f);
|
|
||||||
bytes[6] = ((rateOfTurn & 0x3) << 6) | ((speedOverGround >> 4) & 0x3f);
|
|
||||||
bytes[7] = ((speedOverGround & 0xf) << 4) | (0 << 3) | ((longitude >> 25) & 0x7); // Position accuracy = 0
|
|
||||||
bytes[8] = (longitude >> 17) & 0xff;
|
|
||||||
bytes[9] = (longitude >> 9) & 0xff;
|
|
||||||
bytes[10] = (longitude >> 1) & 0xff;
|
|
||||||
bytes[11] = ((longitude & 0x1) << 7) | ((latitude >> 20) & 0x7f);
|
|
||||||
bytes[12] = (latitude >> 12) & 0xff;
|
|
||||||
bytes[13] = (latitude >> 4) & 0xff;
|
|
||||||
bytes[14] = ((latitude & 0xf) << 4) | ((courseOverGround >> 8) & 0xf);
|
|
||||||
bytes[15] = courseOverGround & 0xff;
|
|
||||||
bytes[16] = ((m_settings.m_heading >> 1) & 0xff);
|
|
||||||
bytes[17] = ((m_settings.m_heading & 0x1) << 7) | ((timestamp & 0x3f) << 1);
|
|
||||||
bytes[18] = 0;
|
|
||||||
bytes[19] = 0;
|
|
||||||
bytes[20] = 0;
|
|
||||||
}
|
|
||||||
|
|
||||||
QByteArray ba((const char *)bytes, sizeof(bytes));
|
|
||||||
ui->message->setText(ba.toHex());
|
|
||||||
|
|
||||||
m_settings.m_data = ui->message->text();
|
|
||||||
applySettings();
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AISModGUI::on_repeat_toggled(bool checked)
|
void AISModGUI::on_repeat_toggled(bool checked)
|
||||||
@ -383,11 +288,11 @@ void AISModGUI::repeatSelect()
|
|||||||
void AISModGUI::txSettingsSelect()
|
void AISModGUI::txSettingsSelect()
|
||||||
{
|
{
|
||||||
AISModTXSettingsDialog dialog(m_settings.m_rampUpBits, m_settings.m_rampDownBits,
|
AISModTXSettingsDialog dialog(m_settings.m_rampUpBits, m_settings.m_rampDownBits,
|
||||||
m_settings.m_rampRange,
|
m_settings.m_rampRange,
|
||||||
m_settings.m_baud,
|
m_settings.m_baud,
|
||||||
m_settings.m_symbolSpan,
|
m_settings.m_symbolSpan,
|
||||||
m_settings.m_rfNoise,
|
m_settings.m_rfNoise,
|
||||||
m_settings.m_writeToFile);
|
m_settings.m_writeToFile);
|
||||||
if (dialog.exec() == QDialog::Accepted)
|
if (dialog.exec() == QDialog::Accepted)
|
||||||
{
|
{
|
||||||
m_settings.m_rampUpBits = dialog.m_rampUpBits;
|
m_settings.m_rampUpBits = dialog.m_rampUpBits;
|
||||||
@ -577,9 +482,8 @@ AISModGUI::~AISModGUI()
|
|||||||
|
|
||||||
void AISModGUI::transmit()
|
void AISModGUI::transmit()
|
||||||
{
|
{
|
||||||
QString data = ui->message->text();
|
ui->transmittedText->appendPlainText(m_settings.m_data);
|
||||||
ui->transmittedText->appendPlainText(data + "\n");
|
AISMod::MsgTx *msg = AISMod::MsgTx::create();
|
||||||
AISMod::MsgTXAISMod *msg = AISMod::MsgTXAISMod::create(data);
|
|
||||||
m_aisMod->getInputMessageQueue()->push(msg);
|
m_aisMod->getInputMessageQueue()->push(msg);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -613,17 +517,6 @@ void AISModGUI::displaySettings()
|
|||||||
blockApplySettings(true);
|
blockApplySettings(true);
|
||||||
|
|
||||||
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
|
ui->deltaFrequency->setValue(m_channelMarker.getCenterFrequency());
|
||||||
if ((m_settings.m_rfBandwidth == 12500.0f) && (m_settings.m_bt == 0.3f))
|
|
||||||
ui->mode->setCurrentIndex(0);
|
|
||||||
else if ((m_settings.m_rfBandwidth == 25000.0f) && (m_settings.m_bt == 0.4f))
|
|
||||||
ui->mode->setCurrentIndex(1);
|
|
||||||
else
|
|
||||||
{
|
|
||||||
ui->mode->removeItem(2);
|
|
||||||
ui->mode->addItem(m_settings.getMode());
|
|
||||||
ui->mode->setCurrentIndex(2);
|
|
||||||
}
|
|
||||||
|
|
||||||
ui->rfBWText->setText(QString("%1k").arg(m_settings.m_rfBandwidth / 1000.0, 0, 'f', 1));
|
ui->rfBWText->setText(QString("%1k").arg(m_settings.m_rfBandwidth / 1000.0, 0, 'f', 1));
|
||||||
ui->rfBW->setValue(m_settings.m_rfBandwidth / 100.0);
|
ui->rfBW->setValue(m_settings.m_rfBandwidth / 100.0);
|
||||||
|
|
||||||
@ -643,9 +536,9 @@ void AISModGUI::displaySettings()
|
|||||||
ui->channelMute->setChecked(m_settings.m_channelMute);
|
ui->channelMute->setChecked(m_settings.m_channelMute);
|
||||||
ui->repeat->setChecked(m_settings.m_repeat);
|
ui->repeat->setChecked(m_settings.m_repeat);
|
||||||
|
|
||||||
ui->msgId->setCurrentIndex(m_settings.m_msgId - 1);
|
ui->msgId->setCurrentIndex((int) m_settings.m_msgType);
|
||||||
ui->mmsi->setText(m_settings.m_mmsi);
|
ui->mmsi->setText(m_settings.m_mmsi);
|
||||||
ui->status->setCurrentIndex(m_settings.m_status);
|
ui->status->setCurrentIndex((int) m_settings.m_status);
|
||||||
ui->latitude->setValue(m_settings.m_latitude);
|
ui->latitude->setValue(m_settings.m_latitude);
|
||||||
ui->longitude->setValue(m_settings.m_longitude);
|
ui->longitude->setValue(m_settings.m_longitude);
|
||||||
ui->course->setValue(m_settings.m_course);
|
ui->course->setValue(m_settings.m_course);
|
||||||
|
@ -6,7 +6,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>350</width>
|
<width>437</width>
|
||||||
<height>925</height>
|
<height>925</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -42,7 +42,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>2</x>
|
<x>2</x>
|
||||||
<y>2</y>
|
<y>2</y>
|
||||||
<width>341</width>
|
<width>431</width>
|
||||||
<height>271</height>
|
<height>271</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -994,7 +994,7 @@
|
|||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item>
|
<item>
|
||||||
<widget class="QToolButton" name="txButton">
|
<widget class="QPushButton" name="txButton">
|
||||||
<property name="toolTip">
|
<property name="toolTip">
|
||||||
<string>Press to transmit the message</string>
|
<string>Press to transmit the message</string>
|
||||||
</property>
|
</property>
|
||||||
@ -1012,7 +1012,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>290</y>
|
<y>290</y>
|
||||||
<width>351</width>
|
<width>431</width>
|
||||||
<height>141</height>
|
<height>141</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -1055,7 +1055,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>450</y>
|
<y>450</y>
|
||||||
<width>351</width>
|
<width>431</width>
|
||||||
<height>331</height>
|
<height>331</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
@ -1104,7 +1104,7 @@
|
|||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>790</y>
|
<y>790</y>
|
||||||
<width>351</width>
|
<width>431</width>
|
||||||
<height>311</height>
|
<height>311</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
|
@ -32,7 +32,7 @@ AISModSettings::AISModSettings()
|
|||||||
void AISModSettings::resetToDefaults()
|
void AISModSettings::resetToDefaults()
|
||||||
{
|
{
|
||||||
m_inputFrequencyOffset = 0;
|
m_inputFrequencyOffset = 0;
|
||||||
m_baud = 9600;
|
m_baud = 9600; // nominal value
|
||||||
m_rfBandwidth = 25000.0f; // 12.5k for narrow, 25k for wide (narrow is obsolete)
|
m_rfBandwidth = 25000.0f; // 12.5k for narrow, 25k for wide (narrow is obsolete)
|
||||||
m_fmDeviation = 4800.0f; // To give modulation index of 0.5 for 9600 baud
|
m_fmDeviation = 4800.0f; // To give modulation index of 0.5 for 9600 baud
|
||||||
m_gain = -1.0f; // To avoid overflow, which results in out-of-band RF
|
m_gain = -1.0f; // To avoid overflow, which results in out-of-band RF
|
||||||
@ -45,9 +45,9 @@ void AISModSettings::resetToDefaults()
|
|||||||
m_rampRange = 60;
|
m_rampRange = 60;
|
||||||
m_rfNoise = false;
|
m_rfNoise = false;
|
||||||
m_writeToFile = false;
|
m_writeToFile = false;
|
||||||
m_msgId = 1;
|
m_msgType = MsgTypeScheduledPositionReport;
|
||||||
m_mmsi = "0000000000";
|
m_mmsi = "0000000000";
|
||||||
m_status = 0;
|
m_status = StatusUnderWayUsingEngine;
|
||||||
m_latitude = 0.0f;
|
m_latitude = 0.0f;
|
||||||
m_longitude = 0.0f;
|
m_longitude = 0.0f;
|
||||||
m_course = 0.0f;
|
m_course = 0.0f;
|
||||||
@ -91,11 +91,43 @@ bool AISModSettings::setMode(QString mode)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Real AISModSettings::getRfBandwidth(int modeIndex)
|
||||||
|
{
|
||||||
|
if (modeIndex == 0) { // Narrow
|
||||||
|
return 12500.0f;
|
||||||
|
} else { // Wide or other
|
||||||
|
return 25000.0f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Real AISModSettings::getFMDeviation(int modeIndex)
|
||||||
|
{
|
||||||
|
if (modeIndex == 0) { // Narrow
|
||||||
|
return m_baud * 0.25;
|
||||||
|
} else { // Wide or other
|
||||||
|
return m_baud * 0.5;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
float AISModSettings::getBT(int modeIndex)
|
||||||
|
{
|
||||||
|
if (modeIndex == 0) { // Narrow
|
||||||
|
return 0.3f;
|
||||||
|
} else { // Wide or other
|
||||||
|
return 0.4f;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
QString AISModSettings::getMode() const
|
QString AISModSettings::getMode() const
|
||||||
{
|
{
|
||||||
return QString("%1 %2 %3").arg(m_rfBandwidth).arg(m_fmDeviation).arg(m_bt);
|
return QString("%1 %2 %3").arg(m_rfBandwidth).arg(m_fmDeviation).arg(m_bt);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int AISModSettings::getMsgId() const
|
||||||
|
{
|
||||||
|
return ((int) m_msgType) + 1;
|
||||||
|
}
|
||||||
|
|
||||||
QByteArray AISModSettings::serialize() const
|
QByteArray AISModSettings::serialize() const
|
||||||
{
|
{
|
||||||
SimpleSerializer s(1);
|
SimpleSerializer s(1);
|
||||||
@ -114,9 +146,9 @@ QByteArray AISModSettings::serialize() const
|
|||||||
s.writeS32(12, m_rampRange);
|
s.writeS32(12, m_rampRange);
|
||||||
s.writeBool(14, m_rfNoise);
|
s.writeBool(14, m_rfNoise);
|
||||||
s.writeBool(15, m_writeToFile);
|
s.writeBool(15, m_writeToFile);
|
||||||
s.writeS32(17, m_msgId);
|
s.writeS32(17, (int) m_msgType);
|
||||||
s.writeString(18, m_mmsi);
|
s.writeString(18, m_mmsi);
|
||||||
s.writeS32(19, m_status);
|
s.writeS32(19, (int) m_status);
|
||||||
s.writeFloat(20, m_latitude);
|
s.writeFloat(20, m_latitude);
|
||||||
s.writeFloat(21, m_longitude);
|
s.writeFloat(21, m_longitude);
|
||||||
s.writeFloat(22, m_course);
|
s.writeFloat(22, m_course);
|
||||||
@ -174,9 +206,11 @@ bool AISModSettings::deserialize(const QByteArray& data)
|
|||||||
d.readS32(12, &m_rampRange, 8);
|
d.readS32(12, &m_rampRange, 8);
|
||||||
d.readBool(14, &m_rfNoise, false);
|
d.readBool(14, &m_rfNoise, false);
|
||||||
d.readBool(15, &m_writeToFile, false);
|
d.readBool(15, &m_writeToFile, false);
|
||||||
d.readS32(17, &m_msgId, 1);
|
d.readS32(17, &tmp, 0);
|
||||||
|
m_msgType = (MsgType) tmp;
|
||||||
d.readString(18, &m_mmsi, "0000000000");
|
d.readString(18, &m_mmsi, "0000000000");
|
||||||
d.readS32(19, &m_status, 0);
|
d.readS32(19, &tmp, 0);
|
||||||
|
m_status = (Status) tmp;
|
||||||
d.readFloat(20, &m_latitude, 0.0f);
|
d.readFloat(20, &m_latitude, 0.0f);
|
||||||
d.readFloat(21, &m_longitude, 0.0f);
|
d.readFloat(21, &m_longitude, 0.0f);
|
||||||
d.readFloat(22, &m_course, 0.0f);
|
d.readFloat(22, &m_course, 0.0f);
|
||||||
|
@ -27,6 +27,26 @@ class Serializable;
|
|||||||
|
|
||||||
struct AISModSettings
|
struct AISModSettings
|
||||||
{
|
{
|
||||||
|
enum Status {
|
||||||
|
StatusUnderWayUsingEngine,
|
||||||
|
StatusAtAnchor,
|
||||||
|
StatusNotUnderCommand,
|
||||||
|
StatusRestrictedManoeuverability,
|
||||||
|
StatusConstrainedByHerDraught,
|
||||||
|
StatusMoored,
|
||||||
|
StatusAground,
|
||||||
|
StatusEngagedInFishing,
|
||||||
|
StatusUnderWaySailing,
|
||||||
|
StatusNotDefined
|
||||||
|
};
|
||||||
|
|
||||||
|
enum MsgType {
|
||||||
|
MsgTypeScheduledPositionReport,
|
||||||
|
MsgTypeAssignedPositionReport,
|
||||||
|
MsgTypeSpecialPositionReport,
|
||||||
|
MsgBaseStationReport
|
||||||
|
};
|
||||||
|
|
||||||
static const int infinitePackets = -1;
|
static const int infinitePackets = -1;
|
||||||
|
|
||||||
qint64 m_inputFrequencyOffset;
|
qint64 m_inputFrequencyOffset;
|
||||||
@ -43,9 +63,9 @@ struct AISModSettings
|
|||||||
int m_rampRange;
|
int m_rampRange;
|
||||||
bool m_rfNoise;
|
bool m_rfNoise;
|
||||||
bool m_writeToFile;
|
bool m_writeToFile;
|
||||||
int m_msgId;
|
MsgType m_msgType;
|
||||||
QString m_mmsi;
|
QString m_mmsi;
|
||||||
int m_status;
|
Status m_status;
|
||||||
float m_latitude;
|
float m_latitude;
|
||||||
float m_longitude;
|
float m_longitude;
|
||||||
float m_course;
|
float m_course;
|
||||||
@ -78,6 +98,10 @@ struct AISModSettings
|
|||||||
bool deserialize(const QByteArray& data);
|
bool deserialize(const QByteArray& data);
|
||||||
bool setMode(QString mode);
|
bool setMode(QString mode);
|
||||||
QString getMode() const;
|
QString getMode() const;
|
||||||
|
int getMsgId() const;
|
||||||
|
Real getRfBandwidth(int modeIndex);
|
||||||
|
Real getFMDeviation(int modeIndex);
|
||||||
|
float getBT(int modeIndex);
|
||||||
};
|
};
|
||||||
|
|
||||||
#endif /* PLUGINS_CHANNELTX_MODAIS_AISMODSETTINGS_H */
|
#endif /* PLUGINS_CHANNELTX_MODAIS_AISMODSETTINGS_H */
|
||||||
|
@ -307,16 +307,25 @@ void AISModSource::calculateLevel(Real& sample)
|
|||||||
|
|
||||||
void AISModSource::applySettings(const AISModSettings& settings, bool force)
|
void AISModSource::applySettings(const AISModSettings& settings, bool force)
|
||||||
{
|
{
|
||||||
if ((settings.m_bt != m_settings.m_bt) || (settings.m_symbolSpan != m_settings.m_symbolSpan) || (settings.m_baud != m_settings.m_baud) || force)
|
if ((settings.m_bt != m_settings.m_bt)
|
||||||
|
|| (settings.m_symbolSpan != m_settings.m_symbolSpan)
|
||||||
|
|| (settings.m_baud != m_settings.m_baud) || force)
|
||||||
{
|
{
|
||||||
qDebug() << "AISModSource::applySettings: Recreating pulse shaping filter: "
|
qDebug() << "AISModSource::applySettings: Recreating pulse shaping filter: "
|
||||||
<< " SampleRate:" << AISModSettings::AISMOD_SAMPLE_RATE
|
<< " SampleRate:" << AISModSettings::AISMOD_SAMPLE_RATE
|
||||||
<< " bt: " << settings.m_bt
|
<< " bt: " << settings.m_bt
|
||||||
<< " symbolSpan: " << settings.m_symbolSpan
|
<< " symbolSpan: " << settings.m_symbolSpan
|
||||||
<< " baud:" << settings.m_baud;
|
<< " baud:" << settings.m_baud
|
||||||
|
<< " data:" << settings.m_data;
|
||||||
m_pulseShape.create(settings.m_bt, settings.m_symbolSpan, AISModSettings::AISMOD_SAMPLE_RATE/settings.m_baud);
|
m_pulseShape.create(settings.m_bt, settings.m_symbolSpan, AISModSettings::AISMOD_SAMPLE_RATE/settings.m_baud);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if ((settings.m_data != m_settings.m_data) || force)
|
||||||
|
{
|
||||||
|
qDebug() << "AISModSource::applySettings: new data: " << settings.m_data;
|
||||||
|
addTXPacket(settings.m_data);
|
||||||
|
}
|
||||||
|
|
||||||
m_settings = settings;
|
m_settings = settings;
|
||||||
|
|
||||||
// Precalculate FM sensensity and linear gain to save doing it in the loop
|
// Precalculate FM sensensity and linear gain to save doing it in the loop
|
||||||
@ -410,6 +419,7 @@ void AISModSource::initTX()
|
|||||||
m_bitIdx = 0;
|
m_bitIdx = 0;
|
||||||
m_bitCount = m_bitCountTotal; // Reset to allow retransmission
|
m_bitCount = m_bitCountTotal; // Reset to allow retransmission
|
||||||
m_nrziBit = 1;
|
m_nrziBit = 1;
|
||||||
|
|
||||||
if (m_settings.m_rampUpBits == 0)
|
if (m_settings.m_rampUpBits == 0)
|
||||||
{
|
{
|
||||||
m_state = tx;
|
m_state = tx;
|
||||||
@ -448,9 +458,12 @@ void AISModSource::addTXPacket(QByteArray data)
|
|||||||
// Flag
|
// Flag
|
||||||
*p++ = AIS_FLAG;
|
*p++ = AIS_FLAG;
|
||||||
crc_start = p;
|
crc_start = p;
|
||||||
|
|
||||||
// Copy packet payload
|
// Copy packet payload
|
||||||
for (int i = 0; i < data.size(); i++)
|
for (int i = 0; i < data.size(); i++) {
|
||||||
*p++ = data[i];
|
*p++ = data[i];
|
||||||
|
}
|
||||||
|
|
||||||
// CRC (do not include flags)
|
// CRC (do not include flags)
|
||||||
crc.calculate(crc_start, p-crc_start);
|
crc.calculate(crc_start, p-crc_start);
|
||||||
crcValue = crc.get();
|
crcValue = crc.get();
|
||||||
@ -497,6 +510,10 @@ void AISModSource::encodePacket(uint8_t *packet, int packet_length, uint8_t *crc
|
|||||||
}
|
}
|
||||||
//m_samplesPerSymbol = AISMOD_SAMPLE_RATE / m_settings.m_baud;
|
//m_samplesPerSymbol = AISMOD_SAMPLE_RATE / m_settings.m_baud;
|
||||||
m_packetRepeatCount = m_settings.m_repeatCount;
|
m_packetRepeatCount = m_settings.m_repeatCount;
|
||||||
|
}
|
||||||
|
|
||||||
|
void AISModSource::transmit()
|
||||||
|
{
|
||||||
initTX();
|
initTX();
|
||||||
// Only reset phases at start of new packet TX, not in initTX(), so that
|
// Only reset phases at start of new packet TX, not in initTX(), so that
|
||||||
// there isn't a discontinuity in phase when repeatedly transmitting a
|
// there isn't a discontinuity in phase when repeatedly transmitting a
|
||||||
|
@ -72,6 +72,7 @@ public:
|
|||||||
void addTXPacket(QByteArray data);
|
void addTXPacket(QByteArray data);
|
||||||
void encodePacket(uint8_t *packet, int packet_length, uint8_t *crc_start, uint8_t *packet_end);
|
void encodePacket(uint8_t *packet, int packet_length, uint8_t *crc_start, uint8_t *packet_end);
|
||||||
void setChannel(ChannelAPI *channel) { m_channel = channel; }
|
void setChannel(ChannelAPI *channel) { m_channel = channel; }
|
||||||
|
void transmit();
|
||||||
|
|
||||||
private:
|
private:
|
||||||
int m_channelSampleRate;
|
int m_channelSampleRate;
|
||||||
|
@ -920,6 +920,10 @@ margin-bottom: 20px;
|
|||||||
};
|
};
|
||||||
defs.AISDemodSettings = {
|
defs.AISDemodSettings = {
|
||||||
"properties" : {
|
"properties" : {
|
||||||
|
"baud" : {
|
||||||
|
"type" : "integer",
|
||||||
|
"description" : "baud rate (nominal is 9600)"
|
||||||
|
},
|
||||||
"inputFrequencyOffset" : {
|
"inputFrequencyOffset" : {
|
||||||
"type" : "integer",
|
"type" : "integer",
|
||||||
"format" : "int64"
|
"format" : "int64"
|
||||||
@ -990,18 +994,15 @@ margin-bottom: 20px;
|
|||||||
defs.AISModActions = {
|
defs.AISModActions = {
|
||||||
"properties" : {
|
"properties" : {
|
||||||
"tx" : {
|
"tx" : {
|
||||||
"$ref" : "#/definitions/AISModActions_tx"
|
"type" : "integer",
|
||||||
|
"description" : "Transmit stored message\n * 0 - do nothing\n * 1 - transmit\n"
|
||||||
|
},
|
||||||
|
"encode" : {
|
||||||
|
"type" : "integer",
|
||||||
|
"description" : "Encode message from discrete data\n * 0 - do nothing\n * 1 - encode\n"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description" : "AISMod"
|
"description" : "AISMod"
|
||||||
};
|
|
||||||
defs.AISModActions_tx = {
|
|
||||||
"properties" : {
|
|
||||||
"data" : {
|
|
||||||
"type" : "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description" : "Transmit a message\n"
|
|
||||||
};
|
};
|
||||||
defs.AISModReport = {
|
defs.AISModReport = {
|
||||||
"properties" : {
|
"properties" : {
|
||||||
@ -1061,9 +1062,6 @@ margin-bottom: 20px;
|
|||||||
"rampRange" : {
|
"rampRange" : {
|
||||||
"type" : "integer"
|
"type" : "integer"
|
||||||
},
|
},
|
||||||
"lpfTaps" : {
|
|
||||||
"type" : "integer"
|
|
||||||
},
|
|
||||||
"rfNoise" : {
|
"rfNoise" : {
|
||||||
"type" : "integer",
|
"type" : "integer",
|
||||||
"description" : "Boolean\n * 0 - off\n * 1 - on\n"
|
"description" : "Boolean\n * 0 - off\n * 1 - on\n"
|
||||||
@ -1072,17 +1070,16 @@ margin-bottom: 20px;
|
|||||||
"type" : "integer",
|
"type" : "integer",
|
||||||
"description" : "Boolean\n * 0 - off\n * 1 - on\n"
|
"description" : "Boolean\n * 0 - off\n * 1 - on\n"
|
||||||
},
|
},
|
||||||
"spectrumRate" : {
|
"msgType" : {
|
||||||
"type" : "integer"
|
"type" : "integer",
|
||||||
},
|
"description" : "Message Type\n * 0 - Scheduled position report\n * 1 - Assigned position report\n * 2 - Special position report\n * 3 - Base station report\n"
|
||||||
"msgId" : {
|
|
||||||
"type" : "integer"
|
|
||||||
},
|
},
|
||||||
"mmsi" : {
|
"mmsi" : {
|
||||||
"type" : "string"
|
"type" : "string"
|
||||||
},
|
},
|
||||||
"status" : {
|
"status" : {
|
||||||
"type" : "integer"
|
"type" : "integer",
|
||||||
|
"description" : "Ship status\n * 0 - Under way using engine\n * 1 - At anchor\n * 2 - Not under command\n * 3 - Restricted manoeuvrability\n * 4 - Constrained by her draught\n * 4 - Moored\n * 5 - Aground\n * 6 - Engaged in fishing\n * 7 - Under way sailing\n * 8 - Not defined\n"
|
||||||
},
|
},
|
||||||
"latitude" : {
|
"latitude" : {
|
||||||
"type" : "number",
|
"type" : "number",
|
||||||
@ -51301,7 +51298,7 @@ except ApiException as e:
|
|||||||
</div>
|
</div>
|
||||||
<div id="generator">
|
<div id="generator">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
Generated 2021-11-08T23:01:01.926+01:00
|
Generated 2021-11-11T23:23:22.877+01:00
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
AISDemodSettings:
|
AISDemodSettings:
|
||||||
description: AISDemod
|
description: AISDemod
|
||||||
properties:
|
properties:
|
||||||
|
baud:
|
||||||
|
type: integer
|
||||||
|
description: baud rate (nominal is 9600)
|
||||||
inputFrequencyOffset:
|
inputFrequencyOffset:
|
||||||
type: integer
|
type: integer
|
||||||
format: int64
|
format: int64
|
||||||
|
@ -32,8 +32,6 @@ AISModSettings:
|
|||||||
type: integer
|
type: integer
|
||||||
rampRange:
|
rampRange:
|
||||||
type: integer
|
type: integer
|
||||||
lpfTaps:
|
|
||||||
type: integer
|
|
||||||
rfNoise:
|
rfNoise:
|
||||||
type: integer
|
type: integer
|
||||||
description: >
|
description: >
|
||||||
@ -46,14 +44,30 @@ AISModSettings:
|
|||||||
Boolean
|
Boolean
|
||||||
* 0 - off
|
* 0 - off
|
||||||
* 1 - on
|
* 1 - on
|
||||||
spectrumRate:
|
msgType:
|
||||||
type: integer
|
|
||||||
msgId:
|
|
||||||
type: integer
|
type: integer
|
||||||
|
description: >
|
||||||
|
Message Type
|
||||||
|
* 0 - Scheduled position report
|
||||||
|
* 1 - Assigned position report
|
||||||
|
* 2 - Special position report
|
||||||
|
* 3 - Base station report
|
||||||
mmsi:
|
mmsi:
|
||||||
type: string
|
type: string
|
||||||
status:
|
status:
|
||||||
type: integer
|
type: integer
|
||||||
|
description: >
|
||||||
|
Ship status
|
||||||
|
* 0 - Under way using engine
|
||||||
|
* 1 - At anchor
|
||||||
|
* 2 - Not under command
|
||||||
|
* 3 - Restricted manoeuvrability
|
||||||
|
* 4 - Constrained by her draught
|
||||||
|
* 4 - Moored
|
||||||
|
* 5 - Aground
|
||||||
|
* 6 - Engaged in fishing
|
||||||
|
* 7 - Under way sailing
|
||||||
|
* 8 - Not defined
|
||||||
latitude:
|
latitude:
|
||||||
type: number
|
type: number
|
||||||
format: float
|
format: float
|
||||||
@ -117,9 +131,14 @@ AISModActions:
|
|||||||
description: AISMod
|
description: AISMod
|
||||||
properties:
|
properties:
|
||||||
tx:
|
tx:
|
||||||
type: object
|
type: integer
|
||||||
properties:
|
|
||||||
data:
|
|
||||||
type: string
|
|
||||||
description: >
|
description: >
|
||||||
Transmit a message
|
Transmit stored message
|
||||||
|
* 0 - do nothing
|
||||||
|
* 1 - transmit
|
||||||
|
encode:
|
||||||
|
type: integer
|
||||||
|
description: >
|
||||||
|
Encode message from discrete data
|
||||||
|
* 0 - do nothing
|
||||||
|
* 1 - encode
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
AISDemodSettings:
|
AISDemodSettings:
|
||||||
description: AISDemod
|
description: AISDemod
|
||||||
properties:
|
properties:
|
||||||
|
baud:
|
||||||
|
type: integer
|
||||||
|
description: baud rate (nominal is 9600)
|
||||||
inputFrequencyOffset:
|
inputFrequencyOffset:
|
||||||
type: integer
|
type: integer
|
||||||
format: int64
|
format: int64
|
||||||
|
@ -32,8 +32,6 @@ AISModSettings:
|
|||||||
type: integer
|
type: integer
|
||||||
rampRange:
|
rampRange:
|
||||||
type: integer
|
type: integer
|
||||||
lpfTaps:
|
|
||||||
type: integer
|
|
||||||
rfNoise:
|
rfNoise:
|
||||||
type: integer
|
type: integer
|
||||||
description: >
|
description: >
|
||||||
@ -46,14 +44,30 @@ AISModSettings:
|
|||||||
Boolean
|
Boolean
|
||||||
* 0 - off
|
* 0 - off
|
||||||
* 1 - on
|
* 1 - on
|
||||||
spectrumRate:
|
msgType:
|
||||||
type: integer
|
|
||||||
msgId:
|
|
||||||
type: integer
|
type: integer
|
||||||
|
description: >
|
||||||
|
Message Type
|
||||||
|
* 0 - Scheduled position report
|
||||||
|
* 1 - Assigned position report
|
||||||
|
* 2 - Special position report
|
||||||
|
* 3 - Base station report
|
||||||
mmsi:
|
mmsi:
|
||||||
type: string
|
type: string
|
||||||
status:
|
status:
|
||||||
type: integer
|
type: integer
|
||||||
|
description: >
|
||||||
|
Ship status
|
||||||
|
* 0 - Under way using engine
|
||||||
|
* 1 - At anchor
|
||||||
|
* 2 - Not under command
|
||||||
|
* 3 - Restricted manoeuvrability
|
||||||
|
* 4 - Constrained by her draught
|
||||||
|
* 4 - Moored
|
||||||
|
* 5 - Aground
|
||||||
|
* 6 - Engaged in fishing
|
||||||
|
* 7 - Under way sailing
|
||||||
|
* 8 - Not defined
|
||||||
latitude:
|
latitude:
|
||||||
type: number
|
type: number
|
||||||
format: float
|
format: float
|
||||||
@ -117,9 +131,14 @@ AISModActions:
|
|||||||
description: AISMod
|
description: AISMod
|
||||||
properties:
|
properties:
|
||||||
tx:
|
tx:
|
||||||
type: object
|
type: integer
|
||||||
properties:
|
|
||||||
data:
|
|
||||||
type: string
|
|
||||||
description: >
|
description: >
|
||||||
Transmit a message
|
Transmit stored message
|
||||||
|
* 0 - do nothing
|
||||||
|
* 1 - transmit
|
||||||
|
encode:
|
||||||
|
type: integer
|
||||||
|
description: >
|
||||||
|
Encode message from discrete data
|
||||||
|
* 0 - do nothing
|
||||||
|
* 1 - encode
|
||||||
|
@ -920,6 +920,10 @@ margin-bottom: 20px;
|
|||||||
};
|
};
|
||||||
defs.AISDemodSettings = {
|
defs.AISDemodSettings = {
|
||||||
"properties" : {
|
"properties" : {
|
||||||
|
"baud" : {
|
||||||
|
"type" : "integer",
|
||||||
|
"description" : "baud rate (nominal is 9600)"
|
||||||
|
},
|
||||||
"inputFrequencyOffset" : {
|
"inputFrequencyOffset" : {
|
||||||
"type" : "integer",
|
"type" : "integer",
|
||||||
"format" : "int64"
|
"format" : "int64"
|
||||||
@ -990,18 +994,15 @@ margin-bottom: 20px;
|
|||||||
defs.AISModActions = {
|
defs.AISModActions = {
|
||||||
"properties" : {
|
"properties" : {
|
||||||
"tx" : {
|
"tx" : {
|
||||||
"$ref" : "#/definitions/AISModActions_tx"
|
"type" : "integer",
|
||||||
|
"description" : "Transmit stored message\n * 0 - do nothing\n * 1 - transmit\n"
|
||||||
|
},
|
||||||
|
"encode" : {
|
||||||
|
"type" : "integer",
|
||||||
|
"description" : "Encode message from discrete data\n * 0 - do nothing\n * 1 - encode\n"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
"description" : "AISMod"
|
"description" : "AISMod"
|
||||||
};
|
|
||||||
defs.AISModActions_tx = {
|
|
||||||
"properties" : {
|
|
||||||
"data" : {
|
|
||||||
"type" : "string"
|
|
||||||
}
|
|
||||||
},
|
|
||||||
"description" : "Transmit a message\n"
|
|
||||||
};
|
};
|
||||||
defs.AISModReport = {
|
defs.AISModReport = {
|
||||||
"properties" : {
|
"properties" : {
|
||||||
@ -1061,9 +1062,6 @@ margin-bottom: 20px;
|
|||||||
"rampRange" : {
|
"rampRange" : {
|
||||||
"type" : "integer"
|
"type" : "integer"
|
||||||
},
|
},
|
||||||
"lpfTaps" : {
|
|
||||||
"type" : "integer"
|
|
||||||
},
|
|
||||||
"rfNoise" : {
|
"rfNoise" : {
|
||||||
"type" : "integer",
|
"type" : "integer",
|
||||||
"description" : "Boolean\n * 0 - off\n * 1 - on\n"
|
"description" : "Boolean\n * 0 - off\n * 1 - on\n"
|
||||||
@ -1072,17 +1070,16 @@ margin-bottom: 20px;
|
|||||||
"type" : "integer",
|
"type" : "integer",
|
||||||
"description" : "Boolean\n * 0 - off\n * 1 - on\n"
|
"description" : "Boolean\n * 0 - off\n * 1 - on\n"
|
||||||
},
|
},
|
||||||
"spectrumRate" : {
|
"msgType" : {
|
||||||
"type" : "integer"
|
"type" : "integer",
|
||||||
},
|
"description" : "Message Type\n * 0 - Scheduled position report\n * 1 - Assigned position report\n * 2 - Special position report\n * 3 - Base station report\n"
|
||||||
"msgId" : {
|
|
||||||
"type" : "integer"
|
|
||||||
},
|
},
|
||||||
"mmsi" : {
|
"mmsi" : {
|
||||||
"type" : "string"
|
"type" : "string"
|
||||||
},
|
},
|
||||||
"status" : {
|
"status" : {
|
||||||
"type" : "integer"
|
"type" : "integer",
|
||||||
|
"description" : "Ship status\n * 0 - Under way using engine\n * 1 - At anchor\n * 2 - Not under command\n * 3 - Restricted manoeuvrability\n * 4 - Constrained by her draught\n * 4 - Moored\n * 5 - Aground\n * 6 - Engaged in fishing\n * 7 - Under way sailing\n * 8 - Not defined\n"
|
||||||
},
|
},
|
||||||
"latitude" : {
|
"latitude" : {
|
||||||
"type" : "number",
|
"type" : "number",
|
||||||
@ -51301,7 +51298,7 @@ except ApiException as e:
|
|||||||
</div>
|
</div>
|
||||||
<div id="generator">
|
<div id="generator">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
Generated 2021-11-08T23:01:01.926+01:00
|
Generated 2021-11-11T23:23:22.877+01:00
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
</div>
|
</div>
|
||||||
|
@ -28,6 +28,8 @@ SWGAISDemodSettings::SWGAISDemodSettings(QString* json) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SWGAISDemodSettings::SWGAISDemodSettings() {
|
SWGAISDemodSettings::SWGAISDemodSettings() {
|
||||||
|
baud = 0;
|
||||||
|
m_baud_isSet = false;
|
||||||
input_frequency_offset = 0L;
|
input_frequency_offset = 0L;
|
||||||
m_input_frequency_offset_isSet = false;
|
m_input_frequency_offset_isSet = false;
|
||||||
rf_bandwidth = 0.0f;
|
rf_bandwidth = 0.0f;
|
||||||
@ -72,6 +74,8 @@ SWGAISDemodSettings::~SWGAISDemodSettings() {
|
|||||||
|
|
||||||
void
|
void
|
||||||
SWGAISDemodSettings::init() {
|
SWGAISDemodSettings::init() {
|
||||||
|
baud = 0;
|
||||||
|
m_baud_isSet = false;
|
||||||
input_frequency_offset = 0L;
|
input_frequency_offset = 0L;
|
||||||
m_input_frequency_offset_isSet = false;
|
m_input_frequency_offset_isSet = false;
|
||||||
rf_bandwidth = 0.0f;
|
rf_bandwidth = 0.0f;
|
||||||
@ -117,6 +121,7 @@ SWGAISDemodSettings::cleanup() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(udp_address != nullptr) {
|
if(udp_address != nullptr) {
|
||||||
delete udp_address;
|
delete udp_address;
|
||||||
}
|
}
|
||||||
@ -151,6 +156,8 @@ SWGAISDemodSettings::fromJson(QString &json) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
SWGAISDemodSettings::fromJsonObject(QJsonObject &pJson) {
|
SWGAISDemodSettings::fromJsonObject(QJsonObject &pJson) {
|
||||||
|
::SWGSDRangel::setValue(&baud, pJson["baud"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&input_frequency_offset, pJson["inputFrequencyOffset"], "qint64", "");
|
::SWGSDRangel::setValue(&input_frequency_offset, pJson["inputFrequencyOffset"], "qint64", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&rf_bandwidth, pJson["rfBandwidth"], "float", "");
|
::SWGSDRangel::setValue(&rf_bandwidth, pJson["rfBandwidth"], "float", "");
|
||||||
@ -203,6 +210,9 @@ SWGAISDemodSettings::asJson ()
|
|||||||
QJsonObject*
|
QJsonObject*
|
||||||
SWGAISDemodSettings::asJsonObject() {
|
SWGAISDemodSettings::asJsonObject() {
|
||||||
QJsonObject* obj = new QJsonObject();
|
QJsonObject* obj = new QJsonObject();
|
||||||
|
if(m_baud_isSet){
|
||||||
|
obj->insert("baud", QJsonValue(baud));
|
||||||
|
}
|
||||||
if(m_input_frequency_offset_isSet){
|
if(m_input_frequency_offset_isSet){
|
||||||
obj->insert("inputFrequencyOffset", QJsonValue(input_frequency_offset));
|
obj->insert("inputFrequencyOffset", QJsonValue(input_frequency_offset));
|
||||||
}
|
}
|
||||||
@ -261,6 +271,16 @@ SWGAISDemodSettings::asJsonObject() {
|
|||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qint32
|
||||||
|
SWGAISDemodSettings::getBaud() {
|
||||||
|
return baud;
|
||||||
|
}
|
||||||
|
void
|
||||||
|
SWGAISDemodSettings::setBaud(qint32 baud) {
|
||||||
|
this->baud = baud;
|
||||||
|
this->m_baud_isSet = true;
|
||||||
|
}
|
||||||
|
|
||||||
qint64
|
qint64
|
||||||
SWGAISDemodSettings::getInputFrequencyOffset() {
|
SWGAISDemodSettings::getInputFrequencyOffset() {
|
||||||
return input_frequency_offset;
|
return input_frequency_offset;
|
||||||
@ -446,6 +466,9 @@ bool
|
|||||||
SWGAISDemodSettings::isSet(){
|
SWGAISDemodSettings::isSet(){
|
||||||
bool isObjectUpdated = false;
|
bool isObjectUpdated = false;
|
||||||
do{
|
do{
|
||||||
|
if(m_baud_isSet){
|
||||||
|
isObjectUpdated = true; break;
|
||||||
|
}
|
||||||
if(m_input_frequency_offset_isSet){
|
if(m_input_frequency_offset_isSet){
|
||||||
isObjectUpdated = true; break;
|
isObjectUpdated = true; break;
|
||||||
}
|
}
|
||||||
|
@ -42,6 +42,9 @@ public:
|
|||||||
virtual void fromJsonObject(QJsonObject &json) override;
|
virtual void fromJsonObject(QJsonObject &json) override;
|
||||||
virtual SWGAISDemodSettings* fromJson(QString &jsonString) override;
|
virtual SWGAISDemodSettings* fromJson(QString &jsonString) override;
|
||||||
|
|
||||||
|
qint32 getBaud();
|
||||||
|
void setBaud(qint32 baud);
|
||||||
|
|
||||||
qint64 getInputFrequencyOffset();
|
qint64 getInputFrequencyOffset();
|
||||||
void setInputFrequencyOffset(qint64 input_frequency_offset);
|
void setInputFrequencyOffset(qint64 input_frequency_offset);
|
||||||
|
|
||||||
@ -100,6 +103,9 @@ public:
|
|||||||
virtual bool isSet() override;
|
virtual bool isSet() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
qint32 baud;
|
||||||
|
bool m_baud_isSet;
|
||||||
|
|
||||||
qint64 input_frequency_offset;
|
qint64 input_frequency_offset;
|
||||||
bool m_input_frequency_offset_isSet;
|
bool m_input_frequency_offset_isSet;
|
||||||
|
|
||||||
|
@ -28,8 +28,10 @@ SWGAISModActions::SWGAISModActions(QString* json) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
SWGAISModActions::SWGAISModActions() {
|
SWGAISModActions::SWGAISModActions() {
|
||||||
tx = nullptr;
|
tx = 0;
|
||||||
m_tx_isSet = false;
|
m_tx_isSet = false;
|
||||||
|
encode = 0;
|
||||||
|
m_encode_isSet = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
SWGAISModActions::~SWGAISModActions() {
|
SWGAISModActions::~SWGAISModActions() {
|
||||||
@ -38,15 +40,16 @@ SWGAISModActions::~SWGAISModActions() {
|
|||||||
|
|
||||||
void
|
void
|
||||||
SWGAISModActions::init() {
|
SWGAISModActions::init() {
|
||||||
tx = new SWGAISModActions_tx();
|
tx = 0;
|
||||||
m_tx_isSet = false;
|
m_tx_isSet = false;
|
||||||
|
encode = 0;
|
||||||
|
m_encode_isSet = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
SWGAISModActions::cleanup() {
|
SWGAISModActions::cleanup() {
|
||||||
if(tx != nullptr) {
|
|
||||||
delete tx;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
SWGAISModActions*
|
SWGAISModActions*
|
||||||
@ -60,7 +63,9 @@ SWGAISModActions::fromJson(QString &json) {
|
|||||||
|
|
||||||
void
|
void
|
||||||
SWGAISModActions::fromJsonObject(QJsonObject &pJson) {
|
SWGAISModActions::fromJsonObject(QJsonObject &pJson) {
|
||||||
::SWGSDRangel::setValue(&tx, pJson["tx"], "SWGAISModActions_tx", "SWGAISModActions_tx");
|
::SWGSDRangel::setValue(&tx, pJson["tx"], "qint32", "");
|
||||||
|
|
||||||
|
::SWGSDRangel::setValue(&encode, pJson["encode"], "qint32", "");
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -78,29 +83,45 @@ SWGAISModActions::asJson ()
|
|||||||
QJsonObject*
|
QJsonObject*
|
||||||
SWGAISModActions::asJsonObject() {
|
SWGAISModActions::asJsonObject() {
|
||||||
QJsonObject* obj = new QJsonObject();
|
QJsonObject* obj = new QJsonObject();
|
||||||
if((tx != nullptr) && (tx->isSet())){
|
if(m_tx_isSet){
|
||||||
toJsonValue(QString("tx"), tx, obj, QString("SWGAISModActions_tx"));
|
obj->insert("tx", QJsonValue(tx));
|
||||||
|
}
|
||||||
|
if(m_encode_isSet){
|
||||||
|
obj->insert("encode", QJsonValue(encode));
|
||||||
}
|
}
|
||||||
|
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
|
|
||||||
SWGAISModActions_tx*
|
qint32
|
||||||
SWGAISModActions::getTx() {
|
SWGAISModActions::getTx() {
|
||||||
return tx;
|
return tx;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGAISModActions::setTx(SWGAISModActions_tx* tx) {
|
SWGAISModActions::setTx(qint32 tx) {
|
||||||
this->tx = tx;
|
this->tx = tx;
|
||||||
this->m_tx_isSet = true;
|
this->m_tx_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
qint32
|
||||||
|
SWGAISModActions::getEncode() {
|
||||||
|
return encode;
|
||||||
|
}
|
||||||
|
void
|
||||||
|
SWGAISModActions::setEncode(qint32 encode) {
|
||||||
|
this->encode = encode;
|
||||||
|
this->m_encode_isSet = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
bool
|
bool
|
||||||
SWGAISModActions::isSet(){
|
SWGAISModActions::isSet(){
|
||||||
bool isObjectUpdated = false;
|
bool isObjectUpdated = false;
|
||||||
do{
|
do{
|
||||||
if(tx && tx->isSet()){
|
if(m_tx_isSet){
|
||||||
|
isObjectUpdated = true; break;
|
||||||
|
}
|
||||||
|
if(m_encode_isSet){
|
||||||
isObjectUpdated = true; break;
|
isObjectUpdated = true; break;
|
||||||
}
|
}
|
||||||
}while(false);
|
}while(false);
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#include <QJsonObject>
|
#include <QJsonObject>
|
||||||
|
|
||||||
|
|
||||||
#include "SWGAISModActions_tx.h"
|
|
||||||
|
|
||||||
#include "SWGObject.h"
|
#include "SWGObject.h"
|
||||||
#include "export.h"
|
#include "export.h"
|
||||||
@ -42,16 +41,22 @@ public:
|
|||||||
virtual void fromJsonObject(QJsonObject &json) override;
|
virtual void fromJsonObject(QJsonObject &json) override;
|
||||||
virtual SWGAISModActions* fromJson(QString &jsonString) override;
|
virtual SWGAISModActions* fromJson(QString &jsonString) override;
|
||||||
|
|
||||||
SWGAISModActions_tx* getTx();
|
qint32 getTx();
|
||||||
void setTx(SWGAISModActions_tx* tx);
|
void setTx(qint32 tx);
|
||||||
|
|
||||||
|
qint32 getEncode();
|
||||||
|
void setEncode(qint32 encode);
|
||||||
|
|
||||||
|
|
||||||
virtual bool isSet() override;
|
virtual bool isSet() override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
SWGAISModActions_tx* tx;
|
qint32 tx;
|
||||||
bool m_tx_isSet;
|
bool m_tx_isSet;
|
||||||
|
|
||||||
|
qint32 encode;
|
||||||
|
bool m_encode_isSet;
|
||||||
|
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -52,16 +52,12 @@ SWGAISModSettings::SWGAISModSettings() {
|
|||||||
m_ramp_down_bits_isSet = false;
|
m_ramp_down_bits_isSet = false;
|
||||||
ramp_range = 0;
|
ramp_range = 0;
|
||||||
m_ramp_range_isSet = false;
|
m_ramp_range_isSet = false;
|
||||||
lpf_taps = 0;
|
|
||||||
m_lpf_taps_isSet = false;
|
|
||||||
rf_noise = 0;
|
rf_noise = 0;
|
||||||
m_rf_noise_isSet = false;
|
m_rf_noise_isSet = false;
|
||||||
write_to_file = 0;
|
write_to_file = 0;
|
||||||
m_write_to_file_isSet = false;
|
m_write_to_file_isSet = false;
|
||||||
spectrum_rate = 0;
|
msg_type = 0;
|
||||||
m_spectrum_rate_isSet = false;
|
m_msg_type_isSet = false;
|
||||||
msg_id = 0;
|
|
||||||
m_msg_id_isSet = false;
|
|
||||||
mmsi = nullptr;
|
mmsi = nullptr;
|
||||||
m_mmsi_isSet = false;
|
m_mmsi_isSet = false;
|
||||||
status = 0;
|
status = 0;
|
||||||
@ -136,16 +132,12 @@ SWGAISModSettings::init() {
|
|||||||
m_ramp_down_bits_isSet = false;
|
m_ramp_down_bits_isSet = false;
|
||||||
ramp_range = 0;
|
ramp_range = 0;
|
||||||
m_ramp_range_isSet = false;
|
m_ramp_range_isSet = false;
|
||||||
lpf_taps = 0;
|
|
||||||
m_lpf_taps_isSet = false;
|
|
||||||
rf_noise = 0;
|
rf_noise = 0;
|
||||||
m_rf_noise_isSet = false;
|
m_rf_noise_isSet = false;
|
||||||
write_to_file = 0;
|
write_to_file = 0;
|
||||||
m_write_to_file_isSet = false;
|
m_write_to_file_isSet = false;
|
||||||
spectrum_rate = 0;
|
msg_type = 0;
|
||||||
m_spectrum_rate_isSet = false;
|
m_msg_type_isSet = false;
|
||||||
msg_id = 0;
|
|
||||||
m_msg_id_isSet = false;
|
|
||||||
mmsi = new QString("");
|
mmsi = new QString("");
|
||||||
m_mmsi_isSet = false;
|
m_mmsi_isSet = false;
|
||||||
status = 0;
|
status = 0;
|
||||||
@ -207,8 +199,6 @@ SWGAISModSettings::cleanup() {
|
|||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
if(mmsi != nullptr) {
|
if(mmsi != nullptr) {
|
||||||
delete mmsi;
|
delete mmsi;
|
||||||
}
|
}
|
||||||
@ -277,15 +267,11 @@ SWGAISModSettings::fromJsonObject(QJsonObject &pJson) {
|
|||||||
|
|
||||||
::SWGSDRangel::setValue(&ramp_range, pJson["rampRange"], "qint32", "");
|
::SWGSDRangel::setValue(&ramp_range, pJson["rampRange"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&lpf_taps, pJson["lpfTaps"], "qint32", "");
|
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&rf_noise, pJson["rfNoise"], "qint32", "");
|
::SWGSDRangel::setValue(&rf_noise, pJson["rfNoise"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&write_to_file, pJson["writeToFile"], "qint32", "");
|
::SWGSDRangel::setValue(&write_to_file, pJson["writeToFile"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&spectrum_rate, pJson["spectrumRate"], "qint32", "");
|
::SWGSDRangel::setValue(&msg_type, pJson["msgType"], "qint32", "");
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&msg_id, pJson["msgId"], "qint32", "");
|
|
||||||
|
|
||||||
::SWGSDRangel::setValue(&mmsi, pJson["mmsi"], "QString", "QString");
|
::SWGSDRangel::setValue(&mmsi, pJson["mmsi"], "QString", "QString");
|
||||||
|
|
||||||
@ -381,20 +367,14 @@ SWGAISModSettings::asJsonObject() {
|
|||||||
if(m_ramp_range_isSet){
|
if(m_ramp_range_isSet){
|
||||||
obj->insert("rampRange", QJsonValue(ramp_range));
|
obj->insert("rampRange", QJsonValue(ramp_range));
|
||||||
}
|
}
|
||||||
if(m_lpf_taps_isSet){
|
|
||||||
obj->insert("lpfTaps", QJsonValue(lpf_taps));
|
|
||||||
}
|
|
||||||
if(m_rf_noise_isSet){
|
if(m_rf_noise_isSet){
|
||||||
obj->insert("rfNoise", QJsonValue(rf_noise));
|
obj->insert("rfNoise", QJsonValue(rf_noise));
|
||||||
}
|
}
|
||||||
if(m_write_to_file_isSet){
|
if(m_write_to_file_isSet){
|
||||||
obj->insert("writeToFile", QJsonValue(write_to_file));
|
obj->insert("writeToFile", QJsonValue(write_to_file));
|
||||||
}
|
}
|
||||||
if(m_spectrum_rate_isSet){
|
if(m_msg_type_isSet){
|
||||||
obj->insert("spectrumRate", QJsonValue(spectrum_rate));
|
obj->insert("msgType", QJsonValue(msg_type));
|
||||||
}
|
|
||||||
if(m_msg_id_isSet){
|
|
||||||
obj->insert("msgId", QJsonValue(msg_id));
|
|
||||||
}
|
}
|
||||||
if(mmsi != nullptr && *mmsi != QString("")){
|
if(mmsi != nullptr && *mmsi != QString("")){
|
||||||
toJsonValue(QString("mmsi"), mmsi, obj, QString("QString"));
|
toJsonValue(QString("mmsi"), mmsi, obj, QString("QString"));
|
||||||
@ -583,16 +563,6 @@ SWGAISModSettings::setRampRange(qint32 ramp_range) {
|
|||||||
this->m_ramp_range_isSet = true;
|
this->m_ramp_range_isSet = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
|
||||||
SWGAISModSettings::getLpfTaps() {
|
|
||||||
return lpf_taps;
|
|
||||||
}
|
|
||||||
void
|
|
||||||
SWGAISModSettings::setLpfTaps(qint32 lpf_taps) {
|
|
||||||
this->lpf_taps = lpf_taps;
|
|
||||||
this->m_lpf_taps_isSet = true;
|
|
||||||
}
|
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGAISModSettings::getRfNoise() {
|
SWGAISModSettings::getRfNoise() {
|
||||||
return rf_noise;
|
return rf_noise;
|
||||||
@ -614,23 +584,13 @@ SWGAISModSettings::setWriteToFile(qint32 write_to_file) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
qint32
|
qint32
|
||||||
SWGAISModSettings::getSpectrumRate() {
|
SWGAISModSettings::getMsgType() {
|
||||||
return spectrum_rate;
|
return msg_type;
|
||||||
}
|
}
|
||||||
void
|
void
|
||||||
SWGAISModSettings::setSpectrumRate(qint32 spectrum_rate) {
|
SWGAISModSettings::setMsgType(qint32 msg_type) {
|
||||||
this->spectrum_rate = spectrum_rate;
|
this->msg_type = msg_type;
|
||||||
this->m_spectrum_rate_isSet = true;
|
this->m_msg_type_isSet = true;
|
||||||
}
|
|
||||||
|
|
||||||
qint32
|
|
||||||
SWGAISModSettings::getMsgId() {
|
|
||||||
return msg_id;
|
|
||||||
}
|
|
||||||
void
|
|
||||||
SWGAISModSettings::setMsgId(qint32 msg_id) {
|
|
||||||
this->msg_id = msg_id;
|
|
||||||
this->m_msg_id_isSet = true;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
QString*
|
QString*
|
||||||
@ -884,19 +844,13 @@ SWGAISModSettings::isSet(){
|
|||||||
if(m_ramp_range_isSet){
|
if(m_ramp_range_isSet){
|
||||||
isObjectUpdated = true; break;
|
isObjectUpdated = true; break;
|
||||||
}
|
}
|
||||||
if(m_lpf_taps_isSet){
|
|
||||||
isObjectUpdated = true; break;
|
|
||||||
}
|
|
||||||
if(m_rf_noise_isSet){
|
if(m_rf_noise_isSet){
|
||||||
isObjectUpdated = true; break;
|
isObjectUpdated = true; break;
|
||||||
}
|
}
|
||||||
if(m_write_to_file_isSet){
|
if(m_write_to_file_isSet){
|
||||||
isObjectUpdated = true; break;
|
isObjectUpdated = true; break;
|
||||||
}
|
}
|
||||||
if(m_spectrum_rate_isSet){
|
if(m_msg_type_isSet){
|
||||||
isObjectUpdated = true; break;
|
|
||||||
}
|
|
||||||
if(m_msg_id_isSet){
|
|
||||||
isObjectUpdated = true; break;
|
isObjectUpdated = true; break;
|
||||||
}
|
}
|
||||||
if(mmsi && *mmsi != QString("")){
|
if(mmsi && *mmsi != QString("")){
|
||||||
|
@ -78,20 +78,14 @@ public:
|
|||||||
qint32 getRampRange();
|
qint32 getRampRange();
|
||||||
void setRampRange(qint32 ramp_range);
|
void setRampRange(qint32 ramp_range);
|
||||||
|
|
||||||
qint32 getLpfTaps();
|
|
||||||
void setLpfTaps(qint32 lpf_taps);
|
|
||||||
|
|
||||||
qint32 getRfNoise();
|
qint32 getRfNoise();
|
||||||
void setRfNoise(qint32 rf_noise);
|
void setRfNoise(qint32 rf_noise);
|
||||||
|
|
||||||
qint32 getWriteToFile();
|
qint32 getWriteToFile();
|
||||||
void setWriteToFile(qint32 write_to_file);
|
void setWriteToFile(qint32 write_to_file);
|
||||||
|
|
||||||
qint32 getSpectrumRate();
|
qint32 getMsgType();
|
||||||
void setSpectrumRate(qint32 spectrum_rate);
|
void setMsgType(qint32 msg_type);
|
||||||
|
|
||||||
qint32 getMsgId();
|
|
||||||
void setMsgId(qint32 msg_id);
|
|
||||||
|
|
||||||
QString* getMmsi();
|
QString* getMmsi();
|
||||||
void setMmsi(QString* mmsi);
|
void setMmsi(QString* mmsi);
|
||||||
@ -196,20 +190,14 @@ private:
|
|||||||
qint32 ramp_range;
|
qint32 ramp_range;
|
||||||
bool m_ramp_range_isSet;
|
bool m_ramp_range_isSet;
|
||||||
|
|
||||||
qint32 lpf_taps;
|
|
||||||
bool m_lpf_taps_isSet;
|
|
||||||
|
|
||||||
qint32 rf_noise;
|
qint32 rf_noise;
|
||||||
bool m_rf_noise_isSet;
|
bool m_rf_noise_isSet;
|
||||||
|
|
||||||
qint32 write_to_file;
|
qint32 write_to_file;
|
||||||
bool m_write_to_file_isSet;
|
bool m_write_to_file_isSet;
|
||||||
|
|
||||||
qint32 spectrum_rate;
|
qint32 msg_type;
|
||||||
bool m_spectrum_rate_isSet;
|
bool m_msg_type_isSet;
|
||||||
|
|
||||||
qint32 msg_id;
|
|
||||||
bool m_msg_id_isSet;
|
|
||||||
|
|
||||||
QString* mmsi;
|
QString* mmsi;
|
||||||
bool m_mmsi_isSet;
|
bool m_mmsi_isSet;
|
||||||
|
@ -22,7 +22,6 @@
|
|||||||
#include "SWGAISDemodReport.h"
|
#include "SWGAISDemodReport.h"
|
||||||
#include "SWGAISDemodSettings.h"
|
#include "SWGAISDemodSettings.h"
|
||||||
#include "SWGAISModActions.h"
|
#include "SWGAISModActions.h"
|
||||||
#include "SWGAISModActions_tx.h"
|
|
||||||
#include "SWGAISModReport.h"
|
#include "SWGAISModReport.h"
|
||||||
#include "SWGAISModSettings.h"
|
#include "SWGAISModSettings.h"
|
||||||
#include "SWGAISSettings.h"
|
#include "SWGAISSettings.h"
|
||||||
@ -350,11 +349,6 @@ namespace SWGSDRangel {
|
|||||||
obj->init();
|
obj->init();
|
||||||
return obj;
|
return obj;
|
||||||
}
|
}
|
||||||
if(QString("SWGAISModActions_tx").compare(type) == 0) {
|
|
||||||
SWGAISModActions_tx *obj = new SWGAISModActions_tx();
|
|
||||||
obj->init();
|
|
||||||
return obj;
|
|
||||||
}
|
|
||||||
if(QString("SWGAISModReport").compare(type) == 0) {
|
if(QString("SWGAISModReport").compare(type) == 0) {
|
||||||
SWGAISModReport *obj = new SWGAISModReport();
|
SWGAISModReport *obj = new SWGAISModReport();
|
||||||
obj->init();
|
obj->init();
|
||||||
|
Loading…
Reference in New Issue
Block a user