|
@@ -2,6 +2,7 @@
|
|
|
|
|
|
#include <iostream>
|
|
|
#include <string.h>
|
|
|
+#include <memory>
|
|
|
|
|
|
#define POS_ServiceID 0
|
|
|
#define POS_MethodID 2
|
|
@@ -12,10 +13,11 @@
|
|
|
#define POS_InterfaceVersion 13
|
|
|
#define POS_MessageType 14
|
|
|
#define POS_ReturnCode 15
|
|
|
+#define POS_PayLoad 16
|
|
|
|
|
|
ars548pac::ars548pac(const char * pdata,int ndatalen)
|
|
|
{
|
|
|
- if(ndatalen<16)
|
|
|
+ if(ndatalen<36)
|
|
|
{
|
|
|
std::cout<<" ARS548 Packet Len < 16, ndatalen:"<<ndatalen<<std::endl;
|
|
|
mbPacValid = false;
|
|
@@ -44,6 +46,19 @@ ars548pac::ars548pac(const char * pdata,int ndatalen)
|
|
|
return;
|
|
|
}
|
|
|
|
|
|
+ memcpy(mPayload.CRC,pdata+POS_PayLoad + 0,8);
|
|
|
+ memcpy(&mPayload.Length,pdata+POS_PayLoad + 8,4);
|
|
|
+ memcpy(&mPayload.SOC,pdata+POS_PayLoad + 12,4);
|
|
|
+ memcpy(&mPayload.DataID,pdata+POS_PayLoad + 16,4);
|
|
|
+ mototointel_value((char *)&mPayload.Length,4);
|
|
|
+ mototointel_value((char *)&mPayload.SOC,4);
|
|
|
+ mototointel_value((char *)&mPayload.DataID,4);
|
|
|
+
|
|
|
+ mPayload.nDataLen = ndatalen - 36;
|
|
|
+ mPayload.pPayload_ptr = std::shared_ptr<char >(new char[mPayload.nDataLen]);
|
|
|
+ memcpy(mPayload.pPayload_ptr.get(),pdata + 36,mPayload.nDataLen);
|
|
|
+
|
|
|
+
|
|
|
}
|
|
|
|
|
|
|
|
@@ -122,6 +137,119 @@ void ars548pac::Decode()
|
|
|
|
|
|
void ars548pac::DecodeDetect()
|
|
|
{
|
|
|
+ uint64_t CRC;
|
|
|
+ memcpy(&CRC,mPayload.CRC,8);
|
|
|
+ mdetarray.set_crc(CRC);
|
|
|
+ mdetarray.set_length(mPayload.Length);
|
|
|
+ mdetarray.set_soc(mPayload.SOC);
|
|
|
+ mdetarray.set_dataid(mPayload.DataID);
|
|
|
+
|
|
|
+
|
|
|
+ int ndatalen = mPayload.nDataLen;
|
|
|
+ char * ppayload = mPayload.pPayload_ptr.get();
|
|
|
+
|
|
|
+ int nPos = 0;
|
|
|
+ unsigned int Timestamp_Nanoseconds;
|
|
|
+ unsigned int Timestamp_Seconds;
|
|
|
+ unsigned char Timestamp_SyncStatus;
|
|
|
+ unsigned int EventDataQualifier;
|
|
|
+ unsigned char ExtendedQualifier;
|
|
|
+ unsigned short Origin_InvalidFlags;
|
|
|
+ float Origin_Xpos;
|
|
|
+ float Origin_Xstd;
|
|
|
+ float Origin_Ypos;
|
|
|
+ float Origin_Ystd;
|
|
|
+ float Origin_Zpos;
|
|
|
+ float Origin_Zstd;
|
|
|
+ float Origin_Roll;
|
|
|
+ float Origin_Rollstd;
|
|
|
+ float Origin_Pitch;
|
|
|
+ float Origin_Pitchstd;
|
|
|
+ float Origin_Yaw;
|
|
|
+ float Origin_Yawstd;
|
|
|
+ unsigned char List_InvalidFlags;
|
|
|
+// List_Detections;
|
|
|
+ float List_RadVelDomain_Min;
|
|
|
+ float List_RadVelDomain_Max;
|
|
|
+ unsigned int List_NumOfDetections;
|
|
|
+ float Aln_AzimuthCorrection;
|
|
|
+ float Aln_ElevationCorrection;
|
|
|
+ unsigned char Aln_Status;
|
|
|
+
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Timestamp_Nanoseconds,4);nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Timestamp_Seconds,4); nPos = nPos +4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Timestamp_SyncStatus,1); nPos = nPos +1;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&EventDataQualifier,4);nPos = nPos +4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&ExtendedQualifier,1); nPos = nPos + 1;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_InvalidFlags,2); nPos = nPos + 2;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_Xpos,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_Xstd,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_Ypos,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_Ystd,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_Zpos,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_Zstd,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_Roll,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_Rollstd,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_Pitch,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_Pitchstd,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_Yaw,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Origin_Yawstd,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&List_InvalidFlags,1); nPos = nPos + 1;
|
|
|
+
|
|
|
+ nPos = nPos + 44 * 800;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&List_RadVelDomain_Min,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&List_RadVelDomain_Max,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&List_NumOfDetections,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Aln_AzimuthCorrection,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Aln_ElevationCorrection,4); nPos = nPos + 4;
|
|
|
+ SetMotoData(ppayload,nPos, (char *)&Aln_Status,1); //nPos = nPos + 1;
|
|
|
+
|
|
|
+ mdetarray.set_timestamp_ns(Timestamp_Nanoseconds);
|
|
|
+ mdetarray.set_timestamp_s(Timestamp_Seconds);
|
|
|
+ switch (Timestamp_SyncStatus) {
|
|
|
+ case 1:
|
|
|
+ mdetarray.set_timestamp_syncstatus(iv::radar::radar4ddetectarray::SYNC_OK);
|
|
|
+ break;
|
|
|
+ case 2:
|
|
|
+ mdetarray.set_timestamp_syncstatus(iv::radar::radar4ddetectarray::SYNC_NEVERSYNC);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ mdetarray.set_timestamp_syncstatus(iv::radar::radar4ddetectarray::SYNC_LOST);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ mdetarray.set_eventdataqualifier(EventDataQualifier);
|
|
|
+ mdetarray.set_extendedqualifier(ExtendedQualifier);
|
|
|
+ mdetarray.set_origin_invalidflags(Origin_InvalidFlags);
|
|
|
+ mdetarray.set_origin_xpos(Origin_Xpos);
|
|
|
+ mdetarray.set_origin_xstd(Origin_Xstd);
|
|
|
+ mdetarray.set_origin_ypos(Origin_Ypos);
|
|
|
+ mdetarray.set_origin_ystd(Origin_Ystd);
|
|
|
+ mdetarray.set_origin_zpos(Origin_Zpos);
|
|
|
+ mdetarray.set_origin_zstd(Origin_Zstd);
|
|
|
+ mdetarray.set_origin_roll(Origin_Roll);
|
|
|
+ mdetarray.set_origin_rollstd(Origin_Rollstd);
|
|
|
+ mdetarray.set_origin_pitch(Origin_Pitch);
|
|
|
+ mdetarray.set_origin_pitchstd(Origin_Pitchstd);
|
|
|
+ mdetarray.set_origin_yaw(Origin_Yaw);
|
|
|
+ mdetarray.set_origin_yawstd(Origin_Yawstd);
|
|
|
+ mdetarray.set_origin_invalidflags(List_InvalidFlags);
|
|
|
+
|
|
|
+ mdetarray.set_list_radveldomain_min(List_RadVelDomain_Min);
|
|
|
+ mdetarray.set_list_radveldomain_max(List_RadVelDomain_Max);
|
|
|
+ mdetarray.set_list_numofdetections(List_NumOfDetections);
|
|
|
+ mdetarray.set_aln_azimuthcorrection(Aln_AzimuthCorrection);
|
|
|
+ mdetarray.set_aln_elevationcorrection(Aln_ElevationCorrection);
|
|
|
+ switch (Aln_Status) {
|
|
|
+ case 0:
|
|
|
+ mdetarray.set_aln_status(iv::radar::radar4ddetectarray::ALIGNMENT_INIT);
|
|
|
+ break;
|
|
|
+ case 1:
|
|
|
+ mdetarray.set_aln_status(iv::radar::radar4ddetectarray::ALIGNMENT_OK);
|
|
|
+ break;
|
|
|
+ default:
|
|
|
+ mdetarray.set_aln_status(iv::radar::radar4ddetectarray::ALIGNMENT_NOTOK);
|
|
|
+ break;
|
|
|
+ }
|
|
|
|
|
|
}
|
|
|
|
|
@@ -129,3 +257,9 @@ void ars548pac::DecodeObj()
|
|
|
{
|
|
|
|
|
|
}
|
|
|
+
|
|
|
+void ars548pac::SetMotoData(char * pdata, int npos, char * pvalue,int nvaluelen)
|
|
|
+{
|
|
|
+ memcpy(pvalue,pdata+npos,nvaluelen);
|
|
|
+ mototointel_value(pvalue,nvaluelen);
|
|
|
+}
|