FreeCalypso > hg > fc-magnetite
view src/g23m-fad/app/app_util.c @ 673:62a5285e014a
Lorekeeping: allow tpudrv-leonardo.lib on Leonardo/Tango
Back in 2015 the Mother's idea was to produce a FreeCalypso development
board that would be a clone of TI Leonardo, including the original
quadband RFFE; one major additional stipulation was that this board
needed to be able to run original unmodified TCS211-20070608 firmware
with all blobs intact, with only minimal binary patches to main.lib
and tpudrv.lib. The necessary patched libs were produced at that time
in the tcs211-patches repository.
That plan was changed and we produced FCDEV3B instead, with Openmoko's
triband RFFE instead of Leonardo quadband, but when FC Magnetite started
in 2016, a TPUDRV_blob= provision was still made, allowing the possibility
of patching OM's tpudrv.lib for a restored Leonardo RFFE.
Now in 2020 we have FC Tango which is essentially a verbatim clone of
Leonardo core, including the original quadband RFFE. We have also
deblobbed our firmware so much that we have absolutely no real need
for a blob version of tpudrv.lib - but I thought it would be neat to put
the ancient TPUDRV_blob= mechanism (classic config) to its originally
intended use, just for the heck of it.
author | Mychaela Falconia <falcon@freecalypso.org> |
---|---|
date | Fri, 29 May 2020 03:55:36 +0000 |
parents | 90eb61ecd093 |
children |
line wrap: on
line source
/* +------------------------------------------------------------------------------ | File: app_cmds.c +------------------------------------------------------------------------------ | Copyright 2004 Texas Instruments Berlin, AG | All rights reserved. | | This file is confidential and a trade secret of Texas | Instruments Berlin, AG | The receipt of or possession of this file does not convey | any rights to reproduce or disclose its contents or to | manufacture, use, or sell anything it may describe, in | whole, or in part, without the specific written consent of | Texas Instruments Berlin, AG. +----------------------------------------------------------------------------- | Purpose : Utilities and stuff common for the different test parts +----------------------------------------------------------------------------- */ #define APP_UTIL_C /*==== INCLUDES =============================================================*/ #include "app_util.h" #include <string.h> /* String functions, e. g. strncpy(). */ #include <ctype.h> #include <stdlib.h> #ifndef _SIMULATION_ #endif /* _SIMULATION_ */ #include "vsi.h" /* A lot of macros. */ #ifndef _SIMULATION_ #include "custom.h" #include "gsm.h" /* A lot of macros. */ #include "tools.h" /* Common tools. */ #endif /* _SIMULATION_ */ /*==== Local defines =========================================================*/ #define MAX_TOKENS 4 /* Maximum number of tokens to search for; * first token is the command name, last token * the rest of the line. */ /*==== Local functions =======================================================*/ static char **tokenize_cmd(char *command) { /* Three tokens will be enough: command name, parameter 1, parameter 2. Empty * tokens will be NULL. */ static char *cmd_token[MAX_TOKENS] ; char *cur ; /* Pointer to current character. */ int cur_tok ; /* Current token number. */ cur = command ; cur_tok = 0 ; do { while (isspace(*cur)) /* FALSE also for NUl character. */ { cur++ ; /* Skip whitespace. */ } if (!*cur) /* String terminated. */ { cmd_token[cur_tok] = 0 ; /* No token here and stop. */ break ; } cmd_token[cur_tok++] = cur ; cmd_token[cur_tok] = 0 ; while (*cur && !isspace(*cur)) { cur++ ; /* Skip non-whitespace. */ } if (*cur) *cur++ = 0 ; /* Zero-terminate token if not end of string. */ } while (cur_tok < MAX_TOKENS) ; return cmd_token ; } char *string_to_lower(char *s) { char *tmp ; for (tmp = s; *tmp; tmp++) { *tmp = tolower(*tmp) ; } return s ; } /*==== Exported functions ====================================================*/ /** Parse a command and execute it if it is valid. Return appropriate error * message if the command is invalid or fails. * * @param command command line to execute * @return an error message or NULL on success */ char *app_handle_command(char *command, app_cmd_entry_t * cmd_table) { char **tokened_cmd ; /* Tokenized command line. */ int cmd_index ; TRACE_FUNCTION("app_handle_command()") ; tokened_cmd = tokenize_cmd(command) ; if (!tokened_cmd[0]) { return "ERROR: empty command line" ; } string_to_lower(tokened_cmd[0]) ; /* convert to lower char */ cmd_index = 0 ; while (cmd_table[cmd_index].cmd_name) { if (!strcmp(tokened_cmd[0], cmd_table[cmd_index].cmd_name)) { TRACE_EVENT_P4("Call %s(%s, %s, %s)", cmd_table[cmd_index].cmd_name, tokened_cmd[1] ? tokened_cmd[1] : "(null)", tokened_cmd[2] ? tokened_cmd[2] : "(null)", tokened_cmd[3] ? tokened_cmd[3] : "(null)") ; return cmd_table[cmd_index].cmd_func(&cmd_table[cmd_index], tokened_cmd[1], tokened_cmd[2], tokened_cmd[3], cmd_table[cmd_index].core_func) ; } cmd_index++ ; } return "ERROR: command not recognized" ; } /** * Convert a string into an integer. * If not possibly, assume the default value. */ int get_item(char *param, int default_item, BOOL can_null) { U32 item = default_item; if (param) { item = atoi(param); if (!can_null AND item EQ 0) { TRACE_EVENT("WARNING: item is 0, setting to default"); item = default_item; } } return item; } /* This is onoy for the case that the macro UI_TRACE() is undefined, in which * case the linker bemoans it as missing. */ /* EOF */