More work on dstar gps decoding
This commit is contained in:
parent
772ae5acbe
commit
74637287fd
5 changed files with 74 additions and 38 deletions
|
@ -336,7 +336,8 @@ void DroidStar::process_connect()
|
||||||
m_mode->set_modem_params(m_modemBaud.toUInt(), rxfreq, txfreq, m_modemTxDelay.toInt(), m_modemRxLevel.toFloat(), m_modemRFLevel.toFloat(), ysfTXHang, m_modemCWIdTxLevel.toFloat(), m_modemDstarTxLevel.toFloat(), m_modemDMRTxLevel.toFloat(), m_modemYSFTxLevel.toFloat(), m_modemP25TxLevel.toFloat(), m_modemNXDNTxLevel.toFloat(), pocsagTXLevel, m17TXLevel);
|
m_mode->set_modem_params(m_modemBaud.toUInt(), rxfreq, txfreq, m_modemTxDelay.toInt(), m_modemRxLevel.toFloat(), m_modemRFLevel.toFloat(), ysfTXHang, m_modemCWIdTxLevel.toFloat(), m_modemDstarTxLevel.toFloat(), m_modemDMRTxLevel.toFloat(), m_modemYSFTxLevel.toFloat(), m_modemP25TxLevel.toFloat(), m_modemNXDNTxLevel.toFloat(), pocsagTXLevel, m17TXLevel);
|
||||||
|
|
||||||
connect(this, SIGNAL(module_changed(char)), m_mode, SLOT(module_changed(char)));
|
connect(this, SIGNAL(module_changed(char)), m_mode, SLOT(module_changed(char)));
|
||||||
connect(m_mode, SIGNAL(update(Mode::MODEINFO)), this, SLOT(update_data(Mode::MODEINFO)));
|
connect(m_mode, SIGNAL(update(Mode::MODEINFO)), this, SLOT(update_data(Mode::MODEINFO)));
|
||||||
|
connect(m_mode, SIGNAL(update_log(QString)), this, SLOT(updatelog(QString)));
|
||||||
connect(m_mode, SIGNAL(update_output_level(unsigned short)), this, SLOT(update_output_level(unsigned short)));
|
connect(m_mode, SIGNAL(update_output_level(unsigned short)), this, SLOT(update_output_level(unsigned short)));
|
||||||
connect(m_modethread, SIGNAL(started()), m_mode, SLOT(begin_connect()));
|
connect(m_modethread, SIGNAL(started()), m_mode, SLOT(begin_connect()));
|
||||||
connect(m_modethread, SIGNAL(finished()), m_mode, SLOT(deleteLater()));
|
connect(m_modethread, SIGNAL(finished()), m_mode, SLOT(deleteLater()));
|
||||||
|
@ -1341,7 +1342,12 @@ void DroidStar::update_data(Mode::MODEINFO info)
|
||||||
emit update_log(t + " " + m_protocol + " RX lost id: " + QString::number(info.streamid, 16) + " src: " + info.src + " dst: " + info.gw2);
|
emit update_log(t + " " + m_protocol + " RX lost id: " + QString::number(info.streamid, 16) + " src: " + info.src + " dst: " + info.gw2);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
emit update_data();
|
emit update_data();
|
||||||
|
}
|
||||||
|
|
||||||
|
void DroidStar::updatelog(QString s)
|
||||||
|
{
|
||||||
|
emit update_log(s);
|
||||||
}
|
}
|
||||||
|
|
||||||
void DroidStar::set_input_volume(qreal v)
|
void DroidStar::set_input_volume(qreal v)
|
||||||
|
|
|
@ -394,6 +394,7 @@ private slots:
|
||||||
void process_dmr_ids();
|
void process_dmr_ids();
|
||||||
void process_nxdn_ids();
|
void process_nxdn_ids();
|
||||||
void update_data(Mode::MODEINFO);
|
void update_data(Mode::MODEINFO);
|
||||||
|
void updatelog(QString);
|
||||||
void save_settings();
|
void save_settings();
|
||||||
void update_output_level(unsigned short l){ m_outlevel = l;}
|
void update_output_level(unsigned short l){ m_outlevel = l;}
|
||||||
//void load_md380_fw();
|
//void load_md380_fw();
|
||||||
|
|
1
main.qml
1
main.qml
|
@ -511,6 +511,7 @@ ApplicationWindow {
|
||||||
mainTab.buttonTX.enabled = true;
|
mainTab.buttonTX.enabled = true;
|
||||||
mainTab.btntxt.color = "black";
|
mainTab.btntxt.color = "black";
|
||||||
mainTab.agcBox.checked = true;
|
mainTab.agcBox.checked = true;
|
||||||
|
droidstar.set_debug(settingsTab.debugBox.checked);
|
||||||
}
|
}
|
||||||
if(c === 3){
|
if(c === 3){
|
||||||
}
|
}
|
||||||
|
|
2
mode.h
2
mode.h
|
@ -98,6 +98,7 @@ public:
|
||||||
QString mmdvm;
|
QString mmdvm;
|
||||||
QString host;
|
QString host;
|
||||||
QString module;
|
QString module;
|
||||||
|
QString gps;
|
||||||
int port;
|
int port;
|
||||||
bool path;
|
bool path;
|
||||||
char type;
|
char type;
|
||||||
|
@ -131,6 +132,7 @@ public:
|
||||||
};
|
};
|
||||||
signals:
|
signals:
|
||||||
void update(Mode::MODEINFO);
|
void update(Mode::MODEINFO);
|
||||||
|
void update_log(QString);
|
||||||
void update_output_level(unsigned short);
|
void update_output_level(unsigned short);
|
||||||
protected slots:
|
protected slots:
|
||||||
virtual void send_disconnect(){}
|
virtual void send_disconnect(){}
|
||||||
|
|
98
ref.cpp
98
ref.cpp
|
@ -44,10 +44,13 @@ void REF::process_udp()
|
||||||
quint16 senderPort;
|
quint16 senderPort;
|
||||||
static bool sd_sync = 0;
|
static bool sd_sync = 0;
|
||||||
static int sd_txt_seq = 0;
|
static int sd_txt_seq = 0;
|
||||||
static int sd_gps_seq = 0;
|
|
||||||
static int sd_gps_cnt = 0;
|
static int sd_gps_cnt = 0;
|
||||||
|
static int sd_hdr_cnt = 0;
|
||||||
|
static int sd_debug_cnt = 0;
|
||||||
static char user_data[21];
|
static char user_data[21];
|
||||||
static char gps_data[100];
|
static QByteArray gps_data;
|
||||||
|
static uint8_t debug_data[64];
|
||||||
|
|
||||||
const uint8_t header[5] = {0x80,0x44,0x53,0x56,0x54};
|
const uint8_t header[5] = {0x80,0x44,0x53,0x56,0x54};
|
||||||
|
|
||||||
buf.resize(m_udp->pendingDatagramSize());
|
buf.resize(m_udp->pendingDatagramSize());
|
||||||
|
@ -177,6 +180,8 @@ void REF::process_udp()
|
||||||
|
|
||||||
qDebug() << "New stream from " << m_modeinfo.src << " to " << m_modeinfo.dst << " id == " << QString::number(m_modeinfo.streamid, 16);
|
qDebug() << "New stream from " << m_modeinfo.src << " to " << m_modeinfo.dst << " id == " << QString::number(m_modeinfo.streamid, 16);
|
||||||
emit update(m_modeinfo);
|
emit update(m_modeinfo);
|
||||||
|
sd_gps_cnt = 0;
|
||||||
|
gps_data.clear();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
|
@ -203,61 +208,82 @@ void REF::process_udp()
|
||||||
if((buf.data()[16] == 0) && (buf.data()[26] == 0x55) && (buf.data()[27] == 0x2d) && (buf.data()[28] == 0x16)){
|
if((buf.data()[16] == 0) && (buf.data()[26] == 0x55) && (buf.data()[27] == 0x2d) && (buf.data()[28] == 0x16)){
|
||||||
sd_sync = 1;
|
sd_sync = 1;
|
||||||
sd_txt_seq = 1;
|
sd_txt_seq = 1;
|
||||||
|
//sd_debug_cnt = 0;
|
||||||
|
//for(int i = 0; i < 63; i++){
|
||||||
|
// fprintf(stderr, "%02x ", debug_data[i]);
|
||||||
|
//}
|
||||||
|
// fprintf(stderr, "\n");
|
||||||
}
|
}
|
||||||
if( sd_sync && (buf.data()[26] & 0xf0) == 0x40){
|
//debug_data[sd_debug_cnt++] = buf.data()[26] ^ 0x70;
|
||||||
sd_gps_cnt = (buf.data()[26] & 0x0f);
|
//debug_data[sd_debug_cnt++] = buf.data()[27] ^ 0x4f;
|
||||||
gps_data[sd_gps_seq] = buf.data()[27] ^ 0x4f;
|
//debug_data[sd_debug_cnt++] = buf.data()[28] ^ 0x93;
|
||||||
|
|
||||||
if( (gps_data[sd_gps_seq] == 0x0a) || (gps_data[sd_gps_seq] == 0x0d) ){
|
char c = buf.data()[26] ^ 0x70;
|
||||||
gps_data[sd_gps_seq] = '\0';
|
|
||||||
sd_gps_seq = 0;
|
if( sd_sync && !sd_gps_cnt && ((c & 0xf0) == 0x50)){
|
||||||
|
sd_hdr_cnt = (c & 0x0f);
|
||||||
|
}
|
||||||
|
else if(sd_hdr_cnt){
|
||||||
|
c = 0;
|
||||||
|
sd_hdr_cnt = 0;
|
||||||
|
}
|
||||||
|
if( sd_sync && !sd_gps_cnt && ((c & 0xf0) == 0x30)){
|
||||||
|
sd_gps_cnt = (c & 0x0f);
|
||||||
|
c = buf.data()[27] ^ 0x4f;
|
||||||
|
if( (c == 0x0a) || (c == 0x0d) ){
|
||||||
|
gps_data.append('\0');
|
||||||
sd_gps_cnt = 0;
|
sd_gps_cnt = 0;
|
||||||
qDebug() << "GPS string: " << QString(gps_data);
|
QTextStream(stderr) << "GPS: " << QString(gps_data) << Qt::endl;
|
||||||
|
if(gps_data[0] == '$') emit update_log("GPS: " + QString(gps_data));
|
||||||
|
gps_data.clear();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
sd_gps_seq++;
|
|
||||||
sd_gps_cnt--;
|
sd_gps_cnt--;
|
||||||
gps_data[sd_gps_seq] = buf.data()[28] ^ 0x93;
|
gps_data.append(c);
|
||||||
if( (gps_data[sd_gps_seq] == 0x0a) || (gps_data[sd_gps_seq] == 0x0d) ){
|
c = buf.data()[28] ^ 0x93;
|
||||||
gps_data[sd_gps_seq] = '\0';
|
if( (c == 0x0a) || (c == 0x0d) ){
|
||||||
sd_gps_seq = 0;
|
gps_data.append('\0');
|
||||||
sd_gps_cnt = 0;
|
sd_gps_cnt = 0;
|
||||||
qDebug() << "GPS string: " << QString(gps_data);
|
QTextStream(stderr) << "GPS: " << QString(gps_data) << Qt::endl;
|
||||||
|
if(gps_data[0] == '$') emit update_log("GPS: " + QString(gps_data));
|
||||||
|
gps_data.clear();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
sd_gps_seq++;
|
|
||||||
sd_gps_cnt--;
|
sd_gps_cnt--;
|
||||||
|
gps_data.append(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(sd_gps_cnt){
|
else if(sd_gps_cnt && (buf.data()[16] != 0)){
|
||||||
gps_data[sd_gps_seq] = buf.data()[26] ^ 0x70;
|
if( (c == 0x0a) || (c == 0x0d) ){
|
||||||
if( (gps_data[sd_gps_seq] == 0x0a) || (gps_data[sd_gps_seq] == 0x0d) ){
|
gps_data.append('\0');
|
||||||
gps_data[sd_gps_seq] = '\0';
|
|
||||||
sd_gps_seq = 0;
|
|
||||||
sd_gps_cnt = 0;
|
sd_gps_cnt = 0;
|
||||||
qDebug() << "GPS string: " << QString(gps_data);
|
QTextStream(stderr) << "GPS: " << QString(gps_data) << Qt::endl;
|
||||||
|
if(gps_data[0] == '$') emit update_log("GPS: " + QString(gps_data));
|
||||||
|
gps_data.clear();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
sd_gps_seq++;
|
gps_data.append(c);
|
||||||
gps_data[sd_gps_seq] = buf.data()[27] ^ 0x4f;
|
c = buf.data()[27] ^ 0x4f;
|
||||||
if( (gps_data[sd_gps_seq] == 0x0a) || (gps_data[sd_gps_seq] == 0x0d) ){
|
if( (c == 0x0a) || (c == 0x0d) ){
|
||||||
gps_data[sd_gps_seq] = '\0';
|
gps_data.append('\0');
|
||||||
sd_gps_seq = 0;
|
|
||||||
sd_gps_cnt = 0;
|
sd_gps_cnt = 0;
|
||||||
qDebug() << "GPS string: " << QString(gps_data);
|
QTextStream(stderr) << "GPS: " << QString(gps_data) << Qt::endl;
|
||||||
|
if(gps_data[0] == '$') emit update_log("GPS: " + QString(gps_data));
|
||||||
|
gps_data.clear();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
sd_gps_seq++;
|
gps_data.append(c);
|
||||||
gps_data[sd_gps_seq] = buf.data()[28] ^ 0x93;
|
c = buf.data()[28] ^ 0x93;
|
||||||
if( (gps_data[sd_gps_seq] == 0x0a) || (gps_data[sd_gps_seq] == 0x0d) ){
|
if( (c == 0x0a) || (c == 0x0d) ){
|
||||||
gps_data[sd_gps_seq] = '\0';
|
gps_data.append('\0');
|
||||||
sd_gps_seq = 0;
|
|
||||||
sd_gps_cnt = 0;
|
sd_gps_cnt = 0;
|
||||||
qDebug() << "GPS string: " << QString(gps_data);
|
QTextStream(stderr) << "GPS: " << QString(gps_data) << Qt::endl;
|
||||||
|
if(gps_data[0] == '$') emit update_log("GPS: " + QString(gps_data));
|
||||||
|
gps_data.clear();
|
||||||
}
|
}
|
||||||
else{
|
else{
|
||||||
sd_gps_seq++;
|
gps_data.append(c);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -306,7 +332,6 @@ void REF::process_udp()
|
||||||
user_data[18] = buf.data()[27] ^ 0x4f;
|
user_data[18] = buf.data()[27] ^ 0x4f;
|
||||||
user_data[19] = buf.data()[28] ^ 0x93;
|
user_data[19] = buf.data()[28] ^ 0x93;
|
||||||
user_data[20] = '\0';
|
user_data[20] = '\0';
|
||||||
//if(sd_gps_seq == 0) sd_sync = 0;
|
|
||||||
sd_txt_seq = 0;
|
sd_txt_seq = 0;
|
||||||
m_modeinfo.usertxt = QString(user_data);
|
m_modeinfo.usertxt = QString(user_data);
|
||||||
}
|
}
|
||||||
|
@ -331,6 +356,7 @@ void REF::process_udp()
|
||||||
emit update(m_modeinfo);
|
emit update(m_modeinfo);
|
||||||
m_modeinfo.streamid = 0;
|
m_modeinfo.streamid = 0;
|
||||||
sd_sync = 0;
|
sd_sync = 0;
|
||||||
|
sd_gps_cnt = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
//emit update(m_modeinfo);
|
//emit update(m_modeinfo);
|
||||||
|
|
Loading…
Add table
Reference in a new issue