Tool/software: Code Composer Studio
Hi,
I have a problem running the radar without an external user,I saw through the forum a way to run it on my own but it does not work according to the settings I sent to it (but its running).
I add the code here, you can tell me what I'm not doing well?
thanks...
/* * @file cli.c * * @brief * CLI Utility implementation * * \par * NOTE: * (C) Copyright 2016 Texas Instruments, Inc. * * Redistribution and use in source and binary forms, with or without * modification, are permitted provided that the following conditions * are met: * * Redistributions of source code must retain the above copyright * notice, this list of conditions and the following disclaimer. * * Redistributions in binary form must reproduce the above copyright * notice, this list of conditions and the following disclaimer in the * documentation and/or other materials provided with the * distribution. * * Neither the name of Texas Instruments Incorporated nor the names of * its contributors may be used to endorse or promote products derived * from this software without specific prior written permission. * * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. */ /************************************************************************** *************************** Include Files ******************************** **************************************************************************/ /* Standard Include Files. */ #include <stdint.h> #include <stdlib.h> #include <stddef.h> #include <string.h> #include <stdio.h> /* BIOS/XDC Include Files. */ #include <xdc/std.h> #include <ti/sysbios/knl/Task.h> /* mmWave SDK Include Files: */ #include <ti/common/sys_common.h> #include <ti/drivers/uart/UART.h> #include <ti/utils/cli/cli.h> #include <ti/utils/cli/include/cli_internal.h> /************************************************************************** *************************** Hard-coded Configuation ********************** **************************************************************************/ #define USE_HARD_CODED_CONFIG #ifdef USE_HARD_CODED_CONFIG int32_t hardCodedConfigIndex; char * hardCodedConfigCommands[] = { "% ***************************************************************" "% Created for SDK ver:02.00", "% Created using Visualizer ver:2.0.0.2", "% Frequency:77", "% Platform:xWR16xx", "% Scene Classifier:best_range_res", "% Azimuth Resolution(deg):15", "% Range Resolution(m):0.044", "% Maximum unambiguous Range(m):16", "% Maximum Radial Velocity(m/s):1", "% Radial velocity resolution(m/s):0.13", "% Frame Duration(msec):100", "% Range Detection Threshold (dB):15", "% Doppler Detection Threshold (dB):15", "% Range Peak Grouping:enabled", "% Doppler Peak Grouping:enabled", "% Static clutter removal:disabled", "% ***************************************************************", "flushCfg", "dfeDataOutputMode 1", "channelCfg 15 3 0", "adcCfg 2 1", "adcbufCfg 0 1 1 1 ", "profileCfg 0 77 30 7 62 0 0 24 1 128 2500 0 0 30", "chirpCfg 0 0 0 0 0 0 0 1", "chirpCfg 1 1 0 0 0 0 0 2", "frameCfg 0 1 128 0 50 1 0", "lowPower 0 1", "guiMonitor 1 1 0 0", "cfarCfg 6 4 4 0 0 16 16 4 4 50 62 0", "doaCfg 600 1875 30 1", "SceneryParam -12 12 0.05 16", "GatingParam 4 3 2 0", "StateParam 5 5 10 100 5", "AllocationParam 100 0.01 8 1 2", "VariationParam 0.289 0.289 1.0", "trackingCfg 1 2 250 20 200 50 90", "sensorStart", "!!!END_OF_HARD_CODED_COMMANDS" }; #endif /************************************************************************** *************************** Global Variables ***************************** **************************************************************************/ /** * @brief Global variable which tracks the CLI MCB */ CLI_MCB gCLI; /************************************************************************** **************************** CLI Functions ******************************* **************************************************************************/ /** * @b Description * @n * The function is the HELP generated by the CLI Module * * \ingroup CLI_UTIL_INTERNAL_FUNCTION * * @retval * Not Applicable. */ static int32_t CLI_help (int32_t argc, char* argv[]) { uint32_t index; /* Display the banner: */ CLI_write ("Help: This will display the usage of the CLI commands\n"); CLI_write ("Command: Help Description\n"); /* Cycle through all the registered CLI commands: */ for (index = 0; index < gCLI.numCLICommands; index++) { /* Display the help string*/ CLI_write ("%s: %s\n", gCLI.cfg.tableEntry[index].cmd, (gCLI.cfg.tableEntry[index].helpString == NULL) ? "No help available" : gCLI.cfg.tableEntry[index].helpString); } /* Is the mmWave Extension enabled? */ if (gCLI.cfg.enableMMWaveExtension == 1U) { /* YES: Pass the control to the extension help handler. */ CLI_MMWaveExtensionHelp (); } return 0; } /** * @b Description * @n * This is the CLI Execution Task * * \ingroup CLI_UTIL_INTERNAL_FUNCTION * * @retval * Not Applicable. */ static void CLI_task(UArg arg0, UArg arg1) { uint8_t cmdString[256]; char* tokenizedArgs[CLI_MAX_ARGS]; char* ptrCLICommand; char delimitter[] = " \r\n"; uint32_t argIndex; CLI_CmdTableEntry* ptrCLICommandEntry; int32_t cliStatus; uint32_t index; /* Do we have a banner to be displayed? */ if (gCLI.cfg.cliBanner != NULL) { /* YES: Display the banner */ CLI_write (gCLI.cfg.cliBanner); } #ifdef USE_HARD_CODED_CONFIG hardCodedConfigIndex = 0; CLI_write ("Wait some time for system to initialize...\n"); Task_sleep(100); CLI_write ("Performing hard-coded config\n"); #endif /* Loop around forever: */ while (1) { /* Demo Prompt: */ CLI_write (gCLI.cfg.cliPrompt); /* Reset the command string: */ memset ((void *)&cmdString[0], 0, sizeof(cmdString)); #ifdef USE_HARD_CODED_CONFIG /* Run hard-coded commands, one at a time until '!!!END_OF_HARD_CODED_COMMANDS' is reached: */ if (hardCodedConfigCommands[hardCodedConfigIndex][0] != '!') { //CLI_write (hardCodedConfigCommands[hardCodedConfigIndex]); CLI_write ("Command\n"); memcpy((void *)&cmdString[0], (void *)hardCodedConfigCommands[hardCodedConfigIndex], strlen(hardCodedConfigCommands[hardCodedConfigIndex])); hardCodedConfigIndex++; } /* Accept commands from UART after all hard-coded commands done: */ else { /* Read the command message from the UART: */ UART_read (gCLI.cfg.cliUartHandle, &cmdString[0], (sizeof(cmdString) - 1)); } #else /* Read the command message from the UART: */ UART_read (gCLI.cfg.cliUartHandle, &cmdString[0], (sizeof(cmdString) - 1)); #endif /* Reset all the tokenized arguments: */ memset ((void *)&tokenizedArgs, 0, sizeof(tokenizedArgs)); argIndex = 0; ptrCLICommand = (char*)&cmdString[0]; /* comment lines found - ignore the whole line*/ if (cmdString[0]=='%') { CLI_write ("Skipped\n"); continue; } /* Set the CLI status: */ cliStatus = -1; /* The command has been entered we now tokenize the command message */ while (1) { /* Tokenize the arguments: */ tokenizedArgs[argIndex] = strtok(ptrCLICommand, delimitter); if (tokenizedArgs[argIndex] == NULL) break; /* Increment the argument index: */ argIndex++; if (argIndex >= CLI_MAX_ARGS) break; /* Reset the command string */ ptrCLICommand = NULL; } /* Were we able to tokenize the CLI command? */ if (argIndex == 0) continue; /* Cycle through all the registered CLI commands: */ for (index = 0; index < gCLI.numCLICommands; index++) { ptrCLICommandEntry = &gCLI.cfg.tableEntry[index]; /* Do we have a match? */ if (strcmp(ptrCLICommandEntry->cmd, tokenizedArgs[0]) == 0) { /* YES: Pass this to the CLI registered function */ cliStatus = ptrCLICommandEntry->cmdHandlerFxn (argIndex, tokenizedArgs); if (cliStatus == 0) { CLI_write ("Done\n"); } else { CLI_write ("Error %d\n", cliStatus); } break; } } /* Did we get a matching CLI command? */ if (index == gCLI.numCLICommands) { /* NO matching command found. Is the mmWave extension enabled? */ if (gCLI.cfg.enableMMWaveExtension == 1U) { /* Yes: Pass this to the mmWave extension handler */ cliStatus = CLI_MMWaveExtensionHandler (argIndex, tokenizedArgs); } /* Was the CLI command found? */ if (cliStatus == -1) { /* No: The command was still not found */ CLI_write ("'%s' is not recognized as a CLI command\n", tokenizedArgs[0]); } } } } /** * @b Description * @n * Logging function which can log the messages to the CLI console * * @param[in] format * Format string * * \ingroup CLI_UTIL_EXTERNAL_FUNCTION * * @retval * Not Applicable. */ void CLI_write (const char* format, ...) { va_list arg; char logMessage[256]; int32_t sizeMessage; /* Format the message: */ va_start (arg, format); sizeMessage = vsnprintf (&logMessage[0], sizeof(logMessage), format, arg); va_end (arg); /* Log the message on the UART CLI console: */ if (gCLI.cfg.usePolledMode == true) { /* Polled mode: */ UART_writePolling (gCLI.cfg.cliUartHandle, (uint8_t*)&logMessage[0], sizeMessage); } else { /* Blocking Mode: */ UART_write (gCLI.cfg.cliUartHandle, (uint8_t*)&logMessage[0], sizeMessage); } } /** * @b Description * @n * This is the function which is used to initialize and setup the CLI * * @param[in] ptrCLICfg * Pointer to the CLI configuration * * \ingroup CLI_UTIL_EXTERNAL_FUNCTION * * @retval * Success - 0 * @retval * Error - <0 */ int32_t CLI_open (CLI_Cfg* ptrCLICfg) { Task_Params taskParams; uint32_t index; /* Sanity Check: Validate the arguments */ if (ptrCLICfg == NULL) return -1; /* Initialize the CLI MCB: */ memset ((void*)&gCLI, 0, sizeof(CLI_MCB)); /* Copy over the configuration: */ memcpy ((void *)&gCLI.cfg, (void *)ptrCLICfg, sizeof(CLI_Cfg)); /* Cycle through and determine the number of supported CLI commands: */ for (index = 0; index < CLI_MAX_CMD; index++) { /* Do we have a valid entry? */ if (gCLI.cfg.tableEntry[index].cmd == NULL) { /* NO: This is the last entry */ break; } else { /* YES: Increment the number of CLI commands */ gCLI.numCLICommands = gCLI.numCLICommands + 1; } } /* Is the mmWave Extension enabled? */ if (gCLI.cfg.enableMMWaveExtension == 1U) { /* YES: Initialize the CLI Extension: */ if (CLI_MMWaveExtensionInit (ptrCLICfg) < 0) return -1; } /* Do we have a CLI Prompt specified? */ if (gCLI.cfg.cliPrompt == NULL) gCLI.cfg.cliPrompt = "CLI:/>"; /* The CLI provides a help command by default: * - Since we are adding this at the end of the table; a user of this module can also * override this to provide its own implementation. */ gCLI.cfg.tableEntry[gCLI.numCLICommands].cmd = "help"; gCLI.cfg.tableEntry[gCLI.numCLICommands].helpString = NULL; gCLI.cfg.tableEntry[gCLI.numCLICommands].cmdHandlerFxn = CLI_help; /* Increment the number of CLI commands: */ gCLI.numCLICommands++; /* Initialize the task parameters and launch the CLI Task: */ Task_Params_init(&taskParams); taskParams.priority = gCLI.cfg.taskPriority; taskParams.stackSize = 4*1024; gCLI.cliTaskHandle = Task_create(CLI_task, &taskParams, NULL); return 0; } /** * @b Description * @n * This is the function which is used to close the CLI module * * \ingroup CLI_UTIL_EXTERNAL_FUNCTION * * @retval * Success - 0 * @retval * Error - <0 */ int32_t CLI_close (void) { /* Shutdown the CLI Task */ Task_delete(&gCLI.cliTaskHandle); /* Cleanup the memory */ memset ((void*)&gCLI, 0, sizeof(CLI_MCB)); return 0; }