Radar Plugin in DriveWorks

Hardware Platform: DRIVE AGX Xavier™ Developer Kit
Software Version: DRIVE Software 10
Host Machine Version: native Ubuntu 18.04
SDK Manager Version: 1.0.1.5538

I encounter a problem that the radar_play sample using my radar plugin reutrn timeout at dwSensorRadar_readScan.
I have checked that the readRawData, pushData, ParseData work with no error and return DW_SUCCESS.
I think there is something wrong with my setting at _dwSensorRadarDecoder_constants or dwRadarScan.
Can anybody give me some advice?
Thanks.

Dear @Peter_Lee,
Is it possible to share your code and output log for verification at our end?

Hi @SivaRamaKrishnaNV,
Thank for your reply.

Here is my code.

dwStatus _dwSensorRadarPlugin_getDecoderConstants(_dwSensorRadarDecoder_constants *constants, dwSensorPluginSensorHandle_t sensor)
{
auto sensorContext = reinterpret_castdw::plugins::radar::ContinentalARS408*(sensor);
if (!checkValid(sensorContext))
{
return DW_INVALID_HANDLE;
}

// constants->dynamicsSizeInBytes
constants->maxPacketsPerScan = 401;
constants->maxPayloadSize = sizeof(QuantaAD::ADCANMessage);
// constants->maxPointsPerPacket[DW_RADAR_RETURN_TYPE_TRACK][DW_RADAR_RANGE_LONG] = 100;
// constants->packetsPerScan[DW_RADAR_RETURN_TYPE_TRACK][DW_RADAR8_RANGE_LONG] = 401;
// constants->properties.inputPacketsPerSecond = 
constants->properties.isDecodingOn = 1;
constants->properties.maxReturnsPerScan[DW_RADAR_RETURN_TYPE_TRACK][DW_RADAR_RANGE_LONG] = 100;
constants->properties.numScanTypes = 1;
// constants->packetsPerScan = 401; // will be deprecated soon
constants->properties.scansPerSecond = 17;
constants->properties.supportedScanTypes[DW_RADAR_RETURN_TYPE_TRACK][DW_RADAR_RANGE_LONG] = 1;

return DW_SUCCESS;

}

dwStatus ContinentalARS408::parseData(dwRadarScan *output, const dwRadarScanType scanType)
{
processRadarScan(output);
// output->dopplerAmbiguity = 0.0;
output->numReturns = m_far.size();
output->scanIndex = 1;
output->scanType = scanType;

return DW_SUCCESS;

}

void ContinentalARS408::processRadarScan(dwRadarScan *output)
{
dwRadarTrack object;
if (m_msg->id == 1546){
m_far.clear();
m_nof_objects = m_msg->data[0];
dwContext_getCurrentTime(&output->hostTimestamp, m_ctx);
}

if(m_msg->id == 1547){
    // std::cout<<std::hex <<"msg.id:"<<m_msg->id<<std::dec<<" msg.size:"<<m_msg->size<<std::endl;
    object.id = m_msg->data[0];

    Byte b1;
    Byte b2;
    Byte b3;
    Byte b4;
    Byte b5;
    Byte b6;

    b1.byte=m_msg->data[1];
    b2.byte=m_msg->data[2];
    b3.byte=m_msg->data[3];
    b4.byte=m_msg->data[4];
    b5.byte=m_msg->data[5];
    b6.byte=m_msg->data[6];

    object.x = OBJECT_DIST_LONG_MIN+OBJECT_DIST_RES*(pow(2,0)*b2.bit4+pow(2,1)*b2.bit5+pow(2,2)*b2.bit6+pow(2,3)*b2.bit7+pow(2,4)*b2.bit8+pow(2,5)*b1.bit1+pow(2,6)*b1.bit2+pow(2,7)*b1.bit3+pow(2,8)*b1.bit4+pow(2,9)*b1.bit5+pow(2,10)*b1.bit6+pow(2,11)*b1.bit7+pow(2,12)*b1.bit8);

    object.y = OBJECT_DIST_LAT_MIN+OBJECT_DIST_RES*(pow(2,0)*b3.bit1+pow(2,1)*b3.bit2+pow(2,2)*b3.bit3+pow(2,3)*b3.bit4+pow(2,4)*b3.bit5+pow(2,5)*b3.bit6+pow(2,6)*b3.bit7+pow(2,7)*b3.bit8+pow(2,8)*b2.bit1+pow(2,9)*b2.bit2+pow(2,10)*b2.bit3);

    object.Vx = OBJECT_VREL_LONG_MIN+OBJECT_VREL_RES*(pow(2,0)*b5.bit7+pow(2,1)*b5.bit8+pow(2,2)*b4.bit1+pow(2,3)*b4.bit2+pow(2,4)*b4.bit3+pow(2,5)*b4.bit4+pow(2,6)*b4.bit5+pow(2,7)*b4.bit6+pow(2,8)*b4.bit7+pow(2,9)*b4.bit8);

    object.Vy = OBJECT_VREL_LAT_MIN+OBJECT_VREL_RES*(pow(2,0)*b6.bit6+pow(2,1)*b6.bit7+pow(2,2)*b6.bit8+pow(2,3)*b5.bit1+pow(2,4)*b5.bit2+pow(2,5)*b5.bit3+pow(2,6)*b5.bit4+pow(2,7)*b5.bit5+pow(2,8)*b5.bit6);

    object.rcs = OBJECT_RCS_MIN+OBJECT_RCS_RES*m_msg->data[7];

    obj[object.id].longitude_dist = object.x;
    obj[object.id].lateral_dist = object.y;
    obj[object.id].longitude_vel = object.Vx;
    obj[object.id].lateral_vel = object.Vy;
    obj[object.id].rcs = object.rcs;
}
if(m_msg->id == 1549){
    object = dwRadarTrack();
    object.id = m_msg->data[0];

    Byte b4;
    Byte b5;
    b4.byte = m_msg->data[4];
    b5.byte = m_msg->data[5];

    object.azimuthRate = OBJECT_ORIENTATION_ANGEL_MIN+OBJECT_ORIENTATION_ANGEL_RES*(pow(2,0)*b5.bit7+pow(2,1)*b5.bit8+pow(2,2)*b4.bit1+pow(2,3)*b4.bit2+pow(2,4)*b4.bit3+pow(2,5)*b4.bit4+pow(2,6)*b4.bit5+pow(2,7)*b4.bit6+pow(2,8)*b4.bit7+pow(2,9)*b4.bit8);
    object.x = obj[object.id].longitude_dist;
    object.y = obj[object.id].lateral_dist;
    object.Vx = obj[object.id].longitude_vel;
    object.Vy = obj[object.id].lateral_vel;
    object.rcs = obj[object.id].rcs;

    m_far.push_back(object); // m_far is  a vector to store the detected objects
}
output->data = reinterpret_cast<void *>(m_far.data());

}

output log:

_dwSensorPlugin_start
ContinentalARS408::startSensor()
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60a msg.size:4
data: 26b1d10
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
msg.id:60a msg.size:4
Number of objects : 2
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60b msg.size:8
data: 154e8bf3802019e
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
msg.id:60b msg.size:8
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()

Hi @Peter_Lee,

Please also share your sample_radar_replay full command. If you are implementing with Comprehensive Sensor Plugin Framework instead of Decoder Plugins (both mentioned in file:///usr/local/driveworks/doc/nvsdk_html/sensorplugins_mainsection.html), you need to use radar.custom protocol instead of radar.socket.

Hi @VickNV,

Thanks for your replay.
My command is here:
./sample_radar_replay --protocol=radar.custom --params=decoder-path=/home/nvidia/sample_radar_plguin.so,driver=can.socket,device=can1

I think it gets my plugin (.so file) properly, but the question is that it can not get radar scan correctly.

Please set up packetsPerScan constants in _dwSensorRadarPlugin_getDecoderConstants() as below. If dwSensorRadar_readScan() cannot get enough data (at least packets per scan), it will return DW_TIME_OUT value.

dwStatus _dwSensorRadarPlugin_getDecoderConstants(_dwSensorRadarDecoder_constants* constants, dwSensorPluginSensorHandle_t sensor)
{
...
    for (size_t i = 0; i < DW_RADAR_RETURN_TYPE_COUNT; ++i)
    {
        for (size_t j = 0; j < DW_RADAR_RANGE_COUNT; ++j)
        {
            dwRadarReturnType returnType = static_cast<dwRadarReturnType>(i);
            dwRadarRange range = static_cast<dwRadarRange>(j);
            constants->maxPointsPerPacket[i][j] = ...;
            constants->packetsPerScan[i][j] = ...;
        }
    }

Please use below command and also check if “numReturns : 0” in your log is normal.

./sample_radar_replay --protocol=radar.custom --params=device=CUSTOMEX,decoder-path=/home/nvidia/sample_radar_plguin.so

Hi @VickNV,
Thank you very much for your replay!

Here are some questions:

  1. Do I need to assign value to packetsPerScan[DW_RADAR_RETURN_TYPE_TRACK][DW_RADAR_RANGE_SHORT] If the radar only support long distance?
  2. Do one packet mean one can message if I’m using can-based radar?
  3. Is numReturn : 0 correct? I need several can messages to get the data of one object. It is definitely that numReturns is 0 at the beginning.
  4. I added the maxPointsPerPacket and packetsPerScan, but the radar didn’t start but release at the beginning.

Hi @VickNV,

I found that if packetsPerScan = 5, the radar scan will return after getting 5 packets.
The question is that the packets of one Scan related to how many objects the radar detected.
How can I set packetsPerScan if it’s not a constant?
Also, I got core dump error if I set packetsPerScan = 5, but packetsPerScan = 1 was fine.

If you only need to initialize those packetsPerScan elements which will be output by messageType parameter of dwSensorRadarPlugin_validatePacket().

If you only use long range, you still need to populate for that scan type all needed specifics.

Each dwSensorPlugin_readRawData()/dwSensorRadarPlugin_validatePacket() call is for one packet of the radar scan

The number of packets used to assemble a scan should be constant and independent of how many detections the scan contains.

Could you provide the log and full plugin source?

Hi @VickNV,
Thank you for your detailed answer.

Here are some questions:
The radar that I’ve been used works like the below graph.


The whole scan needs several can messages to get all the data of detected objects.
The can message with can id 0x60A will tell how many objects is detected.
The following can messages will tell the other information of the detected objects.
Does it tell that the number of packets used to assemble a scan is not a constant?

And here is the program log:

_dwSensorPlugin_start
ContinentalARS408::startSensor()
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60a msg.size:4
data: 896d310
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60b msg.size:8
data: e50c417802041a7
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60b msg.size:8
data: 3450f4680206a8
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60b msg.size:8
data: 17524c18801fc18c
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60b msg.size:8
data: f5744188020618a
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60b msg.size:8
data: 2c5833fd8020193
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60b msg.size:8
data: 0599448020187
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60b msg.size:8
data: 355ad414801fc19d
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60b msg.size:8
data: 425b53fd801fe188
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60c msg.size:7
data: e8ca53a220e8
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60c msg.size:7
data: 3484a33a180e8
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60c msg.size:7
data: 178ca53a8220cc
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60c msg.size:7
data: fa56d8c82208c
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60c msg.size:7
data: 2c8ce53a8220cc
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60c msg.size:7
data: 08ce53a220e8
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60c msg.size:7
data: 358ca33a220e8
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60c msg.size:7
data: 428ce53a8220cc
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 0
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60d msg.size:8
data: e7d6fa0708055
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 1
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60d msg.size:8
data: 347dfa06f8010
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 2
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60d msg.size:8
data: 177d2fa0708055
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 3
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60d msg.size:8
data: f7d8fa0708055
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 4
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60d msg.size:8
data: 2c7cefa0708055
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 5
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60d msg.size:8
data: 07d2fa0708055
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 6
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60d msg.size:8
data: 357cafa17080ac
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 7
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60d msg.size:8
data: 427bafa17080ac
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 8
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60e msg.size:4
data: e000
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 8
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60e msg.size:4
data: 34000
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 8
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60e msg.size:4
data: 17000
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 8
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60e msg.size:4
data: f000
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 8
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60e msg.size:4
data: 2c000
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 8
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60e msg.size:4
data: 0000
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 8
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60e msg.size:4
data: 35000
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 8
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()
_dwSensorRadarPlugin_getDecoderConstants
_dwSensorPlugin_readRawData
ContinentalARS408::readRawData()
msg.id:60e msg.size:4
data: 42000
_dwSensorRadarPlugin_validatePacket
ContinentalARS408::validatePacket()
rawData:
_dwSensorPlugin_pushData
ContinentalARS408::pushData()
_dwSensorRadarPlugin_parseDataBuffer
ContinentalARS408::parseData()
numReturns : 8
_dwSensorPlugin_returnRawData
ContinentalARS408::returnRawData()

PacketsPerScan is the concept of how scan data is divided in your plugin driver.

So you can also not divide scan data (one packet per scan); _dwSensorRadarPlugin_getDecoderConstants() sets packetsPerScan[i][j] as 1 and dwSensorRadarPlugin_parseDataBuffer() returns DW_NOT_AVAILABLE until all CAN messages of one scan received and raw data is available for being processed.

@VickNV

Thank you very much!
I will try it.