diff options
author | Gregory Nutt <gnutt@nuttx.org> | 2014-06-15 12:07:27 -0600 |
---|---|---|
committer | Gregory Nutt <gnutt@nuttx.org> | 2014-06-15 12:07:27 -0600 |
commit | 2fba86a7717ecd534d94189fdf8734bf8d3ec91f (patch) | |
tree | ac8b2b6b18816b4d4e04c41dc43b3379ea860e46 /apps/include/hex2bin.h | |
parent | 4d332f0bcc2f1feeec8b3344e694e66095b61080 (diff) | |
download | nuttx-2fba86a7717ecd534d94189fdf8734bf8d3ec91f.tar.gz nuttx-2fba86a7717ecd534d94189fdf8734bf8d3ec91f.tar.bz2 nuttx-2fba86a7717ecd534d94189fdf8734bf8d3ec91f.zip |
Add conversion of Intel HEX to binary
Diffstat (limited to 'apps/include/hex2bin.h')
-rw-r--r-- | apps/include/hex2bin.h | 204 |
1 files changed, 204 insertions, 0 deletions
diff --git a/apps/include/hex2bin.h b/apps/include/hex2bin.h new file mode 100644 index 000000000..13fcfc8f4 --- /dev/null +++ b/apps/include/hex2bin.h @@ -0,0 +1,204 @@ +/**************************************************************************** + * apps/include/hex2bin.h + * + * Copyright (C) 2014 Gregory Nutt. All rights reserved. + * Author: Gregory Nutt <gnutt@nuttx.org> + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions + * are met: + * + * 1. Redistributions of source code must retain the above copyright + * notice, this list of conditions and the following disclaimer. + * 2. 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. + * 3. Neither the name NuttX 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. + * + ****************************************************************************/ + +#ifndef __APPS_INCLUDE_INIFILE_H +#define __APPS_INCLUDE_INIFILE_H + +/**************************************************************************** + * Included Files + ****************************************************************************/ + +#include <nuttx/config.h> + +#include <stdint.h> +#include <debug.h> + +#ifdef CONFIG_SYSTEM_HEX2BIN + +/**************************************************************************** + * Pre-processor Definitions + ****************************************************************************/ +/* Configuration ************************************************************/ + +#ifndef CONFIG_SYSTEM_HEX2BIN_BASEADDR +# define CONFIG_SYSTEM_HEX2BIN_BASEADDR 0x00000000 +#endif + +#ifndef CONFIG_SYSTEM_HEX2BIN_ENDPADDR +# define CONFIG_SYSTEM_HEX2BIN_ENDPADDR 0x00000000 +#endif + +#ifndef CONFIG_SYSTEM_HEX2BIN_SWAP +# define CONFIG_SYSTEM_HEX2BIN_SWAP 0 +#endif + +/* Some environments may return CR as end-of-line, others LF, and others + * both. If not specified, the logic here assumes either (but not both) as + * the default. + */ + +#if defined(CONFIG_EOL_IS_CR) +# undef CONFIG_EOL_IS_LF +# undef CONFIG_EOL_IS_BOTH_CRLF +# undef CONFIG_EOL_IS_EITHER_CRLF +#elif defined(CONFIG_EOL_IS_LF) +# undef CONFIG_EOL_IS_CR +# undef CONFIG_EOL_IS_BOTH_CRLF +# undef CONFIG_EOL_IS_EITHER_CRLF +#elif defined(CONFIG_EOL_IS_BOTH_CRLF) +# undef CONFIG_EOL_IS_CR +# undef CONFIG_EOL_IS_LF +# undef CONFIG_EOL_IS_EITHER_CRLF +#elif defined(CONFIG_EOL_IS_EITHER_CRLF) +# undef CONFIG_EOL_IS_CR +# undef CONFIG_EOL_IS_LF +# undef CONFIG_EOL_IS_BOTH_CRLF +#else +# undef CONFIG_EOL_IS_CR +# undef CONFIG_EOL_IS_LF +# undef CONFIG_EOL_IS_BOTH_CRLF +# define CONFIG_EOL_IS_EITHER_CRLF 1 +#endif + +/* Debug from hex2bin code */ + +#ifdef CONFIG_CPP_HAVE_VARARGS +# ifdef CONFIG_SYSTEM_HEX2BIN_DEBUG +# define hex2bin_debug(format, ...) \ + fprintf(stderr, EXTRA_FMT format EXTRA_ARG, ##__VA_ARGS__) +# else +# define lldbg(x...) +# endif +#else +# ifdef CONFIG_SYSTEM_HEX2BIN_DEBUG +# define hex2bin_debug printf +# else +# define hex2bin_debug (void) +# endif +#endif + +/**************************************************************************** + * Public Types + ****************************************************************************/ +/* Intel HEX data steams are normally in big endian order. The following + * enumeration selects other ordering. + */ + +enum hex2bin_swap_e +{ + HEX2BIN_NOSWAP = 0, /* No swap, stream is the correct byte order */ + HEX2BIN_SWAP16 = 1, /* Swap bytes in 16-bit values */ + HEX2BIN_SWAP32 = 2 /* Swap bytes in 32-bit values */ +}; + +/**************************************************************************** + * Public Data + ****************************************************************************/ + +#ifdef __cplusplus +#define EXTERN extern "C" +extern "C" +{ +#else +#define EXTERN extern +#endif + +/**************************************************************************** + * Public Function Prototypes + ****************************************************************************/ + +/**************************************************************************** + * Name: hex2bin + * + * Description: + * Read the Intel HEX ASCII data provided on the serial IN stream and write + * the binary to the seek-able serial OUT stream. + * + * These streams may be files or, in another usage example, the IN stream + * could be a serial port and the OUT stream could be a memory stream. This + * would decode and write the serial input to memory. + * + * Input Parameters: + * instream - The incoming stream from which Intel HEX data will be + * received. + * outstream - The outgoing stream in which binary data will be written. + * baseaddr - The base address of the outgoing stream. Seeking in the + * output stream will be relative to this address. + * endpaddr - The end address (plus 1) of the outgoing stream. This + * value is used only for range checking. endpaddr must + * be larger than baseaddr. A zero value for endpaddr + * disables range checking. + * swap - Controls byte ordering. See enum hex2bin_swap_e for + * description of the values. + * + * Returned Value + * Zero (OK) is returned on success; a negated errno value is returned on + * failure. + * + ****************************************************************************/ + +struct lib_instream_s; +struct lib_sostream_s; +int hex2bin(FAR struct lib_instream_s *instream, + FAR struct lib_sostream_s *outstream, uint32_t baseaddr, + uint32_t endpaddr, enum hex2bin_swap_e swap); + +/**************************************************************************** + * Name: hex2bin_main + * + * Description: + * Main entry point when hex2bin is built as an NSH built-in task. + * + * Input Parameters: + * Standard task inputs + * + * Returned Value + * EXIT_SUCESS on success; EXIT_FAILURE on failure + * + ****************************************************************************/ + +#ifdef CONFIG_SYSTEM_HEX2BIN_BUILTIN + +int hex2bin_main(int argc, char **argv); + +#endif /* CONFIG_SYSTEM_HEX2BIN_BUILTIN */ + +#undef EXTERN +#ifdef __cplusplus +} +#endif + +#endif /* CONFIG_SYSTEM_HEX2BIN */ +#endif /* __APPS_INCLUDE_INIFILE_H */ |