summaryrefslogtreecommitdiff
path: root/avr/env.c
diff options
context:
space:
mode:
Diffstat (limited to 'avr/env.c')
-rw-r--r--avr/env.c103
1 files changed, 56 insertions, 47 deletions
diff --git a/avr/env.c b/avr/env.c
index 602d845..5d1c5c0 100644
--- a/avr/env.c
+++ b/avr/env.c
@@ -1,7 +1,6 @@
#include "common.h"
#include <string.h>
#include <stdlib.h>
-
#include <avr/eeprom.h>
#include "config.h"
@@ -28,7 +27,7 @@
const FLASH char default_env[] = {
"bootdelay=" "3" DELIM
- "bootcmd=" "reset; loadf; go $(startaddr)" DELIM
+ "bootcmd=" "reset; loadf; go ${startaddr}" DELIM
"baudrate=" "115200" DELIM
"startaddr=" "0" DELIM
DELIM
@@ -423,35 +422,6 @@ int env_print(const MEMX char *name)
}
-command_ret_t do_env_print(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
-{
- command_ret_t rc = CMD_RET_SUCCESS;
-
- (void) cmdtp; (void) flag;
-
- if (argc == 1) {
- /* print all env vars */
- int size = env_print(NULL);
- if (size < 0)
- return CMD_RET_FAILURE;
- printf_P(PSTR("\nEnvironment size: %d/%d bytes\n"),
- size, ENV_SIZE);
- return CMD_RET_SUCCESS;
- }
-
- /* print selected env vars */
- for (int i = 1; i < argc; ++i) {
- int rc = env_print(argv[i]);
- if (rc < 0) {
- printf_P(PSTR("## Error: \"%s\" not defined\n"), argv[i]);
- rc = CMD_RET_FAILURE;
- }
- }
-
- return rc;
-}
-
-
/**
* Set or delete environment variable
*
@@ -552,37 +522,47 @@ int setenv(const char *varname, const char *varvalue)
return (int) _do_env_set(0, argc, (char * const *)argv);
}
-#if 0
/**
* Set an environment variable to an integer value
*
- * @param varname Environment variable to set
- * @param value Value to set it to
+ * @param name Environment variable to set
+ * @param value Value to set it to
+ * @param radix Base
* @return 0 if ok, 1 on error
*/
-int setenv_ulong(const char *varname, unsigned long value)
+static
+int setenv_intval(const MEMX char *name, unsigned long value, int radix)
{
- /* TODO: this should be unsigned */
- char *str = simple_itoa(value);
+ char buf[11];
- return setenv(varname, str);
-}
-#endif
+ ultoa(value, buf, radix);
+ return setenv(name, buf);
+}
/**
- * Set an environment variable to an value in hex
+ * Set an environment variable to a decimal integer value
*
- * @param varname Environment variable to set
- * @param value Value to set it to
+ * @param name Environment variable to set
+ * @param value Value to set it to
* @return 0 if ok, 1 on error
*/
-int setenv_hex(const MEMX char *varname, unsigned long value)
+int setenv_ulong(const MEMX char *name, unsigned long value)
{
- char str[sizeof(unsigned long) *2 + 1];
+ return setenv_intval(name, value, 10);
+}
+
- sprintf_P(str, PSTR("%lx"), value);
- return setenv(varname, str);
+/**
+ * Set an environment variable to a value in hex
+ *
+ * @param name Environment variable to set
+ * @param value Value to set it to
+ * @return 0 if ok, 1 on error
+ */
+int setenv_hex(const MEMX char *name, unsigned long value)
+{
+ return setenv_intval(name, value, 16);
}
@@ -613,6 +593,35 @@ unsigned long getenv_ulong(const MEMX char *name, int base, unsigned long defaul
}
+command_ret_t do_env_print(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
+{
+ command_ret_t rc = CMD_RET_SUCCESS;
+
+ (void) cmdtp; (void) flag;
+
+ if (argc == 1) {
+ /* print all env vars */
+ int size = env_print(NULL);
+ if (size < 0)
+ return CMD_RET_FAILURE;
+ printf_P(PSTR("\nEnvironment size: %d/%d bytes\n"),
+ size, ENV_SIZE);
+ return CMD_RET_SUCCESS;
+ }
+
+ /* print selected env vars */
+ for (int i = 1; i < argc; ++i) {
+ int rc = env_print(argv[i]);
+ if (rc < 0) {
+ printf_P(PSTR("## Error: \"%s\" not defined\n"), argv[i]);
+ rc = CMD_RET_FAILURE;
+ }
+ }
+
+ return rc;
+}
+
+
command_ret_t do_env_set(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
{
(void) cmdtp;