Configuration and Setup

Setup, in its simplest form, is Wi-Fi Setup, also called Wi-Fi provisioning: providing ZentriOS with your network ssid and passkey. Once these details are provided, ZentriOS automatically brings the network up when it is required by any ZentriOS activity.

Setup may also involve Variable Configuration and GPIO Configuration.

To configure your own version of the ZentriOS Web App, see Customizing the ZentriOS Web App.

Some of the procedures described below use a ZentriOS terminal. Connecting a terminal is described in Getting Started.

Wi-Fi Setup

A number of flexible and easy-to-use options are available to set up a device running ZentriOS.

ZentriOS is so easy to setup, we bet that within just a couple of minutes after plugging your evaluation board in, you'll be connected to a Wi-Fi network. Why not try it right now? With just four ZentriOS commands, you can connect to the Internet and download information! Enter the following commands into a ZentriOS terminal, substituting the name and password for your access point:

ZentriOS Commands Description

set wlan.ssid     "Your AP Name"
set wlan.passkey  "Your secret password"


stream_read       0 1000

<- Name of your Access Point
<- Password for your Access Point

<- Sample information: get the home page
   from the Google secure web address
<- Read 1000-bytes of the sample

The setup steps are the first two lines of the example above - connecting to your local Wi-Fi Access Point. For further quick start information see Getting Started.

Setup with a Web browser

ZentriOS provides the option to use a web browser running on a network client (such as a smartphone, tablet or computer) to set the wlan.ssid and wlan.passkey.

In web setup mode, the ZentriOS device starts a soft AP and an HTTP server. The network client joins the device network via the soft AP and loads a set up page running on the ZentriOS HTTP server.

Note: Web setup mode does NOT currently support WEP. You can setup WEP using a terminal and ZentriOS commands. See wlan.passkey.

Starting Web Setup Mode on a Zentri Evaluation Board

On a Zentri evaluation board in the factory default state, you can start web setup mode without connecting via a terminal: hold down Button 2, press Reset, and continue to hold down Button 2 for another three seconds. The evaluation board red LED flashes to indicate the ZentriOS soft AP is running. See Initiating Setup by GPIO.

Starting Web Setup Mode from a ZentriOS Terminal

Alternatively, to start web setup mode, connect via a terminal and enter the command setup web.

ZentriOS starts the local network and web server as indicated by the final message: In progress.

> setup web
IPv4 address:
Web setup started with the SSID: "ZentriOS-###"
In progress

Opening the Web Setup Page

Open the Wi-Fi settings on your smartphone, tablet or computer and join the network called ZentriOS-###. The ### represents a unique ID derived from the last 3 characters of the device MAC address, e.g. ZentriOS-2D6 for a device with MAC address 4C:55:CC:10:32:D6. The password for the network is simply: password.

The local network name and password, and the web address may be customised to suit your needs. See setup.web.ssid, setup.web.passkey and setup.web.url.

After joining the local network, open a web browser on the network client and direct the browser to The ZentriOS web page appears, and a scan begins for Wi-Fi access points in range. Select the remote network you wish to join, enter the network password then select Save & Exit and follow the prompts.

Once the settings are successfully saved, ZentriOS prints Web Setup Mode exited to the terminal. You can check that the settings were successfully saved using get wlan.ssid and get wlan.passkey.

Web Setup Mode exited
> get wlan.ssid
> get wlan.passkey

Web Setup Timeout

Web Setup times out after a period of user inactivity. If after web setup starts, the user does not open the web page, ZentriOS exits setup mode after five minutes. If after opening the page the user does not click any button on the web page for five minutes, the setup web page displays a warning message. If there is no activity for 60 seconds after the message is displayed, the web page exits and web setup stops.

Setup by ZentriOS Terminal

Perhaps the most common option used for general setup (and also the most convenient when prototyping) is to use a ZentriOS terminal and set variables using ZentriOS commands. See Getting Started.

It is straightforward to set the wlan.ssid and wlan.passkey variables manually. Be sure to save afterwards, or the values will be lost when the device reboots.

> set wlan.ssid YOUR_NETWORK_NAME
Set OK
> set wlan.passkey YOUR_NETWORK_PASSWORD
Set OK
> save

Any subsequent command requiring network access, such as an ICMP (Internet Control Message Protocol) ping, automatically results in the device attempting to join the network.

> ping -g
[Associating to YOUR_NETWORK_NAME]
Security type from probe: WPA2-Mixed
Obtaining IPv4 address via DHCP
IPv4 address:
Ping reply in 25ms

Network Setup Option

The network_up command provides a -s option that prompts for the network and passkey. This simplifies the process by scanning for networks and allowing the desired network to be selected by index number, e.g.:

> nup -s
Scanning for networks...
! 5 networks found
!  # Ch RSSI MAC (BSSID)       Network (SSID)
#  0  1  -78 00:0E:E8:B2:FE:FC someone-else
#  1  1  -79 18:33:9D:5F:9E:F3 another-network
#  2  6  -53 84:1B:5E:D8:0F:18 Zentri_EXT
#  3  6  -28 30:85:A9:E7:9C:B0 Zentri
#  4 11  -84 58:BF:EA:D8:C9:D2 not_us

Type the number # that matches your Network: 3
Type the password for your Network         : <passkey>

After running nup -s you may want to set wlan.auto_join.enabled. Save the variables if you want them to persist through a reboot:

> set wlan.auto_join.enabled 1
Set OK
> save

Setup by Remote Terminal

An (optionally) password-secured remote terminal provides command line setup convenience (look ma, no wires!) via one of the ZentriOS wireless network interfaces. See Application Examples - Remote Terminal. After connecting to the ZentriOS device via a remote terminal, follow the procedure described above in Setup by ZentriOS Terminal.

Initiating Setup by GPIO

Setup can be triggered by changing the level of a specified GPIO. See Executing a Script on GPIO Assertion or Reboot.

If setup.gpio.mode is set to gpio, and the GPIO specified by setup.gpio.control_gpio is held to the level specified by setup.gpio.level for 3 seconds during and immediately after reset, then the command specified by setup.gpio.cmd is run.

On ZentriOS evaluation boards, the default factory configuration is:

setup.gpio.control_gpioGPIO corresponding to Button 2: Wallaby: GPIO11, Numbat: GPIO22
setup.gpio.cmdsetup web

Accordingly, on a default configuration eval board, hold down Button 2, press reset, and continue to hold Button 2 for three seconds to start web setup.

Web Setup Note: On some ZentriOS evaluation boards, the web setup GPIO configuration to Button 2 to is lost after a hardware factory_reset using Button 1. In this case use the setup web command to enter web setup mode, or use another configuration method.

Initiating Setup on Boot

Set the value of to the required setup cmd.

See Executing a Script on Reboot.

Setup by WPS Push-button or PIN

WPS is a Wi-Fi provisioning method originally intended to simplify the process of connecting Wi-Fi clients to Wi-Fi Access Points.

WPS is disabled in the current version of ZentriOS. See the wps command.

Setup Configuration Script

A custom configuration script can be set up to execute on boot-up. The file is in Configuration Script Format.

If you issue the setup cmd without a specified <script_file> argument, ZentriOS automatically uses the file default_setup.script if it exists in the ZentriOS file system. You can customise a setup script as required. You can create multiple setup scripts and supply the filename as an argument: setup cmd <script_file>.

Sample default_setup.script file contents are as follows:

network_up,-s,Configuration network credentials
set wlan.auto_join.enabled,true,Enable network auto-join
save,-,Saving settings

On running the default_setup.script, the output is similar to the following:

> setup cmd
Running setup script: default_setup.script
In progress
> Configuration network credentials
network_up -s
Scanning for networks...
! 9 networks found
!  # Ch RSSI MAC (BSSID)       Network (SSID)
#  0  1  -77 18:33:9D:5F:9E:F2 Some AP
#  1  1  -79 18:33:9D:5F:9E:F4 Another AP
#  2  6  -31 30:85:A9:E7:9C:B0 Zentri
#  3  6  -66 E8:08:8B:CA:4A:CC Yet Another AP

Type the number # that matches your Network: 2
Type the password for your Network         : secret_passkey
[Associating to Zentri]
> In progress
Enable network auto-join
set wlan.auto_join.enabled true
Set OK
Saving settings
Script executed successfully

Configuration Scripts

A configuration script is a csv file containing commands to be executed sequentially. The format is described in Configuration Script Format.

Executing a Script on Command

To execute a script, use the setup cmd command. Use the -v option to see commands, comments and command responses.

For example, to verbosely execute the script my_script.csv:

setup cmd -v my_script.csv

You can also load a variable configuration script with the load command. For example:

load my_config.csv

Executing a Script on Reboot

To automatically execute a script on booting an unconfigured device (a device with wlan.ssid not yet set), set the value of to the required setup cmd. For example:

set "setup cmd my.script"

Note: The "setup cmd" value must be enclosed in double quotes because it is a single argument containing spaces.

See Serial Interface, Setup Auto Command.

Executing a Script on GPIO Assertion or Reboot

To execute a script on in response to a reboot, or a GPIO being asserted, set the value of the setup.gpio.control_gpio variable to the required command.

See Serial Interface, Setup GPIO.

For example, the following settings cause the configuration script my_script.csv to be executed when GPIO 2 is asserted for 3 seconds during a reboot:

set setup.gpio.cmd "setup cmd my_script.csv"
set setup.gpio.control_gpio 2
set setup.gpio.level 1
set set.gpio.mode gpio

Displaying Comments and Command Output on Script Execution

To display comments and command output, add the -v option after the setup cmd, e.g.

set setup.gpio.cmd "setup cmd -v my.script"

See setup cmd.

Configuration Script Format

A configuration script specifies a list of commands, to be executed in sequence. A variable configuration file is an example of a configuration script. See Variable Configuration File.

The configuration script is in .csv format. Each line represents a command, in the form:


The maximum line length of any line in a configuration script is 128 characters (including the \r\n characters at the end of the line).

You can create complex scripts, that run other commands to perform actions such as GPIO configuration. This is an example script that frees up four GPIOs.

,,--------------------------------------------- Free up GPIOs
set, gpio.init  0 none, \r\n# Free up GPIO  0
set, gpio.init 22 none, \r\n# Free up GPIO 22
set, gpio.init 16 none, \r\n# Free up GPIO 16
set, gpio.init 13 none, \r\n# Free up GPIO 13

The comment is printed before the corresponding command is executed.

The comment fields in the above example contain \r\n# characters for formatting purposes only. The effect is to skip a line then print the # character before the text of the comment.

Note: To comment out a line completely, insert two commas at the beginning of the line. See examples above. A variable configuration file cannot have full line comments.

Note: Each line of the script is terminated by \r\n (<CR><LF>).

Example - Creating and Running a Configuration Script

This example demonstrates writing the sample GPIO script above to a file and executing it.

Write the script to the ZentriOS file system. See File System, Writing Files.

The script has 251 characters, including the <CR><LF> characters at the end of each line. To create the file, issue the file_create command and after pressing Enter, paste the file contents into the ZentriOS terminal:

> fcr test.script 251
,,--------------------------------------------- Free up GPIOs
set, gpio.init  0 none, \r\n# Free up GPIO  0
set, gpio.init 22 none, \r\n# Free up GPIO 22
set, gpio.init 16 none, \r\n# Free up GPIO 16
set, gpio.init 13 none, \r\n# Free up GPIO 13

File created

Now you can run the script as follows:

> setup cmd -v test.script
Running setup script: test.script
In progress

# Free up GPIO  0
set  gpio.init  0 none
Set OK

# Free up GPIO 22
set  gpio.init 22 none
Set OK

# Free up GPIO 16
set  gpio.init 16 none
Set OK

# Free up GPIO 13
set  gpio.init 13 none
Set OK
Script executed successfully

To create a variable configuration file that can be run with the load command, omit full line comments such as the Free up GPIOs line in the example above. For example:

> fcr test2.script 186
set, gpio.init  0 none, \r\n# Free up GPIO  0
set, gpio.init 22 none, \r\n# Free up GPIO 22
set, gpio.init 16 none, \r\n# Free up GPIO 16
set, gpio.init 13 none, \r\n# Free up GPIO 13

File created

Then to run the script:

> load -v test2.script

# Free up GPIO  0
set  gpio.init  0 none
Set OK

# Free up GPIO 22
set  gpio.init 22 none
Set OK

# Free up GPIO 16
set  gpio.init 16 none
Set OK

# Free up GPIO 13
set  gpio.init 13 none
Set OK
Rebooting to complete loading sequence
Loaded & saved settings
JTAG debug enabled

Variable Configuration

ZentriOS maintains current variable values in Configuration RAM. To ensure that variable values persist after reboot, you save Configuration RAM to NVM flash with the save command. NVM stands for Non-Volatile-Memory. When you reboot, the device loads the configuration from NVM flash into Configuration RAM.

Certain critical variable values in NVM flash are backed up in NVM backup. If NVM flash becomes corrupted, the values are automatically restored from NVM backup. See NVM Backup Variables below for the list of critical variables.

You can save Configuration RAM to a file by specifying a configuration filename with the save command, e.g.: save config1.cfg

To store multiple configurations, save multiple files.

You can load a specified variable configuration file with the load command after reboot is complete, e.g.: load config1.cfg

Platform-specific variable values are typically stored in OTP (One-Time Programmable) memory. For example, settings related to antenna configuration, buttons or indicator LEDs on Mackerel or Moray evaluation boards are stored in OTP memory at manufacture.

To summarise, variable values are stored in several places:

Variable LocationDescription
Factory Default ValuesStored in firmware
Configuration RAMStores current variable values. Must be saved to persist.
NVM FlashSaved variable values
NVM BackupBackup of critical variable values
OTP memoryPlatform-specific variable values
Variable filesSnapshot of Configuration RAM

Variable values are restored from these storage locations as described below in Resetting Variable Values.

Variable Configuration File

A variable configuration file allows settings of variables to be saved and loaded as required.

A variable configuration file is a configuration script, with the format described in Configuration Script Format, with the exception that comment-only lines are not permitted. Each line should have a variable setting command.

The variable configuration file is saved with the file type FD (decimal 253): SETUP_SCRIPT. If you create your own variable configuration file, it may have the file type FE (decimal 254): MISC_FIX_LEN. See File Types. Either type can be executed with the load command or the setup cmd command.

For a default variable configuration file, see Default Variable Configuration below.

Default Variable Configuration

You can create a default variable configuration file by issuing the save command with the file name default_config.csv:

save default_config.csv

The default configuration in default_config.csv is loaded in response to a User Factory Reset (see below).

The default configuration in default_config.csv is automatically loaded upon startup if there is no valid NVM flash, for example after reprogramming, or after a successful ota update.

You can also create a variable configuration file by other means. See the configuration file example above. It is not necessary to supply a setting for every variable.

In the example below, the full default.config.csv file is shown for the default state of variables in ZentriOS-WZ- on the AMW106 platform:

> save default_config.csv
> ls
!  # Type  Flags  Hnd    Size       Version  Filename
#  1 e-FD   0061  189    9419  default_config.csv.

> fop default_config.csv
[2017-08-31 | 00:13:36: Opened: 0]
> read 0 9500
set broadcast.interface,"default",
set broadcast.interval,"10",
set broadcast.udp.ip,"",
set broadcast.udp.port,"55555",
set bus.command.read_timeout,"250",
set bus.command.rx_bufsize,"256",
set bus.command.write_check_enabled,"0",
set bus.command.write_timeout,"25000",
set bus.data_bus,"uart0",
set bus.log_bus,"uart0",
set bus.mode,"command",
set dms.cmd.enabled,"1",
set dms.geolocate.interval,"0",
set dms.telemetry.adc_mask,"0x0",
set dms.telemetry.data_mask,"0x3FF",
set dms.telemetry.gpio_mask,"0x0",
set dms.telemetry.interval,"0",
set email.name_address,"",
set email.smtp.password,"",
set email.smtp.port,"587",
set email.smtp.username,"",
set gpio.config_file,"gpio_config_init.csv",
set gpio.init,"0 in",
set gpio.init,"13 out 0",
set gpio.init,"16 out 0",
set gpio.init,"22 in",
set gpio.sleep,"0 input_pull_up",
set gpio.sleep,"6 input_pull_up",
set gpio.sleep,"7 input_pull_up",
set gpio.sleep,"8 input_pull_up",
set http.client.retries,"3",
set http.client.retry_period,"1000",
set http.server.api_enabled,"1",
set http.server.auth_title,"",
set http.server.cors_origin,"",
set http.server.denied_filename,"webapp/unauthorized.html",
set http.server.enabled,"0",
set http.server.interface,"default",
set http.server.max_clients,"3",
set http.server.notfound_filename,"",
set http.server.password,"",
set http.server.port,"80",
set http.server.root_filename,"webapp/index.html",
set http.server.tls_cert,"",
set http.server.tls_enabled,"0",
set http.server.tls_key,"",
set http.server.tls_log_clients,"0",
set http.server.tls_verify_peer,"0",
set http.server.username,"",
set http.server.ws_connected_gpio,"-1",
set http.server.ws_data_gpio,"-1",
set ioconn.control_gpio,"-1",
set ioconn.enabled,"1",
set ioconn.local_port,"5000",
set ioconn.protocol,"tcp",
set ioconn.remote_host,"",
set ioconn.remote_port,"50007",
set ioconn.status_gpio,"-1",
set mdns.enabled,"0",
set mdns.interface,"default",
set mdns.service,"http" "-1",
set mdns.service,"tcp" "-1",
set mdns.service,"udp" "-1",
set mdns.service,"remote_terminal" "-1",
set mdns.ttl,"300",
set network.arp.lock_enabled,"0",
set network.arp.table_size,"3",
set network.buffer.control_size,"4096",
set network.buffer.rxtx_ratio,"50",
set network.buffer.size,"20480",
set network.default_interface,"wlan",
set network.dns.timeout,"6000",
set network.tcp.delivery_type,"normal",
set network.tls.ca_cert,"geotrust_ca.pem",
set network.tls.client_cert,"",
set network.tls.client_key,"",
set network.tls.version,"12",
set ntp.enabled,"1",
set ntp.interface,"default",
set ntp.interval,"3600",
set ntp.server,"",
set remote_terminal.enabled,"0",
set remote_terminal.interface,"default",
set remote_terminal.password,"",
set remote_terminal.port,"2000",
set remote_terminal.timeout,"60",
set setup.gpio.cmd,"setup web",
set setup.gpio.control_gpio,"22",
set setup.gpio.level,"1",
set setup.gpio.mode,"gpio",
set setup.web.idle_timeout,"300",
set setup.web.passkey,"password",
set setup.web.root_filename,"webapp/index.html",
set setup.web.ssid,"ZentriOS-#",
set setup.web.url,"\,\,",
set softap.auto_start,"0",
set softap.captive_portal_enabled,"0",
set softap.dhcp_server.enabled,"1",
set softap.dhcp_server.lease_time,"86400",
set softap.dns_server.enabled,"1",
set softap.dns_server.url,"\,",
set softap.hide_ssid,"0",
set softap.idle_timeout,"7",
set softap.max_clients,"4",
set softap.passkey,"",
set softap.rate.protocol,"auto",
set softap.rate.transmit,"auto",
set softap.rssi_average,"0",
set softap.ssid,"ZentriOS-#",
set softap.static.gateway,"",
set softap.static.ip,"",
set softap.static.netmask,"",
set spi.master.active_gpio,"-1",
set spi.master.active_level,"1",
set stream.auto_close,"1",
set system.activity.gpio_level,"1",
set system.adc.vref,"3300",
set system.bflash.cs_gpio,"-1",
set system.boot.image,"sys/services.bin",
set system.cmd.aux_bus,"none",
set system.cmd.buffered,"0",
set system.cmd.echo,"1",
set system.cmd.gpio,"-1",
set system.cmd.header_enabled,"0",
set system.cmd.prompt_enabled,"1",
set system.cmd.timestamp,"none",
set system.factory_reset.aux_gpio,"-1",
set system.factory_reset.aux_level,"1",
set system.gotosleep.timeout,"0",
set system.indicator.gpio,"network 18",
set system.indicator.gpio,"softap 5",
set system.indicator.gpio,"wlan 23",
set system.indicator.state,"network fast_blink|medium_blink|slow_blink|static_on",
set system.indicator.state,"softap static_off|fast_blink|medium_blink|slow_blink",
set system.indicator.state,"wlan static_off|fast_blink|medium_blink|slow_blink",
set system.msg,"initialized [@tReady]",
set system.msg,"stream_closed [@tClosed:\\s@c]",
set system.msg,"stream_failed [@tOpen\\sfailed]",
set system.msg,"stream_opened [@tOpened:\\s@c]",
set system.msg,"stream_opening [@tOpening:\\s@h]",
set system.msg,"sleep [@tSleep]",
set system.msg,"wlan_failed [@tJoin\\sfailed]",
set system.msg,"wlan_joined [@tAssociated]",
set system.msg,"wlan_joining [@tAssociating\\sto\\s@s]",
set system.msg,"wlan_leave [@tDisassociated]",
set system.msg,"softap_joined [@t@m\\sassociated]",
set system.msg,"softap_leave [@t@m\\sdisassociated]",
set system.oob.event_mask,"0x0",
set system.oob.gpio,"-1",
set system.oob.gpio_level,"1",
set system.oob.rising_edge_mask,"0x0",
set system.powersave.mode,"1",
set system.print_level,"all",
set system.safemode.disabled,"0",
set system.wakeup.timeout,"0",
set tcp.client.auto_interface,"default",
set tcp.client.auto_retries,"0",
set tcp.client.auto_start,"0",
set tcp.client.connect_timeout,"5000",
set tcp.client.local_port,"0",
set tcp.client.remote_host,"",
set tcp.client.remote_port,"3000",
set tcp.client.retries,"3",
set tcp.client.retry_period,"1000",
set tcp.client.tls_enabled,"0",
set tcp.keepalive.enabled,"0",
set tcp.keepalive.initial_timeout,"60",
set tcp.keepalive.retry_count,"5",
set tcp.keepalive.retry_timeout,"5",
set tcp.server.auto_interface,"default",
set tcp.server.auto_start,"0",
set tcp.server.connected_gpio,"-1",
set tcp.server.data_gpio,"-1",
set tcp.server.idle_timeout,"60",
set tcp.server.max_clients,"8",
set tcp.server.port,"3000",
set tcp.server.tls_cert,"",
set tcp.server.tls_enabled,"0",
set tcp.server.tls_key,"",
set tcp.server.tls_verify_peer,"0",
set time.rtc,"1504138400",
set uart.baud,"uart0:115200!\,uart1:115200!",
set uart.flow,"uart0:off\,uart1:off",
set uart.parity,"uart0:none\,uart1:none",
set uart.stop,"uart0:1\,uart1:1",
set udp.client.auto_interface,"default",
set udp.client.auto_retry,"0",
set udp.client.auto_start,"0",
set udp.client.remote_host,"",
set udp.client.remote_port,"3000",
set udp.server.auto_interface,"default",
set udp.server.auto_start,"0",
set udp.server.data_gpio,"-1",
set udp.server.lock_client,"0",
set udp.server.port,"3000",
set udp.server.remote_host,"",
set udp.server.remote_port,"0",
set wlan.auto_join.enabled,"1",
set wlan.auto_join.retries,"3",
set wlan.auto_join.retry_delay,"10",
set wlan.bssid,"00:00:00:00:00:00",
set wlan.dhcp.cache_enabled,"0",
set wlan.dhcp.enabled,"1",
set wlan.dhcp.hostname,"ZentriOS-#",
set wlan.dhcp.timeout,"15",
set wlan.hide_passkey,"0",
set wlan.join.retries,"3",
set wlan.join.timeout,"7000",
set wlan.multicast.address,"",
set wlan.passkey,"",
set wlan.powersave.listen_interval,"0",
set wlan.powersave.mode,"0",
set wlan.powersave.sleep_delay,"10",
set wlan.rate.protocol,"auto",
set wlan.rate.transmit,"auto",
set wlan.region,"us",
set wlan.roam.threshold,"-99",
set wlan.rssi_average,"5",
set wlan.scan.active_dwell,"75",
set wlan.scan.channel_mask,"0x7FF",
set wlan.scan.home_dwell,"50",
set wlan.scan.num_probes,"3",
set wlan.scan.passive_dwell,"110",
set wlan.scan.retries,"3",
set wlan.scan.type,"active",
set wlan.ssid,"",
set wlan.static.dns,"",
set wlan.static.gateway,"",
set wlan.static.ip,"",
set wlan.static.netmask,"",
set wlan.tx_power,"auto",
set zap.auto_run,"1",
set zap.debug.auto_run,"1",
set zap.debug.enabled,"1",
set zap.debug.ignore_settings,"0",
set system.variable_lock,0x00,

> ver
ZENTRI-AMW106_ZAP-, 2017-08-01T08:35:32Z, ZentriOS-WZ-, Board:AMW106-E03.3

Resetting Variable Values

There are several kinds of reset that affect the value of variables.

Powerup or Reboot

To restore variable values on restart, ZentriOS:

Hard Factory Reset

A hard factory reset returns all values to their original default values. This is under user control. To perform a hard factory reset:


The factory_reset command requires a MAC address in order to avoid accidental reset. The MAC address can be obtained from the wlan.mac variable.

To restore variable values, ZentriOS:

Soft Factory Reset

A soft factory reset restores the NVM from NVM backup. This happens automatically if the NVM is corrupted.

To restore variable values, ZentriOS:

User Factory Reset

A user factory reset restores from NVM backup. This is under user control.

Note: The effect of a soft factory reset and a user factory reset is the same. They differ only in how they are invoked.

To perform a user factory reset:


To restore variable values, ZentriOS:

Load User Settings

This reset takes place when the load command is issued.

The following steps take place, in the following order. ZentriOS:

NVM Backup Variables

The values of the following critical user variables are saved in NVM backup, in case there is some damage to NVM flash:

GPIO Configuration

GPIOs are configured in the factory default variable configuration. You can use GPIO commands and variables to configure GPIOs. See Peripherals, GPIO Commands and Variables. It is also possible to use a csv file to configure and initialize GPIOs on bootup.

Using a GPIO Configuration File

The file name is set with the gpio.config_file variable. On some boards a default GPIO configuration script is provided with the filename gpio_config_init.csv.

The GPIO config file format consists of lines, each of which configures a GPIO. The file is of the form:



Standard GPIO Functions

These correspond to the direction names used in arguments for the gpio_dir command.

I/O Type DescriptionDirection Name
Input, pull-upipu
Input, pull-downipd
Input, high-impedancein
Output, push-pullout
Output, open-drain no-pullood
Output, open-drain pull-upoodpu
Deregister the GPIOnone

Sleep State

To set the sleep state in the gpio config file add the | in the gpio function column.

For example:

Set GPIO 0 with gpio.alias = "reset", gpio.init = "ipd", gpio.sleep = "in":


See the gpio.sleep variable description for state options.

Alternative GPIO Functions

System Indicator State Options

State NameBlink PeriodBlink Frequency

Example GPIO config file


System Activity Function

Other than the GPIO parameter, each parameter for the set command is concatenated with a | character. For example, the following commands:

set system.activity.gpio 10 wlan_rx,wlan_tx
set system.activity.gpio 11 uart1_rx,uart1_tx

correspond to the following entries in the gpio_config.csv file: