You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

tracker_utils.c 22KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580
  1. /**
  2. * @file task_mbox.c
  3. *
  4. * @brief
  5. * MSS main implementation of the millimeter wave Demo
  6. *
  7. * Copyright (C) 2017 Texas Instruments Incorporated - http://www.ti.com/
  8. *
  9. * Redistribution and use in source and binary forms, with or without
  10. * modification, are permitted provided that the following conditions
  11. * are met:
  12. *
  13. * Redistributions of source code must retain the above copyright
  14. * notice, this list of conditions and the following disclaimer.
  15. *
  16. * Redistributions in binary form must reproduce the above copyright
  17. * notice, this list of conditions and the following disclaimer in the
  18. * documentation and/or other materials provided with the
  19. * distribution.
  20. *
  21. * Neither the name of Texas Instruments Incorporated nor the names of
  22. * its contributors may be used to endorse or promote products derived
  23. * from this software without specific prior written permission.
  24. *
  25. * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
  26. * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
  27. * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
  28. * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
  29. * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  30. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  31. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
  32. * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
  33. * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
  34. * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
  35. * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
  36. */
  37. /**************************************************************************
  38. *************************** Include Files ********************************
  39. **************************************************************************/
  40. /* Standard Include Files. */
  41. #include <stdint.h>
  42. #include <stdlib.h>
  43. #include <stddef.h>
  44. #include <string.h>
  45. #include <stdio.h>
  46. #include <math.h>
  47. /* BIOS/XDC Include Files. */
  48. #include <xdc/runtime/System.h>
  49. /* mmWave SDK Include Files: */
  50. #include <ti/common/sys_common.h>
  51. #include <ti/drivers/uart/UART.h>
  52. #include <ti/utils/cli/cli.h>
  53. #include <ti/alg/gtrack/gtrack.h>
  54. #include <ti/drivers/osal/MemoryP.h>
  55. #include "float.h"
  56. /* Demo Include Files */
  57. #include <people_counting/68xx_3D_people_counting/src/mss/pcount3D_mss.h>
  58. /**************************************************************************
  59. *************************** Local Definitions ****************************
  60. **************************************************************************/
  61. /**************************************************************************
  62. *************************** Global Definitions ***************************
  63. **************************************************************************/
  64. typedef enum {
  65. TRACKING_DEFAULT_PARAM_SET = 0,
  66. TRACKING_TRAFFIC_MONITORING_PARAM_SET,
  67. TRACKING_PEOPLE_COUNTING_PARAM_SET,
  68. TRACKING_OUTDOOR_PARAM_SET,
  69. TRACKING_CEILING_MOUNT_PARAM_SET
  70. } TRACKING_ADVANCED_PARAM_SET;
  71. typedef enum {
  72. TRACKING_PARAM_SET_TM = 0,
  73. TRACKING_PARAM_SET_PC,
  74. TRACKING_PARAM_SET_OUTDOOR,
  75. TRACKING_PARAM_SET_CEILING_MOUNT
  76. } TRACKING_ADVANCED_PARAM_SET_TABLE;
  77. #if 0
  78. /* Scenery parameters includes up to two boundary boxes and up to two static boxes */
  79. /* Each box is in format {x1,x2, y1,y2, z1,z2}. In 2D cases, the z parameters are ignored */
  80. GTRACK_sceneryParams appSceneryParamTable[4] = {
  81. /* TM: 1 boundary box: {-1,12, 15,75, 0,0}, and 1 static box {0,14, 19,50, 0,0} */
  82. 1,{{-1.f,12.f, 15.f,75.f, 0.f,0.f},{0.f,0.f,0.f,0.f,0.f,0.f}},1,{{0.f,11.f, 19.f,50.f, 0.f,0.f},{0.f,0.f,0.f,0.f,0.f}},
  83. /* PEOPLE COUNTING: 1 boundary box: {-4,4, 0.5,7.5, 0,0}, and 1 static box {-3,3, 2,6, 0,0} */
  84. 1,{{-4.f,4.f, 0.5f,7.5f, 0.f,0.f},{0.f,0.f,0.f,0.f,0.f,0.f}}, 1,{{-3.f,3.f,2.f,6.f,0.f,0.f},{0.f,0.f,0.f,0.f,0.f,0.f}},
  85. /* OUTDOOR: 1 boundary box: {-39,19, 2,50, 0,0}, and 1 static box {-30,16, 4,44, 0,0} */
  86. 1,{{-29.f,39.f, 2.f,59.f, -1.f,3.f},{0.f,0.f,0.f,0.f,0.f,0.f}}, 1,{{-20.f,20.f, 12.f,40.f, 0.f, 2.f},{0.f,0.f,0.f,0.f,0.f,0.f}},
  87. /* CEILING MOUNT: 1 boundary box: {-4,4, 0.5,7.5, -1,3}, and 1 static box {-3,3, 2,6, -0.5,2.5} */
  88. 1,{{-4.f,4.f, 0.5f,7.5f, -1.f,3.0f},{0.f,0.f,0.f,0.f,0.f,0.f}}, 1,{{-3.f,3.f,2.f,6.f,-0.5,2.5f},{0.f,0.f,0.f,0.f,0.f,0.f}}
  89. };
  90. /* Gating Volume 2 "liters", Limits are set to 2m in depth and width, no limit in height and doppler */
  91. GTRACK_gatingParams appGatingParamTable[4] = {
  92. /* TM: Gating volume = 16, Limits are set to 12m in depth, 8m in width, ignore the height, no limit in doppler */
  93. {4.f, {12.f, 6.f, 4.f, 12.f}},
  94. /* PEOPLE COUNTING: Gating gain = 3, Limits are 2m in depth, 2m in width, ignore the height, 12m/s in doppler */
  95. {3.f, {2.f, 2.f, 2.f, 12.f}},
  96. /* OUTDOOR: Gating gain = 4, Limits are set to 6m in depth, 6m in width, ignore the height, 10m/s limit in doppler */
  97. {4.f, {6.f, 6.f, 4.f, 10.f}},
  98. /* CEILING MOUNT: Gating volume = 2, Limits are 2m in depth, 2m in width, 2m the height, no limit in doppler */
  99. {2.f, {2.f, 2.f, 2.f, 10.f}}
  100. };
  101. GTRACK_stateParams appStateParamTable[4] = {
  102. {3U, 3U, 5U, 100U, 5U}, /* TM: det2act, det2free, act2free, stat2free, exit2free */
  103. {10U, 5U, 50U, 100U, 5U}, /* PC: det2act, det2free, act2free, stat2free, exit2free */
  104. {4U, 10U, 60U, 600U, 20U}, /* OUTDOOR: det2act, det2free, act2free, stat2free, exit2free */
  105. {10U, 5U, 10U, 100U, 5U} /* CEILING MOUNT: det2act, det2free, act2free, stat2free, exit2free */
  106. };
  107. GTRACK_allocationParams appAllocationParamTable[4] = {
  108. {100.f, 100.f, 1.f, 3U, 4.f, 2.f}, /* TM: 100 (100) SNRs, 1m/s minimal velocity, 3 points with 4m in distance, 2m/c in velocity separation */
  109. {60.f, 200.f, 0.1f, 5U, 1.5f, 2.f}, /* PC: 150 (250 obscured), 0.1 m/s minimal velocity, 5 points, with 1m in distance, 2m/c in velocity in separation */
  110. {40.f, 200.f, 0.5f, 3U, 2.f, 2.f}, /* OUTDOOR: 50 (200 obscured), 0.5 m/s minimal velocity, 5 points, with 1m in distance, 2m/c in velocity in separation */
  111. {60.f, 200.f, 0.1f, 5U, 1.5f, 2.f} /* CEILING MOUNT: 150 (200 obscured), 0.5 m/s minimal velocity, 5 points, with 1m in distance, 2m/c in velocity in separation */
  112. };
  113. /* This parameter is ignored in 2D/3D tracker versions */
  114. GTRACK_varParams appVariationParamTable[4] = {
  115. {0.f, 0.f, 0.f},
  116. {0.f, 0.f, 0.f},
  117. {0.f, 0.f, 0.f},
  118. {0.f, 0.f, 0.f}
  119. };
  120. float maxAccelerationParams[3] = {1, 1, 1};
  121. #endif
  122. /**
  123. * @brief
  124. * Global Variable for tracking information required by the mmw Demo
  125. */
  126. extern Pcount3DDemo_MSS_MCB gMmwMssMCB;
  127. unsigned int gGtrackMemoryUsed = 0;
  128. /* @TODO: These functions need to be abstracted to the DPC */
  129. void *gtrack_alloc(unsigned int numElements, unsigned int sizeInBytes)
  130. {
  131. gGtrackMemoryUsed += numElements*sizeInBytes;
  132. return MemoryP_ctrlAlloc(numElements*sizeInBytes, 0);
  133. }
  134. void gtrack_free(void *pFree, unsigned int sizeInBytes)
  135. {
  136. gGtrackMemoryUsed -= sizeInBytes;
  137. MemoryP_ctrlFree(pFree,sizeInBytes);
  138. }
  139. void gtrack_log(GTRACK_VERBOSE_TYPE level, const char *format, ...)
  140. {
  141. #if 0
  142. va_list args;
  143. va_start(args, format);
  144. vprintf(format, args);
  145. va_end(args);
  146. #endif
  147. }
  148. /**
  149. * @b Description
  150. * @n
  151. * This is the CLI Handler for tracking configuration
  152. *
  153. * @param[in] argc
  154. * Number of arguments
  155. * @param[in] argv
  156. * Arguments
  157. *
  158. * @retval
  159. * Success - 0
  160. * @retval
  161. * Error - <0
  162. */
  163. int32_t MmwDemo_CLITrackingCfg (int32_t argc, char* argv[])
  164. {
  165. GTRACK_moduleConfig config;
  166. TRACKING_ADVANCED_PARAM_SET trackingParamSet;
  167. //Memory_Stats startMemoryStats;
  168. //Memory_Stats endMemoryStats;
  169. if (argc >= 1) {
  170. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.trackerEnabled = (uint16_t) atoi (argv[1]);
  171. }
  172. if(gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.trackerEnabled != 1) {
  173. return 0;
  174. }
  175. /* Sanity Check: Minimum argument check */
  176. if (argc != 8)
  177. {
  178. CLI_write ("Error: Invalid usage of the CLI command\n");
  179. return -1;
  180. }
  181. #if 0
  182. System_printf("Debug: Heap before creating a tracker\n");
  183. MmwDemo_printHeapStats();
  184. #endif
  185. /* Initialize CLI configuration: */
  186. memset ((void *)&config, 0, sizeof(GTRACK_moduleConfig));
  187. trackingParamSet = (TRACKING_ADVANCED_PARAM_SET) atoi (argv[2]);
  188. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.trackingParamSet = trackingParamSet;
  189. switch(trackingParamSet)
  190. {
  191. case TRACKING_DEFAULT_PARAM_SET:
  192. // Do not configure advanced parameters, use library default parameters
  193. config.advParams = 0;
  194. break;
  195. case TRACKING_TRAFFIC_MONITORING_PARAM_SET:
  196. /* Initialize CLI configuration: */
  197. config.initialRadialVelocity = -8.0f; // for TM, detected targets are approaching
  198. config.maxAcceleration[0] = 2.0f; // for TM, maximum acceleration in lateral direction is set to 2m/s2
  199. config.maxAcceleration[1] = 20.0f; // for TM, maximum acceleration is longitudinal direction set to 20m/s2
  200. config.maxAcceleration[2] = 0.f; // ignored
  201. break;
  202. case TRACKING_PEOPLE_COUNTING_PARAM_SET:
  203. /* Initialize CLI configuration: */
  204. config.initialRadialVelocity = 0; //For PC, detected target velocity is unknown
  205. config.maxAcceleration[0] = 0.1f;
  206. config.maxAcceleration[1] = 0.1f;
  207. config.maxAcceleration[2] = 0.1f;
  208. break;
  209. case TRACKING_OUTDOOR_PARAM_SET:
  210. /* Initialize CLI configuration: */
  211. config.initialRadialVelocity = 0; // for OUTDOOR, detected targets velocity is unknown
  212. config.maxAcceleration[0] = 1.0f;
  213. config.maxAcceleration[1] = 1.0f;
  214. config.maxAcceleration[2] = 1.0f;
  215. break;
  216. case TRACKING_CEILING_MOUNT_PARAM_SET:
  217. /* Initialize CLI configuration: */
  218. config.initialRadialVelocity = 0;
  219. config.maxAcceleration[0] = 0.1f;
  220. config.maxAcceleration[1] = 0.1f;
  221. config.maxAcceleration[2] = 0.1f;
  222. break;
  223. default:
  224. CLI_write ("Error: Invalid usage of the CLI command\n");
  225. return -1;
  226. }
  227. #ifdef GTRACK_3D
  228. config.stateVectorType = GTRACK_STATE_VECTORS_3DA; // Track three dimensions with acceleration
  229. #else
  230. config.stateVectorType = GTRACK_STATE_VECTORS_2DA; // Track two dimensions with acceleration
  231. #endif
  232. config.verbose = GTRACK_VERBOSE_NONE;
  233. config.maxNumPoints = (uint16_t) atoi(argv[3]);
  234. config.maxNumTracks = (uint16_t) atoi(argv[4]);
  235. config.maxRadialVelocity = (float) atoi(argv[5]) *0.1f;
  236. #ifndef GTRACK_3D
  237. config.radialVelocityResolution = (float) atoi(argv[6]) *0.001f;
  238. #endif
  239. config.deltaT = (float) atoi(argv[7]) *0.001f;
  240. /* Save Configuration to use later */
  241. memcpy((void *)&gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.gtrackModuleConfig, (void *)&config, sizeof(GTRACK_moduleConfig));
  242. return 0;
  243. }
  244. int32_t MmwDemo_CLIStaticBoundaryBoxCfg (int32_t argc, char* argv[])
  245. {
  246. /* Sanity Check: Minimum argument check */
  247. #ifdef GTRACK_3D
  248. if (argc != 7)
  249. #else
  250. if (argc != 5)
  251. #endif
  252. {
  253. CLI_write ("Error: Invalid usage of the CLI command\n");
  254. return -1;
  255. }
  256. /* Initialize the ADC Output configuration: */
  257. //memset ((void *)&sceneryParams, 0, sizeof(GTRACK_sceneryParams));
  258. /* Populate configuration: */
  259. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.numStaticBoxes = 1;
  260. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.staticBox[0].x1 = (float) atof (argv[1]);
  261. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.staticBox[0].x2 = (float) atof (argv[2]);
  262. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.staticBox[0].y1 = (float) atof (argv[3]);
  263. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.staticBox[0].y2 = (float) atof (argv[4]);
  264. #ifdef GTRACK_3D
  265. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.staticBox[0].z1 = (float) atof (argv[5]);
  266. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.staticBox[0].z2 = (float) atof (argv[6]);
  267. #endif
  268. return 0;
  269. }
  270. int32_t MmwDemo_CLIBoundaryBoxCfg (int32_t argc, char* argv[])
  271. {
  272. /* Sanity Check: Minimum argument check */
  273. #ifdef GTRACK_3D
  274. if (argc != 7 && argc != 13)
  275. #else
  276. if (argc != 5)
  277. #endif
  278. {
  279. CLI_write ("Error: Invalid usage of the CLI command\n");
  280. return -1;
  281. }
  282. /* Initialize the ADC Output configuration: */
  283. //memset ((void *)&sceneryParams, 0, sizeof(GTRACK_sceneryParams));
  284. /* Populate configuration: */
  285. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.numBoundaryBoxes = 1;
  286. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.boundaryBox[0].x1 = (float) atof (argv[1]);
  287. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.boundaryBox[0].x2 = (float) atof (argv[2]);
  288. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.boundaryBox[0].y1 = (float) atof (argv[3]);
  289. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.boundaryBox[0].y2 = (float) atof (argv[4]);
  290. #ifdef GTRACK_3D
  291. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.boundaryBox[0].z1 = (float) atof (argv[5]);
  292. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.boundaryBox[0].z2 = (float) atof (argv[6]);
  293. #endif
  294. if (argc == 13) { //second boundary box
  295. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.numBoundaryBoxes = 2;
  296. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.boundaryBox[1].x1 = (float) atof (argv[7]);
  297. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.boundaryBox[1].x2 = (float) atof (argv[8]);
  298. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.boundaryBox[1].y1 = (float) atof (argv[9]);
  299. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.boundaryBox[1].y2 = (float) atof (argv[10]);
  300. #ifdef GTRACK_3D
  301. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.boundaryBox[1].z1 = (float) atof (argv[11]);
  302. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.boundaryBox[1].z2 = (float) atof (argv[12]);
  303. #endif
  304. }
  305. return 0;
  306. }
  307. int32_t MmwDemo_CLISensorPositionCfg(int32_t argc, char* argv[])
  308. {
  309. if (argc != 4)
  310. {
  311. CLI_write("Error: Invalid usage of the CLI Command\n");
  312. return -1;
  313. }
  314. /* Assume sensor position as the origin in the xy plane so x=0, y=0*/
  315. /*populate sensor position configuration*/
  316. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.sensorPosition.x = 0;
  317. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.sensorPosition.y = 0;
  318. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.sensorPosition.z = (float) atof (argv[1]);
  319. /*populate sensor orientation configuration*/
  320. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.sensorOrientation.azimTilt = (float) atof (argv[2]);
  321. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.sensorOrientation.elevTilt = (float) atof (argv[3]);
  322. /*demo parameters*/
  323. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sensorAzimuthTilt = atoi(argv[2])*3.14f/180;
  324. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sensorElevationTilt = atoi(argv[3])*3.14f/180;
  325. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sensorHeight = (float)atof(argv[1]);
  326. return 0;
  327. }
  328. /**
  329. * @b Description
  330. * @n
  331. * This is the CLI Handler for GatingParam configuration
  332. *
  333. * @param[in] argc
  334. * Number of arguments
  335. * @param[in] argv
  336. * Arguments
  337. *
  338. * @retval
  339. * Success - 0
  340. * @retval
  341. * Error - <0
  342. */
  343. int32_t MmwDemo_CLIGatingParamCfg (int32_t argc, char* argv[])
  344. {
  345. /* Sanity Check: Minimum argument check */
  346. #ifdef GTRACK_3D
  347. if (argc != 6)
  348. #else
  349. if (argc != 5)
  350. #endif
  351. {
  352. CLI_write ("Error: Invalid usage of the CLI command\n");
  353. return -1;
  354. }
  355. /* Initialize the ADC Output configuration: */
  356. //memset ((void *)&gatingParams, 0, sizeof(GTRACK_gatingParams));
  357. /* Populate configuration: */
  358. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.gatingParams.gain = (float) atof (argv[1]);
  359. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.gatingParams.limits.width = (float) atof (argv[2]);
  360. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.gatingParams.limits.depth = (float) atof (argv[3]);
  361. #ifdef GTRACK_3D
  362. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.gatingParams.limits.height = (float) atof (argv[4]);
  363. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.gatingParams.limits.vel = (float) atof (argv[5]);
  364. #else
  365. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.gatingParams.limits.vel = (float) atof (argv[4]);
  366. #endif
  367. return 0;
  368. }
  369. /**
  370. * @b Description
  371. * @n
  372. * This is the CLI Handler for StateParam configuration
  373. *
  374. * @param[in] argc
  375. * Number of arguments
  376. * @param[in] argv
  377. * Arguments
  378. *
  379. * @retval
  380. * Success - 0
  381. * @retval
  382. * Error - <0
  383. */
  384. int32_t MmwDemo_CLIStateParamCfg (int32_t argc, char* argv[])
  385. {
  386. /* Sanity Check: Minimum argument check */
  387. if (argc != 7)
  388. {
  389. CLI_write ("Error: Invalid usage of the CLI command\n");
  390. return -1;
  391. }
  392. /* Initialize the ADC Output configuration: */
  393. //memset ((void *)&stateParams, 0, sizeof(GTRACK_stateParams));
  394. /* Populate configuration: */
  395. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.stateParams.det2actThre = (uint16_t) atoi (argv[1]);
  396. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.stateParams.det2freeThre= (uint16_t) atoi (argv[2]);
  397. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.stateParams.active2freeThre= (uint16_t) atoi (argv[3]);
  398. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.stateParams.static2freeThre= (uint16_t) atoi (argv[4]);
  399. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.stateParams.exit2freeThre= (uint16_t) atoi (argv[5]);
  400. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.stateParams.sleep2freeThre = (uint16_t) atoi (argv[6]);
  401. return 0;
  402. }
  403. /**
  404. * @b Description
  405. * @n
  406. * This is the CLI Handler for AllocationParam configuration
  407. *
  408. * @param[in] argc
  409. * Number of arguments
  410. * @param[in] argv
  411. * Arguments
  412. *
  413. * @retval
  414. * Success - 0
  415. * @retval
  416. * Error - <0
  417. */
  418. int32_t MmwDemo_CLIAllocationParamCfg (int32_t argc, char* argv[])
  419. {
  420. /* Sanity Check: Minimum argument check */
  421. #ifdef GTRACK_3D
  422. if (argc != 7)
  423. #else
  424. if (argc != 6)
  425. #endif
  426. {
  427. CLI_write ("Error: Invalid usage of the CLI command\n");
  428. return -1;
  429. }
  430. /* Initialize the ADC Output configuration: */
  431. //memset ((void *)&allocationParams, 0, sizeof(GTRACK_allocationParams));
  432. /* Populate configuration: */
  433. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.allocationParams.snrThre = (float) atof (argv[1]);
  434. #ifdef GTRACK_3D
  435. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.allocationParams.snrThreObscured = (float) atof (argv[2]);
  436. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.allocationParams.velocityThre = (float) atof (argv[3]);
  437. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.allocationParams.pointsThre = (uint16_t) atoi (argv[4]);
  438. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.allocationParams.maxDistanceThre = (float) atof (argv[5]);
  439. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.allocationParams.maxVelThre = (float) atof (argv[6]);
  440. #else
  441. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.allocationParams.velocityThre = (float) atof (argv[2]);
  442. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.allocationParams.pointsThre = (uint16_t) atoi (argv[3]);
  443. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.allocationParams.maxDistanceThre = (float) atof (argv[4]);
  444. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.allocationParams.maxVelThre = (float) atof (argv[5]);
  445. #endif
  446. return 0;
  447. }
  448. int32_t MmwDemoCLIMaxAccelerationParamCfg(int32_t argc, char* argv[])
  449. {
  450. #ifdef GTRACK_3D
  451. if (argc != 4)
  452. #else
  453. if (argc != 3)
  454. #endif
  455. {
  456. CLI_write ("Error: Invalid usage of the CLI command\n");
  457. return -1;
  458. }
  459. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.accelerationParams[0] = (float) atof (argv[1]);
  460. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.accelerationParams[1] = (float) atof (argv[2]);
  461. #ifdef GTRACK_3D
  462. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.accelerationParams[2] = (float) atof (argv[3]);
  463. #endif
  464. return 0;
  465. }
  466. /**
  467. * @b Description
  468. * @n
  469. * This is the CLI Handler for PresenceParams configuration
  470. *
  471. * @param[in] argc
  472. * Number of arguments
  473. * @param[in] argv
  474. * Arguments
  475. *
  476. * @retval
  477. * Success - 0
  478. * @retval
  479. * Error - <0
  480. */
  481. int32_t MmwDemo_CLIPresenceParamCfg (int32_t argc, char* argv[])
  482. {
  483. /* Sanity Check: Minimum argument check */
  484. if (argc != 7)
  485. {
  486. CLI_write ("Error: Invalid usage of the CLI command\n");
  487. return -1;
  488. }
  489. /* Hardcode presence detection thresholds */
  490. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.presenceParams.pointsThre= 3;//(uint16_t) atoi (argv[1]);
  491. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.presenceParams.velocityThre= 0.5;//(uint16_t) atoi (argv[2]);
  492. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.presenceParams.on2offThre= 10;//(uint16_t) atoi (argv[3]);
  493. /* Only one presence detection boundary box supported for now */
  494. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.presenceParams.numOccupancyBoxes= 1;
  495. /* Set presence detection enabled flag */
  496. if( ( gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.sceneryParams.numBoundaryBoxes > 0)
  497. && ( gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.presenceParams.pointsThre > 0))
  498. {
  499. gMmwMssMCB.presenceDetEnabled = true;
  500. }
  501. /* Boundary Box configuration */
  502. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.presenceParams.occupancyBox[0].x1= (float) atof (argv[1]);
  503. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.presenceParams.occupancyBox[0].x2= (float) atof (argv[2]);
  504. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.presenceParams.occupancyBox[0].y1= (float) atof (argv[3]);
  505. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.presenceParams.occupancyBox[0].y2= (float) atof (argv[4]);
  506. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.presenceParams.occupancyBox[0].z1= (float) atof (argv[5]);
  507. gMmwMssMCB.trackerCfg.trackerDpuCfg.staticCfg.presenceParams.occupancyBox[0].z2= (float) atof (argv[6]);
  508. return 0;
  509. }