diff --git a/plugins/channelrx/demodnavtex/navtexdemodsink.cpp b/plugins/channelrx/demodnavtex/navtexdemodsink.cpp
index 0ed543ed2..14ab40bd3 100644
--- a/plugins/channelrx/demodnavtex/navtexdemodsink.cpp
+++ b/plugins/channelrx/demodnavtex/navtexdemodsink.cpp
@@ -340,7 +340,7 @@ void NavtexDemodSink::receiveBit(bool bit)
{
if (m_bitCount == 7)
{
- char c = m_sitorBDecoder.decode(m_bits & 0x7f);
+ signed char c = m_sitorBDecoder.decode(m_bits & 0x7f);
if (c != -1)
{
//qDebug() << "Out: " << SitorBDecoder::printable(c);
diff --git a/plugins/channelrx/demodnavtex/readme.md b/plugins/channelrx/demodnavtex/readme.md
index a36e6639b..20e5e5680 100644
--- a/plugins/channelrx/demodnavtex/readme.md
+++ b/plugins/channelrx/demodnavtex/readme.md
@@ -7,6 +7,10 @@ These are broadcast worldwide on 518kHz (in English for international messages),
Navtex messages are transmitted using FSK with 170Hz separation at 100 baud, using [SITOR-B](https://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.625-4-201203-I!!PDF-E.pdf]) encoding.
The [Map](../../feature/map/readme.md) feature can display the location of Navtex transmitters, along with their transmission times and frequencies.
+The Navtex demodulator will only attempt to start demodulating data after it detects the phasing signal, that is broadcast before each message.
+Therefore, if you enable the demodulator part way through a message, it may take a while before you see any output, even if the signal appears strong,
+as the data rate is so low.
+
Interface
The top and bottom bars of the channel window are described [here](../../../sdrgui/channel/readme.md)
diff --git a/sdrbase/util/navtex.cpp b/sdrbase/util/navtex.cpp
index 37dd9600a..195e0c232 100644
--- a/sdrbase/util/navtex.cpp
+++ b/sdrbase/util/navtex.cpp
@@ -137,7 +137,7 @@ const QList NavtexTransmitter::m_navtexTransmitters = {
{6, "Ushuaia", -54.8, -68.3, {NavtexTransmitter::Schedule('M', 518000, {QTime(2, 0), QTime(6, 0), QTime(10, 0), QTime(14, 0), QTime(18, 0), QTime(22, 0)})}},
{6, "Rio Gallegos", -51.616667, -69.216667, {NavtexTransmitter::Schedule('N', 518000, {QTime(2, 10), QTime(6, 10), QTime(10, 10), QTime(14, 10), QTime(18, 10), QTime(22, 10)})}},
{6, "Comodoro Rivadavia", -45.85, -67.416667, {NavtexTransmitter::Schedule('O', 518000, {QTime(2, 20), QTime(6, 20), QTime(10, 20), QTime(14, 20), QTime(18, 20), QTime(22, 20)})}},
- {6, "Bahía Blanca", -38.716667, -62.1, {NavtexTransmitter::Schedule('P', 518000, {QTime(2, 30), QTime(6, 30), QTime(10, 30), QTime(14, 30), QTime(18, 30), QTime(22, 30)})}},
+ {6, "BahÃa Blanca", -38.716667, -62.1, {NavtexTransmitter::Schedule('P', 518000, {QTime(2, 30), QTime(6, 30), QTime(10, 30), QTime(14, 30), QTime(18, 30), QTime(22, 30)})}},
{6, "Mar del Plata", -38.05, -57.533333, {NavtexTransmitter::Schedule('Q', 518000, {QTime(2, 40), QTime(6, 40), QTime(10, 40), QTime(14, 40), QTime(18, 40), QTime(22, 40)})}},
{6, "Buenos Aires", -34.6, -58.366667, {NavtexTransmitter::Schedule('R', 518000, {QTime(2, 50), QTime(6, 50), QTime(10, 50), QTime(14, 50), QTime(18, 50), QTime(22, 50)})}},
@@ -214,7 +214,7 @@ const QList NavtexTransmitter::m_navtexTransmitters = {
{13, "Astrakhan", 46.296694, 47.997778, {NavtexTransmitter::Schedule('W', 518000, {QTime(3, 40), QTime(7, 40), QTime(12, 40), QTime(15, 40), QTime(19, 40), QTime(23, 40)})}},
{15, "Antofagasta", -23.491333, -70.424778, {NavtexTransmitter::Schedule('A', 518000, {QTime(4, 0), QTime(12, 0), QTime(20, 0)})}},
- {15, "Valparaíso", -32.802222, -71.485, {NavtexTransmitter::Schedule('B', 518000, {QTime(4, 10), QTime(12, 10), QTime(20, 10)})}},
+ {15, "ValparaÃso", -32.802222, -71.485, {NavtexTransmitter::Schedule('B', 518000, {QTime(4, 10), QTime(12, 10), QTime(20, 10)})}},
{15, "Talcahuano", -36.715056, -73.108, {NavtexTransmitter::Schedule('C', 518000, {QTime(4, 20), QTime(12, 20), QTime(20, 20)})}},
{15, "Puerto Montt", -41.489983, -72.957744, {NavtexTransmitter::Schedule('D', 518000, {QTime(4, 30), QTime(12, 30), QTime(20, 30)})}},
{15, "Punta Arenas", -52.948111, -71.056944, {NavtexTransmitter::Schedule('E', 518000, {QTime(4, 40), QTime(12, 40), QTime(20, 40)})}},
@@ -341,9 +341,9 @@ void SitorBDecoder::init()
// ETX end of text
// '*' both chars invalid
// -1 no character available yet
-char SitorBDecoder::decode(char c)
+signed char SitorBDecoder::decode(signed char c)
{
- char ret = -1;
+ signed char ret = -1;
//qDebug() << "In: " << printable(ccir476Decode(c));
@@ -380,13 +380,12 @@ char SitorBDecoder::decode(char c)
m_state = FILL_DX;
break;
-
case RX:
{
// Try to decode a character
- char dx = ccir476Decode(m_buf[m_idx]);
- char rx = ccir476Decode(c);
- char a;
+ signed char dx = ccir476Decode(m_buf[m_idx]);
+ signed char rx = ccir476Decode(c);
+ signed char a;
// Idle alpha (phasing 1) in both dx and rx means end of signal
if ((dx == '<') && (rx == '<'))
@@ -432,7 +431,7 @@ char SitorBDecoder::decode(char c)
return ret;
}
-QString SitorBDecoder::printable(char c)
+QString SitorBDecoder::printable(signed char c)
{
if (c == -1) {
return "Unknown";
@@ -447,7 +446,7 @@ QString SitorBDecoder::printable(char c)
} else if (c == 0x7) {
return "Bell";
} else {
- return QString("%1").arg(c);
+ return QString("%1").arg((char)c);
}
}
@@ -455,7 +454,7 @@ QString SitorBDecoder::printable(char c)
// https://www.itu.int/dms_pubrec/itu-r/rec/m/R-REC-M.625-4-201203-I!!PDF-E.pdf
-const char SitorBDecoder::m_ccir476LetterSetDecode[128] = {
+const signed char SitorBDecoder::m_ccir476LetterSetDecode[128] = {
-1,
-1,
-1,
@@ -586,7 +585,7 @@ const char SitorBDecoder::m_ccir476LetterSetDecode[128] = {
-1,
};
-const char SitorBDecoder::m_ccir476FigureSetDecode[128] = {
+const signed char SitorBDecoder::m_ccir476FigureSetDecode[128] = {
-1,
-1,
-1,
@@ -717,7 +716,7 @@ const char SitorBDecoder::m_ccir476FigureSetDecode[128] = {
-1,
};
-char SitorBDecoder::ccir476Decode(char c)
+signed char SitorBDecoder::ccir476Decode(signed char c)
{
if (m_figureSet) {
return m_ccir476FigureSetDecode[(int)c];
diff --git a/sdrbase/util/navtex.h b/sdrbase/util/navtex.h
index e1086240b..2ae4ec10c 100644
--- a/sdrbase/util/navtex.h
+++ b/sdrbase/util/navtex.h
@@ -80,15 +80,15 @@ class SDRBASE_API SitorBDecoder {
public:
void init();
- char decode(char c);
+ signed char decode(signed char c);
int getErrors() const { return m_errors; }
- static QString printable(char c);
+ static QString printable(signed char c);
private:
- static const char PHASING_1 = 0x78;
- static const char PHASING_2 = 0x33;
+ static const signed char PHASING_1 = 0x78;
+ static const signed char PHASING_2 = 0x33;
static const int BUFFER_SIZE = 3;
- char m_buf[3];
+ signed char m_buf[3];
bool m_figureSet;
enum State {
PHASING,
@@ -100,10 +100,10 @@ private:
int m_idx;
int m_errors;
- static const char m_ccir476LetterSetDecode[128];
- static const char m_ccir476FigureSetDecode[128];
+ static const signed char m_ccir476LetterSetDecode[128];
+ static const signed char m_ccir476FigureSetDecode[128];
- char ccir476Decode(char c);
+ signed char ccir476Decode(signed char c);
};