summaryrefslogtreecommitdiff
path: root/apps/include
diff options
context:
space:
mode:
authorGregory Nutt <gnutt@nuttx.org>2014-06-15 12:07:27 -0600
committerGregory Nutt <gnutt@nuttx.org>2014-06-15 12:07:27 -0600
commit2fba86a7717ecd534d94189fdf8734bf8d3ec91f (patch)
treeac8b2b6b18816b4d4e04c41dc43b3379ea860e46 /apps/include
parent4d332f0bcc2f1feeec8b3344e694e66095b61080 (diff)
downloadnuttx-2fba86a7717ecd534d94189fdf8734bf8d3ec91f.tar.gz
nuttx-2fba86a7717ecd534d94189fdf8734bf8d3ec91f.tar.bz2
nuttx-2fba86a7717ecd534d94189fdf8734bf8d3ec91f.zip
Add conversion of Intel HEX to binary
Diffstat (limited to 'apps/include')
-rw-r--r--apps/include/hex2bin.h204
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 */