TI-radar AWR1843 C674x DSP core  1
dss_main.c
Go to the documentation of this file.
1 /*******************************************************************************
2  * @file dss_main.c
3  * @brief The application runs on top of the DSP Sub-system (DSS)
4  * which is powered by a C675x DSP processor
5  * Main tasks is to running Perform DSP tasks.
6  * Must TASKS: FFT (1D, 2D and 3D),
7  * Optional TASKS: Extended Kalman Filter, and dBScan
8  * @author A. Astro, a.astro7x@gmail.com
9  * @date Feb 24, 2020
10  * @version 0.1
11  *******************************************************************************/
12 
13 
14 /**************************************************************************
15  *************************** Include Files ********************************
16  **************************************************************************/
17 
18 // Standard Include Files
19 #include <stdint.h>
20 #include <stdlib.h>
21 #include <stddef.h>
22 #include <string.h>
23 #include <stdio.h>
24 #include <math.h>
25 
26 // BIOS/XDC Include Files
27 #include <xdc/std.h>
28 #include <xdc/cfg/global.h>
29 #include <xdc/runtime/IHeap.h>
30 #include <xdc/runtime/System.h>
31 #include <xdc/runtime/Error.h>
32 #include <xdc/runtime/Memory.h>
33 #include <ti/sysbios/BIOS.h>
34 #include <ti/sysbios/knl/Task.h>
35 #include <ti/sysbios/knl/Event.h>
36 #include <ti/sysbios/knl/Semaphore.h>
37 #include <ti/sysbios/knl/Clock.h>
38 #include <ti/sysbios/heaps/HeapBuf.h>
39 #include <ti/sysbios/heaps/HeapMem.h>
40 #include <ti/sysbios/knl/Event.h>
41 #include <ti/sysbios/family/c64p/Cache.h>
42 #include <ti/sysbios/family/c64p/Hwi.h>
43 #include <ti/sysbios/family/c64p/EventCombiner.h>
44 #include <ti/sysbios/utils/Load.h>
45 
46 // mmWave SDK Include Files
47 #include <ti/common/sys_common.h>
48 #include <ti/common/mmwave_sdk_version.h>
49 #include <ti/utils/cycleprofiler/cycle_profiler.h>
50 
51 // TI Drivers Include Files
52 #include <ti/drivers/mailbox/mailbox.h>
53 #include <ti/drivers/adcbuf/ADCBuf.h>
54 #include <ti/drivers/esm/esm.h>
55 #include <ti/drivers/pinmux/pinmux.h>
56 #include <ti/drivers/soc/soc.h>
57 
58 // Application Include Files
59 #include "common/mmWave_XSS.h"
60 #include "dss_data_path.h"
61 #include "EKF_XYZ_Interface.h"
62 #include "common/mmw_messages.h"
63 #include "common/app_cfg.h"
64 
65 // Related to linker copy table for copying from L3 to L1PSRAM for example
66 #include <cpy_tbl.h>
67 
68 
75 #define SOC_XWR18XX_DSS_HSRAM_SIZE 0x8000U /* Size: 32KB */
76 
77 typedef struct DSS2MSS_HSRAM {
78 #define DATAPATH_DET_PAYLOAD_SIZE (SOC_XWR18XX_DSS_HSRAM_SIZE - sizeof(uint8_t))
80  uint8_t dss2MssIsrInfo;
82 
83 
84 #pragma DATA_SECTION(gHSRAM, ".appSharedMem");
85 #pragma DATA_ALIGN(gHSRAM, 4);
87 
89 #define MMW_NUM_ANGLE_BINS 64
90 #define SPEED_OF_LIGHT_IN_METERS_PER_SEC (3.0e8)
91 #define SPEED_OF_LIGHT_IN_METERS_PER_USEC (3.0e2)
92 extern far COPY_TABLE _MmwDemo_fastCode_L1PSRAM_copy_table;
98 
100 
101 
102 /* ******************************************************************************
103  mmWave SPECIFIC Functions
104  *******************************************************************************/
105 static void DSS_mmWaveInitTASK(UArg arg0, UArg arg1);
106 static void DSS_mmWaveCtrlTask(UArg arg0, UArg arg1);
107 static void DSS_chirpIntCallback(uintptr_t arg); /* Internal Interrupt handler */
108 static void DSS_frameStartIntCallback(uintptr_t arg); /* Internal Interrupt handler */
109 /* ******************************************************************************
110  Data Path SPECIFIC Functions to configure ADC and processing path
111  *******************************************************************************/
112 static int32_t DSS_DataPathConfigAdcBuf();
114 void DSS_populateUSRR(DSS_DataPathObj* obj, uint16_t subframeIndx);
116 /* ******************************************************************************
117  EDMA and Copy Tables SPECIFIC Functions
118  *******************************************************************************/
119 static void DSS_edmaBlockCopy(EDMA_Handle handle, uint32_t loadAddr, uint32_t runAddr, uint16_t size);
120 static void DSS_copyTable(EDMA_Handle handle, COPY_TABLE *tp);
121 
122 
123 /* DataPath Functions */
124 int32_t DSS_DataPathInit(void);
125 
126 
127 /* Output logging. */
128 static int32_t DSS_SendProcessOutputToMSS(uint8_t *ptrHsmBuffer, uint32_t outputBufSize, DSS_DataPathObj *obj);
129 static void DSS_DataPathOutputLogging(DSS_DataPathObj * dataPathObj);
130 static void mboxIn_uartOut_TASK();
131 void mboxCallbackFxn_MSS_ch0(Mbox_Handle handle, Mailbox_Type peer);
132 
133 /* external sleep function when in idle (used in .cfg file) */
134 void DSP_sleep(void);
135 
136 /* Utility functions. */
137 uint16_t convertSNRdBtoThreshold(uint16_t numInteg, float ThresholdIndB, uint16_t bitwidth);
138 static int32_t DSS_mboxWrite(mmWaveMSG *message);
139 
140 
141 
142 
143 /**************************************************************************
144  ********************** DSS MRR TI Design Functions ***********************
145  **************************************************************************/
146 
159 static void DSS_chirpIntCallback(uintptr_t arg)
160 {
161  gMCB.chirpProcToken = 1;
163  return;
164 }
165 
178 static void DSS_frameStartIntCallback(uintptr_t arg)
179 {
182  return;
183 }
184 
185 
200 static void DSS_mmWaveCtrlTask(UArg arg0, UArg arg1)
201 {
202  DSS_DataPathObj * dataPathObj;
203  volatile uint32_t startTime;
204  gMCB.subframeIndx = 0;
205 
206  while (1)
207  {
208  if (gMCB.frameStartIntToken == 1)
209  {
211 
212  dataPathObj = &gMCB.dataPathObj[gMCB.subframeIndx];
213 
214  /* Increment event stats */
216 
217  /* Check if the previous frame has been completely processed. */
218  MmwDemo_dssAssert(dataPathObj->chirpCount != 0);
219  }
220  else if (gMCB.chirpProcToken == 1)
221  {
222  /* We have begun processing a frame */
223  gMCB.frameProcToken = 1;
224  dataPathObj = &gMCB.dataPathObj[gMCB.subframeIndx];
225 
226  /* Increment event stats */
227  gMCB.stats.chirpEvt++;
228  MmwDemo_processChirp(dataPathObj, gMCB.subframeIndx);
230 
231  dataPathObj->timingInfo.chirpProcessingEndTime = Cycleprofiler_getTimeStamp();
232 
233  if (dataPathObj->chirpCount == 0)
234  {
236 
241 
242  startTime = Cycleprofiler_getTimeStamp();
244  dataPathObj->timingInfo.interFrameProcCycles = Cycleprofiler_getTimeStamp() - startTime;
245 
250 
251  /* Sending detected objects to logging buffer */
252  DSS_DataPathOutputLogging(dataPathObj);
253  dataPathObj->timingInfo.interFrameProcessingEndTime = Cycleprofiler_getTimeStamp();
254 
255  /* Update the subframeIndx */
256  {
257  gMCB.subframeIndx ++;
259  {
260  gMCB.subframeIndx = 0;
261  }
262 
263  /* Program the ADC for the next subframe. */
264  dataPathObj = &gMCB.dataPathObj[gMCB.subframeIndx];
265  }
266  }
267 
268  gMCB.frameProcToken = 0;
269  }
270  else if (gMCB.mboxProcToken == 1)
271  {
272  gMCB.mboxProcToken = 0;
273  /* If the mailbox has a message and the frame processing task has finished. */
275  }
276  }
277 }
278 
289 void DSP_sleep(void)
290 {
291  /* issue IDLE instruction */
292  asm(" IDLE ");
293 }
294 
303 void _MmwDemo_dssAssert(int32_t expression,const char *file, int32_t line)
304 {
305  mmWaveMSG message;
306  uint32_t nameSize;
307 
308  if (!expression)
309  {
310  message.type = MBOX_DSS2MSS_ASSERT_INFO;
311  nameSize = strlen(file);
312  if(nameSize > MMWAVE_MAX_FILE_NAME_SIZE)
313  nameSize = MMWAVE_MAX_FILE_NAME_SIZE;
314 
315  memcpy((void *) &message.body.assertInfo.file[0], (void *)file, nameSize);
316  message.body.assertInfo.line = (uint32_t)line;
317  if (DSS_mboxWrite(&message) != 0)
318  {
319  System_printf ("Error: Failed to send exception information to MSS.\n");
320  }
321 
322  }
323 }
332 int32_t main(void)
333 {
334  Task_Params taskParams;
335  DSS_DataPathObj* obj;
336  int32_t errCode;
337  int32_t ik;
338 
339  /* Initialize the global variables */
340  memset((void*) &gMCB, 0, sizeof(MCB));
341 
342  /* Initialize entire data path object to a known state. */
343  for (ik = 0, obj = &gMCB.dataPathObj[0]; ik < NUM_SUBFRAMES; ik ++, obj++ )
344  {
345  memset((void *) obj, 0, sizeof(DSS_DataPathObj));
346  }
347 
348  /* Populate the chirp configuration in the DSS for all the data path objects. */
350 
351  /* Initialize the state counters. */
352  for (ik = 0, obj = &gMCB.dataPathObj[0]; ik < NUM_SUBFRAMES; ik ++, obj ++)
353  {
355  }
356 
357  /* Initialize the EDMA. */
359 
360  obj = &gMCB.dataPathObj[0];
361  /* Copy code from L3 to L1PSRAM, this code related to data path processing */
363 
364  /* Initialize the SOC configuration: */
365  {
366  SOC_Cfg socCfg;
367  /* Initialize the SOC configuration: */
368  memset((void *) &socCfg, 0, sizeof(SOC_Cfg));
369 
370  /* Populate the SOC configuration: */
371  socCfg.clockCfg = SOC_SysClock_BYPASS_INIT;
372 
373  /* Initialize the SOC Module: This is done as soon as the application is started
374  * to ensure that the MPU is correctly configured. */
375  gMCB.socHandle = SOC_init(&socCfg, &errCode);
376  if (gMCB.socHandle == NULL)
377  {
378 
379  return -1;
380  }
381  }
382 
383  /* Initialize the Task Parameters. */
384  Task_Params_init(&taskParams);
385  taskParams.stackSize = 3 * 1024;
386  Task_create(DSS_mmWaveInitTASK, &taskParams, NULL);
387 
388  /* Start BIOS */
389  BIOS_start();
390 
391  return 0;
392 }
393 
395 {
396  int32_t indx = 0;
398  {
399 
400  obj->rxChPhaseComp[indx].imag = 5863;
401  obj->rxChPhaseComp[indx].real = 19158;indx++;
402 
403  obj->rxChPhaseComp[indx].imag = 2858;
404  obj->rxChPhaseComp[indx].real = 23451;indx++;
405 
406  obj->rxChPhaseComp[indx].imag = 4569;
407  obj->rxChPhaseComp[indx].real = 22093;indx++;
408 
409  obj->rxChPhaseComp[indx].imag = 0;
410  obj->rxChPhaseComp[indx].real = 16399;indx++;
411  }
412  else if (obj->processingPath == POINT_CLOUD_PROCESSING)
413  {
414 
415 
416  obj->rxChPhaseComp[indx].imag = 21646;
417  obj->rxChPhaseComp[indx].real = 7035;indx++;
418 
419  obj->rxChPhaseComp[indx].imag = 21172;
420  obj->rxChPhaseComp[indx].real = 18420;indx++;
421 
422  obj->rxChPhaseComp[indx].imag = 15490;
423  obj->rxChPhaseComp[indx].real = 21080;indx++;
424 
425  obj->rxChPhaseComp[indx].imag = -3905;
426  obj->rxChPhaseComp[indx].real = 25130;indx++;
427 
428 
429  obj->rxChPhaseComp[indx].imag = 0;
430  obj->rxChPhaseComp[indx].real = 16399;indx++;
431 
432  obj->rxChPhaseComp[indx].imag = -7985;
433  obj->rxChPhaseComp[indx].real = 18443;indx++;
434 
435  obj->rxChPhaseComp[indx].imag = -10962;
436  obj->rxChPhaseComp[indx].real = 15291;indx++;
437 
438 
439  obj->rxChPhaseComp[indx].imag =-17653;
440  obj->rxChPhaseComp[indx].real = 3133;indx++;
441 
442  obj->rxChPhaseComp[indx].imag = 386;
443  obj->rxChPhaseComp[indx].real = -17208;indx++;
444 
445  obj->rxChPhaseComp[indx].imag = 8587;
446  obj->rxChPhaseComp[indx].real = -18744;indx++;
447 
448  obj->rxChPhaseComp[indx].imag = 11857;
449  obj->rxChPhaseComp[indx].real = -15772;indx++;
450 
451  obj->rxChPhaseComp[indx].imag = 18493;
452  obj->rxChPhaseComp[indx].real = -2907;indx++;
453 
454  }
455 
456 }
457 
458 
473 static void DSS_mmWaveInitTASK(UArg arg0, UArg arg1)
474 {
475  DSS_DataPathObj* obj;
476  int32_t errCode, ik;
477  Mailbox_Config mboxCfg;
478  Task_Params taskParams;
479  /*****************************************************************************
480  * Initialize the mmWave SDK components:
481  *****************************************************************************/
482 
483  /* Initialize the Mailbox */
484  Mailbox_init (MAILBOX_TYPE_DSS);
485 
486  /* Initialize the ADC Buffer */
487  {
488  ADCBuf_Params adcBufParams;
489 
490  ADCBuf_init();
491 
492  /*****************************************************************************
493  * Open ADCBUF driver:
494  *****************************************************************************/
495  ADCBuf_Params_init(&adcBufParams);
496  adcBufParams.chirpThresholdPing = 1;
497  adcBufParams.chirpThresholdPong = 1;
498  adcBufParams.continousMode = 0;
499 
500  /* Open ADCBUF driver */
501  gMCB.adcBufHandle = ADCBuf_open(0, &adcBufParams);
502  if (gMCB.adcBufHandle == NULL)
503  {
504  //System_printf("Error: Unable to open the ADCBUF driver\n");
505  return;
506  }
507 
508  /* One time ADC Buffer configuration.*/
510  }
511 
512  {
513  /* Register interrupts. */
514  SOC_SysIntListenerCfg listenerCfg;
515 
516  /* Register Chirp Available Listener */
517  memset((void*) &listenerCfg, 0, sizeof(SOC_SysIntListenerCfg));
518  listenerCfg.systemInterrupt = SOC_XWR18XX_DSS_INTC_EVENT_CHIRP_AVAIL;
519  listenerCfg.listenerFxn = DSS_chirpIntCallback;
520  listenerCfg.arg = 0;
521  gMCB.chirpIntHandle = SOC_registerSysIntListener(gMCB.socHandle, &listenerCfg, &errCode);
522  if (gMCB.chirpIntHandle == NULL)
523  {
524  return;
525  }
526 
527  /* Register Frame Start Listener */
528  memset((void*) &listenerCfg, 0, sizeof(SOC_SysIntListenerCfg));
529  listenerCfg.systemInterrupt = SOC_XWR18XX_DSS_INTC_EVENT_FRAME_START;
530  listenerCfg.listenerFxn = DSS_frameStartIntCallback;
531  listenerCfg.arg = 0;
532  gMCB.frameStartIntHandle = SOC_registerSysIntListener(gMCB.socHandle, &listenerCfg, &errCode);
533 
534  if (gMCB.frameStartIntHandle == NULL)
535  {
536  return;
537  }
538  }
539 
540  /* Setup the default mailbox configuration */
541  Mailbox_Config_init(&mboxCfg);
542 
543  /* Setup the configuration: */
544  mboxCfg.chType = MAILBOX_CHTYPE_MULTI;
545  mboxCfg.chId = MAILBOX_CH_ID_0;
546  mboxCfg.writeMode = MAILBOX_MODE_BLOCKING;
547  mboxCfg.readMode = MAILBOX_MODE_CALLBACK;
548  mboxCfg.readCallback = &mboxCallbackFxn_MSS_ch0;
549 
550  gMCB.mboxHandle = Mailbox_open(MAILBOX_TYPE_MSS, &mboxCfg, &errCode);
551  if (gMCB.mboxHandle == NULL)
552  {
553  /* Error: Unable to open the mailbox */
554  return;
555  }
556 
557  /* Get DataPath Object handle */
558  obj = &gMCB.dataPathObj[0];
559 
560  /* Data path configuration for both subframes */
561  MmwDemo_dataPathConfigBuffers(obj, SOC_XWR18XX_DSS_ADCBUF_BASE_ADDRESS);
562 
563  for (ik = 0; ik < NUM_SUBFRAMES; ik ++, obj++)
564  {
565  /* generate the twiddle factors and windowing inputs for subframe 0 and 1. */
567 
568  /* Configure the dBscan memories for subframe 0 and 1. */
570  /*Initialize the compensation params based on subframe index*/
572 
573  /* Configure and initialize the tracking (only for MRR subframe). */
575  {
576  ekfInit(obj);
577  }
578 
579  /* Initialize the parking assist module . */
581  {
582  parkingAssistInit(obj);
583  }
584  }
585 
586  /* Get DataPath Object handle */
587  obj = &gMCB.dataPathObj[0];
588 
589  /* EDMA Configuration for both subframes. */
591 
592  /* The logging buffer is marked as available. */
594 
595  /* Start data path task */
596  Task_Params_init(&taskParams);
597  taskParams.priority = 2;
598  taskParams.stackSize = 4 * 1024;
599  Task_create(DSS_mmWaveCtrlTask, &taskParams, NULL);
600 
601  return;
602 }
603 
617 {
618 #ifdef SUBFRAME_CONF_MRR_USRR
619  DSS_populateMRR(obj, 0);
620  DSS_populateUSRR(obj+1, 1);
621 #else
622 #ifdef SUBFRAME_CONF_MRR
623  DSS_populateMRR(obj, 0);
624 #endif
625 #ifdef SUBFRAME_CONF_USRR
626  DSS_populateUSRR(obj, 0);
627 #endif
628 #endif
629 }
630 
643 static int32_t DSS_mboxWrite(mmWaveMSG *message)
644 {
645  int32_t retVal = -1;
646 
647  retVal = Mailbox_write(gMCB.mboxHandle, (uint8_t*) message,
648  sizeof(mmWaveMSG));
649  if (retVal == sizeof(mmWaveMSG))
650  {
651  retVal = 0;
652  }
653  return retVal;
654 }
655 
670 static void mboxIn_uartOut_TASK()
671 {
672  mmWaveMSG message;
673  int32_t retVal = 0;
674 
675 
676  /* Read the message from the peer mailbox: We are not trying to protect the read
677  * from the peer mailbox because this is only being invoked from a single thread */
678  retVal = Mailbox_read(gMCB.mboxHandle, (uint8_t*)&message, sizeof(mmWaveMSG));
679  if (retVal < 0)
680  {
681  /* Error: Unable to read the message. Setup the error code and return values */
682  return;
683  }
684  else if (retVal == 0)
685  {
686  /* We are done: There are no messages available from the peer execution domain. */
687  return;
688  }
689  else
690  {
691  /* Flush out the contents of the mailbox to indicate that we are done with the message. This will
692  * allow us to receive another message in the mailbox while we process the received message. */
693  Mailbox_readFlush (gMCB.mboxHandle);
694 
695  /* Process the received message: */
696  switch (message.type)
697  {
699  {
700  uint8_t prevSubframeIndx;
701  DSS_DataPathObj * dataPathObj;
702 
703  if (gMCB.subframeIndx == 0)
704  {
705  prevSubframeIndx = NUM_SUBFRAMES - 1;
706  }
707  else
708  {
709  prevSubframeIndx = gMCB.subframeIndx - 1;
710  }
711 
712  dataPathObj = &gMCB.dataPathObj[prevSubframeIndx];
713  dataPathObj->timingInfo.transmitOutputCycles = Cycleprofiler_getTimeStamp() - dataPathObj->timingInfo.interFrameProcessingEndTime;
714 
716 
717  break;
718  }
719  default:
720  {
721  /* Message not support */
722  // System_printf ("Error: unsupport Mailbox message id=%d\n", message.type);
724  break;
725  }
726  }
727  }
728 }
729 
744 (
745  Mbox_Handle handle,
746  Mailbox_Type peer
747 )
748 {
749  /* Message has been received from the peer endpoint. */
750  gMCB.mboxProcToken = 1;
751 }
752 
769 int32_t DSS_SendProcessOutputToMSS(uint8_t *ptrHsmBuffer,
770  uint32_t outputBufSize,
771  DSS_DataPathObj *obj)
772 {
773  uint8_t *ptrCurrBuffer;
774  uint32_t totalHsmSize = 0;
775  uint32_t totalPacketLen = sizeof(mmWave_OUT_MSG_header);
776  uint32_t itemPayloadLen;
777  int32_t retVal = 0;
778  mmWaveMSG message;
780  uint32_t tlvIdx = 0;
781 
782  /* Set pointer to HSM buffer */
783  ptrCurrBuffer = ptrHsmBuffer;
784 
785  /* Clear message to MSS */
786  memset((void *) &message, 0, sizeof(mmWaveMSG));
787  message.type = MBOX_DSS2MSS_DETOBJ_READY;
788 
789  /* Header: */
790  message.body.detObj.header.platform = 0xA1642 ;
791  message.body.detObj.header.magicWord[0] = 0x0102;
792  message.body.detObj.header.magicWord[1] = 0x0304;
793  message.body.detObj.header.magicWord[2] = 0x0506;
794  message.body.detObj.header.magicWord[3] = 0x0708;
795  message.body.detObj.header.numDetectedObj = obj->numDetObj;
796  message.body.detObj.header.version = MMWAVE_SDK_VERSION_BUILD | (MMWAVE_SDK_VERSION_BUGFIX << 8) | (MMWAVE_SDK_VERSION_MINOR << 16) | (MMWAVE_SDK_VERSION_MAJOR << 24);
797 
798  /* Put detected Objects in HSM buffer: sizeof(MmwDemo_objOut_t) * numDetObj */
799  if (obj->numDetObj > 0)
800  {
801  /* Add objects descriptor */
802  descr.numDetetedObj = obj->numDetObj;
803  descr.xyzQFormat = obj->xyzOutputQFormat;
804 
805  itemPayloadLen = sizeof(mmWave_OUT_MSG_stats_dataObjDescr);
806  totalHsmSize += itemPayloadLen;
807  if (totalHsmSize > outputBufSize)
808  {
809  retVal = -1;
810  goto Exit;
811  }
812  memcpy(ptrCurrBuffer, (void *) &descr, itemPayloadLen);
813 
814  /* Add array of objects */
815  itemPayloadLen = sizeof(MmwDemo_detectedObjForTx) * obj->numDetObj;
816  totalHsmSize += itemPayloadLen;
817  if (totalHsmSize > outputBufSize)
818  {
819  retVal = -1;
820  goto Exit;
821  }
822  memcpy(&ptrCurrBuffer[sizeof(mmWave_OUT_MSG_stats_dataObjDescr)],
823  (void *) obj->detObjFinal, itemPayloadLen);
824 
825  message.body.detObj.tlv[tlvIdx].length = itemPayloadLen
827  message.body.detObj.tlv[tlvIdx].type =
829  message.body.detObj.tlv[tlvIdx].address = (uint32_t) ptrCurrBuffer;
830  tlvIdx++;
831 
832  /* Incrementing pointer to HSM buffer */
833  ptrCurrBuffer += itemPayloadLen
835  totalPacketLen += sizeof(mmWave_OUT_MSG_tl) + itemPayloadLen
837  }
838 
839  if ((obj->processingPath == POINT_CLOUD_PROCESSING) && (obj->dbScanReport.numCluster > 0))
840  {
841  /* Add objects descriptor */
842  /* In the point cloud processing path, the dbScanReport holds the number of clusters. */
844 
845  descr.xyzQFormat = obj->xyzOutputQFormat;
846 
847  itemPayloadLen = sizeof(mmWave_OUT_MSG_stats_dataObjDescr);
848  totalHsmSize += itemPayloadLen;
849  if (totalHsmSize > outputBufSize)
850  {
851  retVal = -1;
852  goto Exit;
853  }
854  memcpy(ptrCurrBuffer, (void *) &descr, itemPayloadLen);
855 
856  /* Add array of cluster reports. */
857  itemPayloadLen = sizeof(clusteringDBscanReportForTx) * obj->dbScanReport.numCluster;
858  totalHsmSize += itemPayloadLen;
859  if (totalHsmSize > outputBufSize)
860  {
861  retVal = -1;
862  goto Exit;
863  }
864  memcpy(&ptrCurrBuffer[sizeof(mmWave_OUT_MSG_stats_dataObjDescr)],
865  (void *) obj->clusterOpFinal, itemPayloadLen);
866 
867  message.body.detObj.tlv[tlvIdx].length = itemPayloadLen
869  message.body.detObj.tlv[tlvIdx].type =
871  message.body.detObj.tlv[tlvIdx].address = (uint32_t) ptrCurrBuffer;
872  tlvIdx++;
873 
874  /* Incrementing pointer to HSM buffer */
875  ptrCurrBuffer += itemPayloadLen
877  totalPacketLen += sizeof(mmWave_OUT_MSG_tl) + itemPayloadLen
879  }
880 
882  {
883  /* Add objects descriptor */
884  descr.numDetetedObj = obj->parkingAssistNumBins;
885  descr.xyzQFormat = obj->xyzOutputQFormat;
886 
887  itemPayloadLen = sizeof(mmWave_OUT_MSG_stats_dataObjDescr);
888  totalHsmSize += itemPayloadLen;
889  if (totalHsmSize > outputBufSize)
890  {
891  retVal = -1;
892  goto Exit;
893  }
894  memcpy(ptrCurrBuffer, (void *) &descr, itemPayloadLen);
895 
896  /* Add array of c;uster reports. */
897  itemPayloadLen = sizeof(uint16_t) * obj->parkingAssistNumBins;
898  totalHsmSize += itemPayloadLen;
899  if (totalHsmSize > outputBufSize)
900  {
901  retVal = -1;
902  goto Exit;
903  }
904  memcpy(&ptrCurrBuffer[sizeof(mmWave_OUT_MSG_stats_dataObjDescr)],
905  (void *) obj->parkingAssistBins, itemPayloadLen);
906 
907  message.body.detObj.tlv[tlvIdx].length = itemPayloadLen
909  message.body.detObj.tlv[tlvIdx].type =
911  message.body.detObj.tlv[tlvIdx].address = (uint32_t) ptrCurrBuffer;
912  tlvIdx++;
913 
914  /* Incrementing pointer to HSM buffer */
915  ptrCurrBuffer += itemPayloadLen
917  totalPacketLen += sizeof(mmWave_OUT_MSG_tl) + itemPayloadLen
919  }
920 
921  if ((obj->processingPath == MAX_VEL_ENH_PROCESSING) &&
922  (obj->numActiveTrackers > 0))
923  {
924  /* Add objects descriptor */
925  descr.numDetetedObj = obj->numActiveTrackers;
926  descr.xyzQFormat = obj->xyzOutputQFormat;
927 
928  itemPayloadLen = sizeof(mmWave_OUT_MSG_stats_dataObjDescr);
929  totalHsmSize += itemPayloadLen;
930  if (totalHsmSize > outputBufSize)
931  {
932  retVal = -1;
933  goto Exit;
934  }
935  memcpy(ptrCurrBuffer, (void *) &descr, itemPayloadLen);
936 
937  /* Add array of tracked objects. */
938  itemPayloadLen = sizeof(trackingReportForTx) * obj->numActiveTrackers;
939  totalHsmSize += itemPayloadLen;
940  if (totalHsmSize > outputBufSize)
941  {
942  retVal = -1;
943  goto Exit;
944  }
945  memcpy(&ptrCurrBuffer[sizeof(mmWave_OUT_MSG_stats_dataObjDescr)],
946  (void *) obj->trackerOpFinal, itemPayloadLen);
947 
948  message.body.detObj.tlv[tlvIdx].length = itemPayloadLen
950  message.body.detObj.tlv[tlvIdx].type =
952  message.body.detObj.tlv[tlvIdx].address = (uint32_t) ptrCurrBuffer;
953  tlvIdx++;
954 
955  /* Incrementing pointer to HSM buffer */
956  ptrCurrBuffer += itemPayloadLen + sizeof(mmWave_OUT_MSG_stats_dataObjDescr);
957  totalPacketLen += sizeof(mmWave_OUT_MSG_tl) + itemPayloadLen + sizeof(mmWave_OUT_MSG_stats_dataObjDescr);
958  }
959 
960  if (tlvIdx >= OUTPUT_MSG_MAX)
961  {
962  retVal = -1;
963  }
964 
965  if (retVal == 0)
966  {
967 
968  message.body.detObj.header.numTLVs = tlvIdx;
969  /* Round up packet length to multiple of MMWDEMO_OUTPUT_MSG_SEGMENT_LEN. */
970  message.body.detObj.header.totalPacketLen =
972  * ((totalPacketLen
975  message.body.detObj.header.timeCpuCycles = Cycleprofiler_getTimeStamp();
976  message.body.detObj.header.frameNumber = gMCB.stats.frameStartIntCounter;
977 
978  /* The GUI reads the subframe number to decide on the plotting type.
979  * a 0 => MAX_VEL_ENH_PROCESSING.
980  * a 1 => POINT_CLOUD_PROCESSING. */
981  message.body.detObj.header.subFrameNumber = gMCB.dataPathObj[gMCB.subframeIndx].processingPath;
982  if (DSS_mboxWrite(&message) != 0)
983  {
984  retVal = -1;
985  }
986  }
987  Exit: return retVal;
988 }
989 
998 void DSS_DataPathOutputLogging(DSS_DataPathObj * dataPathObj)
999 {
1000  volatile int32_t waitCounter = 0;
1001  /* if the logging buffer is not available, wait a little for the transfer message to come from
1002  * the MSS. */
1003  if(gMCB.loggingBufferAvailable == 0)
1004  {
1005  while((waitCounter < 6000000) && (gMCB.loggingBufferAvailable == 0))
1006  {
1007  waitCounter++;
1008 
1009  if (gMCB.mboxProcToken == 1)
1010  {
1011  gMCB.mboxProcToken = 0;
1012  /* If the mailbox has a message and the frame processing task has finished. */
1014  }
1015  }
1016  }
1017 
1018  /* Sending detected objects to logging buffer and shipped out from MSS UART */
1019  if (gMCB.loggingBufferAvailable == 1)
1020  {
1021  /* Set the logging buffer available flag to be 0 */
1023 
1024  /* Save output in logging buffer - HSRAM memory and a message is sent to MSS to notify
1025  logging buffer is ready */
1026  if (DSS_SendProcessOutputToMSS((uint8_t *) &gHSRAM, (uint32_t) SOC_XWR18XX_DSS_HSRAM_SIZE,
1027  dataPathObj) < 0)
1028  {
1029  /* Increment logging error */
1030  MmwDemo_dssAssert(0);
1032  }
1033 
1034  }
1035  else
1036  {
1037  /* Logging buffer is not available, skip saving detected objectes to logging buffer */
1039  }
1040 }
1041 
1051 static int32_t DSS_DataPathConfigAdcBuf()
1052 {
1053  ADCBuf_dataFormat dataFormat;
1054  ADCBuf_RxChanConf rxChanConf;
1055  int32_t retVal;
1056  uint8_t channel;
1057  uint8_t adcFmt;
1058  uint8_t chInterleave;
1059  uint8_t sampleInterleave;
1060  uint32_t chirpThreshold;
1061  uint32_t rxChanMask = 0xF; /* All channels are enabled. */
1062  uint32_t offset;
1063 
1064  adcFmt = 0; /* Complex mode */
1065  chInterleave = 1; /* Channel interleave mode is 1. i.e. no interleaving */
1066  sampleInterleave = 0; /*Sample Interleave mode is I first then Q */
1067  chirpThreshold = 1;
1068 
1069  /* Divide the 32 kB ADC buffer into 4 parts. Assign each to one channel */
1070  offset = ((32 * 1024)/4);
1071 
1072  /*****************************************************************************
1073  * Data path :: ADCBUF driver Configuration
1074  *****************************************************************************/
1075 
1076  /* Populate data format from configuration */
1077  dataFormat.adcOutFormat = adcFmt;
1078  dataFormat.channelInterleave = chInterleave;
1079  dataFormat.sampleInterleave = sampleInterleave;
1080 
1081  /* Disable all ADCBuf channels */
1082  if ((retVal = ADCBuf_control(gMCB.adcBufHandle,
1083  ADCBufMMWave_CMD_CHANNEL_DISABLE,
1084  (void *) &rxChanMask)) < 0)
1085  {
1086  // ("Error: Disable ADCBuf channels failed with [Error=%d]\n", retVal);
1087  return retVal;
1088  }
1089 
1090  retVal = ADCBuf_control(gMCB.adcBufHandle,
1091  ADCBufMMWave_CMD_CONF_DATA_FORMAT,
1092  (void *) &dataFormat);
1093  if (retVal < 0)
1094  {
1095  // ("Error: MMWDemoDSS Unable to configure the data formats\n");
1096  return -1;
1097  }
1098 
1099  memset((void*) &rxChanConf, 0, sizeof(ADCBuf_RxChanConf));
1100 
1101  /* Enable all Rx Channels */
1102  for (channel = 0; channel < SYS_COMMON_NUM_RX_CHANNEL; channel++)
1103  {
1104  /* Populate the receive channel configuration: */
1105  rxChanConf.channel = channel;
1106  retVal = ADCBuf_control(gMCB.adcBufHandle,
1107  ADCBufMMWave_CMD_CHANNEL_ENABLE,
1108  (void *) &rxChanConf);
1109 
1110  if (retVal < 0)
1111  {
1112  // ("Error: MMWDemoDSS ADCBuf Control for Channel %d Failed with error[%d]\n", channel, retVal);
1113  return -1;
1114  }
1115 
1116  rxChanConf.offset += offset;
1117  }
1118 
1119  /* Set ping/pong chirp threshold: */
1120  retVal = ADCBuf_control(gMCB.adcBufHandle,
1121  ADCBufMMWave_CMD_SET_PING_CHIRP_THRESHHOLD,
1122  (void *) &chirpThreshold);
1123  if (retVal < 0)
1124  {
1125  // System_printf("Error: ADCbuf Ping Chirp Threshold Failed with Error[%d]\n", retVal);
1126  return -1;
1127  }
1128  retVal = ADCBuf_control(gMCB.adcBufHandle,
1129  ADCBufMMWave_CMD_SET_PONG_CHIRP_THRESHHOLD,
1130  (void *) &chirpThreshold);
1131  if (retVal < 0)
1132  {
1133  // System_printf("Error: ADCbuf Pong Chirp Threshold Failed with Error[%d]\n", retVal);
1134  return -1;
1135  }
1136 
1137  return 0;
1138 }
1139 
1151 static void DSS_copyTable(EDMA_Handle handle, COPY_TABLE *tp)
1152 {
1153  uint16_t i;
1154  COPY_RECORD crp;
1155  uint32_t loadAddr;
1156  uint32_t runAddr;
1157 
1158  for (i = 0; i < tp->num_recs; i++)
1159  {
1160  crp = tp->recs[i];
1161  loadAddr = (uint32_t)crp.load_addr;
1162  runAddr = (uint32_t)crp.run_addr;
1163 
1164  /* currently we use only one count of EDMA which is 16-bit so we cannot
1165  handle tables bigger than 64 KB */
1166  MmwDemo_dssAssert(crp.size <= 65536U);
1167 
1168  if (crp.size)
1169  {
1170  DSS_edmaBlockCopy(handle, loadAddr, runAddr, crp.size);
1171  }
1172  }
1173 }
1189 static void DSS_edmaBlockCopy(EDMA_Handle handle, uint32_t loadAddr, uint32_t runAddr, uint16_t size)
1190 {
1191  EDMA_channelConfig_t config;
1192  volatile bool isTransferDone;
1193 
1194  config.channelId = EDMA_TPCC0_REQ_FREE_0;
1195  config.channelType = (uint8_t)EDMA3_CHANNEL_TYPE_DMA;
1196  config.paramId = (uint16_t)EDMA_TPCC0_REQ_FREE_0;
1197  config.eventQueueId = 0;
1198 
1199  config.paramSetConfig.sourceAddress = (uint32_t) SOC_translateAddress((uint32_t)loadAddr,
1200  SOC_TranslateAddr_Dir_TO_EDMA, NULL);
1201  config.paramSetConfig.destinationAddress = (uint32_t) SOC_translateAddress((uint32_t)runAddr,
1202  SOC_TranslateAddr_Dir_TO_EDMA, NULL);
1203 
1204  config.paramSetConfig.aCount = size;
1205  config.paramSetConfig.bCount = 1U;
1206  config.paramSetConfig.cCount = 1U;
1207  config.paramSetConfig.bCountReload = 0U;
1208 
1209  config.paramSetConfig.sourceBindex = 0U;
1210  config.paramSetConfig.destinationBindex = 0U;
1211 
1212  config.paramSetConfig.sourceCindex = 0U;
1213  config.paramSetConfig.destinationCindex = 0U;
1214 
1215  config.paramSetConfig.linkAddress = EDMA_NULL_LINK_ADDRESS;
1216  config.paramSetConfig.transferType = (uint8_t)EDMA3_SYNC_A;
1217  config.paramSetConfig.transferCompletionCode = (uint8_t) EDMA_TPCC0_REQ_FREE_0;
1218  config.paramSetConfig.sourceAddressingMode = (uint8_t) EDMA3_ADDRESSING_MODE_LINEAR;
1219  config.paramSetConfig.destinationAddressingMode = (uint8_t) EDMA3_ADDRESSING_MODE_LINEAR;
1220 
1221  /* don't care because of linear addressing modes above */
1222  config.paramSetConfig.fifoWidth = (uint8_t) EDMA3_FIFO_WIDTH_8BIT;
1223 
1224  config.paramSetConfig.isStaticSet = false;
1225  config.paramSetConfig.isEarlyCompletion = false;
1226  config.paramSetConfig.isFinalTransferInterruptEnabled = true;
1227  config.paramSetConfig.isIntermediateTransferInterruptEnabled = false;
1228  config.paramSetConfig.isFinalChainingEnabled = false;
1229  config.paramSetConfig.isIntermediateChainingEnabled = false;
1230  config.transferCompletionCallbackFxn = NULL;
1231  config.transferCompletionCallbackFxnArg = NULL;
1232 
1233  if (EDMA_configChannel(handle, &config, false) != EDMA_NO_ERROR)
1234  {
1235  MmwDemo_dssAssert(0);
1236  }
1237 
1238  if (EDMA_startDmaTransfer(handle, config.channelId) != EDMA_NO_ERROR)
1239  {
1240  MmwDemo_dssAssert(0);
1241  }
1242 
1243  /* wait until transfer done */
1244  do
1245  {
1246  if (EDMA_isTransferComplete(handle,
1247  config.paramSetConfig.transferCompletionCode,
1248  (bool *)&isTransferDone) != EDMA_NO_ERROR)
1249  {
1250  MmwDemo_dssAssert(0);
1251  }
1252  }
1253  while (isTransferDone == false);
1254 
1255  /* make sure to disable channel so it is usable later */
1256  EDMA_disableChannel(handle, config.channelId, config.channelType);
1257 }
1258 
1271 uint16_t convertSNRdBtoThreshold(uint16_t numInteg, float ThresholdIndB,uint16_t bitwidth)
1272 {
1273  float scaleFac = (float) ((1 << bitwidth) * numInteg);
1274  float convertFrom_10Log10_to_20Log2 = ThresholdIndB * (1.0f / 6.0f);
1275 
1276  return (uint16_t) (scaleFac * convertFrom_10Log10_to_20Log2);
1277 }
1278 
1289 {
1290 
1291  obj->dbScanInstance.scratchPad = (char *)obj->dBscanScratchPad;
1292  obj->dbScanInstance.visited = (char *)& obj->dBscanScratchPad[0];
1293  obj->dbScanInstance.scope = (char *)& obj->dBscanScratchPad[obj->dbScanInstance.maxPoints];
1294  obj->dbScanInstance.neighbors = (uint16_t *)& obj->dBscanScratchPad[2 * obj->dbScanInstance.maxPoints];
1295 
1298  obj->dbScanReport.numCluster = 0;
1299 
1301  {
1302  uint32_t i;
1303  for (i = 0; i < obj->dbScanInstance.maxClusters; i++)
1304  {
1305  obj->dbScanState[i].numPoints = 0;
1306  }
1307  }
1308 }
1309 
1310 
1320 void DSS_populateUSRR(DSS_DataPathObj* obj, uint16_t subframeIndx)
1321 {
1323  obj->subframeIndx = subframeIndx;
1328  obj->numVirtualAntAzim = 8;
1329  obj->numVirtualAntElev = 4;
1334  obj->invNumAngleBins = 1.0f/((float)SUBFRAME_USRR_NUM_ANGLE_BINS);
1337 
1338 #if (SUBFRAME_USRR_CHIRPTYPE_0_NUM_CHIRPS != SUBFRAME_USRR_CHIRPTYPE_1_NUM_CHIRPS)
1339 #error "the number of chirps in each chirp type is not equal"
1340 #endif
1343 
1344  /* For the point-cloud chirp, both chirptypes offer the same velocity resolution. */
1346 
1348 
1350  obj->xyzOutputQFormat = 7;
1351  obj->invOneQFormat = 1.0f/((float)(1U << obj->xyzOutputQFormat));
1352  obj->sinAzimQFormat = 14;
1353  obj->invOneSinAzimFormat = 1.0f/((float)(1U << obj->sinAzimQFormat));
1354 
1357  obj->cfarCfgDoppler.winLen = 8;
1358  obj->cfarCfgDoppler.guardLen = 4;
1359  obj->cfarCfgDoppler.noiseDivShift = 4; /* Should be log2(2*winLen) */
1360  obj->cfarCfgDoppler.cyclicMode = 0;
1362 
1365  obj->cfarCfgRange.winLen = 8;
1366  obj->cfarCfgRange.guardLen = 4;
1367  obj->cfarCfgRange.noiseDivShift = 4; /* Should be log2(2*winLen) */
1368  obj->cfarCfgRange.cyclicMode = 0;
1370  obj->cfarCfgRange_minIndxToIgnoreHPF = 54; /* The left side of the CFAR sum is ignored upto ~800 kHz (54+12)*6222/512* */
1372  obj->minRange = (uint16_t) (0.10f * (1U << obj->xyzOutputQFormat));
1373  obj->maxRange = (uint16_t) ROUND_TO_INT32(obj->rangeResolution*SUBFRAME_USRR_NUM_CMPLX_ADC_SAMPLES * (0.9f) * (1U << obj->xyzOutputQFormat));
1374 
1378 
1380  obj->calibDcRangeSigCfg.enabled = 0;
1382 
1384 #ifdef LOW_THRESHOLD_FOR_USRR
1385 
1386  obj->SNRThresholds[0].rangelim = (uint16_t) (6.0f * (float)(1U << obj->xyzOutputQFormat));
1388 
1389  obj->SNRThresholds[1].rangelim = (uint16_t) (10.0f * (float)(1U << obj->xyzOutputQFormat));
1391 
1392  obj->SNRThresholds[2].rangelim = 65535;
1394 
1397  obj->peakValThresholds[0].rangelim = (uint16_t) (3.0f * (float) (1U << obj->xyzOutputQFormat));
1398  obj->peakValThresholds[0].threshold = (27000 >> obj->log2numVirtAnt);
1399 
1400  obj->peakValThresholds[1].rangelim = 65535;
1401  obj->peakValThresholds[1].threshold = 0;
1402 
1403  obj->peakValThresholds[2].rangelim = 65535;
1404  obj->peakValThresholds[2].threshold = 0;
1405 #else
1406 
1407  obj->SNRThresholds[0].rangelim = (uint16_t) (6.0f * (float)(1U << obj->xyzOutputQFormat));
1409 
1410  obj->SNRThresholds[1].rangelim = (uint16_t) (10.0f * (float)(1U << obj->xyzOutputQFormat));
1412 
1413  obj->SNRThresholds[2].rangelim = 65535;
1415 
1418  obj->peakValThresholds[0].rangelim = (uint16_t) (3.0f * (float) (1U << obj->xyzOutputQFormat));
1419  obj->peakValThresholds[0].threshold = (350 >> obj->log2numVirtAnt);
1420 
1421  obj->peakValThresholds[1].rangelim = 65535;
1422  obj->peakValThresholds[1].threshold = 0;
1423 
1424  obj->peakValThresholds[2].rangelim = 65535;
1425  obj->peakValThresholds[2].threshold = 0;
1426 #endif
1427 
1429  obj->dbScanInstance.epsilon = 1.7f;
1430  obj->dbScanInstance.vFactor = 3.0f;
1431  obj->dbScanInstance.weight = 1.3f * 1.3f * obj->dbScanInstance.epsilon;
1435  obj->dbScanInstance.fixedPointScale = (1 << obj->xyzOutputQFormat);
1437 
1439  obj->parkingAssistNumBins = 32;
1440  obj->parkingAssistMaxRange = 20 * (1 << obj->xyzOutputQFormat);
1442 
1443  /* Azimuth SNR computation depend on the following computation. */
1445 }
MMW_NOISE_AVG_MODE_CFAR_CA
#define MMW_NOISE_AVG_MODE_CFAR_CA
Definition: dss_data_path.h:83
PROFILE_USRR_RANGE_RESOLUTION_METERS
#define PROFILE_USRR_RANGE_RESOLUTION_METERS
Derived parameters.
Definition: config_chirp_design_USRR20.h:105
mmWave_dssAssertInfoMsg_t::file
char file[MMWAVE_MAX_FILE_NAME_SIZE]
file name
Definition: mmw_messages.h:208
DSS_DataPathObj_t::rxChPhaseComp
cmplx16ImRe_t * rxChPhaseComp
Pointer to the Rx Gain phase compensation params.
Definition: dss_data_path.h:531
MBOX_MSS2DSS_DETOBJ_SHIPPED
Definition: mmw_messages.h:137
DSS_DataPathObj_t::edmaHandle
EDMA_Handle edmaHandle[2]
Handle of the EDMA driver.
Definition: dss_data_path.h:450
MmwDemo_DSS_STATS_t::chirpIntCounter
uint32_t chirpIntCounter
Counter which tracks the number of chirp interrupt detected.
Definition: mmWave_XSS.h:146
MmwDemo_CfarCfg_t::winLen
uint8_t winLen
CFAR noise avraging window length.
Definition: mrr_config.h:70
MAX_VEL_ENH_PROCESSING
#define MAX_VEL_ENH_PROCESSING
There are two processing paths in the MRR Demo.
Definition: app_cfg.h:111
SOC_XWR18XX_DSS_HSRAM_SIZE
#define SOC_XWR18XX_DSS_HSRAM_SIZE
DSS stores the application output and DSS2MSS ISR information (for fast exception signalling) in HSRA...
Definition: dss_main.c:75
MCB_t::loggingBufferAvailable
uint8_t loggingBufferAvailable
! Data Path object
Definition: mmWave_XSS.h:228
MmwDemo_MultiObjBeamFormingCfg_t::multiPeakThrsScal
float multiPeakThrsScal
second peak detection threshold
Definition: mrr_config.h:123
MmwDemo_CfarCfg_t::noiseDivShift
uint8_t noiseDivShift
CFAR cumulative noise sum divisor.
Definition: mrr_config.h:76
gMCB
MCB gMCB
Global Variable for tracking information required by the design.
Definition: dss_main.c:97
clusteringDBscanInstance::visited
char * visited
Definition: dss_data_path.h:323
MRR_MAX_OBJ_OUT
#define MRR_MAX_OBJ_OUT
The maximum number of objects to be send out per frame. This number is upper bounded by the transfer ...
Definition: app_cfg.h:150
clusteringDBscanInstance::minPointsInCluster
uint16_t minPointsInCluster
Definition: dss_data_path.h:313
SNRThresholds::rangelim
uint16_t rangelim
Range (in meters * (1 << xyzOutputQFormat)) upto which the SNR requirement is valid.
Definition: dss_data_path.h:226
DSS_DataPathObj_t::maxRange
uint16_t maxRange
maximum range at which a target is detected ( in xyzOutputQFormat precision).
Definition: dss_data_path.h:619
MmwDemo_DSS_STATS_t::frameStartEvt
uint32_t frameStartEvt
Counter which tracks the number of frame start event detected The frame start event is triggered in t...
Definition: mmWave_XSS.h:157
OUTPUT_MSG_MAX
Max TLV outptut message.
Definition: mmw_messages.h:42
MMW_OUTPUT_MSG_SEGMENT_LEN
#define MMW_OUTPUT_MSG_SEGMENT_LEN
Output packet length is a multiple of this value, must be power of 2.
Definition: mmw_messages.h:24
MmwDemo_DSS_STATS_t::detObjLoggingSkip
uint32_t detObjLoggingSkip
Counter which tracks the number of times saving detected objects in logging buffer is skipped.
Definition: mmWave_XSS.h:171
DSS_DataPathObj_t::minRange
uint16_t minRange
minimum range at which a target is detected ( in xyzOutputQFormat precision).
Definition: dss_data_path.h:616
MmwDemo_CfarCfg_t::guardLen
uint8_t guardLen
CFAR guard length.
Definition: mrr_config.h:73
clusteringDBscanReport::numPoints
uint16_t numPoints
Definition: dss_data_path.h:349
DSS_DataPathObj_t::dbScanReport
clusteringDBscanOutput_t dbScanReport
The dBscan clustering result structures (holds pointers to the result).
Definition: dss_data_path.h:741
_MmwDemo_dssAssert
void _MmwDemo_dssAssert(int32_t expression, const char *file, int32_t line)
Definition: dss_main.c:302
clusteringDBscanInstance::scope
char * scope
Definition: dss_data_path.h:324
DSS_copyTable
static void DSS_copyTable(EDMA_Handle handle, COPY_TABLE *tp)
Definition: dss_main.c:1147
mmWaveMSG_t::body
mmWaveMSG_body body
message body
Definition: mmw_messages.h:238
EKF_XYZ_Interface.h
Interface the Extended Kalman Filter.
DSS_DataPathObj_t::cycleLog
cycleLog_t cycleLog
DSP cycles for chirp and interframe processing and pending on EDMA data transferes.
Definition: dss_data_path.h:732
MmwDemo_DSS_STATS_t::frameStartIntCounter
uint32_t frameStartIntCounter
Counter which tracks the number of frame start interrupt detected.
Definition: mmWave_XSS.h:149
MmwDemo_timingInfo::chirpProcessingEndTime
uint32_t chirpProcessingEndTime
Chirp processing end time.
Definition: dss_data_path.h:267
MmwDemo_waitEndOfChirps
void MmwDemo_waitEndOfChirps(DSS_DataPathObj *obj, uint8_t subframeIndx)
Definition: dss_data_path.c:2079
rxGainPhaseParam_Init
void rxGainPhaseParam_Init(DSS_DataPathObj *obj)
Definition: dss_main.c:393
cycleLog_t_::interFrameWaitTime
uint32_t interFrameWaitTime
total wait time for 2D and 3D EDMA data transfer
Definition: dss_data_path.h:103
mmw_messages.h
SUBFRAME_USRR_NUM_ANGLE_BINS
#define SUBFRAME_USRR_NUM_ANGLE_BINS
Definition: config_chirp_design_USRR20.h:101
MCB_t::mboxHandle
Mbox_Handle mboxHandle
! Handle to the SOC Module
Definition: mmWave_XSS.h:214
clusteringDBscanReportForTx
struct clusteringDBscanReportForTx_t clusteringDBscanReportForTx
Structure for each cluster information report .
DSS_DataPathObj_t::SNRThresholds
RangeDependantThresh_t SNRThresholds[MAX_NUM_RANGE_DEPENDANT_SNR_THRESHOLDS]
SNR thresholds as a function of range.
Definition: dss_data_path.h:697
ADCBUFF_CHIRP_THRESHOLD
#define ADCBUFF_CHIRP_THRESHOLD
Number of chirps to be collected in the ADC buffer, before the chirp available interrupt.
Definition: app_cfg.h:88
DSS_dataPathConfigPopulate
void DSS_dataPathConfigPopulate(DSS_DataPathObj *obj)
Definition: dss_main.c:613
DSS_DataPathObj_t::numVirtualAntAzim
uint16_t numVirtualAntAzim
number of virtual azimuth antennas
Definition: dss_data_path.h:637
MMW_NOISE_AVG_MODE_CFAR_CASO
#define MMW_NOISE_AVG_MODE_CFAR_CASO
Definition: dss_data_path.h:89
DSS_DataPathObj_t::numDopplerBins
uint16_t numDopplerBins
number of doppler bins
Definition: dss_data_path.h:649
DSS_DataPathObj_t::numAngleBins
uint16_t numAngleBins
number of angle bins
Definition: dss_data_path.h:643
DSS2MSS_HSRAM::dss2MssIsrInfo
uint8_t dss2MssIsrInfo
data path processing/detection related msg payloads, these msgs are signalled through DSS to MSS mail...
Definition: dss_main.c:80
DATAPATH_DET_PAYLOAD_SIZE
#define DATAPATH_DET_PAYLOAD_SIZE
Definition: dss_main.c:78
cycleLog_t_::interChirpProcessingTime
uint32_t interChirpProcessingTime
total processing time during all chirps in a frame excluding EDMA waiting time
Definition: dss_data_path.h:100
clusteringDBscanInstance::neighbors
uint16_t * neighbors
Definition: dss_data_path.h:325
DSS_DataPathObj_t::log2numVirtAnt
uint8_t log2numVirtAnt
log2 of the number of virtual antennas.
Definition: dss_data_path.h:582
mmWave_OUT_MSG_stats_dataObjDescr_t
Structure holds information about detected objects. This information is sent in front of the array of...
Definition: mmw_messages.h:76
mmWaveMSG_t::type
mbox_message_type type
message type
Definition: mmw_messages.h:237
clusteringDBscanInstance::dBScanNeighbourLim
uint16_t dBScanNeighbourLim
Definition: dss_data_path.h:318
DSS_DataPathObj_t::numChirpsPerChirpType
uint16_t numChirpsPerChirpType
number of chirps per chirp type
Definition: dss_data_path.h:646
DSS_DataPathObj_t::maxUnambiguousVel
float maxUnambiguousVel
maximum unambiguous velocity (without algorithmic improvements) in meters/sec
Definition: dss_data_path.h:685
DSS_DataPathConfigAdcBuf
static int32_t DSS_DataPathConfigAdcBuf()
Definition: dss_main.c:1048
DSS_DataPathObj_t::chirpThreshold
uint8_t chirpThreshold
Chirp Threshold configuration used for ADCBUF driver.
Definition: dss_data_path.h:564
MmwDemo_dssAssert
#define MmwDemo_dssAssert(expression)
Definition: mmWave_XSS.h:259
DSS_DataPathObj_t::rangeResolution
float rangeResolution
range resolution in meters
Definition: dss_data_path.h:679
MmwDemo_dataPathInitEdma
int32_t MmwDemo_dataPathInitEdma(DSS_DataPathObj *obj)
Definition: dss_data_path.c:2223
gCycleLog
volatile cycleLog_t gCycleLog
Definition: dss_main.c:99
MMWDEMO_OUTPUT_MSG_PARKING_ASSIST
#define MMWDEMO_OUTPUT_MSG_PARKING_ASSIST
Definition: dss_data_path.h:94
MmwDemo_dataPathConfigFFTs
void MmwDemo_dataPathConfigFFTs(DSS_DataPathObj *obj)
Definition: dss_data_path.c:2746
clusteringDBscanInstance::fixedPointScale
uint16_t fixedPointScale
Definition: dss_data_path.h:319
mmWave_OUT_MSG_stats_dataObjDescr
struct mmWave_OUT_MSG_stats_dataObjDescr_t mmWave_OUT_MSG_stats_dataObjDescr
Structure holds information about detected objects. This information is sent in front of the array of...
ekfInit
void ekfInit(DSS_DataPathObj *restrict obj)
Definition: Extended_Kalman_Filter_xyz.c:86
trackingReportForTx
struct trackingReportForTx_t trackingReportForTx
Structure for tracking report.
MmwDemo_CalibDcRangeSigCfg_t::enabled
uint16_t enabled
enabled flag: 1-enabled 0-disabled
Definition: mrr_config.h:223
MmwDemo_dataPathConfigEdma
int32_t MmwDemo_dataPathConfigEdma(DSS_DataPathObj *obj)
Definition: dss_data_path.c:936
MmwDemo_CfarCfg_t::cyclicMode
uint8_t cyclicMode
CFAR 0-cyclic mode disabled, 1-cyclic mode enabled.
Definition: mrr_config.h:79
DSS_DataPathObj_t::trackerOpFinal
trackingReportForTx * trackerOpFinal
Final list of tracked objects for transmission.
Definition: dss_data_path.h:762
DSS_DataPathObj_t::numTxAntennas
uint16_t numTxAntennas
number of transmit antennas
Definition: dss_data_path.h:631
DSS_DataPathObj_t::numAdcSamples
uint16_t numAdcSamples
number of ADC samples
Definition: dss_data_path.h:664
MCB_t::frameStartIntHandle
SOC_SysIntListenerHandle frameStartIntHandle
! Handle to the SOC chirp interrupt listener Handle
Definition: mmWave_XSS.h:217
DSS_dBScanConfigBuffers
void DSS_dBScanConfigBuffers(DSS_DataPathObj *obj)
Definition: dss_main.c:1284
DSS_DataPathObj_t::parkingAssistBins
uint16_t * parkingAssistBins
Nearest object as a function of azimuth.
Definition: dss_data_path.h:765
DSS_frameStartIntCallback
static void DSS_frameStartIntCallback(uintptr_t arg)
Definition: dss_main.c:177
DSS_DataPathObj_t::dbScanInstance
clusteringDBscanInstance_t dbScanInstance
The dBscan clustering configuration structure.
Definition: dss_data_path.h:738
DSS_DataPathObj_t::dbscanOutputDataIndexArray
uint16_t * dbscanOutputDataIndexArray
Pointer to dBScan index array.
Definition: dss_data_path.h:546
MCB_t::stats
MmwDemo_DSS_STATS stats
! mmw Demo state
Definition: mmWave_XSS.h:226
mmWave_OUT_MSG_stats_dataObjDescr_t::xyzQFormat
uint16_t xyzQFormat
Q format of detected objects x/y/z coordinates.
Definition: mmw_messages.h:79
MmwDemo_DSS_STATS_t::chirpEvt
uint32_t chirpEvt
Counter which tracks the number of chirp event detected The chirp event is triggered in the ISR for c...
Definition: mmWave_XSS.h:153
DSS_DataPathObj_t::numActiveTrackers
uint16_t numActiveTrackers
number of active trackers.
Definition: dss_data_path.h:622
MmwDemo_detectedObjForTx
struct MmwDemo_detectedObjForTx_t MmwDemo_detectedObjForTx
Detected object estimated parameters to be transmitted out.
MAX_NUM_CLUSTER_USRR
#define MAX_NUM_CLUSTER_USRR
The maximum number of clusters out of the dbscan algorithm (for the USRR subframe).
Definition: app_cfg.h:115
DSS_DataPathObj_t::cfarCfgRange
MmwDemo_CfarCfg cfarCfgRange
CFAR configuration in Range direction.
Definition: dss_data_path.h:719
mboxCallbackFxn_MSS_ch0
void mboxCallbackFxn_MSS_ch0(Mbox_Handle handle, Mailbox_Type peer)
Definition: dss_main.c:741
DSS_DataPathObj_t::cfarCfgRange_minIndxToIgnoreHPF
uint16_t cfarCfgRange_minIndxToIgnoreHPF
The HPF can mess up the noise floor computation. So for a certain number of indices,...
Definition: dss_data_path.h:598
DSS_DataPathObj_t::txAntennaCount
uint16_t txAntennaCount
chirp counter modulo number of tx antennas
Definition: dss_data_path.h:655
DSS_DataPathObj_t::numDetObj
uint16_t numDetObj
Number of detected objects.
Definition: dss_data_path.h:610
DSS_DataPathObj_t::sinAzimQFormat
uint8_t sinAzimQFormat
Q format of the sin of the azimuth.
Definition: dss_data_path.h:585
DSS_DataPathObj_t::dbscanOutputDataReport
clusteringDBscanReport_t * dbscanOutputDataReport
Pointer to dBScan output Report array.
Definition: dss_data_path.h:549
mmWave_dssAssertInfoMsg_t::line
uint32_t line
line number
Definition: mmw_messages.h:209
MmwDemo_timingInfo::interFrameProcessingEndTime
uint32_t interFrameProcessingEndTime
Inter frame processing end time.
Definition: dss_data_path.h:278
cycleLog_t_::interFrameProcessingTime
uint32_t interFrameProcessingTime
total processing time for 2D and 3D excluding EDMA waiting time
Definition: dss_data_path.h:102
clusteringDBscanOutput::IndexArray
uint16_t * IndexArray
Definition: dss_data_path.h:369
MmwDemo_CfarCfg_t::thresholdScale
uint16_t thresholdScale
CFAR threshold scale.
Definition: mrr_config.h:64
app_cfg.h
MBOX_DSS2MSS_DETOBJ_READY
Definition: mmw_messages.h:147
mmWave_OUT_MSG_stats_dataObjDescr_t::numDetetedObj
uint16_t numDetetedObj
Number of detected objects.
Definition: mmw_messages.h:78
SUBFRAME_USRR_NUM_VIRT_ANT
#define SUBFRAME_USRR_NUM_VIRT_ANT
Definition: config_chirp_design_USRR20.h:100
clusteringDBscanOutput::report
clusteringDBscanReport_t * report
Definition: dss_data_path.h:371
DSS_DataPathObj_t::velResolution
float velResolution
velocity resolution in meters/sec
Definition: dss_data_path.h:682
LOG2_APPROX
#define LOG2_APPROX(X)
Definition: device_cfg.h:133
ROUND_TO_INT32
#define ROUND_TO_INT32(X)
Definition: device_cfg.h:129
clusteringDBscanInstance::scratchPad
char * scratchPad
Definition: dss_data_path.h:322
MmwDemo_DSS_STATS_t::detObjLoggingErr
uint32_t detObjLoggingErr
Counter which tracks the number of times saving detected objects in logging buffer has an error.
Definition: mmWave_XSS.h:175
DSS_DataPathObj_t::detObjFinal
MmwDemo_detectedObjForTx * detObjFinal
Final list of detected object for transmission.
Definition: dss_data_path.h:756
MMWDEMO_OUTPUT_MSG_CLUSTERS
#define MMWDEMO_OUTPUT_MSG_CLUSTERS
Message ID for the custom messages from the MRR demo.
Definition: dss_data_path.h:92
MmwDemo_timingInfo::transmitOutputCycles
uint32_t transmitOutputCycles
time to transmit out detection information (in DSP cycles)
Definition: dss_data_path.h:264
convertSNRdBtoThreshold
uint16_t convertSNRdBtoThreshold(uint16_t numInteg, float ThresholdIndB, uint16_t bitwidth)
Definition: dss_main.c:1267
DSS_DataPathObj_t::numRangeBins
uint16_t numRangeBins
number of range bins
Definition: dss_data_path.h:667
clusteringDBscanInstance::maxPoints
uint16_t maxPoints
Definition: dss_data_path.h:317
DSS_mmWaveCtrlTask
static void DSS_mmWaveCtrlTask(UArg arg0, UArg arg1)
Definition: dss_main.c:199
DSS_DataPathObj_t::xyzOutputQFormat
uint8_t xyzOutputQFormat
Q format of the output x/y/z coordinates.
Definition: dss_data_path.h:576
DSS_DataPathObj_t::invOneSinAzimFormat
float invOneSinAzimFormat
inverse of the oneQformat
Definition: dss_data_path.h:691
MCB_t::chirpIntHandle
SOC_SysIntListenerHandle chirpIntHandle
! Semaphore handle for the mailbox communication
Definition: mmWave_XSS.h:216
DSS_mmWaveInitTASK
static void DSS_mmWaveInitTASK(UArg arg0, UArg arg1)
Definition: dss_main.c:472
MCB_t::socHandle
SOC_Handle socHandle
Definition: mmWave_XSS.h:213
mboxIn_uartOut_TASK
static void mboxIn_uartOut_TASK()
Definition: dss_main.c:667
OUTPUT_MSG_DETECTED_POINTS
List of detected points.
Definition: mmw_messages.h:36
DSS_chirpIntCallback
static void DSS_chirpIntCallback(uintptr_t arg)
Definition: dss_main.c:158
main
int32_t main(void)
Definition: dss_main.c:331
SUBFRAME_USRR_MAX_VEL_M_P_S
#define SUBFRAME_USRR_MAX_VEL_M_P_S
Definition: config_chirp_design_USRR20.h:111
DSS_DataPathObj_t::dBscanScratchPad
uint8_t * dBscanScratchPad
Pointer to dBScan scratch pad.
Definition: dss_data_path.h:543
DSS_DataPathObj_t::calibDcRangeSigCfg
MmwDemo_CalibDcRangeSigCfg calibDcRangeSigCfg
DC Range antenna signature callibration configuration.
Definition: dss_data_path.h:725
MmwDemo_interFrameProcessing
void MmwDemo_interFrameProcessing(DSS_DataPathObj *obj, uint8_t subframeIndx)
Definition: dss_data_path.c:1633
clusteringDBscanInstance::weight
float weight
Definition: dss_data_path.h:311
SUBFRAME_USRR_CHIRPTYPE_0_NUM_CHIRPS
#define SUBFRAME_USRR_CHIRPTYPE_0_NUM_CHIRPS
Definition: config_chirp_design_USRR20.h:95
DSS_DataPathObj_t::invOneQFormat
float invOneQFormat
inverse of the oneQformat
Definition: dss_data_path.h:688
MCB_t::frameProcToken
uint8_t frameProcToken
! 'mailbox has a message' token
Definition: mmWave_XSS.h:234
POINT_CLOUD_PROCESSING
#define POINT_CLOUD_PROCESSING
Definition: app_cfg.h:112
MmwDemo_dataPathConfigBuffers
void MmwDemo_dataPathConfigBuffers(DSS_DataPathObj *objIn, uint32_t adcBufAddress)
Definition: dss_data_path.c:2331
MmwDemo_processChirp
void MmwDemo_processChirp(DSS_DataPathObj *obj, uint8_t subframeIndx)
Definition: dss_data_path.c:1974
DSS_mboxWrite
static int32_t DSS_mboxWrite(mmWaveMSG *message)
Definition: dss_main.c:640
_MmwDemo_fastCode_L1PSRAM_copy_table
far COPY_TABLE _MmwDemo_fastCode_L1PSRAM_copy_table
CFARTHRESHOLD_N_BIT_FRAC
#define CFARTHRESHOLD_N_BIT_FRAC
Fractional bit width for Thresholds for CFAR data (rangeSNRdB, dopplerSNRdB, AzimSNR,...
Definition: app_cfg.h:127
MCB_t
DSP-Subsystem (DSS) Master control block (MCB) The structure is used to hold handling information,...
Definition: mmWave_XSS.h:210
DSS_DataPathObj_t::processingPath
uint8_t processingPath
Processing path - either point-cloud or max-vel enhancement.
Definition: dss_data_path.h:561
cycleLog_t_::interChirpWaitTime
uint32_t interChirpWaitTime
total wait time for EDMA data transfer during all chirps in a frame
Definition: dss_data_path.h:101
SNRThresholds::threshold
uint16_t threshold
SNR threshold (dB) for the range.
Definition: dss_data_path.h:228
MMWDEMO_OUTPUT_MSG_TRACKED_OBJECTS
#define MMWDEMO_OUTPUT_MSG_TRACKED_OBJECTS
Definition: dss_data_path.h:93
MmwDemo_dataPathInit1Dstate
void MmwDemo_dataPathInit1Dstate(DSS_DataPathObj *obj)
Definition: dss_data_path.c:2198
MCB_t::dataPathObj
DSS_DataPathObj dataPathObj[NUM_SUBFRAMES]
! mmw Demo statistics
Definition: mmWave_XSS.h:227
clusteringDBscanOutput::numCluster
uint16_t numCluster
Definition: dss_data_path.h:370
SUBFRAME_USRR_VEL_RESOLUTION_M_P_S
#define SUBFRAME_USRR_VEL_RESOLUTION_M_P_S
Definition: config_chirp_design_USRR20.h:110
DSS_DataPathObj_t
Millimeter Wave Demo Data Path Information.
Definition: dss_data_path.h:444
DSS_DataPathObj_t::cfarCfgDoppler
MmwDemo_CfarCfg cfarCfgDoppler
CFAR configuration in Doppler direction.
Definition: dss_data_path.h:716
mmWave_XSS.h
DSS2MSS_HSRAM_t
struct DSS2MSS_HSRAM DSS2MSS_HSRAM_t
MmwDemo_MultiObjBeamFormingCfg_t::enabled
uint8_t enabled
enabled flag: 1-enabled 0-disabled
Definition: mrr_config.h:120
DSS_DataPathObj_t::clusterOpFinal
clusteringDBscanReportForTx * clusterOpFinal
Final list of clusters for transmission.
Definition: dss_data_path.h:759
DSS_DataPathObj_t::invNumAngleBins
float invNumAngleBins
inverse of the numAngleBins
Definition: dss_data_path.h:694
DSS_DataPathObj_t::peakValThresholds
RangeDependantThresh_t peakValThresholds[MAX_NUM_RANGE_DEPENDANT_SNR_THRESHOLDS]
SNR thresholds as a function of range.
Definition: dss_data_path.h:700
clusteringDBscanInstance::vFactor
float vFactor
Definition: dss_data_path.h:312
mmWaveMSG_t
The structure defines the message structure used for communication between MSS and DSS.
Definition: mmw_messages.h:234
MCB_t::subframeIndx
uint8_t subframeIndx
! Logging buffer flag
Definition: mmWave_XSS.h:229
DSS2MSS_HSRAM
Definition: dss_main.c:77
cycleLog_t_
DSP cycle profiling structure to accumulate different processing times in chirp and frame processing ...
Definition: dss_data_path.h:99
DSS_DataPathObj_t::multiObjBeamFormingCfg
MmwDemo_MultiObjBeamFormingCfg multiObjBeamFormingCfg
Multi object beam forming configuration.
Definition: dss_data_path.h:722
DSS_populateUSRR
void DSS_populateUSRR(DSS_DataPathObj *obj, uint16_t subframeIndx)
Definition: dss_main.c:1316
DSS_SendProcessOutputToMSS
static int32_t DSS_SendProcessOutputToMSS(uint8_t *ptrHsmBuffer, uint32_t outputBufSize, DSS_DataPathObj *obj)
Definition: dss_main.c:766
MmwDemo_timingInfo::interFrameProcCycles
uint32_t interFrameProcCycles
number of processor cycles between frames excluding processing time to transmit output on UART
Definition: dss_data_path.h:260
MBOX_DSS2MSS_ASSERT_INFO
Definition: mmw_messages.h:149
clusteringDBscanInstance::epsilon
float epsilon
Definition: dss_data_path.h:310
MCB_t::chirpProcToken
uint8_t chirpProcToken
! frame start token
Definition: mmWave_XSS.h:232
DSS_DataPathObj_t::numVirtualAntElev
uint16_t numVirtualAntElev
number of virtual elevation antennas
Definition: dss_data_path.h:640
DSS_DataPathObj_t::log2NumDopplerBins
uint8_t log2NumDopplerBins
log 2 of number of doppler bins
Definition: dss_data_path.h:573
DSS_DataPathOutputLogging
static void DSS_DataPathOutputLogging(DSS_DataPathObj *dataPathObj)
Definition: dss_main.c:995
NUM_RX_CHANNELS
#define NUM_RX_CHANNELS
Reduced Thresholds. The following line (if uncommented) reduces thresholds for the USRR detection alg...
Definition: app_cfg.h:77
DSS_DataPathObj_t::maxNumObj2DRaw
uint16_t maxNumObj2DRaw
number of objects to be detected in 2D-CFAR.
Definition: dss_data_path.h:625
gHSRAM
DSS2MSS_HSRAM_t gHSRAM
Definition: dss_main.c:86
MCB_t::frameStartIntToken
uint8_t frameStartIntToken
! inter frameProc token
Definition: mmWave_XSS.h:231
clusteringDBscanInstance::maxClusters
uint16_t maxClusters
Definition: dss_data_path.h:314
MmwDemo_CfarCfg_t::averageMode
uint8_t averageMode
CFAR averagining mode 0-CFAR_CA, 1-CFAR_CAGO, 2-CFAR_CASO.
Definition: mrr_config.h:67
MAX_DET_OBJECTS_RAW_POINT_CLOUD_PROCESSING
#define MAX_DET_OBJECTS_RAW_POINT_CLOUD_PROCESSING
The maximum number of objects detected in the 'point cloud ' processing path.
Definition: app_cfg.h:158
DSP_sleep
void DSP_sleep(void)
Definition: dss_main.c:288
mmWaveMSG_body_u::assertInfo
mmWave_dssAssertInfoMsg assertInfo
DSS assertion information.
Definition: mmw_messages.h:221
SUBFRAME_USRR_NUM_CMPLX_ADC_SAMPLES
#define SUBFRAME_USRR_NUM_CMPLX_ADC_SAMPLES
Definition: config_chirp_design_USRR20.h:94
DSS_DataPathObj_t::numVirtualAntennas
uint16_t numVirtualAntennas
number of virtual antennas
Definition: dss_data_path.h:634
mmWave_OUT_MSG_header
struct mmWave_OUT_MSG_header_t mmWave_OUT_MSG_header
The structure defines the message header for reporting detection information from data path....
MCB_t::mboxProcToken
uint8_t mboxProcToken
! chirpProc token
Definition: mmWave_XSS.h:233
DSS_DataPathObj_t::chirpCount
uint16_t chirpCount
chirp counter modulo number of chirps per frame
Definition: dss_data_path.h:652
MMWAVE_MAX_FILE_NAME_SIZE
#define MMWAVE_MAX_FILE_NAME_SIZE
Definition: mmw_messages.h:199
NUM_SUBFRAMES
#define NUM_SUBFRAMES
Definition: app_cfg.h:80
DSS_DataPathObj_t::subframeIndx
uint8_t subframeIndx
index of the subframe to which this object belongs
Definition: dss_data_path.h:579
DSS_DataPathObj_t::dbScanState
clusteringDBscanReport_t * dbScanState
Pointer to dBScan output Report array.
Definition: dss_data_path.h:753
EDMA_INSTANCE_DSS
#define EDMA_INSTANCE_DSS
Definition: app_cfg.h:200
DSS_edmaBlockCopy
static void DSS_edmaBlockCopy(EDMA_Handle handle, uint32_t loadAddr, uint32_t runAddr, uint16_t size)
Definition: dss_main.c:1185
DSS_DataPathObj_t::parkingAssistNumBinsLog2
uint8_t parkingAssistNumBinsLog2
log2 of the number of bins for the parkingAssist module (used for scaling operations).
Definition: dss_data_path.h:591
DSS_DataPathObj_t::parkingAssistNumBins
uint8_t parkingAssistNumBins
Number of bins for the parkingAssist module.
Definition: dss_data_path.h:588
DSS_DataPathInit
int32_t DSS_DataPathInit(void)
DSS_DataPathObj_t::timingInfo
MmwDemo_timingInfo_t timingInfo
Timing information.
Definition: dss_data_path.h:728
DSS2MSS_HSRAM::dataPathDetectionPayload
uint8_t dataPathDetectionPayload[DATAPATH_DET_PAYLOAD_SIZE]
Definition: dss_main.c:79
mmWave_OUT_MSG_tl
struct mmWave_OUT_MSG_tl_t mmWave_OUT_MSG_tl
The structure defines the message body for reporting detected objects from data path....
MCB_t::adcBufHandle
ADCBuf_Handle adcBufHandle
mmWave control handle use to initialize the link infrastructure, which allows communication between t...
Definition: mmWave_XSS.h:224
dss_data_path.h
This is the data path processing header.
SUBFRAME_USRR_NUM_TX
#define SUBFRAME_USRR_NUM_TX
Definition: config_chirp_design_USRR20.h:99
parkingAssistInit
void parkingAssistInit(DSS_DataPathObj *obj)
Definition: dss_data_path.c:5146
DSS_DataPathObj_t::parkingAssistMaxRange
uint16_t parkingAssistMaxRange
maximum range to look for obstacles. .
Definition: dss_data_path.h:601
DSS_DataPathObj_t::numRxAntennas
uint16_t numRxAntennas
Number of receive channels.
Definition: dss_data_path.h:628