%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Copyright 2019 by Fred Dushin % % % % This program is free software; you can redistribute it and/or modify % % it under the terms of the GNU Lesser General Public License as % % published by the Free Software Foundation; either version 2 of the % % License, or (at your option) any later version. % % % % This program is distributed in the hope that it will be useful, % % but WITHOUT ANY WARRANTY; without even the implied warranty of % % MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the % % GNU General Public License for more details. % % % % You should have received a copy of the GNU General Public License % % along with this program; if not, write to the % % Free Software Foundation, Inc., % % 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA . % %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%----------------------------------------------------------------------------- %% @doc ESP32-specific APIs %% %% This module contains functions that are specific to the ESP32 platform. %% @end %%----------------------------------------------------------------------------- -module(esp). -export([ restart/0, reset_reason/0, nvs_get_binary/1, nvs_get_binary/2, nvs_get_binary/3, nvs_set_binary/2, nvs_set_binary/3, nvs_erase_key/1, nvs_erase_key/2, nvs_erase_all/0, nvs_erase_all/1, nvs_reformat/0 ]). -type esp_reset_reason() :: esp_rst_unknown | esp_rst_poweron | esp_rst_ext | esp_rst_sw | esp_rst_panic | esp_rst_int_wdt | esp_rst_task_wdt | esp_rst_wdt | esp_rst_deepsleep | esp_rst_brownout | esp_rst_sdio. -define(ATOMVM_NVS_NS, atomvm). %%----------------------------------------------------------------------------- %% @doc Restarts the ESP device %% @end %%----------------------------------------------------------------------------- -spec restart() -> ok. restart() -> throw(nif_error). %%----------------------------------------------------------------------------- %% @returns the reason for the restart %% @doc Returns the reason for the restart %% @end %%----------------------------------------------------------------------------- -spec reset_reason() -> esp_reset_reason(). reset_reason() -> throw(nif_error). %%----------------------------------------------------------------------------- %% @doc Equivalent to nvs_get_binary(?ATOMVM_NVS_NS, Key). %% @end %%----------------------------------------------------------------------------- -spec nvs_get_binary(Key::atom()) -> binary() | undefined. nvs_get_binary(Key) when is_atom(Key) -> esp:nvs_get_binary(?ATOMVM_NVS_NS, Key). %%----------------------------------------------------------------------------- %% @param Namespace NVS namespace %% @param Key NVS key %% @returns binary value associated with this key in NV storage, or undefined %% if there is no value associated with this key. %% @doc Get the binary value associated with a key, or undefined, if %% there is no value associated with this key. %% @end %%----------------------------------------------------------------------------- -spec nvs_get_binary(Namespace::atom(), Key::atom()) -> binary() | undefined. nvs_get_binary(Namespace, Key) when is_atom(Namespace) andalso is_atom(Key) -> throw(nif_error). %%----------------------------------------------------------------------------- %% @param Namespace NVS namespace %% @param Key NVS key %% @param Default default binary value, if Key is not set in Namespace %% @returns binary value associated with this key in NV storage, or Default %% if there is no value associated with this key. %% @doc Get the binary value associated with a key, or Default, if %% there is no value associated with this key. %% @end %%----------------------------------------------------------------------------- -spec nvs_get_binary(Namespace::atom(), Key::atom(), Default::binary()) -> binary() | undefined. nvs_get_binary(Namespace, Key, Default) when is_atom(Namespace) andalso is_atom(Key) andalso is_binary(Default) -> case esp:nvs_get_binary(Namespace, Key) of undefined -> Default; Value -> Value end. %%----------------------------------------------------------------------------- %% @doc Equivalent to nvs_set_binary(?ATOMVM_NVS_NS, Key, Value). %% @end %%----------------------------------------------------------------------------- -spec nvs_set_binary(Key::atom(), Value::binary()) -> ok. nvs_set_binary(Key, Value) when is_atom(Key) andalso is_binary(Value) -> esp:nvs_set_binary(?ATOMVM_NVS_NS, Key, Value). %%----------------------------------------------------------------------------- %% @param Namespace NVS namespace %% @param Key NVS key %% @param Value binary value %% @returns ok %% @doc Set an binary value associated with a key. If a value exists %% for the specified key, it is over-written. %% @end %%----------------------------------------------------------------------------- -spec nvs_set_binary(Namespace::atom(), Key::atom(), Value::binary()) -> ok. nvs_set_binary(Namespace, Key, Value) when is_atom(Namespace) andalso is_atom(Key) andalso is_binary(Value) -> throw(nif_error). %%----------------------------------------------------------------------------- %% @doc Equivalent to nvs_erase_key(?ATOMVM_NVS_NS, Key). %% @end %%----------------------------------------------------------------------------- -spec nvs_erase_key(Key::atom()) -> ok. nvs_erase_key(Key) when is_atom(Key) -> esp:nvs_erase_key(?ATOMVM_NVS_NS, Key). %%----------------------------------------------------------------------------- %% @param Namespace NVS namespace %% @param Key NVS key %% @returns ok %% @doc Erase the value associated with a key. If a value does not exist %% for the specified key, no action is performed. %% @end %%----------------------------------------------------------------------------- -spec nvs_erase_key(Namespace::atom(), Key::atom()) -> ok. nvs_erase_key(Namespace, Key) when is_atom(Namespace) andalso is_atom(Key) -> throw(nif_error). %%----------------------------------------------------------------------------- %% @doc Equivalent to nvs_erase_all(?ATOMVM_NVS_NS). %% @end %%----------------------------------------------------------------------------- -spec nvs_erase_all() -> ok. nvs_erase_all() -> esp:nvs_erase_all(?ATOMVM_NVS_NS). %%----------------------------------------------------------------------------- %% @param Namespace NVS namespace %% @returns ok %% @doc Erase all values in the specificed namespace. %% @end %%----------------------------------------------------------------------------- -spec nvs_erase_all(Namespace::atom()) -> ok. nvs_erase_all(Namespace) when is_atom(Namespace) -> throw(nif_error). %%----------------------------------------------------------------------------- %% @returns ok %% @doc Reformat the entire NVS partition. %% WARNING. This will result in deleting all NVS data and should %% be used with extreme caution! %% @end %%----------------------------------------------------------------------------- -spec nvs_reformat() -> ok. nvs_reformat() -> throw(nif_error).