From 9a920aeb885d15b26dcd6d6bc56caa35d6e3939e Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Sat, 31 Dec 2022 09:35:56 +0100 Subject: [PATCH 01/18] Added auto reconnect call to setup function. Removed wifi connection check functionality - which isn't work properly. --- firmware/firmware.ino | 3 +++ 1 file changed, 3 insertions(+) diff --git a/firmware/firmware.ino b/firmware/firmware.ino index e3dc09a..a42930e 100644 --- a/firmware/firmware.ino +++ b/firmware/firmware.ino @@ -252,6 +252,7 @@ float readSensors(uint8_t s) { void wifiConnectionCheck() { +/* if ((wifi_check_interval_counter + WIFI_CHECK_INTERVAL_MS) > millis()) { // if check interval is not exceeded abort check return; @@ -285,6 +286,7 @@ void wifiConnectionCheck() { //initWifiBasedSW(); } +*/ } //*************************************************************************// @@ -325,6 +327,7 @@ void wifiConnect() { } WiFi.begin(WIFI_SSID, WIFI_PASSWD); + WiFi.setAutoReconnect(true); debug("Connecting to WLAN"); -- 2.45.2 From a05af95d51f8034495762590f0c2c577da28ad09 Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Mon, 9 Jan 2023 12:01:32 +0100 Subject: [PATCH 02/18] Changed wdt timeout setting to wdt constant from header file. --- firmware/config.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/firmware/config.h b/firmware/config.h index 4c5ba71..1899885 100644 --- a/firmware/config.h +++ b/firmware/config.h @@ -12,7 +12,7 @@ #define EMERGENCY_SLEEP_S 172800 // Sleep for 2 days to recover #define RESET_ESP_TIME_INTERVAL_MS (60*60*12*1000) // reset every 12 hours #define WIND_SENSOR_MEAS_TIME_S 15 -#define WATCHDOG_TIMEOUT_MS 30000 +#define WATCHDOG_TIMEOUT_MS WDTO_8S // Look at Esp.h for further possible time declarations #define WIFI_CHECK_INTERVAL_MS 120000 #define INFLUXDB_TIMEOUT_MS 1000 -- 2.45.2 From 0f6934f4a1e255112fb46eb721f0c592f5f4c704 Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Mon, 9 Jan 2023 12:07:01 +0100 Subject: [PATCH 03/18] Improved wdt code --- firmware/firmware.ino | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/firmware/firmware.ino b/firmware/firmware.ino index a42930e..14d7dae 100644 --- a/firmware/firmware.ino +++ b/firmware/firmware.ino @@ -1,6 +1,7 @@ // Standard ESP8266 libs from project folder #include #include +#include #include // WiFiClient @@ -132,8 +133,11 @@ void setup() { #else // not in battery mode #ifdef ENABLE_WATCHDOG + wdt_disable(); + wdt_reset(); // Enable the internal watchdog - ESP.wdtEnable(WATCHDOG_TIMEOUT_MS); + wdt_enable(WATCHDOG_TIMEOUT_MS); + debug("Watchdog enabled"); #endif #endif } @@ -358,7 +362,7 @@ void criticalBatCheck() { void loop() { #ifdef ENABLE_WATCHDOG - ESP.wdtFeed(); + WDT_FEED(); #endif #ifdef BATTERY_POWERED -- 2.45.2 From 1f347582b0f3a19347c38d6e134d95eac41c3dc1 Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Tue, 10 Jan 2023 12:21:02 +0100 Subject: [PATCH 04/18] Improved wifi reconnect mechanism. More watchdog feed calls added. --- firmware/firmware.ino | 63 ++++++++++++++++++++++++++++++------------- 1 file changed, 44 insertions(+), 19 deletions(-) diff --git a/firmware/firmware.ino b/firmware/firmware.ino index 14d7dae..e412213 100644 --- a/firmware/firmware.ino +++ b/firmware/firmware.ino @@ -1,6 +1,8 @@ // Standard ESP8266 libs from project folder #include #include +#include + #include #include // WiFiClient @@ -78,6 +80,10 @@ void debug(String x) { void setup() { +#ifdef ENABLE_WATCHDOG + //wdt_disable(); +#endif + #if defined(DEBUG) || defined(SERIAL_FEATURE) Serial.begin(SERIAL_BAUD_RATE); #endif @@ -256,7 +262,6 @@ float readSensors(uint8_t s) { void wifiConnectionCheck() { -/* if ((wifi_check_interval_counter + WIFI_CHECK_INTERVAL_MS) > millis()) { // if check interval is not exceeded abort check return; @@ -269,29 +274,32 @@ void wifiConnectionCheck() { return; } - wifi_reconnect_cnt++; + // TODO Was muss hier getan werden? - debug("no wifi connection, try to reconnect " + String(wifi_reconnect_cnt)); +} - WiFi.disconnect(); - WiFi.mode(WIFI_OFF); - WiFi.mode(WIFI_STA); - -#ifdef WEBUPDATER_FEATURE - setWifiReconnectCnt(wifi_reconnect_cnt); -#endif +#ifdef DISABLE_WIFIMANAGER +void wifi_disconnected(WiFiEvent_t event) { if (wifi_reconnect_cnt >= 5) { - debug("\nReboot"); + + debug("\nReboot, to much reconnects to wifi done before"); ESP.restart(); + } else { + debug("no wifi connection, try to reconnect " + String(wifi_reconnect_cnt)); + + wifi_reconnect_cnt++; wifiConnect(); - //initWifiBasedSW(); +#ifdef WEBUPDATER_FEATURE + setWifiReconnectCnt(wifi_reconnect_cnt); +#endif } -*/ + } +#endif //*************************************************************************// @@ -322,7 +330,7 @@ void wifiConnect() { #endif } -#else // DISABLE_WIFIMANAGER +#else // DISABLE_WIFIMANAGER is defined if (!WiFi.config(local_IP, gateway, subnet)) { debug("Failed to set IP configuration"); @@ -330,6 +338,9 @@ void wifiConnect() { debug("Successful set IP configuration"); } + // bind the check function to the disconnected wifi event + WiFi.onEvent(wifi_disconnected, WIFI_EVENT_STAMODE_DISCONNECTED); + WiFi.begin(WIFI_SSID, WIFI_PASSWD); WiFi.setAutoReconnect(true); @@ -361,15 +372,15 @@ void criticalBatCheck() { void loop() { -#ifdef ENABLE_WATCHDOG - WDT_FEED(); -#endif - #ifdef BATTERY_POWERED delay(50); return; -#else +#else // not in BATTERY_POWERED mode + +#ifdef ENABLE_WATCHDOG + WDT_FEED(); +#endif // call fsm loop function _fsm_loop(); @@ -393,6 +404,9 @@ void _fsm_loop() update_webserver_cnt = millis(); doWebUpdater(); } +#ifdef ENABLE_WATCHDOG + WDT_FEED(); +#endif #endif #ifdef HTTP_CALL_SEND_JSON_DATA @@ -405,6 +419,9 @@ void _fsm_loop() http_call_send_json_data_cnt = millis(); http_call_send_json_data(); } +#ifdef ENABLE_WATCHDOG + WDT_FEED(); +#endif #endif switch (fsm_state) @@ -608,6 +625,10 @@ void _fsm_loop() // Send HTTP GET request int httpResponseCode = http.GET(); +#ifdef ENABLE_WATCHDOG + WDT_FEED(); +#endif + if (httpResponseCode > 0) { String response = http.getString(); debug("http response code: " + String(httpResponseCode) + " = " + response); @@ -747,6 +768,10 @@ void http_call_send_json_data() // Send HTTP GET request int httpResponseCode = http.GET(); +#ifdef ENABLE_WATCHDOG + WDT_FEED(); +#endif + if (httpResponseCode > 0) { String response = http.getString(); debug("http response code: " + String(httpResponseCode) + " = " + response); -- 2.45.2 From 76d8416a41e16ad8cf577c7d6744d08cc83cd679 Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Thu, 12 Jan 2023 20:21:34 +0100 Subject: [PATCH 05/18] Added eeprom emulation to store reset info --- firmware/config.h | 2 +- firmware/datastore.ino | 20 ++++++++++++++++++++ firmware/firmware.ino | 25 +++++++++++++++++++++++-- 3 files changed, 44 insertions(+), 3 deletions(-) create mode 100644 firmware/datastore.ino diff --git a/firmware/config.h b/firmware/config.h index 1899885..f02b78e 100644 --- a/firmware/config.h +++ b/firmware/config.h @@ -46,6 +46,6 @@ #define SERIAL_BAUD_RATE 115200 -#define WEB_UPDATER_HTTP_PORT 8080 +#define WEB_UPDATER_HTTP_PORT 8080 #endif diff --git a/firmware/datastore.ino b/firmware/datastore.ino new file mode 100644 index 0000000..f6e9320 --- /dev/null +++ b/firmware/datastore.ino @@ -0,0 +1,20 @@ + +#include + +#define EEPROM_SIZE 512 + +int eeprom_read(int addr) { + int ret = -255; + EEPROM.begin(EEPROM_SIZE); + EEPROM.get(addr, ret); + EEPROM.commit(); + EEPROM.end(); + return ret; +} + +void eeprom_write(int addr, int data) { + EEPROM.begin(EEPROM_SIZE); + EEPROM.put(addr, data); + EEPROM.commit(); + EEPROM.end(); +} diff --git a/firmware/firmware.ino b/firmware/firmware.ino index e412213..d99ac1d 100644 --- a/firmware/firmware.ino +++ b/firmware/firmware.ino @@ -4,7 +4,7 @@ #include #include - +#include #include // WiFiClient // Project includes @@ -84,10 +84,14 @@ void setup() { //wdt_disable(); #endif -#if defined(DEBUG) || defined(SERIAL_FEATURE) +#if defined(DEBUG) || defined(SERIAL_FEATURE) || defined(DEBUG_RESET_REASON) Serial.begin(SERIAL_BAUD_RATE); #endif +#ifdef DEBUG_RESET_REASON + debugResetReason(); +#endif + // Pin settings pinMode(BAT_CHARGED_PIN, INPUT); pinMode(BAT_CHARGING_PIN, INPUT); @@ -783,3 +787,20 @@ void http_call_send_json_data() } #endif + +#ifdef DEBUG_RESET_REASON +void debugResetReason() { + + rst_info *resetInfo; + + // 1. read eeprom reset reason + //int eep_reset_reason = eeprom_read(0); + //debug("EEPROM reset reason " + String(eep_reset_reason)); + + // 2. read real reset reason + int reset_reason = resetInfo->reason; + + debug("New reset reason " + String(reset_reason)); + //eeprom_write(0, reset_reason); +} +#endif -- 2.45.2 From 03849a609b5621acb6a2c9ec8c7e04d28b8715a7 Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Thu, 9 Feb 2023 16:24:55 +0100 Subject: [PATCH 06/18] Added web reset functionality --- firmware/firmware.ino | 8 ++++---- firmware/webUpdater.ino | 27 +++++++++++++++++++++++++++ 2 files changed, 31 insertions(+), 4 deletions(-) diff --git a/firmware/firmware.ino b/firmware/firmware.ino index d99ac1d..49d08f2 100644 --- a/firmware/firmware.ino +++ b/firmware/firmware.ino @@ -88,10 +88,6 @@ void setup() { Serial.begin(SERIAL_BAUD_RATE); #endif -#ifdef DEBUG_RESET_REASON - debugResetReason(); -#endif - // Pin settings pinMode(BAT_CHARGED_PIN, INPUT); pinMode(BAT_CHARGING_PIN, INPUT); @@ -121,6 +117,10 @@ void setup() { //It's magic! leave in delay(100); +#ifdef DEBUG_RESET_REASON + debugResetReason(); +#endif + #ifdef BATTERY_POWERED debug("battery powered"); diff --git a/firmware/webUpdater.ino b/firmware/webUpdater.ino index 40d4d84..36cd83b 100644 --- a/firmware/webUpdater.ino +++ b/firmware/webUpdater.ino @@ -54,6 +54,9 @@ void setupWebUpdater(String device, String ip) #ifdef DEBUG_WINDSPEED_MEASUREMENT httpServer.on("/measWind", measureWindspeed); #endif +#ifdef WEB_RESET + httpServer.on("/resetESP", resetESP); +#endif #ifdef USE_LOGGER httpServer.on("/showlog", showLog); #endif @@ -125,6 +128,9 @@ void showHTMLMain(void) #ifdef HOMEBRIDGE_WEBSTAT "
homebridge websatt
" #endif +#ifdef WEB_RESET + "
reset ESP
" +#endif #ifdef SHOW_SENSOR_DATA_ON_WEBUPDATER_MAIN_PAGE "

" TR_TD_START_STR + "temperature" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_TEMPERATURE]) + TR_TD_END_STR @@ -182,6 +188,27 @@ void hb_webstat_send(void) //*************************************************************************// +#ifdef WEB_RESET + +void resetESP() +{ + + String message = "OKO Weatherstation - " + String(_webUpdater_dev) + " - reset WiFi manager" + "" + "" + "Rebooting...
" + ""; + + httpServer.send(200, "text/html", message); + + delay(5000); + + // manual reset after restart is required + ESP.restart(); +} + +#endif + #ifndef DISABLE_WIFIMANAGER void resetWifiManager() -- 2.45.2 From e1cdde0fc9f8d696816119dbfe97c76b62ca19aa Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Thu, 9 Feb 2023 16:26:32 +0100 Subject: [PATCH 07/18] Updated user config example --- firmware/config_user.h.example | 2 ++ 1 file changed, 2 insertions(+) diff --git a/firmware/config_user.h.example b/firmware/config_user.h.example index 9375af4..c209cd5 100755 --- a/firmware/config_user.h.example +++ b/firmware/config_user.h.example @@ -52,6 +52,8 @@ String DEVICE_NAME = "weatherstation"; //#define HTTP_CALL_ON_WINDSPEED_EXCEED //#define HTTP_CALL_SEND_JSON_DATA //#define SHOW_SENSOR_DATA_ON_WEBUPDATER_MAIN_PAGE +//#define DEBUG_RESET_REASON +#define WEB_RESET /********************************************************************************/ -- 2.45.2 From af2189a78a38573644a0ed19a2df0ce934a1b7a8 Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Thu, 9 Feb 2023 16:36:51 +0100 Subject: [PATCH 08/18] Added web based reset feature --- firmware/webUpdater.ino | 172 ++++++++++++++++------------------------ 1 file changed, 69 insertions(+), 103 deletions(-) diff --git a/firmware/webUpdater.ino b/firmware/webUpdater.ino index 36cd83b..f3b5b08 100644 --- a/firmware/webUpdater.ino +++ b/firmware/webUpdater.ino @@ -11,7 +11,7 @@ #include #include -#include // WiFiManager from bib manager by tzapu +#include // WiFiManager from bib manager by tzapu #include "config.h" #include "config_user.h" @@ -27,8 +27,8 @@ String _webUpdater_dev = "unknown"; float _webUpdater_sensValues[VALUES]; #define TR_TD_START_STR "" -#define TD_TD_MID_STR "" +#define TD_TD_MID_STR "
" -#define TR_TD_END_STR "
" +#define TR_TD_END_STR "
" boolean wuValidData = false; @@ -36,8 +36,7 @@ uint32_t _wifi_reconnect_cnt = 0; //*************************************************************************// -void setupWebUpdater(String device, String ip) -{ +void setupWebUpdater(String device, String ip) { debug("Starting WebUpdater... " + ip); _webUpdater_ip = ip; _webUpdater_dev = device; @@ -67,41 +66,33 @@ void setupWebUpdater(String device, String ip) //*************************************************************************// -void doWebUpdater(void) -{ +void doWebUpdater(void) { digitalWrite(D0, HIGH); httpServer.handleClient(); } //*************************************************************************// #ifdef SHOW_SENSOR_DATA_ON_WEBUPDATER_MAIN_PAGE -void sentWindspeed(float ws) -{ +void sentWindspeed(float ws) { _webUpdater_sensValues[SENSOR_WINDSPEED] = ws; } #endif -void setWifiReconnectCnt(uint32_t wrc) -{ +void setWifiReconnectCnt(uint32_t wrc) { _wifi_reconnect_cnt = wrc; } #ifdef SHOW_SENSOR_DATA_ON_WEBUPDATER_MAIN_PAGE -void setSensorData(float sensorValues[]) -{ +void setSensorData(float sensorValues[]) { - for (uint8_t i = 0; i < 5 and wuValidData == false; i++) - { - if (sensorValues[i] != 0 and sensorValues[i] != nanf("no value") and (not isnan(sensorValues[i]))) - { - wuValidData = true; // at least one value is not zero, the data + for (uint8_t i = 0; i < 5 and wuValidData == false; i++) { + if (sensorValues[i] != 0 and sensorValues[i] != nanf("no value") and (not isnan(sensorValues[i]))) { + wuValidData = true; // at least one value is not zero, the data } } - for (uint8_t i = 0; i < VALUES; i++) - { - if (sensorValues[i] != nanf("no value") and (not isnan(sensorValues[i]))) - { + for (uint8_t i = 0; i < VALUES; i++) { + if (sensorValues[i] != nanf("no value") and (not isnan(sensorValues[i]))) { // only copy real float values //debug(String(i) + "=" + String(sensorValues[i])); _webUpdater_sensValues[i] = sensorValues[i]; @@ -112,43 +103,38 @@ void setSensorData(float sensorValues[]) //*************************************************************************// -void showHTMLMain(void) -{ +void showHTMLMain(void) { String message = "OKO Weatherstation - " + String(_webUpdater_dev) + "" - "" - "" - "
firmware update

" + "" + "" + "
firmware update

" #ifdef USE_LOGGER - "
logfile
" + "
logfile
" #endif #ifdef DEBUG_WINDSPEED_MEASUREMENT - "
manual wind measurement
" + "
manual wind measurement
" #endif #ifdef HOMEBRIDGE_WEBSTAT - "
homebridge websatt
" + "
homebridge websatt
" #endif #ifdef WEB_RESET - "
reset ESP
" + "
reset ESP
" #endif #ifdef SHOW_SENSOR_DATA_ON_WEBUPDATER_MAIN_PAGE - "

" - TR_TD_START_STR + "temperature" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_TEMPERATURE]) + TR_TD_END_STR - TR_TD_START_STR + "humidity" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_HUMIDITY]) + TR_TD_END_STR - TR_TD_START_STR + "light" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_LIGHT]) + TR_TD_END_STR - TR_TD_START_STR + "windspeed" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_WINDSPEED]) + TR_TD_END_STR - TR_TD_START_STR + "pressure" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_PRESSURE]) + TR_TD_END_STR - TR_TD_START_STR + "batvoltage" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_BAT_VOLTAGE]) + TR_TD_END_STR - TR_TD_START_STR + "millis" + TD_TD_MID_STR + String(millis()) + TR_TD_END_STR - TR_TD_START_STR + "valid" + TD_TD_MID_STR + String(wuValidData) + TR_TD_END_STR - TR_TD_START_STR + "wifi rssi" + TD_TD_MID_STR + WiFi.RSSI() + TR_TD_END_STR - TR_TD_START_STR + "wifi rec cnt" + TD_TD_MID_STR + String(_wifi_reconnect_cnt) + TR_TD_END_STR - "
" + "

" TR_TD_START_STR + + "temperature" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_TEMPERATURE]) + TR_TD_END_STR TR_TD_START_STR + "humidity" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_HUMIDITY]) + TR_TD_END_STR TR_TD_START_STR + "light" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_LIGHT]) + TR_TD_END_STR TR_TD_START_STR + "windspeed" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_WINDSPEED]) + TR_TD_END_STR TR_TD_START_STR + "pressure" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_PRESSURE]) + TR_TD_END_STR TR_TD_START_STR + "batvoltage" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_BAT_VOLTAGE]) + TR_TD_END_STR TR_TD_START_STR + "millis" + TD_TD_MID_STR + String(millis()) + TR_TD_END_STR TR_TD_START_STR + "valid" + TD_TD_MID_STR + String(wuValidData) + TR_TD_END_STR TR_TD_START_STR + "wifi rssi" + TD_TD_MID_STR + WiFi.RSSI() + TR_TD_END_STR TR_TD_START_STR + "wifi rec cnt" + TD_TD_MID_STR + String(_wifi_reconnect_cnt) + TR_TD_END_STR "
" #endif #ifndef DISABLE_WIFIMANAGER - "




reset WiFi Manager
" + "




reset WiFi Manager
" #endif - ""; + ""; httpServer.send(200, "text/html", message); } @@ -156,31 +142,10 @@ void showHTMLMain(void) //*************************************************************************// #ifdef HOMEBRIDGE_WEBSTAT -void hb_webstat_send(void) -{ +void hb_webstat_send(void) { - String msg = hb_ws_msg_start + - hb_ws_msg_temp + - String(_webUpdater_sensValues[SENSOR_TEMPERATURE], 2) + - ", " + - hb_ws_msg_humi + - String(_webUpdater_sensValues[SENSOR_HUMIDITY], 2) + - ", " + - hb_ws_msg_light + - String(_webUpdater_sensValues[SENSOR_LIGHT], 0) + // The light level for the homebridge-http-lux2 plugin is only able to parse integer values - ", " + - hb_ws_msg_windspeed + - String(_webUpdater_sensValues[SENSOR_WINDSPEED], 2) + - ", " + - hb_ws_msg_pressure + - String(_webUpdater_sensValues[SENSOR_PRESSURE], 2) + - ", " + - hb_ws_msg_timestamp + - String(millis()) + - ", " + - hb_ws_msg_valid + - String(wuValidData) + - hb_ws_msg_end; + String msg = hb_ws_msg_start + hb_ws_msg_temp + String(_webUpdater_sensValues[SENSOR_TEMPERATURE], 2) + ", " + hb_ws_msg_humi + String(_webUpdater_sensValues[SENSOR_HUMIDITY], 2) + ", " + hb_ws_msg_light + String(_webUpdater_sensValues[SENSOR_LIGHT], 0) + // The light level for the homebridge-http-lux2 plugin is only able to parse integer values + ", " + hb_ws_msg_windspeed + String(_webUpdater_sensValues[SENSOR_WINDSPEED], 2) + ", " + hb_ws_msg_pressure + String(_webUpdater_sensValues[SENSOR_PRESSURE], 2) + ", " + hb_ws_msg_timestamp + String(millis()) + ", " + hb_ws_msg_valid + String(wuValidData) + hb_ws_msg_end; httpServer.send(200, "text/html", msg); } @@ -190,19 +155,23 @@ void hb_webstat_send(void) #ifdef WEB_RESET -void resetESP() -{ +void resetESP() { String message = "OKO Weatherstation - " + String(_webUpdater_dev) + " - reset WiFi manager" - "" - "" - "Rebooting...
" - ""; + "" + "" + "Rebooting...
" + ""; httpServer.send(200, "text/html", message); delay(5000); +#ifdef ENABLE_WATCHDOG + // loop endless, watchdog will reset the device + while (1 == 1) {} +#endif + // manual reset after restart is required ESP.restart(); } @@ -211,15 +180,14 @@ void resetESP() #ifndef DISABLE_WIFIMANAGER -void resetWifiManager() -{ +void resetWifiManager() { String message = "OKO Weatherstation - " + String(_webUpdater_dev) + " - reset WiFi manager" - "" - "" - "Reset WifiManager config.
" - "Rebooting...
" - ""; + "" + "" + "Reset WifiManager config.
" + "Rebooting...
" + ""; httpServer.send(200, "text/html", message); @@ -229,6 +197,10 @@ void resetWifiManager() delay(5000); +#ifdef ENABLE_WATCHDOG + // loop endless, watchdog will reset the device + while (1 == 1) {} +#endif // manual reset after restart is required ESP.restart(); } @@ -239,8 +211,7 @@ void resetWifiManager() #ifdef DEBUG_WINDSPEED_MEASUREMENT #ifdef SENSOR_WIND -void measureWindspeed() -{ +void measureWindspeed() { // read from windspeed sensorSTATUS_LED_PIN digitalWrite(STATUS_LED_PIN, HIGH); @@ -249,12 +220,12 @@ void measureWindspeed() digitalWrite(STATUS_LED_PIN, LOW); String message = "OKO Weatherstation - " + String(_webUpdater_dev) + " - manual wind measurement" - "" - "Windsensor measurement result: " + String(tmp_windspeed) + "
" - ""; + "" + "Windsensor measurement result: " + + String(tmp_windspeed) + "
" + ""; httpServer.send(200, "text/html", message); - } #endif #endif @@ -269,30 +240,25 @@ String logfile[LOGFILE_SIZE]; uint16_t logger_pos = 0; -void logdata(String s) -{ +void logdata(String s) { logfile[logger_pos] = s; logger_pos++; - if (logger_pos > LOGFILE_SIZE -1) - { - for (uint16_t i = 1; i < LOGFILE_SIZE; i++) - { - logfile[i-1] = logfile[i]; // overwrite previous element with current element + if (logger_pos > LOGFILE_SIZE - 1) { + for (uint16_t i = 1; i < LOGFILE_SIZE; i++) { + logfile[i - 1] = logfile[i]; // overwrite previous element with current element } - logger_pos--; // reduce the position in the log + logger_pos--; // reduce the position in the log } } -void showLog() -{ +void showLog() { String message = "OKO Weatherstation - " + String(_webUpdater_dev) + " - logfile" - "" - "" - "Logfile data:
"; + "" + "" + "Logfile data:
"; - for (uint16_t lp = 0; lp < logger_pos; lp++) - { + for (uint16_t lp = 0; lp < logger_pos; lp++) { message = message + logfile[lp] + "
"; } -- 2.45.2 From 44c2ef41446775bca69dfb7c801b155e40ccb3fa Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Thu, 9 Feb 2023 16:57:37 +0100 Subject: [PATCH 09/18] Reset the ESP in case that there is no Wifi connection. --- firmware/firmware.ino | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/firmware/firmware.ino b/firmware/firmware.ino index 49d08f2..f73d166 100644 --- a/firmware/firmware.ino +++ b/firmware/firmware.ino @@ -278,7 +278,11 @@ void wifiConnectionCheck() { return; } - // TODO Was muss hier getan werden? +#ifdef ENABLE_WATCHDOG + // loop endless, watchdog will reset the device + while (1 == 1) {} +#endif + ESP.reset(); } -- 2.45.2 From 36b0c72f9b9a34b4c7b6c5dcac13ade3c9e8d5d7 Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Thu, 9 Feb 2023 17:24:05 +0100 Subject: [PATCH 10/18] ESP8266 pin feature added --- firmware/firmware.ino | 22 ++++++++++++++++++++-- firmware/libraries/ESP8266Ping | 1 + 2 files changed, 21 insertions(+), 2 deletions(-) create mode 160000 firmware/libraries/ESP8266Ping diff --git a/firmware/firmware.ino b/firmware/firmware.ino index f73d166..e5d39b1 100644 --- a/firmware/firmware.ino +++ b/firmware/firmware.ino @@ -12,6 +12,10 @@ #include "config.h" #include "config_user.h" +#ifdef ENABLE_PING_HOST_TEST +#include +#endif + #ifndef DISABLE_WIFIMANAGER #include // WiFiManager from bib manager #endif @@ -266,6 +270,8 @@ float readSensors(uint8_t s) { void wifiConnectionCheck() { + bool success = false; + if ((wifi_check_interval_counter + WIFI_CHECK_INTERVAL_MS) > millis()) { // if check interval is not exceeded abort check return; @@ -273,11 +279,23 @@ void wifiConnectionCheck() { wifi_check_interval_counter = millis(); - if (WiFi.status() == WL_CONNECTED) { + /*if (WiFi.status() == WL_CONNECTED) { // if we are connected return; - } + }*/ +#ifdef ENABLE_PING_HOST_TEST + debug("Ping 192.168.0.85"); + success = Ping.ping(PING_HOST_IP, 3); + + if (success) + { + debug("Ping success"); + return; + } +#endif // ENABLE_PING_HOST_TEST + + debug("Connection problem, resetting ESP"); #ifdef ENABLE_WATCHDOG // loop endless, watchdog will reset the device while (1 == 1) {} diff --git a/firmware/libraries/ESP8266Ping b/firmware/libraries/ESP8266Ping new file mode 160000 index 0000000..934e701 --- /dev/null +++ b/firmware/libraries/ESP8266Ping @@ -0,0 +1 @@ +Subproject commit 934e701dcee743fe1ec564d0c2d64bd99e8d7bf3 -- 2.45.2 From f740973b01ac08d18db78fe6d6076a4b6c73d3a2 Mon Sep 17 00:00:00 2001 From: Kai Lauterbach Date: Sat, 18 Feb 2023 16:58:03 +0100 Subject: [PATCH 11/18] Added USB voltage read sensor --- firmware/config_user.h.example | 1 + firmware/constants.h | 3 ++- firmware/firmware.ino | 13 +++++++++++-- firmware/influxdb.ino | 4 ++-- firmware/sensor_battery.ino | 14 ++++++++++++++ firmware/webUpdater.ino | 14 +++++++++++--- 6 files changed, 41 insertions(+), 8 deletions(-) diff --git a/firmware/config_user.h.example b/firmware/config_user.h.example index c209cd5..d39911a 100755 --- a/firmware/config_user.h.example +++ b/firmware/config_user.h.example @@ -31,6 +31,7 @@ String DEVICE_NAME = "weatherstation"; #define SENSOR_BME280 //#define SENSOR_BMP280 #define SENSOR_BATTERY +//#define SENSOR_USB_VOLTAGE //#define BAT_PINS_D34 diff --git a/firmware/constants.h b/firmware/constants.h index cab8a7d..aea0fe1 100644 --- a/firmware/constants.h +++ b/firmware/constants.h @@ -7,7 +7,7 @@ #define SENSOR_LIGHT 2 #define SENSOR_WINDSPEED 3 #define SENSOR_PRESSURE 4 -#define SENSOR_BAT_VOLTAGE 5 +#define SENSOR_VOLTAGE 5 #define SENSOR_ESAVEMODE 6 #define SENSOR_BATCHARGESTATE 7 @@ -37,6 +37,7 @@ const String hb_ws_msg_humi = "\"humidity\": "; const String hb_ws_msg_light = "\"lightlevel\": "; const String hb_ws_msg_windspeed = "\"windspeed\": "; const String hb_ws_msg_pressure = "\"pressure\": "; +const String hb_ws_msg_voltage = "\"voltage\": "; const String hb_ws_msg_timestamp = "\"timestamp\": "; const String hb_ws_msg_valid = "\"valid\": "; const String hb_ws_msg_end = "}"; diff --git a/firmware/firmware.ino b/firmware/firmware.ino index e5d39b1..768c5b4 100644 --- a/firmware/firmware.ino +++ b/firmware/firmware.ino @@ -241,9 +241,12 @@ float readSensors(uint8_t s) { #endif break; - case SENSOR_BAT_VOLTAGE: + case SENSOR_VOLTAGE: #ifdef SENSOR_BATTERY ret = battery_voltage(); +#endif +#ifdef SENSOR_USB_VOLTAGE + ret = usb_voltage(); #endif break; @@ -694,8 +697,10 @@ void _fsm_loop() //*************************************************************************// + void _battery_mode_main() { +#ifdef SENSOR_BATTERY if (energySavingMode() == 1) { // Disable expensive tasks //debug("read of wind sensor because of low battery disabled"); @@ -705,6 +710,7 @@ void _battery_mode_main() { //debug("read of wind sensor because of high battery enabled"); do_not_read_windsensor = false; } +#endif for (uint8_t i = 0; i < VALUES; i++) { currentSensorData[i] = readSensors(i); @@ -736,7 +742,7 @@ void logToSerial(float sensorValues[]) { Serial.println("Light: " + String(sensorValues[SENSOR_LIGHT]) + " Lux"); Serial.println("Windspeed: " + String(sensorValues[SENSOR_WINDSPEED]) + " km/h"); Serial.println("Pressure: " + String(sensorValues[SENSOR_PRESSURE]) + " hPa"); - Serial.println("Bat Voltage: " + String(sensorValues[SENSOR_BAT_VOLTAGE]) + " V"); + Serial.println("Bat Voltage: " + String(sensorValues[SENSOR_VOLTAGE]) + " V"); Serial.println("Bat charge state: " + String(sensorValues[SENSOR_BATCHARGESTATE])); Serial.println("Energy saving: " + String(sensorValues[SENSOR_ESAVEMODE])); } @@ -765,6 +771,9 @@ String getJsonData() hb_ws_msg_pressure + String(currentSensorData[SENSOR_PRESSURE], 2) + ", " + + hb_ws_msg_voltage + + String(currentSensorData[SENSOR_VOLTAGE], 2) + + ", " + hb_ws_msg_timestamp + String(millis()) + ", " + diff --git a/firmware/influxdb.ino b/firmware/influxdb.ino index a3d2174..fd4ab62 100644 --- a/firmware/influxdb.ino +++ b/firmware/influxdb.ino @@ -150,10 +150,10 @@ void pushToInfluxDB(String device, float sensorValues[]) { sensor.addField("pressure", sensorValues[SENSOR_PRESSURE]); _writePoint(); } - if (!(isnan(sensorValues[SENSOR_BAT_VOLTAGE]))) + if (!(isnan(sensorValues[SENSOR_VOLTAGE]))) { sensor.clearFields(); - sensor.addField("batvoltage", sensorValues[SENSOR_BAT_VOLTAGE]); + sensor.addField("batvoltage", sensorValues[SENSOR_VOLTAGE]); _writePoint(); } if (!(isnan(sensorValues[SENSOR_ESAVEMODE]))) diff --git a/firmware/sensor_battery.ino b/firmware/sensor_battery.ino index a2e7745..dfff287 100644 --- a/firmware/sensor_battery.ino +++ b/firmware/sensor_battery.ino @@ -2,6 +2,7 @@ float _sensor_battery_saveMode = ENERGY_SAVE_MODE_DISABLED; uint16_t energySavingIterations = 0; // Copied from https://arduinodiy.wordpress.com/2016/12/25/monitoring-lipo-battery-voltage-with-wemos-d1-minibattery-shield-and-thingspeak/ +#ifdef SENSOR_BATTERY float battery_voltage() { // ESP8266 ADC pin input voltage range ist 0V .. 1V // The Wemos D1 mini does already contain a voltage divider circuit: A0(Wemos PCB) -- [220kOhm] -- ADC (ESP8266)-- [100kOhm] -- GND @@ -49,3 +50,16 @@ int energySavingMode() { float isEnergySavingMode() { return _sensor_battery_saveMode; } +#endif + +#ifdef SENSOR_USB_VOLTAGE +float usb_voltage() { + // ESP8266 ADC pin input voltage range ist 0V .. 1V + // The Wemos D1 mini does already contain a voltage divider circuit: A0(Wemos PCB) -- [220kOhm] -- ADC (ESP8266)-- [100kOhm] -- GND + // The (+) pole of the battery is connected to the A0 pin of the Wemos board through a additional 300kOhm resistance. + // The USB voltage of 5V max is measured as 1.0V on ESP8266 ADC pin. + uint16_t raw = analogRead(A0); + float volt = raw / 1023.0; + return volt * 6.2; +} +#endif diff --git a/firmware/webUpdater.ino b/firmware/webUpdater.ino index f3b5b08..1fe5748 100644 --- a/firmware/webUpdater.ino +++ b/firmware/webUpdater.ino @@ -128,7 +128,7 @@ void showHTMLMain(void) { #endif #ifdef SHOW_SENSOR_DATA_ON_WEBUPDATER_MAIN_PAGE "

" TR_TD_START_STR - + "temperature" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_TEMPERATURE]) + TR_TD_END_STR TR_TD_START_STR + "humidity" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_HUMIDITY]) + TR_TD_END_STR TR_TD_START_STR + "light" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_LIGHT]) + TR_TD_END_STR TR_TD_START_STR + "windspeed" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_WINDSPEED]) + TR_TD_END_STR TR_TD_START_STR + "pressure" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_PRESSURE]) + TR_TD_END_STR TR_TD_START_STR + "batvoltage" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_BAT_VOLTAGE]) + TR_TD_END_STR TR_TD_START_STR + "millis" + TD_TD_MID_STR + String(millis()) + TR_TD_END_STR TR_TD_START_STR + "valid" + TD_TD_MID_STR + String(wuValidData) + TR_TD_END_STR TR_TD_START_STR + "wifi rssi" + TD_TD_MID_STR + WiFi.RSSI() + TR_TD_END_STR TR_TD_START_STR + "wifi rec cnt" + TD_TD_MID_STR + String(_wifi_reconnect_cnt) + TR_TD_END_STR "
" + + "temperature" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_TEMPERATURE]) + TR_TD_END_STR TR_TD_START_STR + "humidity" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_HUMIDITY]) + TR_TD_END_STR TR_TD_START_STR + "light" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_LIGHT]) + TR_TD_END_STR TR_TD_START_STR + "windspeed" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_WINDSPEED]) + TR_TD_END_STR TR_TD_START_STR + "pressure" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_PRESSURE]) + TR_TD_END_STR TR_TD_START_STR + "batvoltage" + TD_TD_MID_STR + String(_webUpdater_sensValues[SENSOR_VOLTAGE]) + TR_TD_END_STR TR_TD_START_STR + "millis" + TD_TD_MID_STR + String(millis()) + TR_TD_END_STR TR_TD_START_STR + "valid" + TD_TD_MID_STR + String(wuValidData) + TR_TD_END_STR TR_TD_START_STR + "wifi rssi" + TD_TD_MID_STR + WiFi.RSSI() + TR_TD_END_STR TR_TD_START_STR + "wifi rec cnt" + TD_TD_MID_STR + String(_wifi_reconnect_cnt) + TR_TD_END_STR "
" #endif #ifndef DISABLE_WIFIMANAGER "




Date: Tue, 28 Feb 2023 15:22:10 +0100 Subject: [PATCH 12/18] Removed all library files because the compilation works using the arduino library manager. --- .../libraries/APDS9930-master/.gitattributes | 22 - firmware/libraries/APDS9930-master/.gitignore | 192 - firmware/libraries/APDS9930-master/LICENSE | 22 - firmware/libraries/APDS9930-master/README.md | 92 - .../AmbientLightInterrupt.ino | 180 - .../AmbientLightLED/AmbientLightLED.ino | 113 - .../AmbientLightSensor/AmbientLightSensor.ino | 120 - .../AmbientLightToneAC/AmbientLightToneAC.ino | 108 - .../ProximityInterrupt/ProximityInterrupt.ino | 157 - .../examples/ProximityLED/ProximityLED.ino | 131 - .../ProximitySensor/ProximitySensor.ino | 113 - .../libraries/APDS9930-master/keywords.txt | 0 .../APDS9930-master/library.properties | 9 - .../APDS9930-master/src/APDS9930.cpp | 1147 - .../libraries/APDS9930-master/src/APDS9930.h | 231 - .../Adafruit_APDS9960.cpp | 726 - .../Adafruit_APDS9960.h | 531 - .../Adafruit_APDS9960_Library/README.md | 18 - .../assets/board.jpg | Bin 291777 -> 0 bytes .../code-of-conduct.md | 127 - .../examples/color_sensor/color_sensor.ino | 59 - .../gesture_sensor/gesture_sensor.ino | 47 - .../proximity_sensor/proximity_sensor.ino | 56 - .../library.properties | 9 - .../Adafruit_APDS9960_Library/license.txt | 26 - .../Adafruit_BME280.cpp | 560 - .../Adafruit_BME280_Library/Adafruit_BME280.h | 339 - .../libraries/Adafruit_BME280_Library/LICENSE | 27 - .../Adafruit_BME280_Library/README.md | 31 - .../Adafruit_BME280_Library/assets/board.jpg | Bin 441377 -> 0 bytes .../advancedsettings/advancedsettings.ino | 159 - .../examples/bme280test/bme280test.ino | 89 - .../library.properties | 9 - .../Adafruit_BMP280.cpp | 493 - .../Adafruit_BMP280_Library/Adafruit_BMP280.h | 267 - .../Adafruit_BMP280_Library/README.md | 47 - .../Adafruit_BMP280_Library/assets/board.jpg | Bin 464067 -> 0 bytes .../examples/bmp280_forced/bmp280_forced.ino | 72 - .../bmp280_sensortest/bmp280_sensortest.ino | 71 - .../examples/bmp280test/bmp280test.ino | 72 - .../Adafruit_BMP280_Library/keywords.txt | 57 - .../library.properties | 10 - .../Adafruit_BusIO_Register.cpp | 365 - .../Adafruit_BusIO/Adafruit_BusIO_Register.h | 105 - .../Adafruit_BusIO/Adafruit_I2CDevice.cpp | 313 - .../Adafruit_BusIO/Adafruit_I2CDevice.h | 36 - .../Adafruit_BusIO/Adafruit_I2CRegister.h | 10 - .../Adafruit_BusIO/Adafruit_SPIDevice.cpp | 508 - .../Adafruit_BusIO/Adafruit_SPIDevice.h | 138 - .../libraries/Adafruit_BusIO/CMakeLists.txt | 11 - firmware/libraries/Adafruit_BusIO/LICENSE | 21 - firmware/libraries/Adafruit_BusIO/README.md | 8 - .../libraries/Adafruit_BusIO/component.mk | 1 - .../i2c_address_detect/i2c_address_detect.ino | 21 - .../examples/i2c_readwrite/i2c_readwrite.ino | 41 - .../examples/i2c_registers/i2c_registers.ino | 38 - .../i2corspi_register/i2corspi_register.ino | 38 - .../examples/spi_modetest/spi_modetest.ino | 29 - .../examples/spi_readwrite/spi_readwrite.ino | 39 - .../spi_register_bits/spi_register_bits.ino | 192 - .../examples/spi_registers/spi_registers.ino | 34 - .../Adafruit_BusIO/library.properties | 9 - .../Adafruit_Sensor.cpp | 81 - .../Adafruit_Unified_Sensor/Adafruit_Sensor.h | 190 - .../Adafruit_Unified_Sensor/LICENSE.txt | 202 - .../Adafruit_Unified_Sensor/README.md | 229 - .../examples/sensortest/sensortest.ino | 153 - .../library.properties | 11 - .../ESP8266Influxdb/ESP8266Influxdb 2.cpp | 176 - .../ESP8266Influxdb/ESP8266Influxdb 2.h | 72 - .../ESP8266Influxdb/ESP8266Influxdb.cpp | 176 - .../ESP8266Influxdb/ESP8266Influxdb.h | 72 - .../libraries/ESP8266Influxdb/README 2.md | 1 - firmware/libraries/ESP8266Influxdb/README.md | 1 - .../influxdb_write/influxdb_write.ino | 63 - .../libraries/ESP8266Influxdb/keywords 2.txt | 24 - .../libraries/ESP8266Influxdb/keywords.txt | 24 - firmware/libraries/ESP8266Ping | 1 - .../libraries/ESP8266_Influxdb/CHANGELOG.md | 148 - firmware/libraries/ESP8266_Influxdb/LICENSE | 21 - firmware/libraries/ESP8266_Influxdb/README.md | 696 - .../examples/BasicWrite/BasicWrite.ino | 98 - .../examples/Buckets/Buckets.ino | 136 - .../QueryAggregated/QueryAggregated.ino | 163 - .../examples/QueryParams/QueryParams.ino | 154 - .../examples/QueryTable/QueryTable.ino | 148 - .../SecureBatchWrite/SecureBatchWrite.ino | 167 - .../examples/SecureWrite/SecureWrite.ino | 113 - .../libraries/ESP8266_Influxdb/keywords.txt | 45 - .../ESP8266_Influxdb/library.properties | 10 - .../libraries/ESP8266_Influxdb/platformio.ini | 45 - .../ESP8266_Influxdb/src/BucketsClient.cpp | 244 - .../ESP8266_Influxdb/src/BucketsClient.h | 122 - .../ESP8266_Influxdb/src/HTTPService.cpp | 220 - .../ESP8266_Influxdb/src/HTTPService.h | 136 - .../ESP8266_Influxdb/src/InfluxData.cpp | 39 - .../ESP8266_Influxdb/src/InfluxData.h | 37 - .../ESP8266_Influxdb/src/InfluxDb.cpp | 157 - .../libraries/ESP8266_Influxdb/src/InfluxDb.h | 59 - .../ESP8266_Influxdb/src/InfluxDbClient.cpp | 778 - .../ESP8266_Influxdb/src/InfluxDbClient.h | 273 - .../ESP8266_Influxdb/src/InfluxDbCloud.h | 68 - .../ESP8266_Influxdb/src/Options.cpp | 43 - .../libraries/ESP8266_Influxdb/src/Options.h | 112 - .../libraries/ESP8266_Influxdb/src/Platform.h | 17 - .../libraries/ESP8266_Influxdb/src/Point.cpp | 203 - .../libraries/ESP8266_Influxdb/src/Point.h | 96 - .../libraries/ESP8266_Influxdb/src/Version.h | 32 - .../ESP8266_Influxdb/src/WritePrecision.h | 43 - .../ESP8266_Influxdb/src/query/CsvReader.cpp | 108 - .../ESP8266_Influxdb/src/query/CsvReader.h | 51 - .../ESP8266_Influxdb/src/query/FluxParser.cpp | 275 - .../ESP8266_Influxdb/src/query/FluxParser.h | 109 - .../ESP8266_Influxdb/src/query/FluxTypes.cpp | 239 - .../ESP8266_Influxdb/src/query/FluxTypes.h | 178 - .../src/query/HttpStreamScanner.cpp | 104 - .../src/query/HttpStreamScanner.h | 64 - .../ESP8266_Influxdb/src/query/Params.cpp | 151 - .../ESP8266_Influxdb/src/query/Params.h | 95 - .../ESP8266_Influxdb/src/util/debug.h | 41 - .../ESP8266_Influxdb/src/util/helpers.cpp | 188 - .../ESP8266_Influxdb/src/util/helpers.h | 63 - .../ESP8266_Influxdb/test/E2ETest.cpp | 101 - .../libraries/ESP8266_Influxdb/test/E2ETest.h | 39 - .../libraries/ESP8266_Influxdb/test/Test.cpp | 2479 -- .../libraries/ESP8266_Influxdb/test/Test.h | 84 - .../ESP8266_Influxdb/test/TestBase.cpp | 57 - .../ESP8266_Influxdb/test/TestBase.h | 62 - .../ESP8266_Influxdb/test/TestSupport.cpp | 156 - .../ESP8266_Influxdb/test/TestSupport.h | 59 - .../ESP8266_Influxdb/test/customSettings.h | 6 - .../ESP8266_Influxdb/test/server/Readme.md | 16 - .../ESP8266_Influxdb/test/server/package.json | 15 - .../ESP8266_Influxdb/test/server/server.js | 796 - .../ESP8266_Influxdb/test/server/yarn.lock | 368 - .../libraries/ESP8266_Influxdb/test/test.ino | 110 - firmware/libraries/UrlEncode/LICENSE | 21 - firmware/libraries/UrlEncode/README.md | 11 - .../UrlEncode/examples/Encode/Encode.ino | 11 - firmware/libraries/UrlEncode/keywords.txt | 1 - .../libraries/UrlEncode/library.properties | 10 - firmware/libraries/UrlEncode/src/UrlEncode.h | 37 - firmware/libraries/WiFi/README.adoc | 27 - .../ConnectNoEncryption.ino | 127 - .../ConnectWithWEP/ConnectWithWEP.ino | 132 - .../ConnectWithWPA/ConnectWithWPA.ino | 122 - .../examples/ScanNetworks/ScanNetworks.ino | 119 - .../SimpleWebServerWiFi.ino | 132 - .../WiFiChatServer/WiFiChatServer.ino | 117 - .../WiFiUdpNtpClient/WiFiUdpNtpClient.ino | 182 - .../WiFiUdpSendReceiveString.ino | 118 - .../examples/WiFiWebClient/WiFiWebClient.ino | 126 - .../WiFiWebClientRepeating.ino | 131 - .../examples/WiFiWebServer/WiFiWebServer.ino | 138 - .../libraries/WiFi/extras/binary/wifiHD.elf | Bin 724331 -> 0 bytes .../libraries/WiFi/extras/binary/wifiHD.hex | 16358 ------------- .../WiFi/extras/binary/wifiHD_2_1.elf | Bin 1308530 -> 0 bytes .../WiFi/extras/binary/wifi_dnld.elf | Bin 182489 -> 0 bytes .../WiFi/extras/binary/wifi_dnld.hex | 10470 --------- .../WiFi/extras/binary/wifi_dnld_2_1.elf | Bin 182264 -> 0 bytes .../scripts/ArduinoWifiShield_upgrade.sh | 121 - .../libraries/WiFi/extras/wifiHD/.cproject | 4045 ---- .../libraries/WiFi/extras/wifiHD/.cproject 2 | 4045 ---- .../libraries/WiFi/extras/wifiHD/.project | 77 - .../libraries/WiFi/extras/wifiHD/.project 2 | 77 - .../WiFi/extras/wifiHD/Release/wifiHD.elf | Bin 724331 -> 0 bytes .../WiFi/extras/wifiHD/Release/wifiHD.hex | 16358 ------------- .../extras/wifiHD/src/CONFIG/conf_access.h | 170 - .../extras/wifiHD/src/CONFIG/conf_at45dbx.h | 83 - .../WiFi/extras/wifiHD/src/CONFIG/conf_ebi.h | 108 - .../wifiHD/src/CONFIG/conf_sd_mmc_spi.h | 73 - .../src/SOFTWARE_FRAMEWORK/ASM/trampoline.x | 74 - .../BOARDS/ARDUINO/arduino 2.h | 237 - .../BOARDS/ARDUINO/arduino.h | 237 - .../SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led 2.c | 346 - .../SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led 2.h | 191 - .../SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c | 346 - .../SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h | 191 - .../BOARDS/EVK1105/evk1105 2.h | 433 - .../BOARDS/EVK1105/evk1105.h | 433 - .../SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led 2.c | 346 - .../SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led 2.h | 187 - .../SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c | 346 - .../SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h | 187 - .../src/SOFTWARE_FRAMEWORK/BOARDS/board 2.h | 120 - .../src/SOFTWARE_FRAMEWORK/BOARDS/board.h | 120 - .../src/SOFTWARE_FRAMEWORK/BOARDS/board.h.my | 120 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx 2.c | 653 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx 2.h | 270 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx.c | 653 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx.h | 270 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem 2.c | 234 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem 2.h | 164 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c | 234 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h | 164 - .../v2.7.0/UCR1/GCC/lib_ucr1_hd_sdio_v2.7.0.a | Bin 11978 -> 0 bytes .../v2.7.0/UCR1/GCC/lib_ucr1_hd_spi_v2.7.0.a | Bin 13134 -> 0 bytes .../GCC/lib_ucr1_hd_wl_sta_intwpa_v2.7.0.a | Bin 1007102 -> 0 bytes .../v2.7.0/UCR2/GCC/lib_ucr2_hd_sdio_v2.7.0.a | Bin 11946 -> 0 bytes .../v2.7.0/UCR2/GCC/lib_ucr2_hd_spi_v2.7.0.a | Bin 13110 -> 0 bytes .../GCC/lib_ucr2_hd_wl_sta_intwpa_v2.7.0.a | Bin 1004426 -> 0 bytes .../COMPONENTS/WIFI/HD/v2.7.0/revision 2.txt | 1 - .../COMPONENTS/WIFI/HD/v2.7.0/revision.txt | 1 - .../COMPONENTS/WIFI/HD/wl_api 2.h | 1687 -- .../COMPONENTS/WIFI/HD/wl_api.h | 1687 -- .../COMPONENTS/WIFI/HD/wl_fw 2.h | 19287 ---------------- .../COMPONENTS/WIFI/HD/wl_fw.h | 19287 ---------------- .../COMPONENTS/WIFI/HD/wl_os 2.h | 35 - .../COMPONENTS/WIFI/HD/wl_os.h | 35 - .../COMPONENTS/WIFI/HD/wl_sdio 2.h | 172 - .../COMPONENTS/WIFI/HD/wl_sdio.h | 172 - .../COMPONENTS/WIFI/HD/wl_spi 2.h | 185 - .../COMPONENTS/WIFI/HD/wl_spi.h | 185 - .../COMPONENTS/WIFI/HD/wlap_api 2.h | 154 - .../COMPONENTS/WIFI/HD/wlap_api.h | 154 - .../CPU/CYCLE_COUNTER/cycle_counter 2.h | 309 - .../DRIVERS/CPU/CYCLE_COUNTER/cycle_counter.h | 309 - .../DRIVERS/EBI/SMC/smc 2.c | 995 - .../DRIVERS/EBI/SMC/smc 2.h | 68 - .../SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.c | 995 - .../SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.h | 68 - .../SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic 2.c | 183 - .../SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic 2.h | 275 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.c | 183 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.h | 275 - .../DRIVERS/FLASHC/flashc 2.c | 1117 - .../DRIVERS/FLASHC/flashc 2.h | 1002 - .../DRIVERS/FLASHC/flashc.c | 1117 - .../DRIVERS/FLASHC/flashc.h | 1002 - .../SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio 2.c | 458 - .../SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio 2.h | 583 - .../SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c | 458 - .../SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h | 583 - .../DRIVERS/INTC/exception.x | 239 - .../SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc 2.c | 214 - .../SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc 2.h | 100 - .../SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c | 214 - .../SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h | 100 - .../SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca 2.c | 296 - .../SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca 2.h | 251 - .../SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.c | 296 - .../SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.h | 251 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm 2.c | 546 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm 2.h | 493 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c | 546 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h | 493 - .../DRIVERS/PM/pm_conf_clocks 2.c | 268 - .../DRIVERS/PM/pm_conf_clocks.c | 268 - .../DRIVERS/PM/power_clocks_lib 2.c | 566 - .../DRIVERS/PM/power_clocks_lib 2.h | 379 - .../DRIVERS/PM/power_clocks_lib.c | 566 - .../DRIVERS/PM/power_clocks_lib.h | 379 - .../SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc 2.c | 213 - .../SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc 2.h | 191 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.c | 213 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.h | 191 - .../SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi 2.c | 443 - .../SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi 2.h | 342 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c | 443 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h | 342 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc 2.c | 314 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc 2.h | 591 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.c | 314 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.h | 591 - .../DRIVERS/USART/usart 2.c | 914 - .../DRIVERS/USART/usart 2.h | 889 - .../SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c | 914 - .../SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h | 889 - .../SERVICES/DELAY/delay 2.c | 87 - .../SERVICES/DELAY/delay 2.h | 80 - .../SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.c | 87 - .../SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.h | 80 - .../LWIP/lwip-1.3.2/src/core/dhcp 2.c | 1724 -- .../SERVICES/LWIP/lwip-1.3.2/src/core/dhcp.c | 1724 -- .../SERVICES/LWIP/lwip-1.3.2/src/core/dns 2.c | 982 - .../SERVICES/LWIP/lwip-1.3.2/src/core/dns.c | 982 - .../LWIP/lwip-1.3.2/src/core/init 2.c | 276 - .../SERVICES/LWIP/lwip-1.3.2/src/core/init.c | 276 - .../LWIP/lwip-1.3.2/src/core/ipv4/autoip 2.c | 499 - .../LWIP/lwip-1.3.2/src/core/ipv4/autoip.c | 499 - .../LWIP/lwip-1.3.2/src/core/ipv4/icmp 2.c | 333 - .../LWIP/lwip-1.3.2/src/core/ipv4/icmp.c | 333 - .../LWIP/lwip-1.3.2/src/core/ipv4/igmp 2.c | 759 - .../LWIP/lwip-1.3.2/src/core/ipv4/igmp.c | 759 - .../LWIP/lwip-1.3.2/src/core/ipv4/inet 2.c | 280 - .../LWIP/lwip-1.3.2/src/core/ipv4/inet.c | 280 - .../lwip-1.3.2/src/core/ipv4/inet_chksum 2.c | 440 - .../lwip-1.3.2/src/core/ipv4/inet_chksum.c | 440 - .../LWIP/lwip-1.3.2/src/core/ipv4/ip 2.c | 725 - .../LWIP/lwip-1.3.2/src/core/ipv4/ip.c | 725 - .../LWIP/lwip-1.3.2/src/core/ipv4/ip_addr 2.c | 86 - .../LWIP/lwip-1.3.2/src/core/ipv4/ip_addr.c | 86 - .../LWIP/lwip-1.3.2/src/core/ipv4/ip_frag 2.c | 794 - .../LWIP/lwip-1.3.2/src/core/ipv4/ip_frag.c | 794 - .../SERVICES/LWIP/lwip-1.3.2/src/core/mem 2.c | 635 - .../SERVICES/LWIP/lwip-1.3.2/src/core/mem.c | 635 - .../LWIP/lwip-1.3.2/src/core/memp 2.c | 388 - .../SERVICES/LWIP/lwip-1.3.2/src/core/memp.c | 388 - .../LWIP/lwip-1.3.2/src/core/netif 2.c | 683 - .../SERVICES/LWIP/lwip-1.3.2/src/core/netif.c | 683 - .../LWIP/lwip-1.3.2/src/core/pbuf 2.c | 931 - .../SERVICES/LWIP/lwip-1.3.2/src/core/pbuf.c | 931 - .../SERVICES/LWIP/lwip-1.3.2/src/core/raw 2.c | 355 - .../SERVICES/LWIP/lwip-1.3.2/src/core/raw.c | 355 - .../LWIP/lwip-1.3.2/src/core/stats 2.c | 151 - .../SERVICES/LWIP/lwip-1.3.2/src/core/stats.c | 151 - .../SERVICES/LWIP/lwip-1.3.2/src/core/tcp 2.c | 1463 -- .../SERVICES/LWIP/lwip-1.3.2/src/core/tcp.c | 1463 -- .../LWIP/lwip-1.3.2/src/core/tcp_in 2.c | 1508 -- .../LWIP/lwip-1.3.2/src/core/tcp_in.c | 1508 -- .../LWIP/lwip-1.3.2/src/core/tcp_out 2.c | 1071 - .../LWIP/lwip-1.3.2/src/core/tcp_out.c | 1071 - .../SERVICES/LWIP/lwip-1.3.2/src/core/udp 2.c | 843 - .../SERVICES/LWIP/lwip-1.3.2/src/core/udp.c | 843 - .../src/include/ipv4/lwip/autoip 2.h | 118 - .../lwip-1.3.2/src/include/ipv4/lwip/autoip.h | 118 - .../lwip-1.3.2/src/include/ipv4/lwip/icmp 2.h | 113 - .../lwip-1.3.2/src/include/ipv4/lwip/icmp.h | 113 - .../lwip-1.3.2/src/include/ipv4/lwip/igmp 2.h | 164 - .../lwip-1.3.2/src/include/ipv4/lwip/igmp.h | 164 - .../lwip-1.3.2/src/include/ipv4/lwip/inet 2.h | 105 - .../lwip-1.3.2/src/include/ipv4/lwip/inet.h | 105 - .../src/include/ipv4/lwip/inet_chksum 2.h | 62 - .../src/include/ipv4/lwip/inet_chksum.h | 62 - .../lwip-1.3.2/src/include/ipv4/lwip/ip 2.h | 200 - .../lwip-1.3.2/src/include/ipv4/lwip/ip.h | 200 - .../src/include/ipv4/lwip/ip_addr 2.h | 175 - .../src/include/ipv4/lwip/ip_addr.h | 175 - .../src/include/ipv4/lwip/ip_frag 2.h | 78 - .../src/include/ipv4/lwip/ip_frag.h | 78 - .../LWIP/lwip-1.3.2/src/include/lwip/api 2.h | 224 - .../LWIP/lwip-1.3.2/src/include/lwip/api.h | 224 - .../lwip-1.3.2/src/include/lwip/api_msg 2.h | 164 - .../lwip-1.3.2/src/include/lwip/api_msg.h | 164 - .../LWIP/lwip-1.3.2/src/include/lwip/arch 2.h | 235 - .../LWIP/lwip-1.3.2/src/include/lwip/arch.h | 235 - .../lwip-1.3.2/src/include/lwip/debug 2.h | 100 - .../LWIP/lwip-1.3.2/src/include/lwip/debug.h | 100 - .../LWIP/lwip-1.3.2/src/include/lwip/def 2.h | 49 - .../LWIP/lwip-1.3.2/src/include/lwip/def.h | 49 - .../LWIP/lwip-1.3.2/src/include/lwip/dhcp 2.h | 248 - .../LWIP/lwip-1.3.2/src/include/lwip/dhcp.h | 248 - .../LWIP/lwip-1.3.2/src/include/lwip/dns 2.h | 99 - .../LWIP/lwip-1.3.2/src/include/lwip/dns.h | 99 - .../LWIP/lwip-1.3.2/src/include/lwip/err 2.h | 89 - .../LWIP/lwip-1.3.2/src/include/lwip/err.h | 89 - .../LWIP/lwip-1.3.2/src/include/lwip/init 2.h | 74 - .../LWIP/lwip-1.3.2/src/include/lwip/init.h | 74 - .../LWIP/lwip-1.3.2/src/include/lwip/mem 2.h | 109 - .../LWIP/lwip-1.3.2/src/include/lwip/mem.h | 109 - .../LWIP/lwip-1.3.2/src/include/lwip/memp 2.h | 118 - .../LWIP/lwip-1.3.2/src/include/lwip/memp.h | 118 - .../lwip-1.3.2/src/include/lwip/memp_std 2.h | 104 - .../lwip-1.3.2/src/include/lwip/memp_std.h | 104 - .../lwip-1.3.2/src/include/lwip/netbuf 2.h | 88 - .../LWIP/lwip-1.3.2/src/include/lwip/netbuf.h | 88 - .../lwip-1.3.2/src/include/lwip/netdb 2.h | 113 - .../LWIP/lwip-1.3.2/src/include/lwip/netdb.h | 113 - .../lwip-1.3.2/src/include/lwip/netif 2.h | 265 - .../LWIP/lwip-1.3.2/src/include/lwip/netif.h | 265 - .../lwip-1.3.2/src/include/lwip/netifapi 2.h | 107 - .../lwip-1.3.2/src/include/lwip/netifapi.h | 107 - .../LWIP/lwip-1.3.2/src/include/lwip/opt 2.h | 1842 -- .../LWIP/lwip-1.3.2/src/include/lwip/opt.h | 1842 -- .../LWIP/lwip-1.3.2/src/include/lwip/pbuf 2.h | 122 - .../LWIP/lwip-1.3.2/src/include/lwip/pbuf.h | 122 - .../LWIP/lwip-1.3.2/src/include/lwip/raw 2.h | 99 - .../LWIP/lwip-1.3.2/src/include/lwip/raw.h | 99 - .../LWIP/lwip-1.3.2/src/include/lwip/sio 2.h | 143 - .../LWIP/lwip-1.3.2/src/include/lwip/sio.h | 143 - .../LWIP/lwip-1.3.2/src/include/lwip/snmp 2.h | 366 - .../LWIP/lwip-1.3.2/src/include/lwip/snmp.h | 366 - .../lwip-1.3.2/src/include/lwip/snmp_asn1 2.h | 103 - .../lwip-1.3.2/src/include/lwip/snmp_asn1.h | 103 - .../lwip-1.3.2/src/include/lwip/snmp_msg 2.h | 313 - .../lwip-1.3.2/src/include/lwip/snmp_msg.h | 313 - .../src/include/lwip/snmp_structs 2.h | 264 - .../src/include/lwip/snmp_structs.h | 264 - .../lwip-1.3.2/src/include/lwip/sockets 2.h | 359 - .../lwip-1.3.2/src/include/lwip/sockets.h | 359 - .../lwip-1.3.2/src/include/lwip/stats 2.h | 285 - .../LWIP/lwip-1.3.2/src/include/lwip/stats.h | 285 - .../LWIP/lwip-1.3.2/src/include/lwip/sys 2.h | 245 - .../LWIP/lwip-1.3.2/src/include/lwip/sys.h | 245 - .../LWIP/lwip-1.3.2/src/include/lwip/tcp 2.h | 709 - .../LWIP/lwip-1.3.2/src/include/lwip/tcp.h | 709 - .../lwip-1.3.2/src/include/lwip/tcpip 2.h | 143 - .../LWIP/lwip-1.3.2/src/include/lwip/tcpip.h | 143 - .../LWIP/lwip-1.3.2/src/include/lwip/udp 2.h | 155 - .../LWIP/lwip-1.3.2/src/include/lwip/udp.h | 155 - .../lwip-1.3.2/src/include/netif/etharp 2.h | 194 - .../lwip-1.3.2/src/include/netif/etharp.h | 194 - .../lwip-1.3.2/src/include/netif/loopif 2.h | 55 - .../lwip-1.3.2/src/include/netif/loopif.h | 55 - .../lwip-1.3.2/src/include/netif/ppp_oe 2.h | 163 - .../lwip-1.3.2/src/include/netif/ppp_oe.h | 163 - .../lwip-1.3.2/src/include/netif/slipif 2.h | 53 - .../lwip-1.3.2/src/include/netif/slipif.h | 53 - .../LWIP/lwip-1.3.2/src/netif/etharp 2.c | 1224 - .../LWIP/lwip-1.3.2/src/netif/etharp.c | 1224 - .../LWIP/lwip-1.3.2/src/netif/loopif 2.c | 68 - .../LWIP/lwip-1.3.2/src/netif/loopif.c | 68 - .../lwip-port-1.3.2/HD/if/include/arch/cc 2.h | 79 - .../lwip-port-1.3.2/HD/if/include/arch/cc.h | 79 - .../HD/if/include/arch/perf 2.h | 7 - .../lwip-port-1.3.2/HD/if/include/arch/perf.h | 7 - .../HD/if/include/lwipopts 2.h | 426 - .../lwip-port-1.3.2/HD/if/include/lwipopts.h | 426 - .../HD/if/include/netif/wlif 2.h | 10 - .../HD/if/include/netif/wlif.h | 10 - .../LWIP/lwip-port-1.3.2/HD/if/netif/wlif 2.c | 386 - .../LWIP/lwip-port-1.3.2/HD/if/netif/wlif.c | 386 - .../LWIP/lwip-port-1.3.2/HD/readme 2.txt | 1 - .../LWIP/lwip-port-1.3.2/HD/readme.txt | 1 - .../MEMORY/CTRL_ACCESS/ctrl_access 2.c | 571 - .../MEMORY/CTRL_ACCESS/ctrl_access 2.h | 369 - .../SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c | 571 - .../SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h | 369 - .../SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug 2.c | 133 - .../SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug 2.h | 116 - .../SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c | 133 - .../SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h | 116 - .../UTILS/DEBUG/print_funcs 2.c | 215 - .../UTILS/DEBUG/print_funcs 2.h | 294 - .../UTILS/DEBUG/print_funcs.c | 215 - .../UTILS/DEBUG/print_funcs.h | 294 - .../LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu 2.h | 63 - .../LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h | 63 - .../NEWLIB_ADDONS/INCLUDE/nlao_exceptions 2.h | 120 - .../NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h | 120 - .../NEWLIB_ADDONS/INCLUDE/nlao_interrupts 2.h | 82 - .../NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h | 82 - .../LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io 2.h | 174 - .../LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h | 174 - .../LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart 2.h | 208 - .../LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h | 208 - .../libnewlib_addons-at32ucr2-speed_opt.a | Bin 25540 -> 0 bytes .../AT32UC3A/0512/GCC/link_uc3a0512.lds | 266 - .../AT32UC3A/1256/GCC/link_uc3a1256.lds | 266 - .../UTILS/PREPROCESSOR/mrepeat 2.h | 328 - .../UTILS/PREPROCESSOR/mrepeat.h | 328 - .../UTILS/PREPROCESSOR/preprocessor 2.h | 55 - .../UTILS/PREPROCESSOR/preprocessor.h | 55 - .../UTILS/PREPROCESSOR/stringz 2.h | 75 - .../UTILS/PREPROCESSOR/stringz.h | 75 - .../UTILS/PREPROCESSOR/tpaste 2.h | 95 - .../UTILS/PREPROCESSOR/tpaste.h | 95 - .../UTILS/STARTUP_FILES/GCC/crt0.x | 121 - .../src/SOFTWARE_FRAMEWORK/UTILS/compiler 2.h | 1145 - .../src/SOFTWARE_FRAMEWORK/UTILS/compiler.h | 1145 - .../src/SOFTWARE_FRAMEWORK/UTILS/conf_isp 2.h | 136 - .../src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h | 136 - .../src/SOFTWARE_FRAMEWORK/UTILS/parts 2.h | 203 - .../src/SOFTWARE_FRAMEWORK/UTILS/parts.h | 203 - .../WiFi/extras/wifiHD/src/ard_spi 2.c | 1969 -- .../WiFi/extras/wifiHD/src/ard_spi 2.h | 88 - .../WiFi/extras/wifiHD/src/ard_spi.c | 1969 -- .../WiFi/extras/wifiHD/src/ard_spi.h | 88 - .../WiFi/extras/wifiHD/src/ard_tcp 2.c | 987 - .../WiFi/extras/wifiHD/src/ard_tcp 2.h | 124 - .../WiFi/extras/wifiHD/src/ard_tcp.c | 987 - .../WiFi/extras/wifiHD/src/ard_tcp.h | 124 - .../WiFi/extras/wifiHD/src/ard_utils 2.c | 347 - .../WiFi/extras/wifiHD/src/ard_utils 2.h | 295 - .../WiFi/extras/wifiHD/src/ard_utils.c | 347 - .../WiFi/extras/wifiHD/src/ard_utils.h | 295 - .../WiFi/extras/wifiHD/src/avr32_spi 2.c | 394 - .../WiFi/extras/wifiHD/src/avr32_spi.c | 394 - .../WiFi/extras/wifiHD/src/board_init 2.c | 297 - .../WiFi/extras/wifiHD/src/board_init 2.h | 313 - .../WiFi/extras/wifiHD/src/board_init.c | 297 - .../WiFi/extras/wifiHD/src/board_init.h | 313 - .../WiFi/extras/wifiHD/src/cmd_wl 2.c | 731 - .../WiFi/extras/wifiHD/src/cmd_wl 2.h | 66 - .../libraries/WiFi/extras/wifiHD/src/cmd_wl.c | 731 - .../libraries/WiFi/extras/wifiHD/src/cmd_wl.h | 66 - .../WiFi/extras/wifiHD/src/console 2.c | 212 - .../WiFi/extras/wifiHD/src/console 2.h | 46 - .../WiFi/extras/wifiHD/src/console.c | 212 - .../WiFi/extras/wifiHD/src/console.h | 46 - .../WiFi/extras/wifiHD/src/debug 2.h | 191 - .../libraries/WiFi/extras/wifiHD/src/debug.h | 191 - .../WiFi/extras/wifiHD/src/fw_download 2.h | 38 - .../WiFi/extras/wifiHD/src/fw_download.h | 38 - .../wifiHD/src/fw_download_extflash 2.c | 82 - .../extras/wifiHD/src/fw_download_extflash.c | 82 - .../WiFi/extras/wifiHD/src/license 2.txt | 42 - .../WiFi/extras/wifiHD/src/license.txt | 42 - .../WiFi/extras/wifiHD/src/lwip_setup 2.c | 145 - .../WiFi/extras/wifiHD/src/lwip_setup 2.h | 30 - .../WiFi/extras/wifiHD/src/lwip_setup.c | 145 - .../WiFi/extras/wifiHD/src/lwip_setup.h | 30 - .../WiFi/extras/wifiHD/src/lwipopts 2.h | 450 - .../WiFi/extras/wifiHD/src/lwipopts.h | 450 - .../libraries/WiFi/extras/wifiHD/src/main 2.c | 454 - .../libraries/WiFi/extras/wifiHD/src/main.c | 454 - .../WiFi/extras/wifiHD/src/nvram 2.c | 153 - .../WiFi/extras/wifiHD/src/nvram 2.h | 10 - .../libraries/WiFi/extras/wifiHD/src/nvram.c | 153 - .../libraries/WiFi/extras/wifiHD/src/nvram.h | 10 - .../WiFi/extras/wifiHD/src/owl_os 2.c | 140 - .../libraries/WiFi/extras/wifiHD/src/owl_os.c | 140 - .../libraries/WiFi/extras/wifiHD/src/ping 2.c | 340 - .../libraries/WiFi/extras/wifiHD/src/ping 2.h | 45 - .../libraries/WiFi/extras/wifiHD/src/ping.c | 340 - .../libraries/WiFi/extras/wifiHD/src/ping.h | 45 - .../WiFi/extras/wifiHD/src/printf-stdarg 2.c | 323 - .../WiFi/extras/wifiHD/src/printf-stdarg 2.h | 34 - .../WiFi/extras/wifiHD/src/printf-stdarg.c | 323 - .../WiFi/extras/wifiHD/src/printf-stdarg.h | 34 - .../WiFi/extras/wifiHD/src/timer 2.c | 232 - .../WiFi/extras/wifiHD/src/timer 2.h | 51 - .../libraries/WiFi/extras/wifiHD/src/timer.c | 232 - .../libraries/WiFi/extras/wifiHD/src/timer.h | 51 - .../WiFi/extras/wifiHD/src/top_defs 2.h | 120 - .../WiFi/extras/wifiHD/src/top_defs.h | 120 - .../WiFi/extras/wifiHD/src/trace 2.h | 44 - .../libraries/WiFi/extras/wifiHD/src/trace.h | 44 - .../libraries/WiFi/extras/wifiHD/src/util 2.c | 260 - .../libraries/WiFi/extras/wifiHD/src/util 2.h | 71 - .../libraries/WiFi/extras/wifiHD/src/util.c | 260 - .../libraries/WiFi/extras/wifiHD/src/util.h | 71 - .../WiFi/extras/wifiHD/src/wifi_spi 2.h | 160 - .../WiFi/extras/wifiHD/src/wifi_spi.h | 160 - .../WiFi/extras/wifiHD/src/wl_cm 2.c | 431 - .../WiFi/extras/wifiHD/src/wl_cm 2.h | 51 - .../libraries/WiFi/extras/wifiHD/src/wl_cm.c | 431 - .../libraries/WiFi/extras/wifiHD/src/wl_cm.h | 51 - .../WiFi/extras/wifiHD/src/wl_definitions 2.h | 39 - .../WiFi/extras/wifiHD/src/wl_definitions.h | 39 - .../libraries/WiFi/extras/wifiHD/wifiHD.cproj | 1291 -- .../libraries/WiFi/extras/wifi_dnld/.cproject | 1281 - .../WiFi/extras/wifi_dnld/.cproject 2 | 1281 - .../libraries/WiFi/extras/wifi_dnld/.project | 70 - .../WiFi/extras/wifi_dnld/.project 2 | 70 - .../extras/wifi_dnld/Release/wifi_dnld.elf | Bin 182489 -> 0 bytes .../extras/wifi_dnld/src/CONFIG/conf_access.h | 170 - .../wifi_dnld/src/CONFIG/conf_at45dbx.h | 83 - .../src/Doc/SPB104 product brief.pdf | Bin 760252 -> 0 bytes .../wifi_dnld/src/Doc/gettingstarted.pdf | Bin 701930 -> 0 bytes .../src/SOFTWARE_FRAMEWORK/ASM/trampoline.x | 74 - .../BOARDS/ARDUINO/arduino 2.h | 234 - .../BOARDS/ARDUINO/arduino.h | 234 - .../SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led 2.c | 346 - .../SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led 2.h | 191 - .../SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c | 346 - .../SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h | 191 - .../BOARDS/EVK1105/evk1105 2.h | 433 - .../BOARDS/EVK1105/evk1105.h | 433 - .../SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led 2.c | 346 - .../SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led 2.h | 187 - .../SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c | 346 - .../SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h | 187 - .../src/SOFTWARE_FRAMEWORK/BOARDS/board 2.h | 120 - .../src/SOFTWARE_FRAMEWORK/BOARDS/board.h | 120 - .../src/SOFTWARE_FRAMEWORK/BOARDS/board.h.ori | 121 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx 2.c | 672 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx 2.h | 269 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx.c | 672 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx.h | 269 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem 2.c | 234 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem 2.h | 164 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c | 234 - .../MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h | 164 - .../DRIVERS/FLASHC/flashc 2.c | 1117 - .../DRIVERS/FLASHC/flashc 2.h | 1002 - .../DRIVERS/FLASHC/flashc.c | 1117 - .../DRIVERS/FLASHC/flashc.h | 1002 - .../SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio 2.c | 458 - .../SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio 2.h | 583 - .../SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c | 458 - .../SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h | 583 - .../DRIVERS/INTC/exception.x | 239 - .../SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc 2.c | 214 - .../SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc 2.h | 100 - .../SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c | 214 - .../SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h | 100 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm 2.c | 546 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm 2.h | 493 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c | 546 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h | 493 - .../DRIVERS/PM/pm_conf_clocks 2.c | 268 - .../DRIVERS/PM/pm_conf_clocks.c | 268 - .../DRIVERS/PM/power_clocks_lib 2.c | 566 - .../DRIVERS/PM/power_clocks_lib 2.h | 379 - .../DRIVERS/PM/power_clocks_lib.c | 566 - .../DRIVERS/PM/power_clocks_lib.h | 379 - .../SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi 2.c | 443 - .../SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi 2.h | 342 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c | 443 - .../src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h | 342 - .../DRIVERS/USART/usart 2.c | 914 - .../DRIVERS/USART/usart 2.h | 889 - .../SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c | 914 - .../SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h | 889 - .../MEMORY/CTRL_ACCESS/ctrl_access 2.c | 571 - .../MEMORY/CTRL_ACCESS/ctrl_access 2.h | 369 - .../SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c | 571 - .../SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h | 369 - .../SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug 2.c | 119 - .../SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug 2.h | 116 - .../SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c | 119 - .../SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h | 116 - .../UTILS/DEBUG/print_funcs 2.c | 215 - .../UTILS/DEBUG/print_funcs 2.h | 294 - .../UTILS/DEBUG/print_funcs.c | 215 - .../UTILS/DEBUG/print_funcs.h | 294 - .../LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu 2.h | 63 - .../LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h | 63 - .../NEWLIB_ADDONS/INCLUDE/nlao_exceptions 2.h | 120 - .../NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h | 120 - .../NEWLIB_ADDONS/INCLUDE/nlao_interrupts 2.h | 82 - .../NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h | 82 - .../LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io 2.h | 174 - .../LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h | 174 - .../LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart 2.h | 208 - .../LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h | 208 - .../libnewlib_addons-at32ucr2-speed_opt.a | Bin 25540 -> 0 bytes .../AT32UC3A/0512/GCC/link_uc3a0512.lds | 266 - .../AT32UC3A/1256/GCC/link_uc3a1256.lds | 266 - .../UTILS/PREPROCESSOR/mrepeat 2.h | 328 - .../UTILS/PREPROCESSOR/mrepeat.h | 328 - .../UTILS/PREPROCESSOR/preprocessor 2.h | 55 - .../UTILS/PREPROCESSOR/preprocessor.h | 55 - .../UTILS/PREPROCESSOR/stringz 2.h | 75 - .../UTILS/PREPROCESSOR/stringz.h | 75 - .../UTILS/PREPROCESSOR/tpaste 2.h | 95 - .../UTILS/PREPROCESSOR/tpaste.h | 95 - .../UTILS/STARTUP_FILES/GCC/crt0.x | 121 - .../src/SOFTWARE_FRAMEWORK/UTILS/compiler 2.h | 1145 - .../src/SOFTWARE_FRAMEWORK/UTILS/compiler.h | 1145 - .../src/SOFTWARE_FRAMEWORK/UTILS/conf_isp 2.h | 136 - .../src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h | 136 - .../src/SOFTWARE_FRAMEWORK/UTILS/parts 2.h | 203 - .../src/SOFTWARE_FRAMEWORK/UTILS/parts.h | 203 - .../WiFi/extras/wifi_dnld/src/clocks 2.c | 101 - .../WiFi/extras/wifi_dnld/src/clocks 2.h | 78 - .../WiFi/extras/wifi_dnld/src/clocks.c | 101 - .../WiFi/extras/wifi_dnld/src/clocks.h | 78 - .../WiFi/extras/wifi_dnld/src/flash_fw 2.c | 125 - .../WiFi/extras/wifi_dnld/src/flash_fw.c | 125 - .../WiFi/extras/wifi_dnld/src/license 2.txt | 42 - .../WiFi/extras/wifi_dnld/src/license.txt | 42 - .../WiFi/extras/wifi_dnld/src/nor_flash 2.c | 99 - .../WiFi/extras/wifi_dnld/src/nor_flash 2.h | 41 - .../WiFi/extras/wifi_dnld/src/nor_flash.c | 99 - .../WiFi/extras/wifi_dnld/src/nor_flash.h | 41 - .../extras/wifi_dnld/src/printf-stdarg 2.c | 323 - .../extras/wifi_dnld/src/printf-stdarg 2.h | 36 - .../WiFi/extras/wifi_dnld/src/printf-stdarg.c | 323 - .../WiFi/extras/wifi_dnld/src/printf-stdarg.h | 36 - .../WiFi/extras/wifi_dnld/src/startup 2.c | 75 - .../WiFi/extras/wifi_dnld/src/startup 2.h | 35 - .../WiFi/extras/wifi_dnld/src/startup.c | 75 - .../WiFi/extras/wifi_dnld/src/startup.h | 35 - .../WiFi/extras/wifi_dnld/src/wl_fw 2.h | 19287 ---------------- .../WiFi/extras/wifi_dnld/src/wl_fw.h | 19287 ---------------- .../WiFi/extras/wifi_dnld/wifi_dnld.cproj | 495 - .../libraries/WiFi/extras/wifishield.atsln | 36 - firmware/libraries/WiFi/keywords 2.txt | 59 - firmware/libraries/WiFi/keywords.txt | 59 - firmware/libraries/WiFi/library.properties | 9 - firmware/libraries/WiFi/src/WiFi 2.cpp | 248 - firmware/libraries/WiFi/src/WiFi 2.h | 246 - firmware/libraries/WiFi/src/WiFi.cpp | 248 - firmware/libraries/WiFi/src/WiFi.h | 246 - firmware/libraries/WiFi/src/WiFiClient 2.cpp | 199 - firmware/libraries/WiFi/src/WiFiClient 2.h | 59 - firmware/libraries/WiFi/src/WiFiClient.cpp | 199 - firmware/libraries/WiFi/src/WiFiClient.h | 59 - firmware/libraries/WiFi/src/WiFiServer 2.cpp | 108 - firmware/libraries/WiFi/src/WiFiServer 2.h | 46 - firmware/libraries/WiFi/src/WiFiServer.cpp | 108 - firmware/libraries/WiFi/src/WiFiServer.h | 46 - firmware/libraries/WiFi/src/WiFiUdp 2.cpp | 180 - firmware/libraries/WiFi/src/WiFiUdp 2.h | 80 - firmware/libraries/WiFi/src/WiFiUdp.cpp | 180 - firmware/libraries/WiFi/src/WiFiUdp.h | 80 - firmware/libraries/WiFi/src/utility/debug.h | 95 - .../libraries/WiFi/src/utility/server_drv.cpp | 327 - .../libraries/WiFi/src/utility/server_drv.h | 60 - .../libraries/WiFi/src/utility/spi_drv.cpp | 496 - firmware/libraries/WiFi/src/utility/spi_drv.h | 106 - .../libraries/WiFi/src/utility/wifi_drv.cpp | 579 - .../libraries/WiFi/src/utility/wifi_drv.h | 267 - .../libraries/WiFi/src/utility/wifi_spi.h | 173 - .../WiFi/src/utility/wl_definitions.h | 72 - .../libraries/WiFi/src/utility/wl_types.h | 49 - firmware/libraries/WiFiManager/LICENSE | 22 - firmware/libraries/WiFiManager/README.md | 581 - .../libraries/WiFiManager/WiFiManager.cpp | 3946 ---- firmware/libraries/WiFiManager/WiFiManager.h | 797 - .../examples/Advanced/Advanced.ino | 141 - .../WiFiManager/examples/Basic/Basic.ino | 41 - .../AutoConnectNonBlocking.ino | 27 - .../AutoConnectNonBlockingwParams.ino | 36 - .../onDemandNonBlocking.ino | 85 - .../AutoConnectWithFeedback.ino | 42 - .../AutoConnectWithReset.ino | 43 - .../AutoConnectWithStaticIP.ino | 71 - .../AutoConnectWithTimeout.ino | 38 - .../OnDemandConfigPortal.ino | 47 - .../OnDemandWebPortal/onDemandWebPortal.ino | 51 - .../LittleFS/LittleFSParameters.ino | 79 - .../AutoConnectWithFSParameters.ino | 169 - ...AutoConnectWithFSParametersAndCustomIP.ino | 194 - .../ParamsChildClass/ParamsChildClass.ino | 143 - .../OnDemandConfigPortal.ino | 416 - .../Tests/wifi_softap/wifi_softap.ino | 51 - .../examples/Unique/cb/AnonymousCB.ino | 26 - .../extras/WiFiManager.template.html | 395 - .../libraries/WiFiManager/extras/parse.js | 60 - .../extras/png_signal_strength_master.png | Bin 59671 -> 0 bytes .../libraries/WiFiManager/extras/template.h | 12 - .../libraries/WiFiManager/extras/test.html | 182 - firmware/libraries/WiFiManager/keywords.txt | 39 - firmware/libraries/WiFiManager/library.json | 29 - .../libraries/WiFiManager/library.properties | 9 - firmware/libraries/WiFiManager/strings_en.h | 501 - .../libraries/WiFiManager/travis/common.sh | 60 - 720 files changed, 320356 deletions(-) delete mode 100755 firmware/libraries/APDS9930-master/.gitattributes delete mode 100755 firmware/libraries/APDS9930-master/.gitignore delete mode 100755 firmware/libraries/APDS9930-master/LICENSE delete mode 100755 firmware/libraries/APDS9930-master/README.md delete mode 100755 firmware/libraries/APDS9930-master/examples/AmbientLightInterrupt/AmbientLightInterrupt.ino delete mode 100755 firmware/libraries/APDS9930-master/examples/AmbientLightLED/AmbientLightLED.ino delete mode 100755 firmware/libraries/APDS9930-master/examples/AmbientLightSensor/AmbientLightSensor.ino delete mode 100755 firmware/libraries/APDS9930-master/examples/AmbientLightToneAC/AmbientLightToneAC.ino delete mode 100755 firmware/libraries/APDS9930-master/examples/ProximityInterrupt/ProximityInterrupt.ino delete mode 100755 firmware/libraries/APDS9930-master/examples/ProximityLED/ProximityLED.ino delete mode 100755 firmware/libraries/APDS9930-master/examples/ProximitySensor/ProximitySensor.ino delete mode 100755 firmware/libraries/APDS9930-master/keywords.txt delete mode 100755 firmware/libraries/APDS9930-master/library.properties delete mode 100755 firmware/libraries/APDS9930-master/src/APDS9930.cpp delete mode 100755 firmware/libraries/APDS9930-master/src/APDS9930.h delete mode 100755 firmware/libraries/Adafruit_APDS9960_Library/Adafruit_APDS9960.cpp delete mode 100755 firmware/libraries/Adafruit_APDS9960_Library/Adafruit_APDS9960.h delete mode 100755 firmware/libraries/Adafruit_APDS9960_Library/README.md delete mode 100755 firmware/libraries/Adafruit_APDS9960_Library/assets/board.jpg delete mode 100755 firmware/libraries/Adafruit_APDS9960_Library/code-of-conduct.md delete mode 100755 firmware/libraries/Adafruit_APDS9960_Library/examples/color_sensor/color_sensor.ino delete mode 100755 firmware/libraries/Adafruit_APDS9960_Library/examples/gesture_sensor/gesture_sensor.ino delete mode 100755 firmware/libraries/Adafruit_APDS9960_Library/examples/proximity_sensor/proximity_sensor.ino delete mode 100755 firmware/libraries/Adafruit_APDS9960_Library/library.properties delete mode 100755 firmware/libraries/Adafruit_APDS9960_Library/license.txt delete mode 100755 firmware/libraries/Adafruit_BME280_Library/Adafruit_BME280.cpp delete mode 100755 firmware/libraries/Adafruit_BME280_Library/Adafruit_BME280.h delete mode 100755 firmware/libraries/Adafruit_BME280_Library/LICENSE delete mode 100755 firmware/libraries/Adafruit_BME280_Library/README.md delete mode 100755 firmware/libraries/Adafruit_BME280_Library/assets/board.jpg delete mode 100755 firmware/libraries/Adafruit_BME280_Library/examples/advancedsettings/advancedsettings.ino delete mode 100755 firmware/libraries/Adafruit_BME280_Library/examples/bme280test/bme280test.ino delete mode 100755 firmware/libraries/Adafruit_BME280_Library/library.properties delete mode 100644 firmware/libraries/Adafruit_BMP280_Library/Adafruit_BMP280.cpp delete mode 100644 firmware/libraries/Adafruit_BMP280_Library/Adafruit_BMP280.h delete mode 100644 firmware/libraries/Adafruit_BMP280_Library/README.md delete mode 100644 firmware/libraries/Adafruit_BMP280_Library/assets/board.jpg delete mode 100644 firmware/libraries/Adafruit_BMP280_Library/examples/bmp280_forced/bmp280_forced.ino delete mode 100644 firmware/libraries/Adafruit_BMP280_Library/examples/bmp280_sensortest/bmp280_sensortest.ino delete mode 100644 firmware/libraries/Adafruit_BMP280_Library/examples/bmp280test/bmp280test.ino delete mode 100644 firmware/libraries/Adafruit_BMP280_Library/keywords.txt delete mode 100644 firmware/libraries/Adafruit_BMP280_Library/library.properties delete mode 100644 firmware/libraries/Adafruit_BusIO/Adafruit_BusIO_Register.cpp delete mode 100644 firmware/libraries/Adafruit_BusIO/Adafruit_BusIO_Register.h delete mode 100644 firmware/libraries/Adafruit_BusIO/Adafruit_I2CDevice.cpp delete mode 100644 firmware/libraries/Adafruit_BusIO/Adafruit_I2CDevice.h delete mode 100644 firmware/libraries/Adafruit_BusIO/Adafruit_I2CRegister.h delete mode 100644 firmware/libraries/Adafruit_BusIO/Adafruit_SPIDevice.cpp delete mode 100644 firmware/libraries/Adafruit_BusIO/Adafruit_SPIDevice.h delete mode 100644 firmware/libraries/Adafruit_BusIO/CMakeLists.txt delete mode 100644 firmware/libraries/Adafruit_BusIO/LICENSE delete mode 100644 firmware/libraries/Adafruit_BusIO/README.md delete mode 100644 firmware/libraries/Adafruit_BusIO/component.mk delete mode 100644 firmware/libraries/Adafruit_BusIO/examples/i2c_address_detect/i2c_address_detect.ino delete mode 100644 firmware/libraries/Adafruit_BusIO/examples/i2c_readwrite/i2c_readwrite.ino delete mode 100644 firmware/libraries/Adafruit_BusIO/examples/i2c_registers/i2c_registers.ino delete mode 100644 firmware/libraries/Adafruit_BusIO/examples/i2corspi_register/i2corspi_register.ino delete mode 100644 firmware/libraries/Adafruit_BusIO/examples/spi_modetest/spi_modetest.ino delete mode 100644 firmware/libraries/Adafruit_BusIO/examples/spi_readwrite/spi_readwrite.ino delete mode 100644 firmware/libraries/Adafruit_BusIO/examples/spi_register_bits/spi_register_bits.ino delete mode 100644 firmware/libraries/Adafruit_BusIO/examples/spi_registers/spi_registers.ino delete mode 100644 firmware/libraries/Adafruit_BusIO/library.properties delete mode 100644 firmware/libraries/Adafruit_Unified_Sensor/Adafruit_Sensor.cpp delete mode 100755 firmware/libraries/Adafruit_Unified_Sensor/Adafruit_Sensor.h delete mode 100644 firmware/libraries/Adafruit_Unified_Sensor/LICENSE.txt delete mode 100644 firmware/libraries/Adafruit_Unified_Sensor/README.md delete mode 100644 firmware/libraries/Adafruit_Unified_Sensor/examples/sensortest/sensortest.ino delete mode 100644 firmware/libraries/Adafruit_Unified_Sensor/library.properties delete mode 100755 firmware/libraries/ESP8266Influxdb/ESP8266Influxdb 2.cpp delete mode 100755 firmware/libraries/ESP8266Influxdb/ESP8266Influxdb 2.h delete mode 100755 firmware/libraries/ESP8266Influxdb/ESP8266Influxdb.cpp delete mode 100755 firmware/libraries/ESP8266Influxdb/ESP8266Influxdb.h delete mode 100755 firmware/libraries/ESP8266Influxdb/README 2.md delete mode 100755 firmware/libraries/ESP8266Influxdb/README.md delete mode 100755 firmware/libraries/ESP8266Influxdb/examples/influxdb_write/influxdb_write.ino delete mode 100755 firmware/libraries/ESP8266Influxdb/keywords 2.txt delete mode 100755 firmware/libraries/ESP8266Influxdb/keywords.txt delete mode 160000 firmware/libraries/ESP8266Ping delete mode 100644 firmware/libraries/ESP8266_Influxdb/CHANGELOG.md delete mode 100644 firmware/libraries/ESP8266_Influxdb/LICENSE delete mode 100644 firmware/libraries/ESP8266_Influxdb/README.md delete mode 100644 firmware/libraries/ESP8266_Influxdb/examples/BasicWrite/BasicWrite.ino delete mode 100644 firmware/libraries/ESP8266_Influxdb/examples/Buckets/Buckets.ino delete mode 100644 firmware/libraries/ESP8266_Influxdb/examples/QueryAggregated/QueryAggregated.ino delete mode 100644 firmware/libraries/ESP8266_Influxdb/examples/QueryParams/QueryParams.ino delete mode 100644 firmware/libraries/ESP8266_Influxdb/examples/QueryTable/QueryTable.ino delete mode 100644 firmware/libraries/ESP8266_Influxdb/examples/SecureBatchWrite/SecureBatchWrite.ino delete mode 100644 firmware/libraries/ESP8266_Influxdb/examples/SecureWrite/SecureWrite.ino delete mode 100644 firmware/libraries/ESP8266_Influxdb/keywords.txt delete mode 100644 firmware/libraries/ESP8266_Influxdb/library.properties delete mode 100644 firmware/libraries/ESP8266_Influxdb/platformio.ini delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/BucketsClient.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/BucketsClient.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/HTTPService.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/HTTPService.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/InfluxData.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/InfluxData.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/InfluxDb.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/InfluxDb.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/InfluxDbClient.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/InfluxDbClient.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/InfluxDbCloud.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/Options.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/Options.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/Platform.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/Point.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/Point.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/Version.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/WritePrecision.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/query/CsvReader.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/query/CsvReader.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/query/FluxParser.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/query/FluxParser.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/query/FluxTypes.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/query/FluxTypes.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/query/HttpStreamScanner.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/query/HttpStreamScanner.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/query/Params.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/query/Params.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/util/debug.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/util/helpers.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/src/util/helpers.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/E2ETest.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/E2ETest.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/Test.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/Test.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/TestBase.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/TestBase.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/TestSupport.cpp delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/TestSupport.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/customSettings.h delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/server/Readme.md delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/server/package.json delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/server/server.js delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/server/yarn.lock delete mode 100644 firmware/libraries/ESP8266_Influxdb/test/test.ino delete mode 100644 firmware/libraries/UrlEncode/LICENSE delete mode 100644 firmware/libraries/UrlEncode/README.md delete mode 100644 firmware/libraries/UrlEncode/examples/Encode/Encode.ino delete mode 100644 firmware/libraries/UrlEncode/keywords.txt delete mode 100644 firmware/libraries/UrlEncode/library.properties delete mode 100644 firmware/libraries/UrlEncode/src/UrlEncode.h delete mode 100755 firmware/libraries/WiFi/README.adoc delete mode 100755 firmware/libraries/WiFi/examples/ConnectNoEncryption/ConnectNoEncryption.ino delete mode 100755 firmware/libraries/WiFi/examples/ConnectWithWEP/ConnectWithWEP.ino delete mode 100755 firmware/libraries/WiFi/examples/ConnectWithWPA/ConnectWithWPA.ino delete mode 100755 firmware/libraries/WiFi/examples/ScanNetworks/ScanNetworks.ino delete mode 100755 firmware/libraries/WiFi/examples/SimpleWebServerWiFi/SimpleWebServerWiFi.ino delete mode 100755 firmware/libraries/WiFi/examples/WiFiChatServer/WiFiChatServer.ino delete mode 100755 firmware/libraries/WiFi/examples/WiFiUdpNtpClient/WiFiUdpNtpClient.ino delete mode 100755 firmware/libraries/WiFi/examples/WiFiUdpSendReceiveString/WiFiUdpSendReceiveString.ino delete mode 100755 firmware/libraries/WiFi/examples/WiFiWebClient/WiFiWebClient.ino delete mode 100755 firmware/libraries/WiFi/examples/WiFiWebClientRepeating/WiFiWebClientRepeating.ino delete mode 100755 firmware/libraries/WiFi/examples/WiFiWebServer/WiFiWebServer.ino delete mode 100755 firmware/libraries/WiFi/extras/binary/wifiHD.elf delete mode 100755 firmware/libraries/WiFi/extras/binary/wifiHD.hex delete mode 100755 firmware/libraries/WiFi/extras/binary/wifiHD_2_1.elf delete mode 100755 firmware/libraries/WiFi/extras/binary/wifi_dnld.elf delete mode 100755 firmware/libraries/WiFi/extras/binary/wifi_dnld.hex delete mode 100755 firmware/libraries/WiFi/extras/binary/wifi_dnld_2_1.elf delete mode 100755 firmware/libraries/WiFi/extras/scripts/ArduinoWifiShield_upgrade.sh delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/.cproject delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/.cproject 2 delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/.project delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/.project 2 delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/Release/wifiHD.elf delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/Release/wifiHD.hex delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_access.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_at45dbx.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_ebi.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/CONFIG/conf_sd_mmc_spi.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.my delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_sdio_v2.7.0.a delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_spi_v2.7.0.a delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR1/GCC/lib_ucr1_hd_wl_sta_intwpa_v2.7.0.a delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_sdio_v2.7.0.a delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_spi_v2.7.0.a delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/UCR2/GCC/lib_ucr2_hd_wl_sta_intwpa_v2.7.0.a delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/revision 2.txt delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/v2.7.0/revision.txt delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_api 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_api.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_fw 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_fw.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_os 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_os.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_sdio 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_sdio.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_spi 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wl_spi.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wlap_api 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/COMPONENTS/WIFI/HD/wlap_api.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER/cycle_counter 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/CPU/CYCLE_COUNTER/cycle_counter.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EBI/SMC/smc.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/EIC/eic.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PDCA/pdca.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/RTC/rtc.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/TC/tc.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/DELAY/delay.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dhcp 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dhcp.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dns 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/dns.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/init 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/init.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/autoip 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/autoip.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/icmp 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/icmp.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/igmp 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/igmp.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet_chksum 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/inet_chksum.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_addr 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_addr.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_frag 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/ipv4/ip_frag.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/mem 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/mem.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/memp 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/memp.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/netif 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/netif.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/pbuf 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/pbuf.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/raw 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/raw.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/stats 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/stats.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_in 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_in.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_out 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/tcp_out.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/udp 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/core/udp.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/autoip 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/autoip.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/icmp 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/icmp.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/igmp 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/igmp.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet_chksum 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/inet_chksum.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_addr 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_addr.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_frag 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/ipv4/lwip/ip_frag.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api_msg 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/api_msg.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/arch 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/arch.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/debug 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/debug.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/def 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/def.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dhcp 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dhcp.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dns 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/dns.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/err 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/err.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/init 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/init.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/mem 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/mem.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp_std 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/memp_std.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netbuf 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netbuf.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netdb 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netdb.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netif 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netif.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netifapi 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/netifapi.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/opt 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/opt.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/pbuf 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/pbuf.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/raw 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/raw.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sio 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sio.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_asn1 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_asn1.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_msg 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_msg.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_structs 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/snmp_structs.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sockets 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sockets.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/stats 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/stats.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sys 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/sys.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcp 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcp.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcpip 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/tcpip.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/udp 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/lwip/udp.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/etharp 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/etharp.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/loopif 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/loopif.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/ppp_oe 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/ppp_oe.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/slipif 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/include/netif/slipif.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/etharp 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/etharp.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/loopif 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-1.3.2/src/netif/loopif.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/cc 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/cc.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/perf 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/arch/perf.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/lwipopts 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/lwipopts.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/netif/wlif 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/include/netif/wlif.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/netif/wlif 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/if/netif/wlif.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/readme 2.txt delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/LWIP/lwip-port-1.3.2/HD/readme.txt delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/compiler 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/parts 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/SOFTWARE_FRAMEWORK/UTILS/parts.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ard_spi 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ard_spi 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ard_spi.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ard_spi.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ard_tcp 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ard_tcp 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ard_tcp.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ard_tcp.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ard_utils 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ard_utils 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ard_utils.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ard_utils.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/avr32_spi 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/avr32_spi.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/board_init 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/board_init 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/board_init.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/board_init.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/cmd_wl 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/cmd_wl 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/cmd_wl.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/cmd_wl.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/console 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/console 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/console.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/console.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/debug 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/debug.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/fw_download 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/fw_download.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/fw_download_extflash 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/fw_download_extflash.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/license 2.txt delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/license.txt delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/lwip_setup 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/lwip_setup 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/lwip_setup.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/lwip_setup.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/lwipopts 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/lwipopts.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/main 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/main.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/nvram 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/nvram 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/nvram.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/nvram.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/owl_os 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/owl_os.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ping 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ping 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ping.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/ping.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/printf-stdarg 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/printf-stdarg 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/printf-stdarg.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/printf-stdarg.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/timer 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/timer 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/timer.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/timer.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/top_defs 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/top_defs.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/trace 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/trace.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/util 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/util 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/util.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/util.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/wifi_spi 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/wifi_spi.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/wl_cm 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/wl_cm 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/wl_cm.c delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/wl_cm.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/wl_definitions 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/src/wl_definitions.h delete mode 100755 firmware/libraries/WiFi/extras/wifiHD/wifiHD.cproj delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/.cproject delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/.cproject 2 delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/.project delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/.project 2 delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/Release/wifi_dnld.elf delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/CONFIG/conf_access.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/CONFIG/conf_at45dbx.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/Doc/SPB104 product brief.pdf delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/Doc/gettingstarted.pdf delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/ASM/trampoline.x delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/arduino.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/ARDUINO/led.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/evk1105.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/EVK1105/led.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/BOARDS/board.h.ori delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/COMPONENTS/MEMORY/DATA_FLASH/AT45DBX/at45dbx_mem.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/FLASHC/flashc.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/GPIO/gpio.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/exception.x delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/INTC/intc.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/pm_conf_clocks.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/PM/power_clocks_lib.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/SPI/spi.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/DRIVERS/USART/usart.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/SERVICES/MEMORY/CTRL_ACCESS/ctrl_access.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/debug.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/DEBUG/print_funcs.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_cpu.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_exceptions.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_interrupts.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_io.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/INCLUDE/nlao_usart.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LIBS/NEWLIB_ADDONS/libnewlib_addons-at32ucr2-speed_opt.a delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/0512/GCC/link_uc3a0512.lds delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/LINKER_SCRIPTS/AT32UC3A/1256/GCC/link_uc3a1256.lds delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/mrepeat.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/preprocessor.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/stringz.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/PREPROCESSOR/tpaste.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/STARTUP_FILES/GCC/crt0.x delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/compiler 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/compiler.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/conf_isp.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/parts 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/SOFTWARE_FRAMEWORK/UTILS/parts.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/clocks 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/clocks 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/clocks.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/clocks.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/flash_fw 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/flash_fw.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/license 2.txt delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/license.txt delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/nor_flash 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/nor_flash 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/nor_flash.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/nor_flash.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/printf-stdarg 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/printf-stdarg 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/printf-stdarg.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/printf-stdarg.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/startup 2.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/startup 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/startup.c delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/startup.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/wl_fw 2.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/src/wl_fw.h delete mode 100755 firmware/libraries/WiFi/extras/wifi_dnld/wifi_dnld.cproj delete mode 100755 firmware/libraries/WiFi/extras/wifishield.atsln delete mode 100755 firmware/libraries/WiFi/keywords 2.txt delete mode 100755 firmware/libraries/WiFi/keywords.txt delete mode 100755 firmware/libraries/WiFi/library.properties delete mode 100755 firmware/libraries/WiFi/src/WiFi 2.cpp delete mode 100755 firmware/libraries/WiFi/src/WiFi 2.h delete mode 100755 firmware/libraries/WiFi/src/WiFi.cpp delete mode 100755 firmware/libraries/WiFi/src/WiFi.h delete mode 100755 firmware/libraries/WiFi/src/WiFiClient 2.cpp delete mode 100755 firmware/libraries/WiFi/src/WiFiClient 2.h delete mode 100755 firmware/libraries/WiFi/src/WiFiClient.cpp delete mode 100755 firmware/libraries/WiFi/src/WiFiClient.h delete mode 100755 firmware/libraries/WiFi/src/WiFiServer 2.cpp delete mode 100755 firmware/libraries/WiFi/src/WiFiServer 2.h delete mode 100755 firmware/libraries/WiFi/src/WiFiServer.cpp delete mode 100755 firmware/libraries/WiFi/src/WiFiServer.h delete mode 100755 firmware/libraries/WiFi/src/WiFiUdp 2.cpp delete mode 100755 firmware/libraries/WiFi/src/WiFiUdp 2.h delete mode 100755 firmware/libraries/WiFi/src/WiFiUdp.cpp delete mode 100755 firmware/libraries/WiFi/src/WiFiUdp.h delete mode 100755 firmware/libraries/WiFi/src/utility/debug.h delete mode 100755 firmware/libraries/WiFi/src/utility/server_drv.cpp delete mode 100755 firmware/libraries/WiFi/src/utility/server_drv.h delete mode 100755 firmware/libraries/WiFi/src/utility/spi_drv.cpp delete mode 100755 firmware/libraries/WiFi/src/utility/spi_drv.h delete mode 100755 firmware/libraries/WiFi/src/utility/wifi_drv.cpp delete mode 100755 firmware/libraries/WiFi/src/utility/wifi_drv.h delete mode 100755 firmware/libraries/WiFi/src/utility/wifi_spi.h delete mode 100755 firmware/libraries/WiFi/src/utility/wl_definitions.h delete mode 100755 firmware/libraries/WiFi/src/utility/wl_types.h delete mode 100644 firmware/libraries/WiFiManager/LICENSE delete mode 100644 firmware/libraries/WiFiManager/README.md delete mode 100644 firmware/libraries/WiFiManager/WiFiManager.cpp delete mode 100644 firmware/libraries/WiFiManager/WiFiManager.h delete mode 100644 firmware/libraries/WiFiManager/examples/Advanced/Advanced.ino delete mode 100644 firmware/libraries/WiFiManager/examples/Basic/Basic.ino delete mode 100644 firmware/libraries/WiFiManager/examples/NonBlocking/AutoConnectNonBlocking/AutoConnectNonBlocking.ino delete mode 100644 firmware/libraries/WiFiManager/examples/NonBlocking/AutoConnectNonBlockingwParams/AutoConnectNonBlockingwParams.ino delete mode 100644 firmware/libraries/WiFiManager/examples/NonBlocking/OnDemandNonBlocking/onDemandNonBlocking.ino delete mode 100644 firmware/libraries/WiFiManager/examples/Old_examples/AutoConnectWithFeedback/AutoConnectWithFeedback.ino delete mode 100644 firmware/libraries/WiFiManager/examples/Old_examples/AutoConnectWithReset/AutoConnectWithReset.ino delete mode 100644 firmware/libraries/WiFiManager/examples/Old_examples/AutoConnectWithStaticIP/AutoConnectWithStaticIP.ino delete mode 100644 firmware/libraries/WiFiManager/examples/Old_examples/AutoConnectWithTimeout/AutoConnectWithTimeout.ino delete mode 100644 firmware/libraries/WiFiManager/examples/OnDemand/OnDemandConfigPortal/OnDemandConfigPortal.ino delete mode 100644 firmware/libraries/WiFiManager/examples/OnDemand/OnDemandWebPortal/onDemandWebPortal.ino delete mode 100644 firmware/libraries/WiFiManager/examples/Parameters/LittleFS/LittleFSParameters.ino delete mode 100644 firmware/libraries/WiFiManager/examples/Parameters/SPIFFS/AutoConnectWithFSParameters/AutoConnectWithFSParameters.ino delete mode 100644 firmware/libraries/WiFiManager/examples/Parameters/SPIFFS/AutoConnectWithFSParametersAndCustomIP/AutoConnectWithFSParametersAndCustomIP.ino delete mode 100644 firmware/libraries/WiFiManager/examples/ParamsChildClass/ParamsChildClass.ino delete mode 100644 firmware/libraries/WiFiManager/examples/Super/OnDemandConfigPortal/OnDemandConfigPortal.ino delete mode 100644 firmware/libraries/WiFiManager/examples/Tests/wifi_softap/wifi_softap.ino delete mode 100644 firmware/libraries/WiFiManager/examples/Unique/cb/AnonymousCB.ino delete mode 100644 firmware/libraries/WiFiManager/extras/WiFiManager.template.html delete mode 100644 firmware/libraries/WiFiManager/extras/parse.js delete mode 100644 firmware/libraries/WiFiManager/extras/png_signal_strength_master.png delete mode 100644 firmware/libraries/WiFiManager/extras/template.h delete mode 100644 firmware/libraries/WiFiManager/extras/test.html delete mode 100644 firmware/libraries/WiFiManager/keywords.txt delete mode 100644 firmware/libraries/WiFiManager/library.json delete mode 100644 firmware/libraries/WiFiManager/library.properties delete mode 100644 firmware/libraries/WiFiManager/strings_en.h delete mode 100644 firmware/libraries/WiFiManager/travis/common.sh diff --git a/firmware/libraries/APDS9930-master/.gitattributes b/firmware/libraries/APDS9930-master/.gitattributes deleted file mode 100755 index 412eeda..0000000 --- a/firmware/libraries/APDS9930-master/.gitattributes +++ /dev/null @@ -1,22 +0,0 @@ -# Auto detect text files and perform LF normalization -* text=auto - -# Custom for Visual Studio -*.cs diff=csharp -*.sln merge=union -*.csproj merge=union -*.vbproj merge=union -*.fsproj merge=union -*.dbproj merge=union - -# Standard to msysgit -*.doc diff=astextplain -*.DOC diff=astextplain -*.docx diff=astextplain -*.DOCX diff=astextplain -*.dot diff=astextplain -*.DOT diff=astextplain -*.pdf diff=astextplain -*.PDF diff=astextplain -*.rtf diff=astextplain -*.RTF diff=astextplain diff --git a/firmware/libraries/APDS9930-master/.gitignore b/firmware/libraries/APDS9930-master/.gitignore deleted file mode 100755 index 2778edb..0000000 --- a/firmware/libraries/APDS9930-master/.gitignore +++ /dev/null @@ -1,192 +0,0 @@ -################# -## SparkFun Useful stuff -################# - -## AVR Development -*.eep -*.elf -*.lst -*.lss -*.sym -*.d -*.o -*.srec -*.map - -## Notepad++ backup files -*.bak - -## BOM files -*bom* - -################# -## Eclipse -################# - -*.pydevproject -.project -.metadata -bin/ -tmp/ -*.tmp -*.bak -*.swp -*~.nib -local.properties -.classpath -.settings/ -.loadpath - -# External tool builders -.externalToolBuilders/ - -# Locally stored "Eclipse launch configurations" -*.launch - -# CDT-specific -.cproject - -# PDT-specific -.buildpath - - -############# -## Eagle -############# - -# Ignore the board and schematic backup files -*.b#? -*.s#? - - -################# -## Visual Studio -################# - -## Ignore Visual Studio temporary files, build results, and -## files generated by popular Visual Studio add-ons. - -# User-specific files -*.suo -*.user -*.sln.docstates - -# Build results -[Dd]ebug/ -[Rr]elease/ -*_i.c -*_p.c -*.ilk -*.meta -*.obj -*.pch -*.pdb -*.pgc -*.pgd -*.rsp -*.sbr -*.tlb -*.tli -*.tlh -*.tmp -*.vspscc -.builds -*.dotCover - -## TODO: If you have NuGet Package Restore enabled, uncomment this -#packages/ - -# Visual C++ cache files -ipch/ -*.aps -*.ncb -*.opensdf -*.sdf - -# Visual Studio profiler -*.psess -*.vsp - -# ReSharper is a .NET coding add-in -_ReSharper* - -# Installshield output folder -[Ee]xpress - -# DocProject is a documentation generator add-in -DocProject/buildhelp/ -DocProject/Help/*.HxT -DocProject/Help/*.HxC -DocProject/Help/*.hhc -DocProject/Help/*.hhk -DocProject/Help/*.hhp -DocProject/Help/Html2 -DocProject/Help/html - -# Click-Once directory -publish - -# Others -[Bb]in -[Oo]bj -sql -TestResults -*.Cache -ClientBin -stylecop.* -~$* -*.dbmdl -Generated_Code #added for RIA/Silverlight projects - -# Backup & report files from converting an old project file to a newer -# Visual Studio version. Backup files are not needed, because we have git ;-) -_UpgradeReport_Files/ -Backup*/ -UpgradeLog*.XML - - -############ -## Windows -############ - -# Windows image file caches -Thumbs.db - -# Folder config file -Desktop.ini - - -############# -## Python -############# - -*.py[co] - -# Packages -*.egg -*.egg-info -dist -build -eggs -parts -bin -var -sdist -develop-eggs -.installed.cfg - -# Installer logs -pip-log.txt - -# Unit test / coverage reports -.coverage -.tox - -#Translations -*.mo - -#Mr Developer -.mr.developer.cfg - -# Mac crap -.DS_Store diff --git a/firmware/libraries/APDS9930-master/LICENSE b/firmware/libraries/APDS9930-master/LICENSE deleted file mode 100755 index 9d6e5b5..0000000 --- a/firmware/libraries/APDS9930-master/LICENSE +++ /dev/null @@ -1,22 +0,0 @@ -The MIT License (MIT) - -Copyright (c) 2015 Davide Depau - -Permission is hereby granted, free of charge, to any person obtaining a copy -of this software and associated documentation files (the "Software"), to deal -in the Software without restriction, including without limitation the rights -to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -copies of the Software, and to permit persons to whom the Software is -furnished to do so, subject to the following conditions: - -The above copyright notice and this permission notice shall be included in all -copies or substantial portions of the Software. - -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -SOFTWARE. - diff --git a/firmware/libraries/APDS9930-master/README.md b/firmware/libraries/APDS9930-master/README.md deleted file mode 100755 index ce60370..0000000 --- a/firmware/libraries/APDS9930-master/README.md +++ /dev/null @@ -1,92 +0,0 @@ -APDS9930 Ambient Light and Proximity sensor -=========================================== - -This is a fork of the [library from Sparkfun for the APDS-9960 sensor](https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor). It has been adapted to read values from this other model. - -[**Quick-start guide available here**](https://web.archive.org/web/20151224052223/http://davideddu.org/blog/posts/apds-9930-arduino-quickstart/) - -[**Purchase an Avago APDS-9930 Breakout Board here**](http://www.dx.com/p/384037?Utm_rid=14976370&Utm_source=affiliate) - - -# DO NOT EMAIL ME IF YOU HAVE AN ISSUE -It will be deleted without reading. If you have an issue, [create an issue](https://github.com/Depau/APDS9930/issues) here on GitHub. - -# Unmaintained -I'm not going to maintain this library any more. I will merge pull requests, though. Contributions are welcome. Just don't expect anything from me. - -![Avago APDS-9930 Breakout Board](http://img.dxcdn.com/productimages/sku_384037_1.jpg) - -**Note:** even though it says APDS-9960, it's an APDS-9930. That's how I ended up getting one of those. I wanted the RGB sensor. I found this crap in my mailbox. But I decided to write a library for it anyways ;) - -Getting Started ---------------- - -* Download the Git repository as a ZIP ("Download ZIP" button) -* Unzip -* Copy the entire library directory (APDS-9930) to -\/libraries -* Open the Arduino program -* Select File -> Examples -> APDS9930 -> GestureTest -* Plug in your Arduino and APDS-9930 with the following connections - -*-OR-* - -* Use the library manager - -| Arduino Pin | APDS-9930 Board | Function | -|---|---|---| -| 3.3V | VCC | Power | -| GND | GND | Ground | -| A4 | SDA | I²C Data | -| A5 | SCL | I²C Clock | -| 2 | INT | Interrupt | - -*P.S.: you already know you can't use this purple little thing with your 5V Arduino without a level shifter, right? :) In case you don't have a level shifter, you can detach the microcontroller from an Arduino Uno, reconnect the oscillator pins, the RX and TX pins, the reset and the LED/SCK pins back to the board with some jumper wires. You can then power the microcontroller from a 3.3V source (the 3V3 output on the board should work) and connect the sensor directly to the MCU. Look up "Arduino on Breadboard".* - -* Go to Tools -> Board and select your Arduino board -* Go to Tools -> Serial Port and select the COM port of your Arduino board -* Click "Upload" -* Go to Tools -> Serial Monitor -* Ensure the baud rate is set at 9600 baud -* Swipe your hand over the sensor in various directions! - -Repository Contents -------------------- - -* **/examples** - Example sketches for the library (.ino). Run these from the Arduino IDE. -* **/extras** - Additional documentation for the user. These files are ignored by the IDE. -* **/src** - Source files for the library (.cpp, .h). -* **keywords.txt** - Keywords from this library that will be highlighted in the Arduino IDE. -* **library.properties** - General library properties for the Arduino package manager. - -Documentation --------------- - -* **[Quickstart Guide](https://web.archive.org/web/20151224052223/http://davideddu.org/blog/posts/apds-9930-arduino-quickstart/)** - Basic hookup guide for the sensor. -* **[Product Repository](https://github.com/Davideddu/APDS9930)** - Main repository (including hardware files) for the APDS9930 ambient light and proximity sensor. -* **[Installing an Arduino Library Guide](https://learn.sparkfun.com/tutorials/installing-an-arduino-library)** - Basic information on how to install an Arduino library. - - -Version History ---------------- -* master - Adapted for use with APDS-9930 -* [V_1.4.0](https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor_Arduino_Library/tree/V_1.4.0) - Updated to new library structure -* V_1.3.0 - Implemented disableProximitySensor(). Thanks to jmg5150 for catching that! -* V_1.2.0 - Added pinMode line to GestureTest demo to fix interrupt bug with some Arduinos -* V_1.1.0 - Updated GestureTest demo to not freeze with fast swipes -* V_1.0.0: Initial release -* Ambient and RGB light sensing implemented -* Ambient light interrupts working -* Proximity sensing implemented -* Proximity interrupts working - -License Information -------------------- - -This product is _**open source**_! - -Please use, reuse, and modify these files as you see fit. Please maintain attribution to SparkFun Electronics and release anything derivative under the same license. - -Distributed as-is; no warranty is given. - -- Your friends at SparkFun. And Davide Depau :* diff --git a/firmware/libraries/APDS9930-master/examples/AmbientLightInterrupt/AmbientLightInterrupt.ino b/firmware/libraries/APDS9930-master/examples/AmbientLightInterrupt/AmbientLightInterrupt.ino deleted file mode 100755 index 2c44b52..0000000 --- a/firmware/libraries/APDS9930-master/examples/AmbientLightInterrupt/AmbientLightInterrupt.ino +++ /dev/null @@ -1,180 +0,0 @@ -/**************************************************************** -AmbientLightInterrupt.ino -APDS-9930 RGB and Gesture Sensor -Shawn Hymel @ SparkFun Electronics -October 24, 2014 -https://github.com/sparkfun/APDS-9930_RGB_and_Gesture_Sensor - -Tests the ambient light interrupt abilities of the APDS-9930. -Configures the APDS-9930 over I2C and waits for an external -interrupt based on high or low light conditions. Try covering -the sensor with your hand or bringing the sensor close to a -bright light source. You might need to adjust the LIGHT_INT_HIGH -and LIGHT_INT_LOW values to get the interrupt to work correctly. - -Hardware Connections: - -IMPORTANT: The APDS-9930 can only accept 3.3V! - - Arduino Pin APDS-9930 Board Function - - 3.3V VCC Power - GND GND Ground - A4 SDA I2C Data - A5 SCL I2C Clock - 2 INT Interrupt - 13 - LED - -Resources: -Include Wire.h and APDS9930.h - -Development environment specifics: -Written in Arduino 1.0.5 -Tested with SparkFun Arduino Pro Mini 3.3V - -This code is beerware; if you see me (or any other SparkFun -employee) at the local, and you've found our code helpful, please -buy us a round! - -Distributed as-is; no warranty is given. -****************************************************************/ - -#define DUMP_REGS - -#include -#include - -// Pins -#define APDS9930_INT 2 // Needs to be an interrupt pin -#define LED_PIN 13 // LED for showing interrupt - -// Constants -#define LIGHT_INT_HIGH 1000 // High light level for interrupt -#define LIGHT_INT_LOW 10 // Low light level for interrupt - -// Global variables -APDS9930 apds = APDS9930(); -float ambient_light = 0; -uint16_t ch0 = 0; -uint16_t ch1 = 1; -volatile bool isr_flag = false; -uint16_t threshold = 0; - -void setup() { - - // Set LED as output - pinMode(LED_PIN, OUTPUT); - pinMode(APDS9930_INT, INPUT); - - // Initialize Serial port - Serial.begin(9600); - Serial.println(); - Serial.println(F("----------------------------")); - Serial.println(F("APDS-9930 - Light Interrupts")); - Serial.println(F("----------------------------")); - - // Initialize interrupt service routine - attachInterrupt(0, interruptRoutine, FALLING); - - // Initialize APDS-9930 (configure I2C and initial values) - if ( apds.init() ) { - Serial.println(F("APDS-9930 initialization complete")); - } else { - Serial.println(F("Something went wrong during APDS-9930 init!")); - } - - // Set high and low interrupt thresholds - if ( !apds.setLightIntLowThreshold(LIGHT_INT_LOW) ) { - Serial.println(F("Error writing low threshold")); - } - if ( !apds.setLightIntHighThreshold(LIGHT_INT_HIGH) ) { - Serial.println(F("Error writing high threshold")); - } - - // Start running the APDS-9930 light sensor (no interrupts) - if ( apds.enableLightSensor(false) ) { - Serial.println(F("Light sensor is now running")); - } else { - Serial.println(F("Something went wrong during light sensor init!")); - } - - // Read high and low interrupt thresholds - if ( !apds.getLightIntLowThreshold(threshold) ) { - Serial.println(F("Error reading low threshold")); - } else { - Serial.print(F("Low Threshold: ")); - Serial.println(threshold); - } - if ( !apds.getLightIntHighThreshold(threshold) ) { - Serial.println(F("Error reading high threshold")); - } else { - Serial.print(F("High Threshold: ")); - Serial.println(threshold); - } - - // Enable interrupts - if ( !apds.setAmbientLightIntEnable(1) ) { - Serial.println(F("Error enabling interrupts")); - } - -#ifdef DUMP_REGS - /* Register dump */ - uint8_t reg; - uint8_t val; - - for(reg = 0x00; reg <= 0x19; reg++) { - if( (reg != 0x10) && \ - (reg != 0x11) ) - { - apds.wireReadDataByte(reg, val); - Serial.print(reg, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); - } - } - apds.wireReadDataByte(0x1E, val); - Serial.print(0x1E, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); -#endif - - // Wait for initialization and calibration to finish - delay(500); -} - -void loop() { - - // If interrupt occurs, print out the light levels - if ( isr_flag ) { - - // Read the light levels (ambient, red, green, blue) and print - if ( !apds.readAmbientLightLux(ambient_light) || - !apds.readCh0Light(ch0) || - !apds.readCh1Light(ch1) ) { - Serial.println("Error reading light values"); - } else { - Serial.print("Interrupt! Ambient: "); - Serial.print(ambient_light); - Serial.print(F(" Ch0: ")); - Serial.print(ch0); - Serial.print(F(" Ch1: ")); - Serial.println(ch1); - } - - // Turn on LED for a half a second - digitalWrite(LED_PIN, HIGH); - delay(500); - digitalWrite(LED_PIN, LOW); - - // Reset flag and clear APDS-9930 interrupt (IMPORTANT!) - isr_flag = false; - if ( !apds.clearAmbientLightInt() ) { - Serial.println("Error clearing interrupt"); - } - - } -} - -void interruptRoutine() { - isr_flag = true; -} \ No newline at end of file diff --git a/firmware/libraries/APDS9930-master/examples/AmbientLightLED/AmbientLightLED.ino b/firmware/libraries/APDS9930-master/examples/AmbientLightLED/AmbientLightLED.ino deleted file mode 100755 index 1cd8869..0000000 --- a/firmware/libraries/APDS9930-master/examples/AmbientLightLED/AmbientLightLED.ino +++ /dev/null @@ -1,113 +0,0 @@ -/**************************************************************** -AmbientLightLED.ino - -Tests the ambient light sensing abilities of the -APDS-9930. Configures APDS-9930 over I2C and polls the sensor for -ambient light levels, which are displayed over the -serial console. - -Hardware Connections: - -IMPORTANT: The APDS-9930 can only accept 3.3V! - - Arduino Pin APDS-9930 Board Function - - 3.3V VCC Power - GND GND Ground - A4 SDA I2C Data - A5 SCL I2C Clock - - 10 (pwm) LED anode - -Distributed as-is; no warranty is given. -****************************************************************/ - -#define PWM_LED_PIN 10 -#define DUMP_REGS - -#include -#include - -// Global Variables -APDS9930 apds = APDS9930(); -float ambient_light = 0; // can also be an unsigned long -uint16_t ch0 = 0; -uint16_t ch1 = 1; -float max_light = 0; - -void setup() { - //analogReference(EXTERNAL); - pinMode(PWM_LED_PIN, OUTPUT); - - // Initialize Serial port - Serial.begin(9600); - Serial.println(); - Serial.println(F("--------------------------------")); - Serial.println(F("APDS-9930 - Ambient light sensor")); - Serial.println(F("--------------------------------")); - - // Initialize APDS-9930 (configure I2C and initial values) - if ( apds.init() ) { - Serial.println(F("APDS-9930 initialization complete")); - } else { - Serial.println(F("Something went wrong during APDS-9930 init!")); - } - - // Start running the APDS-9930 light sensor (no interrupts) - if ( apds.enableLightSensor(false) ) { - Serial.println(F("Light sensor is now running")); - } else { - Serial.println(F("Something went wrong during light sensor init!")); - } - -#ifdef DUMP_REGS - /* Register dump */ - uint8_t reg; - uint8_t val; - - for(reg = 0x00; reg <= 0x19; reg++) { - if( (reg != 0x10) && \ - (reg != 0x11) ) - { - apds.wireReadDataByte(reg, val); - Serial.print(reg, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); - } - } - apds.wireReadDataByte(0x1E, val); - Serial.print(0x1E, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); -#endif - - // Wait for initialization and calibration to finish - delay(500); -} - -void loop() { - - // Read the light levels (ambient, red, green, blue) - if ( !apds.readAmbientLightLux(ambient_light) || - !apds.readCh0Light(ch0) || - !apds.readCh1Light(ch1) ) { - Serial.println(F("Error reading light values")); - } else { - Serial.print(F("Ambient: ")); - Serial.print(ambient_light); - Serial.print(F(" Ch0: ")); - Serial.print(ch0); - Serial.print(F(" Ch1: ")); - Serial.println(ch1); - - if ( ambient_light > max_light ) { - max_light = ambient_light; - } - ambient_light = map(ambient_light, 0, max_light, 0, 1023); - analogWrite(PWM_LED_PIN, ambient_light); - - } - - // Wait 1 second before next reading - delay(50); -} \ No newline at end of file diff --git a/firmware/libraries/APDS9930-master/examples/AmbientLightSensor/AmbientLightSensor.ino b/firmware/libraries/APDS9930-master/examples/AmbientLightSensor/AmbientLightSensor.ino deleted file mode 100755 index 9d390fe..0000000 --- a/firmware/libraries/APDS9930-master/examples/AmbientLightSensor/AmbientLightSensor.ino +++ /dev/null @@ -1,120 +0,0 @@ -/**************************************************************** -AmbientLightSensor.ino -APDS-9930 Ambient light and proximity sensor -Davide Depau -December 11, 2015 -https://github.com/Davideddu/APDS9930 - -Shawn Hymel @ SparkFun Electronics -October 15, 2014 -https://github.com/sparkfun/APDS-9930_RGB_and_Gesture_Sensor - -Tests thembient light sensing abilities of the -APDS-9930. Configures APDS-9930 over I2C and polls the sensor for -ambient light levels, which are displayed over the -serial console. - -Hardware Connections: - -IMPORTANT: The APDS-9930 can only accept 3.3V! - - Arduino Pin APDS-9930 Board Function - - 3.3V VCC Power - GND GND Ground - A4 SDA I2C Data - A5 SCL I2C Clock - -Resources: -Include Wire.h and APDS-9930.h - -Development environment specifics: -Written in Arduino 1.6.5 -Tested with Arduino Uno and Mega. - -This code is beerware; if you see me (or any other SparkFun -employee) at the local, and you've found our code helpful, please -buy us a round! - -Distributed as-is; no warranty is given. -****************************************************************/ - -#define DUMP_REGS - -#include -#include - -// Global Variables -APDS9930 apds = APDS9930(); -float ambient_light = 0; // can also be an unsigned long -uint16_t ch0 = 0; -uint16_t ch1 = 1; - -void setup() { - //analogReference(EXTERNAL); - - // Initialize Serial port - Serial.begin(9600); - Serial.println(); - Serial.println(F("--------------------------------")); - Serial.println(F("APDS-9930 - Ambient light sensor")); - Serial.println(F("--------------------------------")); - - // Initialize APDS-9930 (configure I2C and initial values) - if ( apds.init() ) { - Serial.println(F("APDS-9930 initialization complete")); - } else { - Serial.println(F("Something went wrong during APDS-9930 init!")); - } - - // Start running the APDS-9930 light sensor (no interrupts) - if ( apds.enableLightSensor(false) ) { - Serial.println(F("Light sensor is now running")); - } else { - Serial.println(F("Something went wrong during light sensor init!")); - } - -#ifdef DUMP_REGS - /* Register dump */ - uint8_t reg; - uint8_t val; - - for(reg = 0x00; reg <= 0x19; reg++) { - if( (reg != 0x10) && \ - (reg != 0x11) ) - { - apds.wireReadDataByte(reg, val); - Serial.print(reg, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); - } - } - apds.wireReadDataByte(0x1E, val); - Serial.print(0x1E, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); -#endif - - // Wait for initialization and calibration to finish - delay(500); -} - -void loop() { - - // Read the light levels (ambient, red, green, blue) - if ( !apds.readAmbientLightLux(ambient_light) || - !apds.readCh0Light(ch0) || - !apds.readCh1Light(ch1) ) { - Serial.println(F("Error reading light values")); - } else { - Serial.print(F("Ambient: ")); - Serial.print(ambient_light); - Serial.print(F(" Ch0: ")); - Serial.print(ch0); - Serial.print(F(" Ch1: ")); - Serial.println(ch1); - } - - // Wait 1 second before next reading - delay(1000); -} \ No newline at end of file diff --git a/firmware/libraries/APDS9930-master/examples/AmbientLightToneAC/AmbientLightToneAC.ino b/firmware/libraries/APDS9930-master/examples/AmbientLightToneAC/AmbientLightToneAC.ino deleted file mode 100755 index ff369b3..0000000 --- a/firmware/libraries/APDS9930-master/examples/AmbientLightToneAC/AmbientLightToneAC.ino +++ /dev/null @@ -1,108 +0,0 @@ -/**************************************************************** -AmbientLightToneAC.ino - -Tests the ambient light sensing abilities of the -APDS-9930. Configures APDS-9930 over I2C and polls the sensor for -ambient light levels, which are displayed over the -serial console. - -Hardware Connections: - -IMPORTANT: The APDS-9930 can only accept 3.3V! - - Arduino Pin APDS-9930 Board Function - - 3.3V VCC Power - GND GND Ground - A4 SDA I2C Data - A5 SCL I2C Clock - -Connect speakers to the correct pins. Check toneAC.h for more info. - -Distributed as-is; no warranty is given. -****************************************************************/ - -#define DUMP_REGS - -#include -#include -#include - -// Global Variables -APDS9930 apds = APDS9930(); -float ambient_light = 0; // can also be an unsigned long -uint16_t ch0 = 0; -uint16_t ch1 = 1; -float max_light = 0; - -void setup() { - //analogReference(EXTERNAL); - - // Initialize Serial port - Serial.begin(9600); - Serial.println(); - Serial.println(F("--------------------------------")); - Serial.println(F("APDS-9930 - Ambient light sensor")); - Serial.println(F("--------------------------------")); - - // Initialize APDS-9930 (configure I2C and initial values) - if ( apds.init() ) { - Serial.println(F("APDS-9930 initialization complete")); - } else { - Serial.println(F("Something went wrong during APDS-9930 init!")); - } - - // Start running the APDS-9930 light sensor (no interrupts) - if ( apds.enableLightSensor(false) ) { - Serial.println(F("Light sensor is now running")); - } else { - Serial.println(F("Something went wrong during light sensor init!")); - } - -#ifdef DUMP_REGS - /* Register dump */ - uint8_t reg; - uint8_t val; - - for(reg = 0x00; reg <= 0x19; reg++) { - if( (reg != 0x10) && \ - (reg != 0x11) ) - { - apds.wireReadDataByte(reg, val); - Serial.print(reg, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); - } - } - apds.wireReadDataByte(0x1E, val); - Serial.print(0x1E, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); -#endif - - // Wait for initialization and calibration to finish - delay(500); -} - -void loop() { - - // Read the light levels (ambient, red, green, blue) - if ( !apds.readAmbientLightLux(ambient_light) || - !apds.readCh0Light(ch0) || - !apds.readCh1Light(ch1) ) { - Serial.println(F("Error reading light values")); - } else { - Serial.print(F("Ambient: ")); - Serial.print(ambient_light); - Serial.print(F(" Ch0: ")); - Serial.print(ch0); - Serial.print(F(" Ch1: ")); - Serial.println(ch1); - - unsigned long freq = map(ch0, 0, 1024, 60, 16000); - toneAC(freq, 10, 50, true); - } - - // Wait 1 second before next reading - delay(50); -} \ No newline at end of file diff --git a/firmware/libraries/APDS9930-master/examples/ProximityInterrupt/ProximityInterrupt.ino b/firmware/libraries/APDS9930-master/examples/ProximityInterrupt/ProximityInterrupt.ino deleted file mode 100755 index b93e914..0000000 --- a/firmware/libraries/APDS9930-master/examples/ProximityInterrupt/ProximityInterrupt.ino +++ /dev/null @@ -1,157 +0,0 @@ -/**************************************************************** -ProximityInterrupt.ino -APDS-9930 Ambient light and proximity sensor -Davide Depau -December 11, 2015 -https://github.com/Davideddu/APDS9930 - -Shawn Hymel @ SparkFun Electronics -October 24, 2014 -https://github.com/sparkfun/APDS-9930_RGB_and_Gesture_Sensor - -Tests the proximity interrupt abilities of the APDS-9930. -Configures the APDS-9930 over I2C and waits for an external -interrupt based on high or low proximity conditions. Move your -hand near the sensor and watch the LED on pin 13. - -Hardware Connections: - -IMPORTANT: The APDS-9930 can only accept 3.3V! - - Arduino Pin APDS-9930 Board Function - - 3.3V VCC Power - GND GND Ground - A4 SDA I2C Data - A5 SCL I2C Clock - 2 INT Interrupt - 13 - LED - -Resources: -Include Wire.h and APDS9930.h - -Development environment specifics: -Written in Arduino 1.6.5 -Tested with Arduino Uno and Mega - -This code is beerware; if you see me (or any other SparkFun -employee) at the local, and you've found our code helpful, please -buy us a round! - -Distributed as-is; no warranty is given. -****************************************************************/ - -#define DUMP_REGS - -#include -#include - -// Pins -#define APDS9930_INT 2 // Needs to be an interrupt pin -#define LED_PIN 13 // LED for showing interrupt - -// Constants -#define PROX_INT_HIGH 600 // Proximity level for interrupt -#define PROX_INT_LOW 0 // No far interrupt - -// Global variables -APDS9930 apds = APDS9930(); -uint16_t proximity_data = 0; -volatile bool isr_flag = false; - -void setup() { - - // Set LED as output - pinMode(LED_PIN, OUTPUT); - pinMode(APDS9930_INT, INPUT); - - // Initialize Serial port - Serial.begin(9600); - Serial.println(); - Serial.println(F("------------------------------")); - Serial.println(F("APDS-9930 - ProximityInterrupt")); - Serial.println(F("------------------------------")); - - // Initialize interrupt service routine - attachInterrupt(0, interruptRoutine, FALLING); - - // Initialize APDS-9930 (configure I2C and initial values) - if ( apds.init() ) { - Serial.println(F("APDS-9930 initialization complete")); - } else { - Serial.println(F("Something went wrong during APDS-9930 init!")); - } - - // Adjust the Proximity sensor gain - if ( !apds.setProximityGain(PGAIN_2X) ) { - Serial.println(F("Something went wrong trying to set PGAIN")); - } - - // Set proximity interrupt thresholds - if ( !apds.setProximityIntLowThreshold(PROX_INT_LOW) ) { - Serial.println(F("Error writing low threshold")); - } - if ( !apds.setProximityIntHighThreshold(PROX_INT_HIGH) ) { - Serial.println(F("Error writing high threshold")); - } - - // Start running the APDS-9930 proximity sensor (interrupts) - if ( apds.enableProximitySensor(true) ) { - Serial.println(F("Proximity sensor is now running")); - } else { - Serial.println(F("Something went wrong during sensor init!")); - } - -#ifdef DUMP_REGS - /* Register dump */ - uint8_t reg; - uint8_t val; - - for(reg = 0x00; reg <= 0x19; reg++) { - if( (reg != 0x10) && \ - (reg != 0x11) ) - { - apds.wireReadDataByte(reg, val); - Serial.print(reg, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); - } - } - apds.wireReadDataByte(0x1E, val); - Serial.print(0x1E, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); -#endif - -} - -void loop() { - - // If interrupt occurs, print out the proximity level - if ( isr_flag ) { - - // Read proximity level and print it out - if ( !apds.readProximity(proximity_data) ) { - Serial.println("Error reading proximity value"); - } else { - Serial.print("Proximity detected! Level: "); - Serial.println(proximity_data); - } - - // Turn on LED for a half a second - digitalWrite(LED_PIN, HIGH); - delay(500); - digitalWrite(LED_PIN, LOW); - - // Reset flag and clear APDS-9930 interrupt (IMPORTANT!) - isr_flag = false; - if ( !apds.clearProximityInt() ) { - Serial.println("Error clearing interrupt"); - } - - } -} - -void interruptRoutine() { - isr_flag = true; -} \ No newline at end of file diff --git a/firmware/libraries/APDS9930-master/examples/ProximityLED/ProximityLED.ino b/firmware/libraries/APDS9930-master/examples/ProximityLED/ProximityLED.ino deleted file mode 100755 index 1694b4e..0000000 --- a/firmware/libraries/APDS9930-master/examples/ProximityLED/ProximityLED.ino +++ /dev/null @@ -1,131 +0,0 @@ -/**************************************************************** -ProximityLED.ino -Davide Depau -December 11, 2015 -https://github.com/Davideddu/APDS9930 - -https://github.com/sparkfun/APDS-9930_RGB_and_Gesture_Sensor - -Tests the proximity sensing abilities of the APDS-9930. -Configures the APDS-9930 over I2C and polls for the distance to -the object nearest the sensor, then turns on an LED accordingly. - -Hardware Connections: - -IMPORTANT: The APDS-9930 can only accept 3.3V! - - Arduino Pin APDS-9930 Board Function - - 3.3V VCC Power - GND GND Ground - A4 SDA I2C Data - A5 SCL I2C Clock - - 10 (PWM) LED Anode - -Resources: -Include Wire.h and APDS9930.h - -Development environment specifics: -Written in Sublime Text + Stino + Arduino 1.7.2 -Tested with Arduino Uno + level shifter - -This code is chocolateware; if you see me at the grocery store, -and you've found our code helpful, please buy us me a chocolate bar! :D - -Distributed as-is; no warranty is given. -****************************************************************/ - -#define DUMP_REGS -#define PWM_LED_PIN 10 - -#include -#include - -// Global Variables -APDS9930 apds = APDS9930(); -uint16_t proximity_data = 0; -int proximity_max = 0; - -void setup() { - //analogReference(EXTERNAL); - pinMode(PWM_LED_PIN, OUTPUT); - - // Initialize Serial port - Serial.begin(9600); - Serial.println(); - Serial.println(F("------------------------")); - Serial.println(F("APDS-9930 - ProximityLED")); - Serial.println(F("------------------------")); - - // Initialize APDS-9930 (configure I2C and initial values) - if ( apds.init() ) { - Serial.println(F("APDS-9930 initialization complete")); - } else { - Serial.println(F("Something went wrong during APDS-9930 init!")); - } - - // Adjust the Proximity sensor gain - if ( !apds.setProximityGain(PGAIN_1X) ) { - Serial.println(F("Something went wrong trying to set PGAIN")); - } - - // Start running the APDS-9930 proximity sensor (no interrupts) - if ( apds.enableProximitySensor(false) ) { - Serial.println(F("Proximity sensor is now running")); - } else { - Serial.println(F("Something went wrong during sensor init!")); - } - -#ifdef DUMP_REGS - /* Register dump */ - uint8_t reg; - uint8_t val; - - for(reg = 0x00; reg <= 0x19; reg++) { - if( (reg != 0x10) && \ - (reg != 0x11) ) - { - apds.wireReadDataByte(reg, val); - Serial.print(reg, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); - } - } - apds.wireReadDataByte(0x1E, val); - Serial.print(0x1E, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); -#endif -} - -void loop() { - - // Read the proximity value - if ( !apds.readProximity(proximity_data) ) { - Serial.println("Error reading proximity value"); - } else { - Serial.print("Proximity: "); - Serial.print(proximity_data); - - // This is an ugly hack to reduce sensor noise. - // You may want to adjust POFFSET instead. - /* - proximity_data -= 200; - if (proximity_data > 50000) { - proximity_data = 0; - } - if (proximity_data > proximity_max) { - proximity_max = proximity_data; - } - proximity_data = map(proximity_data, 0, proximity_max, 0, 1023); - */ - - Serial.print(F(" Remapped: ")); - Serial.println(proximity_data); - analogWrite(PWM_LED_PIN, proximity_data); - } - - // Wait 250 ms before next reading - delay(10); -} \ No newline at end of file diff --git a/firmware/libraries/APDS9930-master/examples/ProximitySensor/ProximitySensor.ino b/firmware/libraries/APDS9930-master/examples/ProximitySensor/ProximitySensor.ino deleted file mode 100755 index 1fe2054..0000000 --- a/firmware/libraries/APDS9930-master/examples/ProximitySensor/ProximitySensor.ino +++ /dev/null @@ -1,113 +0,0 @@ -/**************************************************************** -ProximitySensor.ino -APDS-9930 ambient light and proximity sensor -Davide Depau -December 11, 2015 -https://github.com/Davideddu/APDS9930 - -Shawn Hymel @ SparkFun Electronics -October 28, 2014 -https://github.com/sparkfun/APDS-9960_RGB_and_Gesture_Sensor - -Tests the proximity sensing abilities of the APDS-9930. -Configures the APDS-9930 over I2C and polls for the distance to -the object nearest the sensor. - -Hardware Connections: - -IMPORTANT: The APDS-9930 can only accept 3.3V! - - Arduino Pin APDS-9930 Board Function - - 3.3V VCC Power - GND GND Ground - A4 SDA I2C Data - A5 SCL I2C Clock - -Resources: -Include Wire.h and SparkFun_APDS-9930.h - -Development environment specifics: -Written in Arduino 1.0.5 -Tested with SparkFun Arduino Pro Mini 3.3V - -This code is beerware; if you see me (or any other SparkFun -employee) at the local, and you've found our code helpful, please -buy us a round! - -Distributed as-is; no warranty is given. -****************************************************************/ - -#define DUMP_REGS - -#include -#include - -// Global Variables -APDS9930 apds = APDS9930(); -uint16_t proximity_data = 0; - -void setup() { - //analogReference(EXTERNAL); - - // Initialize Serial port - Serial.begin(9600); - Serial.println(); - Serial.println(F("---------------------------")); - Serial.println(F("APDS-9930 - ProximitySensor")); - Serial.println(F("---------------------------")); - - // Initialize APDS-9930 (configure I2C and initial values) - if ( apds.init() ) { - Serial.println(F("APDS-9930 initialization complete")); - } else { - Serial.println(F("Something went wrong during APDS-9930 init!")); - } - - // // Adjust the Proximity sensor gain - // if ( !apds.setProximityGain(PGAIN_2X) ) { - // Serial.println(F("Something went wrong trying to set PGAIN")); - // } - - // Start running the APDS-9930 proximity sensor (no interrupts) - if ( apds.enableProximitySensor(false) ) { - Serial.println(F("Proximity sensor is now running")); - } else { - Serial.println(F("Something went wrong during sensor init!")); - } - -#ifdef DUMP_REGS - /* Register dump */ - uint8_t reg; - uint8_t val; - - for(reg = 0x00; reg <= 0x19; reg++) { - if( (reg != 0x10) && \ - (reg != 0x11) ) - { - apds.wireReadDataByte(reg, val); - Serial.print(reg, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); - } - } - apds.wireReadDataByte(0x1E, val); - Serial.print(0x1E, HEX); - Serial.print(": 0x"); - Serial.println(val, HEX); -#endif -} - -void loop() { - - // Read the proximity value - if ( !apds.readProximity(proximity_data) ) { - Serial.println("Error reading proximity value"); - } else { - Serial.print("Proximity: "); - Serial.println(proximity_data); - } - - // Wait 250 ms before next reading - delay(250); -} \ No newline at end of file diff --git a/firmware/libraries/APDS9930-master/keywords.txt b/firmware/libraries/APDS9930-master/keywords.txt deleted file mode 100755 index e69de29..0000000 diff --git a/firmware/libraries/APDS9930-master/library.properties b/firmware/libraries/APDS9930-master/library.properties deleted file mode 100755 index 7487b16..0000000 --- a/firmware/libraries/APDS9930-master/library.properties +++ /dev/null @@ -1,9 +0,0 @@ -name=APDS-9930 Ambient Light and Proximity Sensor -version=1.5.1 -author=Davide Depau -maintainer=Davide Depau -sentence=Library for the Avago APDS-9930 sensor -paragraph=This library works with the breakout board for the Avago APDS-9930 proximity and light sensor -category=Sensors -url=https://github.com/Davideddu/APDS9930 -architectures=* diff --git a/firmware/libraries/APDS9930-master/src/APDS9930.cpp b/firmware/libraries/APDS9930-master/src/APDS9930.cpp deleted file mode 100755 index ccfd0ff..0000000 --- a/firmware/libraries/APDS9930-master/src/APDS9930.cpp +++ /dev/null @@ -1,1147 +0,0 @@ -/** - * @file APDS-9930.cpp - * @brief Library for the SparkFun APDS-9930 breakout board - * @author Shawn Hymel (SparkFun Electronics) - * - * @copyright This code is public domain but you buy me a beer if you use - * this and we meet someday (Beerware license). - * - * This library interfaces the Avago APDS-9930 to Arduino over I2C. The library - * relies on the Arduino Wire (I2C) library. to use the library, instantiate an - * APDS9930 object, call init(), and call the appropriate functions. - * - * APDS-9930 current draw tests (default parameters): - * Off: 1mA - * Waiting for gesture: 14mA - * Gesture in progress: 35mA - */ - - #include - #include - - #include "APDS9930.h" - -/** - * @brief Constructor - Instantiates APDS9930 object - */ -APDS9930::APDS9930() -{ - -} - -/** - * @brief Destructor - */ -APDS9930::~APDS9930() -{ - -} - -/** - * @brief Configures I2C communications and initializes registers to defaults - * - * @return True if initialized successfully. False otherwise. - */ -bool APDS9930::init() -{ - uint8_t id; - - /* Initialize I2C */ - Wire.begin(); - - /* Read ID register and check against known values for APDS-9930 */ - if( !wireReadDataByte(APDS9930_ID, id) ) { - Serial.println(F("ID read")); - return false; - } - if( !(id == APDS9930_ID_1 || id == APDS9930_ID_2) ) { - Serial.println(F("ID check")); - Serial.println(String("ID is ") + String(id, HEX)); - //return false; - } - - /* Set ENABLE register to 0 (disable all features) */ - if( !setMode(ALL, OFF) ) { - Serial.println(F("Regs off")); - return false; - } - - /* Set default values for ambient light and proximity registers */ - if( !wireWriteDataByte(APDS9930_ATIME, DEFAULT_ATIME) ) { - return false; - } - if( !wireWriteDataByte(APDS9930_WTIME, DEFAULT_WTIME) ) { - return false; - } - if( !wireWriteDataByte(APDS9930_PPULSE, DEFAULT_PPULSE) ) { - return false; - } - if( !wireWriteDataByte(APDS9930_POFFSET, DEFAULT_POFFSET) ) { - return false; - } - if( !wireWriteDataByte(APDS9930_CONFIG, DEFAULT_CONFIG) ) { - return false; - } - if( !setLEDDrive(DEFAULT_PDRIVE) ) { - return false; - } - if( !setProximityGain(DEFAULT_PGAIN) ) { - return false; - } - if( !setAmbientLightGain(DEFAULT_AGAIN) ) { - return false; - } - if( !setProximityDiode(DEFAULT_PDIODE) ) { - return false; - } - if( !setProximityIntLowThreshold(DEFAULT_PILT) ) { - return false; - } - if( !setProximityIntHighThreshold(DEFAULT_PIHT) ) { - return false; - } - if( !setLightIntLowThreshold(DEFAULT_AILT) ) { - return false; - } - if( !setLightIntHighThreshold(DEFAULT_AIHT) ) { - return false; - } - if( !wireWriteDataByte(APDS9930_PERS, DEFAULT_PERS) ) { - return false; - } - - return true; -} - -/******************************************************************************* - * Public methods for controlling the APDS-9930 - ******************************************************************************/ - -/** - * @brief Reads and returns the contents of the ENABLE register - * - * @return Contents of the ENABLE register. 0xFF if error. - */ -uint8_t APDS9930::getMode() -{ - uint8_t enable_value; - - /* Read current ENABLE register */ - if( !wireReadDataByte(APDS9930_ENABLE, enable_value) ) { - return ERROR; - } - - return enable_value; -} - -/** - * @brief Enables or disables a feature in the APDS-9930 - * - * @param[in] mode which feature to enable - * @param[in] enable ON (1) or OFF (0) - * @return True if operation success. False otherwise. - */ -bool APDS9930::setMode(uint8_t mode, uint8_t enable) -{ - uint8_t reg_val; - - /* Read current ENABLE register */ - reg_val = getMode(); - if( reg_val == ERROR ) { - return false; - } - - /* Change bit(s) in ENABLE register */ - enable = enable & 0x01; - if( mode >= 0 && mode <= 6 ) { - if (enable) { - reg_val |= (1 << mode); - } else { - reg_val &= ~(1 << mode); - } - } else if( mode == ALL ) { - if (enable) { - reg_val = 0x7F; - } else { - reg_val = 0x00; - } - } - - /* Write value back to ENABLE register */ - if( !wireWriteDataByte(APDS9930_ENABLE, reg_val) ) { - return false; - } - - return true; -} - -/** - * @brief Starts the light (Ambient/IR) sensor on the APDS-9930 - * - * @param[in] interrupts true to enable hardware interrupt on high or low light - * @return True if sensor enabled correctly. False on error. - */ -bool APDS9930::enableLightSensor(bool interrupts) -{ - - /* Set default gain, interrupts, enable power, and enable sensor */ - if( !setAmbientLightGain(DEFAULT_AGAIN) ) { - return false; - } - if( interrupts ) { - if( !setAmbientLightIntEnable(1) ) { - return false; - } - } else { - if( !setAmbientLightIntEnable(0) ) { - return false; - } - } - if( !enablePower() ){ - return false; - } - if( !setMode(AMBIENT_LIGHT, 1) ) { - return false; - } - - return true; - -} - -/** - * @brief Ends the light sensor on the APDS-9930 - * - * @return True if sensor disabled correctly. False on error. - */ -bool APDS9930::disableLightSensor() -{ - if( !setAmbientLightIntEnable(0) ) { - return false; - } - if( !setMode(AMBIENT_LIGHT, 0) ) { - return false; - } - - return true; -} - -/** - * @brief Starts the proximity sensor on the APDS-9930 - * - * @param[in] interrupts true to enable hardware external interrupt on proximity - * @return True if sensor enabled correctly. False on error. - */ -bool APDS9930::enableProximitySensor(bool interrupts) -{ - /* Set default gain, LED, interrupts, enable power, and enable sensor */ - if( !setProximityGain(DEFAULT_PGAIN) ) { - return false; - } - if( !setLEDDrive(DEFAULT_PDRIVE) ) { - return false; - } - if( interrupts ) { - if( !setProximityIntEnable(1) ) { - return false; - } - } else { - if( !setProximityIntEnable(0) ) { - return false; - } - } - if( !enablePower() ){ - return false; - } - if( !setMode(PROXIMITY, 1) ) { - return false; - } - - return true; -} - -/** - * @brief Ends the proximity sensor on the APDS-9930 - * - * @return True if sensor disabled correctly. False on error. - */ -bool APDS9930::disableProximitySensor() -{ - if( !setProximityIntEnable(0) ) { - return false; - } - if( !setMode(PROXIMITY, 0) ) { - return false; - } - - return true; -} - -/** - * Turn the APDS-9930 on - * - * @return True if operation successful. False otherwise. - */ -bool APDS9930::enablePower() -{ - if( !setMode(POWER, 1) ) { - return false; - } - - return true; -} - -/** - * Turn the APDS-9930 off - * - * @return True if operation successful. False otherwise. - */ -bool APDS9930::disablePower() -{ - if( !setMode(POWER, 0) ) { - return false; - } - - return true; -} - -/******************************************************************************* - * Ambient light sensor controls - ******************************************************************************/ - -/** - * @brief Reads the ambient (clear) light level as a 16-bit value - * - * @param[out] val value of the light sensor. - * @return True if operation successful. False otherwise. - */ -bool APDS9930::readAmbientLightLux(float &val) -{ - uint16_t Ch0; - uint16_t Ch1; - - /* Read value from channel 0 */ - if( !readCh0Light(Ch0) ) { - return false; - } - - /* Read value from channel 1 */ - if( !readCh1Light(Ch1) ) { - return false; - } - - val = floatAmbientToLux(Ch0, Ch1); - return true; -} - -bool APDS9930::readAmbientLightLux(unsigned long &val) -{ - uint16_t Ch0; - uint16_t Ch1; - - /* Read value from channel 0 */ - if( !readCh0Light(Ch0) ) { - return false; - } - - /* Read value from channel 1 */ - if( !readCh1Light(Ch1) ) { - return false; - } - - val = ulongAmbientToLux(Ch0, Ch1); - return true; -} - -float APDS9930::floatAmbientToLux(uint16_t Ch0, uint16_t Ch1) -{ - uint8_t x[4]={1,8,16,120}; - float ALSIT = 2.73 * (256 - DEFAULT_ATIME); - float iac = max(Ch0 - B * Ch1, C * Ch0 - D * Ch1); - if (iac < 0) iac = 0; - float lpc = GA * DF / (ALSIT * x[getAmbientLightGain()]); - return iac * lpc; -} - -unsigned long APDS9930::ulongAmbientToLux(uint16_t Ch0, uint16_t Ch1) -{ - uint8_t x[4]={1,8,16,120}; - unsigned long ALSIT = 2.73 * (256 - DEFAULT_ATIME); - unsigned long iac = max(Ch0 - B * Ch1, C * Ch0 - D * Ch1); - if (iac < 0) iac = 0; - unsigned long lpc = GA * DF / (ALSIT * x[getAmbientLightGain()]); - return iac * lpc; -} - -bool APDS9930::readCh0Light(uint16_t &val) -{ - uint8_t val_byte; - val = 0; - - /* Read value from channel 0 */ - if( !wireReadDataByte(APDS9930_Ch0DATAL, val_byte) ) { - return false; - } - val = val_byte; - if( !wireReadDataByte(APDS9930_Ch0DATAH, val_byte) ) { - return false; - } - val += ((uint16_t)val_byte << 8); - return true; -} - -bool APDS9930::readCh1Light(uint16_t &val) -{ - uint8_t val_byte; - val = 0; - - /* Read value from channel 0 */ - if( !wireReadDataByte(APDS9930_Ch1DATAL, val_byte) ) { - return false; - } - val = val_byte; - if( !wireReadDataByte(APDS9930_Ch1DATAH, val_byte) ) { - return false; - } - val += ((uint16_t)val_byte << 8); - return true; -} - -/******************************************************************************* - * Proximity sensor controls - ******************************************************************************/ - -/** - * @brief Reads the proximity level as an 8-bit value - * - * @param[out] val value of the proximity sensor. - * @return True if operation successful. False otherwise. - */ -bool APDS9930::readProximity(uint16_t &val) -{ - val = 0; - uint8_t val_byte; - - /* Read value from proximity data register */ - if( !wireReadDataByte(APDS9930_PDATAL, val_byte) ) { - return false; - } - val = val_byte; - if( !wireReadDataByte(APDS9930_PDATAH, val_byte) ) { - return false; - } - val += ((uint16_t)val_byte << 8); - - return true; -} - -/******************************************************************************* - * Getters and setters for register values - ******************************************************************************/ - -/** - * @brief Returns the lower threshold for proximity detection - * - * @return lower threshold - */ -uint16_t APDS9930::getProximityIntLowThreshold() -{ - uint16_t val; - uint8_t val_byte; - - /* Read value from PILT register */ - if( !wireReadDataByte(APDS9930_PILTL, val_byte) ) { - val = 0; - } - val = val_byte; - if( !wireReadDataByte(APDS9930_PILTH, val_byte) ) { - val = 0; - } - val |= ((uint16_t)val_byte << 8); - - return val; -} - -/** - * @brief Sets the lower threshold for proximity detection - * - * @param[in] threshold the lower proximity threshold - * @return True if operation successful. False otherwise. - */ -bool APDS9930::setProximityIntLowThreshold(uint16_t threshold) -{ - uint8_t lo; - uint8_t hi; - hi = threshold >> 8; - lo = threshold & 0x00FF; - - if( !wireWriteDataByte(APDS9930_PILTL, lo) ) { - return false; - } - if( !wireWriteDataByte(APDS9930_PILTH, hi) ) { - return false; - } - - return true; -} - -/** - * @brief Returns the high threshold for proximity detection - * - * @return high threshold - */ -uint16_t APDS9930::getProximityIntHighThreshold() -{ - uint16_t val; - uint8_t val_byte; - - /* Read value from PILT register */ - if( !wireReadDataByte(APDS9930_PIHTL, val_byte) ) { - val = 0; - } - val = val_byte; - if( !wireReadDataByte(APDS9930_PIHTH, val_byte) ) { - val = 0; - } - val |= ((uint16_t)val_byte << 8); - - return val; -} - -/** - * @brief Sets the high threshold for proximity detection - * - * @param[in] threshold the high proximity threshold - * @return True if operation successful. False otherwise. - */ -bool APDS9930::setProximityIntHighThreshold(uint16_t threshold) -{ - uint8_t lo; - uint8_t hi; - hi = threshold >> 8; - lo = threshold & 0x00FF; - - if( !wireWriteDataByte(APDS9930_PIHTL, lo) ) { - return false; - } - if( !wireWriteDataByte(APDS9930_PIHTH, hi) ) { - return false; - } - - return true; -} - -/** - * @brief Returns LED drive strength for proximity and ALS - * - * Value LED Current - * 0 100 mA - * 1 50 mA - * 2 25 mA - * 3 12.5 mA - * - * @return the value of the LED drive strength. 0xFF on failure. - */ -uint8_t APDS9930::getLEDDrive() -{ - uint8_t val; - - /* Read value from CONTROL register */ - if( !wireReadDataByte(APDS9930_CONTROL, val) ) { - return ERROR; - } - - /* Shift and mask out LED drive bits */ - val = (val >> 6) & 0b00000011; - - return val; -} - -/** - * @brief Sets the LED drive strength for proximity and ALS - * - * Value LED Current - * 0 100 mA - * 1 50 mA - * 2 25 mA - * 3 12.5 mA - * - * @param[in] drive the value (0-3) for the LED drive strength - * @return True if operation successful. False otherwise. - */ -bool APDS9930::setLEDDrive(uint8_t drive) -{ - uint8_t val; - - /* Read value from CONTROL register */ - if( !wireReadDataByte(APDS9930_CONTROL, val) ) { - return false; - } - - /* Set bits in register to given value */ - drive &= 0b00000011; - drive = drive << 6; - val &= 0b00111111; - val |= drive; - - /* Write register value back into CONTROL register */ - if( !wireWriteDataByte(APDS9930_CONTROL, val) ) { - return false; - } - - return true; -} - -/** - * @brief Returns receiver gain for proximity detection - * - * Value Gain - * 0 1x - * 1 2x - * 2 4x - * 3 8x - * - * @return the value of the proximity gain. 0xFF on failure. - */ -uint8_t APDS9930::getProximityGain() -{ - uint8_t val; - - /* Read value from CONTROL register */ - if( !wireReadDataByte(APDS9930_CONTROL, val) ) { - return ERROR; - } - - /* Shift and mask out PDRIVE bits */ - val = (val >> 2) & 0b00000011; - - return val; -} - -/** - * @brief Sets the receiver gain for proximity detection - * - * Value Gain - * 0 1x - * 1 2x - * 2 4x - * 3 8x - * - * @param[in] drive the value (0-3) for the gain - * @return True if operation successful. False otherwise. - */ -bool APDS9930::setProximityGain(uint8_t drive) -{ - uint8_t val; - - /* Read value from CONTROL register */ - if( !wireReadDataByte(APDS9930_CONTROL, val) ) { - return false; - } - - /* Set bits in register to given value */ - drive &= 0b00000011; - drive = drive << 2; - val &= 0b11110011; - val |= drive; - - /* Write register value back into CONTROL register */ - if( !wireWriteDataByte(APDS9930_CONTROL, val) ) { - return false; - } - - return true; -} - -/** - * @brief Returns the proximity diode - * - * Value Diode selection - * 0 Reserved - * 1 Reserved - * 2 Use Ch1 diode - * 3 Reserved - * - * @return the selected diode. 0xFF on failure. - */ -uint8_t APDS9930::getProximityDiode() -{ - uint8_t val; - - /* Read value from CONTROL register */ - if( !wireReadDataByte(APDS9930_CONTROL, val) ) { - return ERROR; - } - - /* Shift and mask out PDRIVE bits */ - val = (val >> 4) & 0b00000011; - - return val; -} - -/** - * @brief Selects the proximity diode - * - * Value Diode selection - * 0 Reserved - * 1 Reserved - * 2 Use Ch1 diode - * 3 Reserved - * - * @param[in] drive the value (0-3) for the diode - * @return True if operation successful. False otherwise. - */ -bool APDS9930::setProximityDiode(uint8_t drive) -{ - uint8_t val; - - /* Read value from CONTROL register */ - if( !wireReadDataByte(APDS9930_CONTROL, val) ) { - return false; - } - - /* Set bits in register to given value */ - drive &= 0b00000011; - drive = drive << 4; - val &= 0b11001111; - val |= drive; - - /* Write register value back into CONTROL register */ - if( !wireWriteDataByte(APDS9930_CONTROL, val) ) { - return false; - } - - return true; -} - -/** - * @brief Returns receiver gain for the ambient light sensor (ALS) - * - * Value Gain - * 0 1x - * 1 4x - * 2 16x - * 3 120x - * - * @return the value of the ALS gain. 0xFF on failure. - */ -uint8_t APDS9930::getAmbientLightGain() -{ - uint8_t val; - - /* Read value from CONTROL register */ - if( !wireReadDataByte(APDS9930_CONTROL, val) ) { - return ERROR; - } - - /* Shift and mask out ADRIVE bits */ - val &= 0b00000011; - - return val; -} - -/** - * @brief Sets the receiver gain for the ambient light sensor (ALS) - * - * Value Gain - * 0 1x - * 1 4x - * 2 16x - * 3 64x - * - * @param[in] drive the value (0-3) for the gain - * @return True if operation successful. False otherwise. - */ -bool APDS9930::setAmbientLightGain(uint8_t drive) -{ - uint8_t val; - - /* Read value from CONTROL register */ - if( !wireReadDataByte(APDS9930_CONTROL, val) ) { - return false; - } - - /* Set bits in register to given value */ - drive &= 0b00000011; - val &= 0b11111100; - val |= drive; - - /* Write register value back into CONTROL register */ - if( !wireWriteDataByte(APDS9930_CONTROL, val) ) { - return false; - } - - return true; -} - -/** - * @brief Gets the low threshold for ambient light interrupts - * - * @param[out] threshold current low threshold stored on the APDS-9930 - * @return True if operation successful. False otherwise. - */ -bool APDS9930::getLightIntLowThreshold(uint16_t &threshold) -{ - uint8_t val_byte; - threshold = 0; - - /* Read value from ambient light low threshold, low byte register */ - if( !wireReadDataByte(APDS9930_AILTL, val_byte) ) { - return false; - } - threshold = val_byte; - - /* Read value from ambient light low threshold, high byte register */ - if( !wireReadDataByte(APDS9930_AILTH, val_byte) ) { - return false; - } - threshold = threshold + ((uint16_t)val_byte << 8); - - return true; -} - -/** - * @brief Sets the low threshold for ambient light interrupts - * - * @param[in] threshold low threshold value for interrupt to trigger - * @return True if operation successful. False otherwise. - */ -bool APDS9930::setLightIntLowThreshold(uint16_t threshold) -{ - uint8_t val_low; - uint8_t val_high; - - /* Break 16-bit threshold into 2 8-bit values */ - val_low = threshold & 0x00FF; - val_high = (threshold & 0xFF00) >> 8; - - /* Write low byte */ - if( !wireWriteDataByte(APDS9930_AILTL, val_low) ) { - return false; - } - - /* Write high byte */ - if( !wireWriteDataByte(APDS9930_AILTH, val_high) ) { - return false; - } - - return true; -} - -/** - * @brief Gets the high threshold for ambient light interrupts - * - * @param[out] threshold current low threshold stored on the APDS-9930 - * @return True if operation successful. False otherwise. - */ -bool APDS9930::getLightIntHighThreshold(uint16_t &threshold) -{ - uint8_t val_byte; - threshold = 0; - - /* Read value from ambient light high threshold, low byte register */ - if( !wireReadDataByte(APDS9930_AIHTL, val_byte) ) { - return false; - } - threshold = val_byte; - - /* Read value from ambient light high threshold, high byte register */ - if( !wireReadDataByte(APDS9930_AIHTH, val_byte) ) { - return false; - } - threshold = threshold + ((uint16_t)val_byte << 8); - - return true; -} - -/** - * @brief Sets the high threshold for ambient light interrupts - * - * @param[in] threshold high threshold value for interrupt to trigger - * @return True if operation successful. False otherwise. - */ -bool APDS9930::setLightIntHighThreshold(uint16_t threshold) -{ - uint8_t val_low; - uint8_t val_high; - - /* Break 16-bit threshold into 2 8-bit values */ - val_low = threshold & 0x00FF; - val_high = (threshold & 0xFF00) >> 8; - - /* Write low byte */ - if( !wireWriteDataByte(APDS9930_AIHTL, val_low) ) { - return false; - } - - /* Write high byte */ - if( !wireWriteDataByte(APDS9930_AIHTH, val_high) ) { - return false; - } - - return true; -} - - -/** - * @brief Gets if ambient light interrupts are enabled or not - * - * @return 1 if interrupts are enabled, 0 if not. 0xFF on error. - */ -uint8_t APDS9930::getAmbientLightIntEnable() -{ - uint8_t val; - - /* Read value from ENABLE register */ - if( !wireReadDataByte(APDS9930_ENABLE, val) ) { - return ERROR; - } - - /* Shift and mask out AIEN bit */ - val = (val >> 4) & 0b00000001; - - return val; -} - -/** - * @brief Turns ambient light interrupts on or off - * - * @param[in] enable 1 to enable interrupts, 0 to turn them off - * @return True if operation successful. False otherwise. - */ -bool APDS9930::setAmbientLightIntEnable(uint8_t enable) -{ - uint8_t val; - - /* Read value from ENABLE register */ - if( !wireReadDataByte(APDS9930_ENABLE, val) ) { - return false; - } - - /* Set bits in register to given value */ - enable &= 0b00000001; - enable = enable << 4; - val &= 0b11101111; - val |= enable; - - /* Write register value back into ENABLE register */ - if( !wireWriteDataByte(APDS9930_ENABLE, val) ) { - return false; - } - - return true; -} - -/** - * @brief Gets if proximity interrupts are enabled or not - * - * @return 1 if interrupts are enabled, 0 if not. 0xFF on error. - */ -uint8_t APDS9930::getProximityIntEnable() -{ - uint8_t val; - - /* Read value from ENABLE register */ - if( !wireReadDataByte(APDS9930_ENABLE, val) ) { - return ERROR; - } - - /* Shift and mask out PIEN bit */ - val = (val >> 5) & 0b00000001; - - return val; -} - -/** - * @brief Turns proximity interrupts on or off - * - * @param[in] enable 1 to enable interrupts, 0 to turn them off - * @return True if operation successful. False otherwise. - */ -bool APDS9930::setProximityIntEnable(uint8_t enable) -{ - uint8_t val; - - /* Read value from ENABLE register */ - if( !wireReadDataByte(APDS9930_ENABLE, val) ) { - return false; - } - - /* Set bits in register to given value */ - enable &= 0b00000001; - enable = enable << 5; - val &= 0b11011111; - val |= enable; - - /* Write register value back into ENABLE register */ - if( !wireWriteDataByte(APDS9930_ENABLE, val) ) { - return false; - } - - return true; -} - -/** - * @brief Clears the ambient light interrupt - * - * @return True if operation completed successfully. False otherwise. - */ -bool APDS9930::clearAmbientLightInt() -{ - if( !wireWriteByte(CLEAR_ALS_INT) ) { - return false; - } - - return true; -} - -/** - * @brief Clears the proximity interrupt - * - * @return True if operation completed successfully. False otherwise. - */ -bool APDS9930::clearProximityInt() -{ - if( !wireWriteByte(CLEAR_PROX_INT) ) { - return false; - } - - return true; -} - -/** - * @brief Clears all interrupts - * - * @return True if operation completed successfully. False otherwise. - */ -bool APDS9930::clearAllInts() -{ - if( !wireWriteByte(CLEAR_ALL_INTS) ) { - return false; - } - - return true; -} - -/******************************************************************************* - * Raw I2C Reads and Writes - ******************************************************************************/ - -/** - * @brief Writes a single byte to the I2C device (no register) - * - * @param[in] val the 1-byte value to write to the I2C device - * @return True if successful write operation. False otherwise. - */ -bool APDS9930::wireWriteByte(uint8_t val) -{ - Wire.beginTransmission(APDS9930_I2C_ADDR); - Wire.write(val); - if( Wire.endTransmission() != 0 ) { - return false; - } - - return true; -} - -/** - * @brief Writes a single byte to the I2C device and specified register - * - * @param[in] reg the register in the I2C device to write to - * @param[in] val the 1-byte value to write to the I2C device - * @return True if successful write operation. False otherwise. - */ -bool APDS9930::wireWriteDataByte(uint8_t reg, uint8_t val) -{ - Wire.beginTransmission(APDS9930_I2C_ADDR); - Wire.write(reg | AUTO_INCREMENT); - Wire.write(val); - if( Wire.endTransmission() != 0 ) { - return false; - } - - return true; -} - -/** - * @brief Writes a block (array) of bytes to the I2C device and register - * - * @param[in] reg the register in the I2C device to write to - * @param[in] val pointer to the beginning of the data byte array - * @param[in] len the length (in bytes) of the data to write - * @return True if successful write operation. False otherwise. - */ -bool APDS9930::wireWriteDataBlock( uint8_t reg, - uint8_t *val, - unsigned int len) -{ - unsigned int i; - - Wire.beginTransmission(APDS9930_I2C_ADDR); - Wire.write(reg | AUTO_INCREMENT); - for(i = 0; i < len; i++) { - Wire.beginTransmission(APDS9930_I2C_ADDR); - Wire.write(val[i]); - } - if( Wire.endTransmission() != 0 ) { - return false; - } - - return true; -} - -/** - * @brief Reads a single byte from the I2C device and specified register - * - * @param[in] reg the register to read from - * @param[out] the value returned from the register - * @return True if successful read operation. False otherwise. - */ -bool APDS9930::wireReadDataByte(uint8_t reg, uint8_t &val) -{ - - /* Indicate which register we want to read from */ - if (!wireWriteByte(reg | AUTO_INCREMENT)) { - return false; - } - - /* Read from register */ - Wire.requestFrom(APDS9930_I2C_ADDR, 1); - while (Wire.available()) { - val = Wire.read(); - } - - return true; -} - - -/** - * @brief Reads a block (array) of bytes from the I2C device and register - * - * @param[in] reg the register to read from - * @param[out] val pointer to the beginning of the data - * @param[in] len number of bytes to read - * @return Number of bytes read. -1 on read error. - */ -int APDS9930::wireReadDataBlock( uint8_t reg, - uint8_t *val, - unsigned int len) -{ - unsigned char i = 0; - - /* Indicate which register we want to read from */ - if (!wireWriteByte(reg | AUTO_INCREMENT)) { - return -1; - } - - /* Read block data */ - Wire.requestFrom(APDS9930_I2C_ADDR, len); - while (Wire.available()) { - if (i >= len) { - return -1; - } - val[i] = Wire.read(); - i++; - } - - return i; -} \ No newline at end of file diff --git a/firmware/libraries/APDS9930-master/src/APDS9930.h b/firmware/libraries/APDS9930-master/src/APDS9930.h deleted file mode 100755 index 640544d..0000000 --- a/firmware/libraries/APDS9930-master/src/APDS9930.h +++ /dev/null @@ -1,231 +0,0 @@ -/** - * @file APDS-9930.h - * @brief Library for the SparkFun APDS-9930 breakout board - * @author Shawn Hymel (SparkFun Electronics) - * - * @copyright This code is public domain but you buy me a beer if you use - * this and we meet someday (Beerware license). - * - * This library interfaces the Avago APDS-9930 to Arduino over I2C. The library - * relies on the Arduino Wire (I2C) library. to use the library, instantiate an - * APDS9930 object, call init(), and call the appropriate functions. - */ - -#ifndef APDS9930_H -#define APDS9930_H - -#include - -/* Debug */ -#define DEBUG 0 - -/* APDS-9930 I2C address */ -#define APDS9930_I2C_ADDR 0x39 - -/* Command register modes */ -#define REPEATED_BYTE 0x80 -#define AUTO_INCREMENT 0xA0 -#define SPECIAL_FN 0xE0 - -/* Error code for returned values */ -#define ERROR 0xFF - -/* Acceptable device IDs */ -#define APDS9930_ID_1 0x12 -#define APDS9930_ID_2 0x39 - -/* Misc parameters */ -#define FIFO_PAUSE_TIME 30 // Wait period (ms) between FIFO reads - -/* APDS-9930 register addresses */ -#define APDS9930_ENABLE 0x00 -#define APDS9930_ATIME 0x01 -#define APDS9930_PTIME 0x02 -#define APDS9930_WTIME 0x03 -#define APDS9930_AILTL 0x04 -#define APDS9930_AILTH 0x05 -#define APDS9930_AIHTL 0x06 -#define APDS9930_AIHTH 0x07 -#define APDS9930_PILTL 0x08 -#define APDS9930_PILTH 0x09 -#define APDS9930_PIHTL 0x0A -#define APDS9930_PIHTH 0x0B -#define APDS9930_PERS 0x0C -#define APDS9930_CONFIG 0x0D -#define APDS9930_PPULSE 0x0E -#define APDS9930_CONTROL 0x0F -#define APDS9930_ID 0x12 -#define APDS9930_STATUS 0x13 -#define APDS9930_Ch0DATAL 0x14 -#define APDS9930_Ch0DATAH 0x15 -#define APDS9930_Ch1DATAL 0x16 -#define APDS9930_Ch1DATAH 0x17 -#define APDS9930_PDATAL 0x18 -#define APDS9930_PDATAH 0x19 -#define APDS9930_POFFSET 0x1E - - -/* Bit fields */ -#define APDS9930_PON 0b00000001 -#define APDS9930_AEN 0b00000010 -#define APDS9930_PEN 0b00000100 -#define APDS9930_WEN 0b00001000 -#define APSD9930_AIEN 0b00010000 -#define APDS9930_PIEN 0b00100000 -#define APDS9930_SAI 0b01000000 - -/* On/Off definitions */ -#define OFF 0 -#define ON 1 - -/* Acceptable parameters for setMode */ -#define POWER 0 -#define AMBIENT_LIGHT 1 -#define PROXIMITY 2 -#define WAIT 3 -#define AMBIENT_LIGHT_INT 4 -#define PROXIMITY_INT 5 -#define SLEEP_AFTER_INT 6 -#define ALL 7 - -/* LED Drive values */ -#define LED_DRIVE_100MA 0 -#define LED_DRIVE_50MA 1 -#define LED_DRIVE_25MA 2 -#define LED_DRIVE_12_5MA 3 - -/* Proximity Gain (PGAIN) values */ -#define PGAIN_1X 0 -#define PGAIN_2X 1 -#define PGAIN_4X 2 -#define PGAIN_8X 3 - -/* ALS Gain (AGAIN) values */ -#define AGAIN_1X 0 -#define AGAIN_8X 1 -#define AGAIN_16X 2 -#define AGAIN_120X 3 - -/* Interrupt clear values */ -#define CLEAR_PROX_INT 0xE5 -#define CLEAR_ALS_INT 0xE6 -#define CLEAR_ALL_INTS 0xE7 - -/* Default values */ -#define DEFAULT_ATIME 0xED -#define DEFAULT_WTIME 0xFF -#define DEFAULT_PTIME 0xFF -#define DEFAULT_PPULSE 0x08 -#define DEFAULT_POFFSET 0 // 0 offset -#define DEFAULT_CONFIG 0 -#define DEFAULT_PDRIVE LED_DRIVE_100MA -#define DEFAULT_PDIODE 2 -#define DEFAULT_PGAIN PGAIN_8X -#define DEFAULT_AGAIN AGAIN_1X -#define DEFAULT_PILT 0 // Low proximity threshold -#define DEFAULT_PIHT 50 // High proximity threshold -#define DEFAULT_AILT 0xFFFF // Force interrupt for calibration -#define DEFAULT_AIHT 0 -#define DEFAULT_PERS 0x22 // 2 consecutive prox or ALS for int. - -/* ALS coefficients */ -#define DF 52 -#define GA 0.49 -#define B 1.862 -#define C 0.746 -#define D 1.291 - -/* State definitions */ -enum { - NOTAVAILABLE_STATE, - NEAR_STATE, - FAR_STATE, - ALL_STATE -}; - -#ifdef _AVR_IO_H_ - // Do not use this alias as it's deprecated - #define NA_STATE NOTAVAILABLE_STATE -#endif - -/* APDS9930 Class */ -class APDS9930 { -public: - - /* Initialization methods */ - APDS9930(); - ~APDS9930(); - bool init(); - uint8_t getMode(); - bool setMode(uint8_t mode, uint8_t enable); - - /* Turn the APDS-9930 on and off */ - bool enablePower(); - bool disablePower(); - - /* Enable or disable specific sensors */ - bool enableLightSensor(bool interrupts = false); - bool disableLightSensor(); - bool enableProximitySensor(bool interrupts = false); - bool disableProximitySensor(); - - /* LED drive strength control */ - uint8_t getLEDDrive(); - bool setLEDDrive(uint8_t drive); - // uint8_t getGestureLEDDrive(); - // bool setGestureLEDDrive(uint8_t drive); - - /* Gain control */ - uint8_t getAmbientLightGain(); - bool setAmbientLightGain(uint8_t gain); - uint8_t getProximityGain(); - bool setProximityGain(uint8_t gain); - bool setProximityDiode(uint8_t drive); - uint8_t getProximityDiode(); - - - /* Get and set light interrupt thresholds */ - bool getLightIntLowThreshold(uint16_t &threshold); - bool setLightIntLowThreshold(uint16_t threshold); - bool getLightIntHighThreshold(uint16_t &threshold); - bool setLightIntHighThreshold(uint16_t threshold); - - /* Get and set interrupt enables */ - uint8_t getAmbientLightIntEnable(); - bool setAmbientLightIntEnable(uint8_t enable); - uint8_t getProximityIntEnable(); - bool setProximityIntEnable(uint8_t enable); - - /* Clear interrupts */ - bool clearAmbientLightInt(); - bool clearProximityInt(); - bool clearAllInts(); - - /* Proximity methods */ - bool readProximity(uint16_t &val); - - /* Ambient light methods */ - bool readAmbientLightLux(float &val); - bool readAmbientLightLux(unsigned long &val); - float floatAmbientToLux(uint16_t Ch0, uint16_t Ch1); - unsigned long ulongAmbientToLux(uint16_t Ch0, uint16_t Ch1); - bool readCh0Light(uint16_t &val); - bool readCh1Light(uint16_t &val); - -//private: - - /* Proximity Interrupt Threshold */ - uint16_t getProximityIntLowThreshold(); - bool setProximityIntLowThreshold(uint16_t threshold); - uint16_t getProximityIntHighThreshold(); - bool setProximityIntHighThreshold(uint16_t threshold); - - /* Raw I2C Commands */ - bool wireWriteByte(uint8_t val); - bool wireWriteDataByte(uint8_t reg, uint8_t val); - bool wireWriteDataBlock(uint8_t reg, uint8_t *val, unsigned int len); - bool wireReadDataByte(uint8_t reg, uint8_t &val); - int wireReadDataBlock(uint8_t reg, uint8_t *val, unsigned int len); -}; - -#endif diff --git a/firmware/libraries/Adafruit_APDS9960_Library/Adafruit_APDS9960.cpp b/firmware/libraries/Adafruit_APDS9960_Library/Adafruit_APDS9960.cpp deleted file mode 100755 index 8650b33..0000000 --- a/firmware/libraries/Adafruit_APDS9960_Library/Adafruit_APDS9960.cpp +++ /dev/null @@ -1,726 +0,0 @@ -/*! - * @file Adafruit_APDS9960.cpp - * - * @mainpage Adafruit APDS9960 Proximity, Light, RGB, and Gesture Sensor - * - * @section author Author - * - * Ladyada, Dean Miller (Adafruit Industries) - * - * @section license License - * - * Software License Agreement (BSD License) - * - * Copyright (c) 2017, Adafruit Industries - * All rights reserved. - * - * 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 of the copyright holders 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 ''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 HOLDER 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. - */ - -#ifdef __AVR -#include -#elif defined(ESP8266) -#include -#endif -#include -#include - -#include "Adafruit_APDS9960.h" - -/*! - * @brief Implements missing powf function - * @param x - * Base number - * @param y - * Exponent - * @return x raised to the power of y - */ -float powf(const float x, const float y) { - return (float)(pow((double)x, (double)y)); -} - -/*! - * @brief Enables the device - * Disables the device (putting it in lower power sleep mode) - * @param en - * Enable (True/False) - */ -void Adafruit_APDS9960::enable(boolean en) { - _enable.PON = en; - this->write8(APDS9960_ENABLE, _enable.get()); -} - -/*! - * @brief Initializes I2C and configures the sensor - * @param iTimeMS - * Integration time - * @param aGain - * Gain - * @param addr - * I2C address - * @param *theWire - * Wire object - * @return True if initialization was successful, otherwise false. - */ -boolean Adafruit_APDS9960::begin(uint16_t iTimeMS, apds9960AGain_t aGain, - uint8_t addr, TwoWire *theWire) { - _wire = theWire; - _i2c_init(); - _i2caddr = addr; - - /* Make sure we're actually connected */ - uint8_t x = read8(APDS9960_ID); - if (x != 0xAB) { - return false; - } - - /* Set default integration time and gain */ - setADCIntegrationTime(iTimeMS); - setADCGain(aGain); - - // disable everything to start - enableGesture(false); - enableProximity(false); - enableColor(false); - - disableColorInterrupt(); - disableProximityInterrupt(); - clearInterrupt(); - - /* Note: by default, the device is in power down mode on bootup */ - enable(false); - delay(10); - enable(true); - delay(10); - - // default to all gesture dimensions - setGestureDimensions(APDS9960_DIMENSIONS_ALL); - setGestureFIFOThreshold(APDS9960_GFIFO_4); - setGestureGain(APDS9960_GGAIN_4); - setGestureProximityThreshold(50); - resetCounts(); - - _gpulse.GPLEN = APDS9960_GPULSE_32US; - _gpulse.GPULSE = 9; // 10 pulses - this->write8(APDS9960_GPULSE, _gpulse.get()); - - return true; -} - -/*! - * @brief Sets the integration time for the ADC of the APDS9960, in millis - * @param iTimeMS - * Integration time - */ -void Adafruit_APDS9960::setADCIntegrationTime(uint16_t iTimeMS) { - float temp; - - // convert ms into 2.78ms increments - temp = iTimeMS; - temp /= 2.78; - temp = 256 - temp; - if (temp > 255) - temp = 255; - if (temp < 0) - temp = 0; - - /* Update the timing register */ - write8(APDS9960_ATIME, (uint8_t)temp); -} - -/*! - * @brief Returns the integration time for the ADC of the APDS9960, in millis - * @return Integration time - */ -float Adafruit_APDS9960::getADCIntegrationTime() { - float temp; - - temp = read8(APDS9960_ATIME); - - // convert to units of 2.78 ms - temp = 256 - temp; - temp *= 2.78; - return temp; -} - -/*! - * @brief Adjusts the color/ALS gain on the APDS9960 (adjusts the sensitivity - * to light) - * @param aGain - * Gain - */ -void Adafruit_APDS9960::setADCGain(apds9960AGain_t aGain) { - _control.AGAIN = aGain; - - /* Update the timing register */ - write8(APDS9960_CONTROL, _control.get()); -} - -/*! - * @brief Returns the ADC gain - * @return ADC gain - */ -apds9960AGain_t Adafruit_APDS9960::getADCGain() { - return (apds9960AGain_t)(read8(APDS9960_CONTROL) & 0x03); -} - -/*! - * @brief Adjusts the Proximity gain on the APDS9960 - * @param pGain - * Gain - */ -void Adafruit_APDS9960::setProxGain(apds9960PGain_t pGain) { - _control.PGAIN = pGain; - - /* Update the timing register */ - write8(APDS9960_CONTROL, _control.get()); -} - -/*! - * @brief Returns the Proximity gain on the APDS9960 - * @return Proxmity gain - */ -apds9960PGain_t Adafruit_APDS9960::getProxGain() { - return (apds9960PGain_t)(read8(APDS9960_CONTROL) & 0x0C); -} - -/*! - * @brief Sets number of proxmity pulses - * @param pLen - * Pulse Length - * @param pulses - * Number of pulses - */ -void Adafruit_APDS9960::setProxPulse(apds9960PPulseLen_t pLen, uint8_t pulses) { - if (pulses < 1) - pulses = 1; - if (pulses > 64) - pulses = 64; - pulses--; - - _ppulse.PPLEN = pLen; - _ppulse.PPULSE = pulses; - - write8(APDS9960_PPULSE, _ppulse.get()); -} - -/*! - * @brief Enable proximity readings on APDS9960 - * @param en - * Enable (True/False) - */ -void Adafruit_APDS9960::enableProximity(boolean en) { - _enable.PEN = en; - - write8(APDS9960_ENABLE, _enable.get()); -} - -/*! - * @brief Enable proximity interrupts - */ -void Adafruit_APDS9960::enableProximityInterrupt() { - _enable.PIEN = 1; - write8(APDS9960_ENABLE, _enable.get()); - clearInterrupt(); -} - -/*! - * @brief Disable proximity interrupts - */ -void Adafruit_APDS9960::disableProximityInterrupt() { - _enable.PIEN = 0; - write8(APDS9960_ENABLE, _enable.get()); -} - -/*! - * @brief Set proxmity interrupt thresholds - * @param low - * Low threshold - * @param high - * High threshold - * @param persistance - * Persistance - */ -void Adafruit_APDS9960::setProximityInterruptThreshold(uint8_t low, - uint8_t high, - uint8_t persistance) { - write8(APDS9960_PILT, low); - write8(APDS9960_PIHT, high); - - if (persistance > 7) - persistance = 7; - _pers.PPERS = persistance; - write8(APDS9960_PERS, _pers.get()); -} - -/*! - * @brief Returns proxmity interrupt status - * @return True if enabled, false otherwise. - */ -bool Adafruit_APDS9960::getProximityInterrupt() { - _status.set(this->read8(APDS9960_STATUS)); - return _status.PINT; -}; - -/*! - * @brief Read proximity data - * @return Proximity - */ -uint8_t Adafruit_APDS9960::readProximity() { return read8(APDS9960_PDATA); } - -/*! - * @brief Returns validity status of a gesture - * @return Status (True/False) - */ -bool Adafruit_APDS9960::gestureValid() { - _gstatus.set(this->read8(APDS9960_GSTATUS)); - return _gstatus.GVALID; -} - -/*! - * @brief Sets gesture dimensions - * @param dims - * Dimensions (APDS9960_DIMENSIONS_ALL, APDS9960_DIMENSIONS_UP_DOWM, - * APDS9960_DIMENSIONS_UP_DOWN, APGS9960_DIMENSIONS_LEFT_RIGHT) - */ -void Adafruit_APDS9960::setGestureDimensions(uint8_t dims) { - _gconf3.GDIMS = dims; - this->write8(APDS9960_GCONF3, _gconf3.get()); -} - -/*! - * @brief Sets gesture FIFO Threshold - * @param thresh - * Threshold (APDS9960_GFIFO_1, APDS9960_GFIFO_4, APDS9960_GFIFO_8, - * APDS9960_GFIFO_16) - */ -void Adafruit_APDS9960::setGestureFIFOThreshold(uint8_t thresh) { - _gconf1.GFIFOTH = thresh; - this->write8(APDS9960_GCONF1, _gconf1.get()); -} - -/*! - * @brief Sets gesture sensor gain - * @param gain - * Gain (APDS9960_GAIN_1, APDS9960_GAIN_2, APDS9960_GAIN_4, - * APDS9960_GAIN_8) - */ -void Adafruit_APDS9960::setGestureGain(uint8_t gain) { - _gconf2.GGAIN = gain; - this->write8(APDS9960_GCONF2, _gconf2.get()); -} - -/*! - * @brief Sets gesture sensor threshold - * @param thresh - * Threshold - */ -void Adafruit_APDS9960::setGestureProximityThreshold(uint8_t thresh) { - this->write8(APDS9960_GPENTH, thresh); -} - -/*! - * @brief Sets gesture sensor offset - * @param offset_up - * Up offset - * @param offset_down - * Down offset - * @param offset_left - * Left offset - * @param offset_right - * Right offset - */ -void Adafruit_APDS9960::setGestureOffset(uint8_t offset_up, uint8_t offset_down, - uint8_t offset_left, - uint8_t offset_right) { - this->write8(APDS9960_GOFFSET_U, offset_up); - this->write8(APDS9960_GOFFSET_D, offset_down); - this->write8(APDS9960_GOFFSET_L, offset_left); - this->write8(APDS9960_GOFFSET_R, offset_right); -} - -/*! - * @brief Enable gesture readings on APDS9960 - * @param en - * Enable (True/False) - */ -void Adafruit_APDS9960::enableGesture(boolean en) { - if (!en) { - _gconf4.GMODE = 0; - write8(APDS9960_GCONF4, _gconf4.get()); - } - _enable.GEN = en; - write8(APDS9960_ENABLE, _enable.get()); - resetCounts(); -} - -/*! - * @brief Resets gesture counts - */ -void Adafruit_APDS9960::resetCounts() { - gestCnt = 0; - UCount = 0; - DCount = 0; - LCount = 0; - RCount = 0; -} - -/*! - * @brief Reads gesture - * @return Received gesture (APDS9960_DOWN APDS9960_UP, APDS9960_LEFT - * APDS9960_RIGHT) - */ -uint8_t Adafruit_APDS9960::readGesture() { - uint8_t toRead, bytesRead; - uint8_t buf[256]; - unsigned long t = 0; - uint8_t gestureReceived; - while (1) { - int up_down_diff = 0; - int left_right_diff = 0; - gestureReceived = 0; - if (!gestureValid()) - return 0; - - delay(30); - toRead = this->read8(APDS9960_GFLVL); - - // bytesRead is unused but produces sideffects needed for readGesture to work - bytesRead = this->read(APDS9960_GFIFO_U, buf, toRead); - - if (abs((int)buf[0] - (int)buf[1]) > 13) - up_down_diff += (int)buf[0] - (int)buf[1]; - - if (abs((int)buf[2] - (int)buf[3]) > 13) - left_right_diff += (int)buf[2] - (int)buf[3]; - - if (up_down_diff != 0) { - if (up_down_diff < 0) { - if (DCount > 0) { - gestureReceived = APDS9960_UP; - } else - UCount++; - } else if (up_down_diff > 0) { - if (UCount > 0) { - gestureReceived = APDS9960_DOWN; - } else - DCount++; - } - } - - if (left_right_diff != 0) { - if (left_right_diff < 0) { - if (RCount > 0) { - gestureReceived = APDS9960_LEFT; - } else - LCount++; - } else if (left_right_diff > 0) { - if (LCount > 0) { - gestureReceived = APDS9960_RIGHT; - } else - RCount++; - } - } - - if (up_down_diff != 0 || left_right_diff != 0) - t = millis(); - - if (gestureReceived || millis() - t > 300) { - resetCounts(); - return gestureReceived; - } - } -} - -/*! - * @brief Set LED brightness for proximity/gesture - * @param drive - * LED Drive - * @param boost - * LED Boost - */ -void Adafruit_APDS9960::setLED(apds9960LedDrive_t drive, - apds9960LedBoost_t boost) { - // set BOOST - _config2.LED_BOOST = boost; - write8(APDS9960_CONFIG2, _config2.get()); - - _control.LDRIVE = drive; - write8(APDS9960_CONTROL, _control.get()); -} - -/*! - * @brief Enable proximity readings on APDS9960 - * @param en - * Enable (True/False) - */ -void Adafruit_APDS9960::enableColor(boolean en) { - _enable.AEN = en; - write8(APDS9960_ENABLE, _enable.get()); -} - -/*! - * @brief Returns status of color data - * @return True if color data ready, False otherwise - */ -bool Adafruit_APDS9960::colorDataReady() { - _status.set(this->read8(APDS9960_STATUS)); - return _status.AVALID; -} - -/*! - * @brief Reads the raw red, green, blue and clear channel values - * @param *r - * Red value - * @param *g - * Green value - * @param *b - * Blue value - * @param *c - * Clear channel value - */ -void Adafruit_APDS9960::getColorData(uint16_t *r, uint16_t *g, uint16_t *b, - uint16_t *c) { - - *c = read16R(APDS9960_CDATAL); - *r = read16R(APDS9960_RDATAL); - *g = read16R(APDS9960_GDATAL); - *b = read16R(APDS9960_BDATAL); -} - -/*! - * @brief Converts the raw R/G/B values to color temperature in degrees Kelvin - * @param r - * Red value - * @param g - * Green value - * @param b - * Blue value - * @return Color temperature - */ -uint16_t Adafruit_APDS9960::calculateColorTemperature(uint16_t r, uint16_t g, - uint16_t b) { - float X, Y, Z; /* RGB to XYZ correlation */ - float xc, yc; /* Chromaticity co-ordinates */ - float n; /* McCamy's formula */ - float cct; - - /* 1. Map RGB values to their XYZ counterparts. */ - /* Based on 6500K fluorescent, 3000K fluorescent */ - /* and 60W incandescent values for a wide range. */ - /* Note: Y = Illuminance or lux */ - X = (-0.14282F * r) + (1.54924F * g) + (-0.95641F * b); - Y = (-0.32466F * r) + (1.57837F * g) + (-0.73191F * b); - Z = (-0.68202F * r) + (0.77073F * g) + (0.56332F * b); - - /* 2. Calculate the chromaticity co-ordinates */ - xc = (X) / (X + Y + Z); - yc = (Y) / (X + Y + Z); - - /* 3. Use McCamy's formula to determine the CCT */ - n = (xc - 0.3320F) / (0.1858F - yc); - - /* Calculate the final CCT */ - cct = - (449.0F * powf(n, 3)) + (3525.0F * powf(n, 2)) + (6823.3F * n) + 5520.33F; - - /* Return the results in degrees Kelvin */ - return (uint16_t)cct; -} - -/*! - * @brief Calculate ambient light values - * @param r - * Red value - * @param g - * Green value - * @param b - * Blue value - * @return LUX value - */ -uint16_t Adafruit_APDS9960::calculateLux(uint16_t r, uint16_t g, uint16_t b) { - float illuminance; - - /* This only uses RGB ... how can we integrate clear or calculate lux */ - /* based exclusively on clear since this might be more reliable? */ - illuminance = (-0.32466F * r) + (1.57837F * g) + (-0.73191F * b); - - return (uint16_t)illuminance; -} - -/*! - * @brief Enables color interrupt - */ -void Adafruit_APDS9960::enableColorInterrupt() { - _enable.AIEN = 1; - write8(APDS9960_ENABLE, _enable.get()); -} - -/*! - * @brief Disables color interrupt - */ -void Adafruit_APDS9960::disableColorInterrupt() { - _enable.AIEN = 0; - write8(APDS9960_ENABLE, _enable.get()); -} - -/*! - * @brief Clears interrupt - */ -void Adafruit_APDS9960::clearInterrupt() { - this->write(APDS9960_AICLEAR, NULL, 0); -} - -/*! - * @brief Sets interrupt limits - * @param low - * Low limit - * @param high - * High limit - */ -void Adafruit_APDS9960::setIntLimits(uint16_t low, uint16_t high) { - write8(APDS9960_AILTIL, low & 0xFF); - write8(APDS9960_AILTH, low >> 8); - write8(APDS9960_AIHTL, high & 0xFF); - write8(APDS9960_AIHTH, high >> 8); -} - -/*! - * @brief Writes specified value to given register - * @param reg - * Register to write to - * @param value - * Value to write - */ -void Adafruit_APDS9960::write8(byte reg, byte value) { - this->write(reg, &value, 1); -} - -/*! - * @brief Reads 8 bits from specified register - * @param reg - * Register to write to - * @return Value in register - */ -uint8_t Adafruit_APDS9960::read8(byte reg) { - uint8_t ret; - this->read(reg, &ret, 1); - - return ret; -} - -/*! - * @brief Reads 32 bits from specified register - * @param reg - * Register to write to - * @return Value in register - */ -uint32_t Adafruit_APDS9960::read32(uint8_t reg) { - uint8_t ret[4]; - this->read(reg, ret, 4); - - return (ret[0] << 24) | (ret[1] << 16) | (ret[2] << 8) | ret[3]; -} - -/*! - * @brief Reads 16 bites from specified register - * @param reg - * Register to write to - * @return Value in register - */ -uint16_t Adafruit_APDS9960::read16(uint8_t reg) { - uint8_t ret[2]; - this->read(reg, ret, 2); - - return (ret[0] << 8) | ret[1]; -} - -/*! - * @brief Reads 16 bites from specified register - * @param reg - * Register to write to - * @return Value in register - */ -uint16_t Adafruit_APDS9960::read16R(uint8_t reg) { - uint8_t ret[2]; - this->read(reg, ret, 2); - - return (ret[1] << 8) | ret[0]; -} - -/*! - * @brief Begins I2C communication - */ -void Adafruit_APDS9960::_i2c_init() { _wire->begin(); } - -/*! - * @brief Reads num bytes from specified register into a given buffer - * @param reg - * Register - * @param *buf - * Buffer - * @param num - * Number of bytes - * @return Position after reading - */ -uint8_t Adafruit_APDS9960::read(uint8_t reg, uint8_t *buf, uint8_t num) { - uint8_t pos = 0; - bool eof = false; - - // on arduino we need to read in 32 byte chunks - while (pos < num && !eof) { - - uint8_t read_now = min(32, num - pos); - _wire->beginTransmission((uint8_t)_i2caddr); - _wire->write((uint8_t)reg + pos); - _wire->endTransmission(); - - _wire->requestFrom((uint8_t)_i2caddr, read_now); - - for (int i = 0; i < read_now; i++) { - if (!_wire->available()) { - eof = true; - break; - } - buf[pos] = _wire->read(); - pos++; - } - } - return pos; -} - -/*! - * @brief Writes num bytes from specified buffer into a given register - * @param reg - * Register - * @param *buf - * Buffer - * @param num - * Number of bytes - */ -void Adafruit_APDS9960::write(uint8_t reg, uint8_t *buf, uint8_t num) { - _wire->beginTransmission((uint8_t)_i2caddr); - _wire->write((uint8_t)reg); - _wire->write((uint8_t *)buf, num); - _wire->endTransmission(); -} diff --git a/firmware/libraries/Adafruit_APDS9960_Library/Adafruit_APDS9960.h b/firmware/libraries/Adafruit_APDS9960_Library/Adafruit_APDS9960.h deleted file mode 100755 index 1ba957d..0000000 --- a/firmware/libraries/Adafruit_APDS9960_Library/Adafruit_APDS9960.h +++ /dev/null @@ -1,531 +0,0 @@ -/*! - * @file Adafruit_APDS9960.h - * - * Software License Agreement (BSD License) - * - * Copyright (c) 2017, Adafruit Industries - * All rights reserved. - * - * 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 of the copyright holders 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 ''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 HOLDER 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 _APDS9960_H_ -#define _APDS9960_H_ - -#include -#include - -#define APDS9960_ADDRESS (0x39) /**< I2C Address */ - -/** I2C Registers */ -enum { - APDS9960_RAM = 0x00, - APDS9960_ENABLE = 0x80, - APDS9960_ATIME = 0x81, - APDS9960_WTIME = 0x83, - APDS9960_AILTIL = 0x84, - APDS9960_AILTH = 0x85, - APDS9960_AIHTL = 0x86, - APDS9960_AIHTH = 0x87, - APDS9960_PILT = 0x89, - APDS9960_PIHT = 0x8B, - APDS9960_PERS = 0x8C, - APDS9960_CONFIG1 = 0x8D, - APDS9960_PPULSE = 0x8E, - APDS9960_CONTROL = 0x8F, - APDS9960_CONFIG2 = 0x90, - APDS9960_ID = 0x92, - APDS9960_STATUS = 0x93, - APDS9960_CDATAL = 0x94, - APDS9960_CDATAH = 0x95, - APDS9960_RDATAL = 0x96, - APDS9960_RDATAH = 0x97, - APDS9960_GDATAL = 0x98, - APDS9960_GDATAH = 0x99, - APDS9960_BDATAL = 0x9A, - APDS9960_BDATAH = 0x9B, - APDS9960_PDATA = 0x9C, - APDS9960_POFFSET_UR = 0x9D, - APDS9960_POFFSET_DL = 0x9E, - APDS9960_CONFIG3 = 0x9F, - APDS9960_GPENTH = 0xA0, - APDS9960_GEXTH = 0xA1, - APDS9960_GCONF1 = 0xA2, - APDS9960_GCONF2 = 0xA3, - APDS9960_GOFFSET_U = 0xA4, - APDS9960_GOFFSET_D = 0xA5, - APDS9960_GOFFSET_L = 0xA7, - APDS9960_GOFFSET_R = 0xA9, - APDS9960_GPULSE = 0xA6, - APDS9960_GCONF3 = 0xAA, - APDS9960_GCONF4 = 0xAB, - APDS9960_GFLVL = 0xAE, - APDS9960_GSTATUS = 0xAF, - APDS9960_IFORCE = 0xE4, - APDS9960_PICLEAR = 0xE5, - APDS9960_CICLEAR = 0xE6, - APDS9960_AICLEAR = 0xE7, - APDS9960_GFIFO_U = 0xFC, - APDS9960_GFIFO_D = 0xFD, - APDS9960_GFIFO_L = 0xFE, - APDS9960_GFIFO_R = 0xFF, -}; - -/** ADC gain settings */ -typedef enum { - APDS9960_AGAIN_1X = 0x00, /**< No gain */ - APDS9960_AGAIN_4X = 0x01, /**< 2x gain */ - APDS9960_AGAIN_16X = 0x02, /**< 16x gain */ - APDS9960_AGAIN_64X = 0x03 /**< 64x gain */ -} apds9960AGain_t; - -/** Proxmity gain settings */ -typedef enum { - APDS9960_PGAIN_1X = 0x00, /**< 1x gain */ - APDS9960_PGAIN_2X = 0x04, /**< 2x gain */ - APDS9960_PGAIN_4X = 0x08, /**< 4x gain */ - APDS9960_PGAIN_8X = 0x0C /**< 8x gain */ -} apds9960PGain_t; - -/** Pulse length settings */ -typedef enum { - APDS9960_PPULSELEN_4US = 0x00, /**< 4uS */ - APDS9960_PPULSELEN_8US = 0x40, /**< 8uS */ - APDS9960_PPULSELEN_16US = 0x80, /**< 16uS */ - APDS9960_PPULSELEN_32US = 0xC0 /**< 32uS */ -} apds9960PPulseLen_t; - -/** LED drive settings */ -typedef enum { - APDS9960_LEDDRIVE_100MA = 0x00, /**< 100mA */ - APDS9960_LEDDRIVE_50MA = 0x40, /**< 50mA */ - APDS9960_LEDDRIVE_25MA = 0x80, /**< 25mA */ - APDS9960_LEDDRIVE_12MA = 0xC0 /**< 12.5mA */ -} apds9960LedDrive_t; - -/** LED boost settings */ -typedef enum { - APDS9960_LEDBOOST_100PCNT = 0x00, /**< 100% */ - APDS9960_LEDBOOST_150PCNT = 0x10, /**< 150% */ - APDS9960_LEDBOOST_200PCNT = 0x20, /**< 200% */ - APDS9960_LEDBOOST_300PCNT = 0x30 /**< 300% */ -} apds9960LedBoost_t; - -/** Dimensions */ -enum { - APDS9960_DIMENSIONS_ALL = 0x00, // All dimensions - APDS9960_DIMENSIONS_UP_DOWN = 0x01, // Up/Down dimensions - APGS9960_DIMENSIONS_LEFT_RIGHT = 0x02, // Left/Right dimensions -}; - -/** FIFO Interrupts */ -enum { - APDS9960_GFIFO_1 = 0x00, // Generate interrupt after 1 dataset in FIFO - APDS9960_GFIFO_4 = 0x01, // Generate interrupt after 2 datasets in FIFO - APDS9960_GFIFO_8 = 0x02, // Generate interrupt after 3 datasets in FIFO - APDS9960_GFIFO_16 = 0x03, // Generate interrupt after 4 datasets in FIFO -}; - -/** Gesture Gain */ -enum { - APDS9960_GGAIN_1 = 0x00, // Gain 1x - APDS9960_GGAIN_2 = 0x01, // Gain 2x - APDS9960_GGAIN_4 = 0x02, // Gain 4x - APDS9960_GGAIN_8 = 0x03, // Gain 8x -}; - -/** Pulse Lenghts */ -enum { - APDS9960_GPULSE_4US = 0x00, // Pulse 4us - APDS9960_GPULSE_8US = 0x01, // Pulse 8us - APDS9960_GPULSE_16US = 0x02, // Pulse 16us - APDS9960_GPULSE_32US = 0x03, // Pulse 32us -}; - -#define APDS9960_UP 0x01 /**< Gesture Up */ -#define APDS9960_DOWN 0x02 /**< Gesture Down */ -#define APDS9960_LEFT 0x03 /**< Gesture Left */ -#define APDS9960_RIGHT 0x04 /**< Gesture Right */ - -/*! - * @brief Class that stores state and functions for interacting with - * APDS9960 Sensor - */ -class Adafruit_APDS9960 { -public: - Adafruit_APDS9960(){}; - ~Adafruit_APDS9960(){}; - - boolean begin(uint16_t iTimeMS = 10, apds9960AGain_t = APDS9960_AGAIN_4X, - uint8_t addr = APDS9960_ADDRESS, TwoWire *theWire = &Wire); - void setADCIntegrationTime(uint16_t iTimeMS); - float getADCIntegrationTime(); - void setADCGain(apds9960AGain_t gain); - apds9960AGain_t getADCGain(); - void setLED(apds9960LedDrive_t drive, apds9960LedBoost_t boost); - - // proximity - void enableProximity(boolean en = true); - void setProxGain(apds9960PGain_t gain); - apds9960PGain_t getProxGain(); - void setProxPulse(apds9960PPulseLen_t pLen, uint8_t pulses); - void enableProximityInterrupt(); - void disableProximityInterrupt(); - uint8_t readProximity(); - void setProximityInterruptThreshold(uint8_t low, uint8_t high, - uint8_t persistance = 4); - bool getProximityInterrupt(); - - // gesture - void enableGesture(boolean en = true); - bool gestureValid(); - void setGestureDimensions(uint8_t dims); - void setGestureFIFOThreshold(uint8_t thresh); - void setGestureGain(uint8_t gain); - void setGestureProximityThreshold(uint8_t thresh); - void setGestureOffset(uint8_t offset_up, uint8_t offset_down, - uint8_t offset_left, uint8_t offset_right); - uint8_t readGesture(); - void resetCounts(); - - // light & color - void enableColor(boolean en = true); - bool colorDataReady(); - void getColorData(uint16_t *r, uint16_t *g, uint16_t *b, uint16_t *c); - uint16_t calculateColorTemperature(uint16_t r, uint16_t g, uint16_t b); - uint16_t calculateLux(uint16_t r, uint16_t g, uint16_t b); - void enableColorInterrupt(); - void disableColorInterrupt(); - void clearInterrupt(); - void setIntLimits(uint16_t l, uint16_t h); - - // turn on/off elements - void enable(boolean en = true); - -private: - uint8_t _i2caddr; - TwoWire *_wire; - - uint32_t read32(uint8_t reg); - uint16_t read16(uint8_t reg); - uint16_t read16R(uint8_t reg); - - void write8(byte reg, byte value); - uint8_t read8(byte reg); - - uint8_t gestCnt; - - uint8_t UCount; - uint8_t DCount; - - uint8_t LCount; - uint8_t RCount; - - uint8_t read(uint8_t reg, uint8_t *buf, uint8_t num); - void write(uint8_t reg, uint8_t *buf, uint8_t num); - void _i2c_init(); - - struct enable { - - // power on - uint8_t PON : 1; - - // ALS enable - uint8_t AEN : 1; - - // Proximity detect enable - uint8_t PEN : 1; - - // wait timer enable - uint8_t WEN : 1; - - // ALS interrupt enable - uint8_t AIEN : 1; - - // proximity interrupt enable - uint8_t PIEN : 1; - - // gesture enable - uint8_t GEN : 1; - - uint8_t get() { - return (GEN << 6) | (PIEN << 5) | (AIEN << 4) | (WEN << 3) | (PEN << 2) | - (AEN << 1) | PON; - }; - }; - struct enable _enable; - - struct pers { - // ALS Interrupt Persistence. Controls rate of Clear channel interrupt to - // the host processor - uint8_t APERS : 4; - - // proximity interrupt persistence, controls rate of prox interrupt to host - // processor - uint8_t PPERS : 4; - - uint8_t get() { return (PPERS << 4) | APERS; }; - }; - pers _pers; - - struct config1 { - uint8_t WLONG : 1; - - uint8_t get() { return WLONG << 1; }; - }; - config1 _config1; - - struct ppulse { - - /*Proximity Pulse Count. Specifies the number of proximity pulses to be - generated on LDR. Number of pulses is set by PPULSE value plus 1. - */ - uint8_t PPULSE : 6; - - // Proximity Pulse Length. Sets the LED-ON pulse width during a proximity - // LDR pulse. - uint8_t PPLEN : 2; - - uint8_t get() { return (PPLEN << 6) | PPULSE; } - }; - ppulse _ppulse; - - struct control { - // ALS and Color gain control - uint8_t AGAIN : 2; - - // proximity gain control - uint8_t PGAIN : 2; - - // led drive strength - uint8_t LDRIVE : 2; - - uint8_t get() { return (LDRIVE << 6) | (PGAIN << 2) | AGAIN; } - }; - control _control; - - struct config2 { - /* Additional LDR current during proximity and gesture LED pulses. Current - value, set by LDRIVE, is increased by the percentage of LED_BOOST. - */ - uint8_t LED_BOOST : 2; - - // clear photodiode saturation int enable - uint8_t CPSIEN : 1; - - // proximity saturation interrupt enable - uint8_t PSIEN : 1; - - uint8_t get() { - return (PSIEN << 7) | (CPSIEN << 6) | (LED_BOOST << 4) | 1; - } - }; - config2 _config2; - - struct status { - /* ALS Valid. Indicates that an ALS cycle has completed since AEN was - asserted or since a read from any of the ALS/Color data registers. - */ - uint8_t AVALID : 1; - - /* Proximity Valid. Indicates that a proximity cycle has completed since PEN - was asserted or since PDATA was last read. A read of PDATA automatically - clears PVALID. - */ - uint8_t PVALID : 1; - - /* Gesture Interrupt. GINT is asserted when GFVLV becomes greater than - GFIFOTH or if GVALID has become asserted when GMODE transitioned to zero. - The bit is reset when FIFO is completely emptied (read). - */ - uint8_t GINT : 1; - - // ALS Interrupt. This bit triggers an interrupt if AIEN in ENABLE is set. - uint8_t AINT : 1; - - // Proximity Interrupt. This bit triggers an interrupt if PIEN in ENABLE is - // set. - uint8_t PINT : 1; - - /* Indicates that an analog saturation event occurred during a previous - proximity or gesture cycle. Once set, this bit remains set until cleared by - clear proximity interrupt special function command (0xE5 PICLEAR) or by - disabling Prox (PEN=0). This bit triggers an interrupt if PSIEN is set. - */ - uint8_t PGSAT : 1; - - /* Clear Photodiode Saturation. When asserted, the analog sensor was at the - upper end of its dynamic range. The bit can be de-asserted by sending a - Clear channel interrupt command (0xE6 CICLEAR) or by disabling the ADC - (AEN=0). This bit triggers an interrupt if CPSIEN is set. - */ - uint8_t CPSAT : 1; - - void set(uint8_t data) { - AVALID = data & 0x01; - PVALID = (data >> 1) & 0x01; - GINT = (data >> 2) & 0x01; - AINT = (data >> 4) & 0x01; - PINT = (data >> 5) & 0x01; - PGSAT = (data >> 6) & 0x01; - CPSAT = (data >> 7) & 0x01; - } - }; - status _status; - - struct config3 { - // proximity mask - uint8_t PMASK_R : 1; - uint8_t PMASK_L : 1; - uint8_t PMASK_D : 1; - uint8_t PMASK_U : 1; - - /* Sleep After Interrupt. When enabled, the device will automatically enter - low power mode when the INT pin is asserted and the state machine has - progressed to the SAI decision block. Normal operation is resumed when INT - pin is cleared over I2C. - */ - uint8_t SAI : 1; - - /* Proximity Gain Compensation Enable. This bit provides gain compensation - when proximity photodiode signal is reduced as a result of sensor masking. - If only one diode of the diode pair is contributing, then only half of the - signal is available at the ADC; this results in a maximum ADC value of 127. - Enabling PCMP enables an additional gain of 2X, resulting in a maximum ADC - value of 255. - */ - uint8_t PCMP : 1; - - uint8_t get() { - return (PCMP << 5) | (SAI << 4) | (PMASK_U << 3) | (PMASK_D << 2) | - (PMASK_L << 1) | PMASK_R; - } - }; - config3 _config3; - - struct gconf1 { - /* Gesture Exit Persistence. When a number of consecutive “gesture end” - occurrences become equal or greater to the GEPERS value, the Gesture state - machine is exited. - */ - uint8_t GEXPERS : 2; - - /* Gesture Exit Mask. Controls which of the gesture detector photodiodes - (UDLR) will be included to determine a “gesture end” and subsequent exit - of the gesture state machine. Unmasked UDLR data will be compared with the - value in GTHR_OUT. Field value bits correspond to UDLR detectors. - */ - uint8_t GEXMSK : 4; - - /* Gesture FIFO Threshold. This value is compared with the FIFO Level (i.e. - the number of UDLR datasets) to generate an interrupt (if enabled). - */ - uint8_t GFIFOTH : 2; - - uint8_t get() { return (GFIFOTH << 6) | (GEXMSK << 2) | GEXPERS; } - }; - gconf1 _gconf1; - - struct gconf2 { - /* Gesture Wait Time. The GWTIME controls the amount of time in a low power - mode between gesture detection cycles. - */ - uint8_t GWTIME : 3; - - // Gesture LED Drive Strength. Sets LED Drive Strength in gesture mode. - uint8_t GLDRIVE : 2; - - // Gesture Gain Control. Sets the gain of the proximity receiver in gesture - // mode. - uint8_t GGAIN : 2; - - uint8_t get() { return (GGAIN << 5) | (GLDRIVE << 3) | GWTIME; } - }; - gconf2 _gconf2; - - struct gpulse { - /* Number of Gesture Pulses. Specifies the number of pulses to be generated - on LDR. Number of pulses is set by GPULSE value plus 1. - */ - uint8_t GPULSE : 6; - - // Gesture Pulse Length. Sets the LED_ON pulse width during a Gesture LDR - // Pulse. - uint8_t GPLEN : 2; - - uint8_t get() { return (GPLEN << 6) | GPULSE; } - }; - gpulse _gpulse; - - struct gconf3 { - /* Gesture Dimension Select. Selects which gesture photodiode pairs are - enabled to gather results during gesture. - */ - uint8_t GDIMS : 2; - - uint8_t get() { return GDIMS; } - }; - gconf3 _gconf3; - - struct gconf4 { - /* Gesture Mode. Reading this bit reports if the gesture state machine is - actively running, 1 = Gesture, 0= ALS, Proximity, Color. Writing a 1 to this - bit causes immediate entry in to the gesture state machine (as if GPENTH had - been exceeded). Writing a 0 to this bit causes exit of gesture when current - analog conversion has finished (as if GEXTH had been exceeded). - */ - uint8_t GMODE : 1; - - /* Gesture interrupt enable. Gesture Interrupt Enable. When asserted, all - gesture related interrupts are unmasked. - */ - uint8_t GIEN : 2; - - uint8_t get() { return (GIEN << 1) | GMODE; } - void set(uint8_t data) { - GIEN = (data >> 1) & 0x01; - GMODE = data & 0x01; - } - }; - gconf4 _gconf4; - - struct gstatus { - /* Gesture FIFO Data. GVALID bit is sent when GFLVL becomes greater than - GFIFOTH (i.e. FIFO has enough data to set GINT). GFIFOD is reset when GMODE - = 0 and the GFLVL=0 (i.e. All FIFO data has been read). - */ - uint8_t GVALID : 1; - - /* Gesture FIFO Overflow. A setting of 1 indicates that the FIFO has filled - to capacity and that new gesture detector data has been lost. - */ - uint8_t GFOV : 1; - - void set(uint8_t data) { - GFOV = (data >> 1) & 0x01; - GVALID = data & 0x01; - } - }; - gstatus _gstatus; -}; - -#endif diff --git a/firmware/libraries/Adafruit_APDS9960_Library/README.md b/firmware/libraries/Adafruit_APDS9960_Library/README.md deleted file mode 100755 index b115d7c..0000000 --- a/firmware/libraries/Adafruit_APDS9960_Library/README.md +++ /dev/null @@ -1,18 +0,0 @@ -# Adafruit APDS9960 Library [![Build Status](https://travis-ci.com/adafruit/Adafruit_APDS9960.svg?branch=master)](https://travis-ci.com/adafruit/Adafruit_APDS9960) - - - -This is the Adafruit APDS9960 Proximity, Light, RGB, and Gesture sensor Library - -Tested and works great with the Adafruit APDS9960 Board -* http://www.adafruit.com/products/3595 - -This chip uses I2C to communicate, 2 pins are required to interface - -Adafruit invests time and resources providing this open source code, please support Adafruit and open-source hardware by purchasing products from Adafruit! - -Written by Dean Miller, Limor Fried for Adafruit Industries. -BSD license, check license.txt for more information -All text above must be included in any redistribution - -To install, use the Arduino Library Manager and search for "Adafruit APDS9960 Library" and install the library. diff --git a/firmware/libraries/Adafruit_APDS9960_Library/assets/board.jpg b/firmware/libraries/Adafruit_APDS9960_Library/assets/board.jpg deleted file mode 100755 index dafb0d377739e4744f15c6885c7185992d5e29a9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 291777 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ξD~LM;&*V$adC~|R#+tc*+ZQ6 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