]> cloudbase.mooo.com Git - z180-stamp.git/blobdiff - avr/env.c
Rename getenv_char() --> getenv_str()
[z180-stamp.git] / avr / env.c
index 7be7d03501f102a7fbed6367262272859d3f8ead..952c88a0b9081b827d58ee6cfbe9c8ef0e41b88f 100644 (file)
--- a/avr/env.c
+++ b/avr/env.c
@@ -1,12 +1,13 @@
 /*
  * (C) Copyright 2014 Leo C. <erbl259-lmu@yahoo.de>
  *
- * SPDX-License-Identifier:    GPL-2.0+
+ * SPDX-License-Identifier:    GPL-2.0
  */
 
 #include "common.h"
 #include <string.h>
 #include <stdlib.h>
+#include <stdbool.h>
 #include <avr/eeprom.h>
 
 #include "config.h"
 #define DELIM          "\0"
 
 const FLASH char default_env[] = {
-       "bootdelay="    "3"             DELIM
-       "bootcmd="      "reset; loadf; go ${startaddr}" DELIM
-       "baudrate="     "115200"        DELIM
-       "startaddr="    "0"             DELIM
+       ENV_BAUDRATE      "=" "115200" DELIM
+       ENV_BOOTDELAY     "=" "3" DELIM
+       ENV_BOOTCMD               "=" "pin ${pins}; loadcpm3; go ${startaddress}" DELIM
+       ENV_CPM3_SYSFILE  "=" CONFIG_CPM3_SYSFILE DELIM
+       ENV_PINALIAS      "=" "0:PG5,1:PG4,2:PB4,3:PB5,4:PB6,5:PB7,"
+                                                 "6:PG3,7:PG2,8:PG1,9:PG0,10:PE7" DELIM
+       ENV_STARTADDRESS  "=" "0" DELIM
+       "pins"                    "=" "2,8 low 9 high 3 2" DELIM
        DELIM
 };
 
+
 /* EEPROM storage */
 typedef struct environment_s {
        uint16_t        crc;            /* CRC16 over data bytes        */
@@ -312,7 +318,7 @@ int env_init(void)
 }
 
 
-char *getenv(const MEMX char *name)
+char *getenv_str(const MEMX char *name)
 {
        env_item_t *ep;
        char *ret = NULL;
@@ -452,7 +458,6 @@ command_ret_t _do_env_set(int flag, int argc, char * const argv[])
        env_item_t e, *ep;
 
        (void) flag;
-       debug("Initial value for argc=%d\n", argc);
 
        name = argv[1];
        value = argv[2];
@@ -519,15 +524,35 @@ command_ret_t _do_env_set(int flag, int argc, char * const argv[])
  * @return 0 if ok, 1 on error
  */
 static
-int setenv(const char *varname, const char *varvalue)
+int setenv(const MEMX char *varname, const char *varvalue)
 {
-       const char * const argv[3] = { NULL, varname, varvalue };
+       int rc;
+
+#ifdef __MEMX
+       char *tmpname = NULL;
+       if (__builtin_avr_flash_segment(varname) != -1) {
+               tmpname = malloc(strlen_P(varname)+1);
+               if (tmpname == NULL) {
+                       printf_P(PSTR("setenv: Out of Memory!\n"));
+                       return 1;
+               }
+               strcpy_P(tmpname, varname);
+       } else
+               tmpname = (char *) varname;
+#endif
+
+       const char * const argv[3] = { NULL, tmpname, varvalue };
        int argc = 3;
 
        if (varvalue == NULL || varvalue[0] == '\0')
                --argc;
 
-       return (int) _do_env_set(0, argc, (char * const *)argv);
+       rc = (int) _do_env_set(0, argc, (char * const *)argv);
+
+#ifdef __MEMX
+       free(tmpname);
+#endif
+       return rc;
 }
 
 /**
@@ -601,6 +626,24 @@ unsigned long getenv_ulong(const MEMX char *name, int base, unsigned long defaul
 }
 
 
+/*
+ * Read an environment variable as a boolean
+ */
+bool getenv_yesno(const MEMX char *name)
+{
+       char *s = getenv_str(name);
+
+       if (s == NULL)
+               return false;
+
+       return strchr_P(PSTR("1yYtT"), *s) != NULL;
+
+/*
+       return *s == '1' || *s == 'y' || *s == 'Y' || *s == 't' || *s == 'T' ?
+               1 : 0;
+*/
+}
+
 command_ret_t do_env_print(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 {
        command_ret_t rc = CMD_RET_SUCCESS;