Skip to content

Commit

Permalink
Add export coordinate
Browse files Browse the repository at this point in the history
  • Loading branch information
xrife committed Oct 7, 2021
1 parent 3ecd9ce commit d8c4e11
Show file tree
Hide file tree
Showing 38 changed files with 1,049 additions and 1,178 deletions.
14 changes: 2 additions & 12 deletions DevDriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -111,17 +111,7 @@ QString DevDriver::devPN() {

}

void DevDriver::nmeaComplete(ProtoNMEA &proto) {
if(proto.isEqualId("RMC")) {
uint32_t time_ms = proto.readTimems();
proto.skip();
double lat = proto.readLatitude();
double lon = proto.readLongitude();
emit positionComplete(0xFFFFFFFF, time_ms, lat, lon);
}
}

void DevDriver::protoComplete(ProtoBinIn &proto) {
void DevDriver::protoComplete(ProtoKP1In &proto) {
m_state.mark = proto.mark();

if(hashIDParsing.contains(proto.id())) {
Expand Down Expand Up @@ -570,7 +560,7 @@ void DevDriver::receivedVersion(Type type, Version ver, Resp resp) {

case BoardAssist:
case BoardAssistMicro:
m_devName = "Assist";
m_devName = "Recorder";
break;

case BoardNEnhanced:
Expand Down
3 changes: 1 addition & 2 deletions DevDriver.h
Original file line number Diff line number Diff line change
Expand Up @@ -146,8 +146,7 @@ class DevDriver : public QObject
void onReboot();

public slots:
void nmeaComplete(ProtoNMEA &proto);
void protoComplete(ProtoBinIn &proto);
void protoComplete(ProtoKP1In &proto);
void startConnection(bool duplex);
void stopConnection();
void restartState();
Expand Down
56 changes: 49 additions & 7 deletions DevHub.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,14 +4,16 @@
extern Core core;

void Device::putData(const QByteArray &data) {

uint8_t* ptr_data = (uint8_t*)(data.data());
if(ptr_data == NULL || data.size() < 1) { return; }
m_proto.setContext(ptr_data, data.size());

while (m_proto.availContext()) {
m_proto.process();

if(m_proto.completeAsKBP()) {
ProtoBinIn& prot_bin = (ProtoBinIn&)m_proto;
ProtoKP1In& prot_bin = (ProtoKP1In&)m_proto;
uint8_t addr = prot_bin.route();

if(lastRoute != addr) {
Expand All @@ -25,33 +27,73 @@ void Device::putData(const QByteArray &data) {

lastDevs->protoComplete(prot_bin);

if(_isConsoled && _isDuplex) { core.consoleProto(prot_bin); }
if(_isConsoled && _isDuplex && !(prot_bin.id() == 32 || prot_bin.id() == 33)) { core.consoleProto(prot_bin); }

if(prot_bin.id() == 48) {
#if !defined(Q_OS_ANDROID)
if(prot_bin.id() == ID_EVENT) {
int timestamp = prot_bin.read<U4>();
int id = prot_bin.read<U4>();
if(id < 100) {
core.plot()->addEvent(timestamp, id);
}
// core.plot()->addEvent(timestamp, id);
// core.consoleProto(prot_bin);
}

if(prot_bin.id() == ID_VOLTAGE) {
int v_id = prot_bin.read<U1>();
int32_t v_uv = prot_bin.read<S4>();
if(v_id == 1) {
core.plot()->addEncoder(float(v_uv));
qInfo("Voltage %f", float(v_uv));
}
}
#endif

} else if(m_proto.completeAsNMEA()) {
ProtoNMEA& prot_nmea = (ProtoNMEA&)m_proto;

if(true && _isDuplex) {
if(true) {
QString str_data = QByteArray((char*)prot_nmea.frame(), prot_nmea.frameLen() - 2);
core.consoleInfo(QString(">> NMEA: %5").arg(str_data));
}

if(prot_nmea.isEqualId("RMC")) {
uint32_t time_ms = prot_nmea.readTimems();
prot_nmea.skip();
double lat = prot_nmea.readLatitude();
double lon = prot_nmea.readLongitude();
core.plot()->addPosition(0, time_ms, lat, lon);
}
} else if(m_proto.isCompleteAsUBX()) {
ProtoUBX& ubx_frame = (ProtoUBX&)m_proto;

if(ubx_frame.msgClass() == 1 && ubx_frame.msgId() == 7) {
ubx_frame.readSkip(20);

uint8_t fix_type = ubx_frame.read<U1>();
uint8_t fix_flags = ubx_frame.read<U1>();
ubx_frame.read<U1>();
uint8_t satellites_in_used = ubx_frame.read<U1>();

int32_t lon_int = ubx_frame.read<S4>();
int32_t lat_int = ubx_frame.read<S4>();

if(fix_type > 1 && fix_type < 5) {
core.plot()->addPosition(0, 0, double(lat_int)*0.0000001, double(lon_int)*0.0000001);
}
core.consoleInfo(QString(">> UBX: NAV_PVT, fix %1, sats %2, lat %3, lon %4").arg(fix_type).arg(satellites_in_used).arg(double(lat_int)*0.0000001).arg(double(lon_int)*0.0000001));
} else {
core.consoleInfo(QString(">> UBX: class %1, id %2, len %3").arg(ubx_frame.msgClass()).arg(ubx_frame.msgId()).arg(ubx_frame.frameLen()));
}


}
}
}

void Device::binFrameOut(ProtoBinOut &proto_out) {
QByteArray data((char*)proto_out.frame(), proto_out.frameLen());
emit dataSend(data);
if(_isConsoled && _isDuplex) { core.consoleProto(proto_out, false); }
if(_isConsoled && _isDuplex && !(proto_out.id() == 32 || proto_out.id() == 33)) { core.consoleProto(proto_out, false); }
}

void Device::startConnection(bool duplex) {
Expand Down
55 changes: 36 additions & 19 deletions IDBinnary.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,11 @@
#include <core.h>
extern Core core;

#if defined(Q_OS_ANDROID)
template < typename T, size_t N >
size_t _countof( T const (&array)[ N ] ) { return N; }
#endif

IDBin::IDBin(QObject *parent) : QObject(parent) {
// setProto(proto);
}
Expand All @@ -12,7 +17,7 @@ IDBin::~IDBin() {

}

Resp IDBin::parse(ProtoBinIn &proto) {
Resp IDBin::parse(ProtoKP1In &proto) {
Resp resp_parse = respNone;

if(proto.type() == CONTENT || proto.type() == SETTING || proto.type() == GETTING) {
Expand Down Expand Up @@ -55,19 +60,19 @@ void IDBin::appendKey(ProtoBinOut &proto_out) {
//}


Resp IDBinTimestamp::parsePayload(ProtoBinIn &proto) {
Resp IDBinTimestamp::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) { m_timestamp = proto.read<U4>();
} else { return respErrorVersion; }
return respOk;
}

Resp IDBinDist::parsePayload(ProtoBinIn &proto) {
Resp IDBinDist::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) { m_dist_mm = proto.read<U4>();
} else { return respErrorVersion; }
return respOk;
}

Resp IDBinChart::parsePayload(ProtoBinIn &proto) {
Resp IDBinChart::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
U2 m_seqOffset = proto.read<U2>();
U2 sampleResol = proto.read<U2>();
Expand Down Expand Up @@ -106,7 +111,7 @@ Resp IDBinChart::parsePayload(ProtoBinIn &proto) {
}


Resp IDBinAttitude::parsePayload(ProtoBinIn &proto) {
Resp IDBinAttitude::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
const float scale_to_deg = 0.01f;
m_yaw = static_cast<float>(proto.read<S2>())*scale_to_deg;
Expand Down Expand Up @@ -149,7 +154,7 @@ float IDBinAttitude::w3(Version src_ver) {
return m_w3;
}

Resp IDBinTemp::parsePayload(ProtoBinIn &proto) {
Resp IDBinTemp::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
const float scale_to_cels = 0.01f;
m_temp = static_cast<float>(proto.read<S2>())*scale_to_cels;
Expand All @@ -161,7 +166,7 @@ Resp IDBinTemp::parsePayload(ProtoBinIn &proto) {
}


Resp IDBinNav::parsePayload(ProtoBinIn &proto) {
Resp IDBinNav::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {

} else {
Expand All @@ -172,7 +177,7 @@ Resp IDBinNav::parsePayload(ProtoBinIn &proto) {
}


Resp IDBinDataset::parsePayload(ProtoBinIn &proto) {
Resp IDBinDataset::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
uint8_t ch_id = proto.read<U1>();
if(ch_id < _countof(m_channel)) {
Expand Down Expand Up @@ -234,7 +239,7 @@ void IDBinDataset::sendChannel(U1 ch_id, uint32_t period, uint32_t mask) {
}


Resp IDBinDistSetup::parsePayload(ProtoBinIn &proto) {
Resp IDBinDistSetup::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v1) {
m_startOffset = proto.read<U4>();
m_maxDist = proto.read<U4>();
Expand Down Expand Up @@ -270,7 +275,7 @@ void IDBinDistSetup::setConfidence(int confidence) {
}


Resp IDBinChartSetup::parsePayload(ProtoBinIn &proto) {
Resp IDBinChartSetup::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
m_sanpleCount = proto.read<U2>();
m_sanpleResolution = proto.read<U2>();
Expand Down Expand Up @@ -299,7 +304,7 @@ void IDBinChartSetup::setV0(uint16_t count, uint16_t resolution, uint16_t offset
emit binFrameOut(id_out);
}

Resp IDBinDSPSetup::parsePayload(ProtoBinIn &proto) {
Resp IDBinDSPSetup::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
m_horSmoothFactor = proto.read<U1>();
qInfo("read smooth %u", m_horSmoothFactor);
Expand All @@ -322,7 +327,7 @@ void IDBinDSPSetup::setV0(U1 hor_smooth_factor) {
}


Resp IDBinTransc::parsePayload(ProtoBinIn &proto) {
Resp IDBinTransc::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
m_freq = proto.read<U2>();
m_pulse = proto.read<U1>();
Expand All @@ -349,7 +354,7 @@ void IDBinTransc::setTransc(U2 freq, U1 pulse, U1 boost) {
}


Resp IDBinSoundSpeed::parsePayload(ProtoBinIn &proto) {
Resp IDBinSoundSpeed::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
m_soundSpeed = proto.read<U4>();
} else {
Expand All @@ -369,7 +374,7 @@ void IDBinSoundSpeed::setSoundSpeed(U4 snd_spd) {
emit binFrameOut(id_out);
}

Resp IDBinUART::parsePayload(ProtoBinIn &proto) {
Resp IDBinUART::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
if(checkKeyConfirm(proto.read<U4>())) {
uint8_t uart_id = proto.read<U1>();
Expand Down Expand Up @@ -444,7 +449,7 @@ void IDBinUART::setDevDefAddress(U1 addr) {
emit binFrameOut(id_out);
}

Resp IDBinVersion::parsePayload(ProtoBinIn &proto) {
Resp IDBinVersion::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
m_boardVersionMinor = proto.read<U1>();
m_boardVersion = (BoardVersion)proto.read<U1>();
Expand All @@ -461,7 +466,7 @@ Resp IDBinVersion::parsePayload(ProtoBinIn &proto) {
return respOk;
}

Resp IDBinMark::parsePayload(ProtoBinIn &proto) {
Resp IDBinMark::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
m_mark = proto.read<U1>();
} else {
Expand All @@ -481,7 +486,7 @@ void IDBinMark::setMark() {
}


Resp IDBinFlash::parsePayload(ProtoBinIn &proto) {
Resp IDBinFlash::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
if(checkKeyConfirm(proto.read<U4>())) {
} else {
Expand Down Expand Up @@ -530,7 +535,7 @@ void IDBinFlash::erase() {
}


Resp IDBinBoot::parsePayload(ProtoBinIn &proto) {
Resp IDBinBoot::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
if(checkKeyConfirm(proto.read<U4>())) {
} else {
Expand Down Expand Up @@ -564,7 +569,7 @@ void IDBinBoot::runFW() {
emit binFrameOut(id_out);
}

Resp IDBinUpdate::parsePayload(ProtoBinIn &proto) {
Resp IDBinUpdate::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
} else {
return respErrorVersion;
Expand Down Expand Up @@ -606,3 +611,15 @@ bool IDBinUpdate::putUpdate() {
return true;
}


Resp IDBinVoltage::parsePayload(ProtoKP1In &proto) {
if(proto.ver() == v0) {
uint8_t ch_id = proto.read<U1>();
int32_t u_v = proto.read<S4>();
_v[ch_id] = float(u_v);
} else {
return respErrorVersion;
}

return respOk;
}
Loading

0 comments on commit d8c4e11

Please sign in to comment.