Browse Source

started developing logic for module operation

curiousmuch 6 years ago
parent
commit
5fad629a57

+ 4 - 4
Makefile

@@ -36,7 +36,7 @@ TARGET		?= ideasX_
 TARGET_LIB ?= ideasX.a
 
 # which modules (subdirectories) of the project to include in compiling
-USER_MODULES		= user driver gdbstub log hal interface
+USER_MODULES		= user driver gdbstub log hal interface include
 USER_INC				= include
 USER_LIB				=
 
@@ -143,9 +143,9 @@ else
 CFLAGS		+= -D_STDINT_Hlocal
 endif
 
-ifneq ("$(wildcard $(THISDIR)/include/user_config.local.h)","")
-CFLAGS += -DLOCAL_CONFIG_AVAILABLE
-endif
+#ifneq ("$(wildcard $(THISDIR)/include/user_config.local.h)","")
+#CFLAGS += -DLOCAL_CONFIG_AVAILABLE
+#endif
 
 
 ESPTOOL_OPTS=--port $(ESPPORT) --baud $(ESPBAUD)

+ 4 - 2
hal/io.c

@@ -104,10 +104,12 @@ void ICACHE_FLASH_ATTR IO_GPIO_Handler(void)
 			{
 				case SWITCH_A:
                 {
-                    if (LSM6DS3_Get_Interrupts() != LSM6DS3_NO_INT)
+                    LSM6DS3_Interrupt_et imu_interrupt;
+                    imu_interrupt = LSM6DS3_Get_Interrupts();
+                    if (imu_interrupt != LSM6DS3_NO_INT)
                     {
                         if (io_config.imu_cb != NULL)
-                            io_config.imu_cb();
+                            io_config.imu_cb((IMU_Interrupt_et) imu_interrupt);
                         gpio_pin_intr_state_set(GPIO_ID_PIN(i), GPIO_PIN_INTR_ANYEDGE);     // re-enable interrupts
 
                     }

+ 2 - 2
include/esp_common.h

@@ -6,8 +6,8 @@
  *
  */
 
-#ifndef __USER_CONFIG_H__
-#define __USER_CONFIG_H__
+#ifndef __ESP_COMMON_H__
+#define __ESP_COMMON_H__
 
 #include "ets_sys.h"
 #include "user_interface.h"

+ 9 - 1
include/hal/io.h

@@ -21,8 +21,16 @@
 
 #define DEBOUNCEDELAY 15    // ms
 
+
+typedef enum {
+    IMU_NO_INTERRUPT = 0,
+    IMU_FIFO_FULL,
+    IMU_FIFO_OVERFLOW,
+    IMU_MOTION
+} IMU_Interrupt_et;
+
 typedef void (* switch_function_t)(void);
-typedef void (* imu_function_t)(void);
+typedef void (* imu_function_t)(IMU_Interrupt_et);
 
 typedef struct {
     os_timer_t switch_a_timer;

+ 21 - 0
include/interface/encoder_interface.h

@@ -0,0 +1,21 @@
+#ifndef ENCODER_INTERFACE_H
+#define ENCODER_INTERFACE_H
+
+#include "esp_common.h"
+#include "log/esp_log.h"
+#include "hal/io.h"
+#include "hal/lsm6ds3.h"
+#include "interface/light_interface.h"
+#include "hal/lps25hb.h"
+#include "hal/max17043.h"
+
+#define Encoder_InitIO IO_InitIO
+#define Encoder_DisableIOInterrupts IO_DisableIOInterrupts
+#define Encoder_EnableIOInterrupts IO_EnableIOInterrupts
+#define Encoder_SetIMUCallback IO_SetIMUCallback
+#define Encoder_SetSwitchCallback IO_SetSwitchCallback
+
+#define Encoder_EnableMotion LSM6DS3_EnableMotion
+#define Encoder_DisableMotion LSM6DS3_DisableMotion
+
+#endif

+ 9 - 9
include/interface/light_interface.h

@@ -5,15 +5,15 @@
 #include "log/esp_log.h"
 #include "hal/ws2812.h"
 
-#define StatusLED_AccessPointFailure()          WS2812_SetColor(WS2812_RED, WS2812_PULSE)
-#define StatusLED_SystemFailure()               WS2812_SetColor(WS2812_RED, WS2812_SOLID)
-#define StatusLED_AccessPointSearching()        WS2812_SetColor(WS2812_GREEN, WS2812_PULSE)
-#define StatusLED_AccessPointNoCredentials()    WS2812_SetColor(WS2812_GREEN, WS2812_SOLID)
-#define StatusLED_BrokerFailure()               WS2812_SetColor(WS2812_BLUE, WS2812_PULSE)
-#define StatusLED_BrokerSuccess()               WS2812_SetColor(WS2812_BLUE, WS2812_SOLID)
-#define StatusLED_AdaptiveIMU()                 WS2812_SetColor(WS2812_MAGENTA, WS2812_SOLID)
-#define StatusLED_AdaptiveBar()                 WS2812_SetColor(WS2812_ORANGE, WS2812_SOLID)
+#define Light_AccessPointFailure()          WS2812_SetColor(WS2812_RED, WS2812_PULSE)
+#define Light_SystemFailure()               WS2812_SetColor(WS2812_RED, WS2812_SOLID)
+#define Light_AccessPointSearching()        WS2812_SetColor(WS2812_GREEN, WS2812_PULSE)
+#define Light_AccessPointNoCredentials()    WS2812_SetColor(WS2812_GREEN, WS2812_SOLID)
+#define Light_BrokerFailure()               WS2812_SetColor(WS2812_BLUE, WS2812_PULSE)
+#define Light_BrokerSuccess()               WS2812_SetColor(WS2812_BLUE, WS2812_SOLID)
+#define Light_AdaptiveIMU()                 WS2812_SetColor(WS2812_MAGENTA, WS2812_SOLID)
+#define Light_AdaptiveBar()                 WS2812_SetColor(WS2812_ORANGE, WS2812_SOLID)
 
-void StatusLED_Shutdown(void);
+void Light_Shutdown(void);
 
 #endif

+ 5 - 6
include/user_config.h

@@ -8,12 +8,9 @@
 #define CFG_LOCATION			0x2				  // this needs to be relocated to end of flash
 
 /* DEFAULT Wi-Fi SETTINGS */
-#define STA_SSID_1 "SSID"
-#define STA_PASS_1 "PASS"
-#define STA_PASS_2 "SSID"
-#define STA_SSID_2 "PASS"
-#define MAX_APS 5 // number of stored Wi-Fi accesspoint credientials (1 - 5)
-#define STORED_APS 1;
+#define WIFI_TIMEOUT 30000
+#define MAX_APS 5         // number of stored Wi-Fi accesspoint credientials (1 - 5)
+#define STORED_APS 1
 
 /* MQTT DEFAULT CONFIGURATIONS */
 #define MQTT_HOST               "192.168.0.101" //or "mqtt.yourdomain.com"
@@ -53,8 +50,10 @@ Accept: */*\r\n\r\n"
 
 // This needs to be changed to support a logging library
 #if defined(DEBUG_ON)
+
 #define INFO( format, ... ) os_printf( format, ## __VA_ARGS__ )
 #else
 #define INFO( format, ... )
 #endif
+
 #endif

+ 1 - 1
include/util/config.h

@@ -8,7 +8,7 @@
  *     2016/8/8, v1.0 created this file
 *******************************************************************************/
 #ifndef __CONFIG_H__
-#define ___CONFIG_H__
+#define __CONFIG_H__
 
 #include "os_type.h"
 #include "user_config.h"

+ 34 - 0
interface/encoder_interface.c

@@ -0,0 +1,34 @@
+#include "interface/encoder_interface.h"
+
+typedef void (* motion_function_t)(void);
+
+typedef struct {
+    os_timer_t          motion_timer;
+    uint32_t            motion_timeout;
+    motion_function_t   motion_cb;
+} Encoder_t;
+
+static Encoder_t encoder;
+
+void ICACHE_FLASH_ATTR Encoder_Shutdown(void)
+{
+    Light_Shutdown();
+    IO_Shutdown();
+}
+
+void ICACHE_FLASH_ATTR Encoder_Motion_SetCallback(motion_function_t motion_cb)
+{
+    encoder.motion_cb = motion_cb;
+    os_timer_setfn(&encoder.motion_timer, (os_timer_func_t *)encoder.motion_cb, NULL);
+}
+
+void ICACHE_FLASH_ATTR Encoder_Motion_StartTimer(uint32_t timeout)
+{
+    encoder.motion_timeout = timeout;
+    os_timer_arm(&encoder.motion_timer, encoder.motion_timeout, false);
+}
+
+void ICACHE_FLASH_ATTR Encoder_Motion_StopTimer()
+{
+    os_timer_disarm(&encoder.motion_timer);
+}

+ 1 - 1
interface/light_interface.c

@@ -1,6 +1,6 @@
 #include "interface/light_interface.h"
 
-void StatusLED_Shutdown(void)
+void Light_Shutdown(void)
 {
     uint8_t i;
     for(i=0;i<3;i++)

+ 1 - 1
interface/uart_interface.c

@@ -112,7 +112,7 @@ void process_command(uint8_t *str)
     else if (!strcmp(str, "AT+SD"))     // shutdown
     {
         ESP_LOGI(TAG, "Manual Shutdown...\n");
-        StatusLED_Shutdown();
+        Light_Shutdown();
         IO_Shutdown();
     }
     else if (!strcmp(str, "AT+INFO"))   // print system information

+ 65 - 49
user/user_main.c

@@ -42,112 +42,128 @@
 #include "hal/ws2812.h"
 
 #include "interface/wifi_interface.h"
+#include "interface/encoder_interface.h"
 
 #include "user_config.h"
 
 static const char* TAG = "main.c";
 
+typedef struct {
+    bool wifi_connected;
+    bool motion_detector;
+} system_config_t;
+
+static system_config_t system_config;
+
+void ICACHE_FLASH_ATTR imu_cb(IMU_Interrupt_et interrupt)
+{
+    switch(interrupt)
+    {
+        case IMU_MOTION:
+        {
+            system_config.motion_detector = false;
+            if (system_config.wifi_connected == false)
+            {
+                Encoder_DisableIOInterrupts();
+                Encoder_DisableMotion();
+                Light_AccessPointSearching();
+                WiFi_Connect(WIFI_TIMEOUT);
+            }
+            break;
+        }
+        default:
+        {
+            ESP_LOGE(TAG, "Unknown IMU interrupt")
+        }
+    }
+}
+
 
 void ICACHE_FLASH_ATTR wifi_success_cb(void)
 {
-    ESP_LOGV(TAG, "Wi-Fi Success");
+    system_config.wifi_connected = true;
 }
 
 void ICACHE_FLASH_ATTR wifi_fail_cb(wifi_failure_et failure_code)
 {
-    ESP_LOGV(TAG, "Wi-Fi failure")
+    system_config.wifi_connected = false;
+
     switch (failure_code)
     {
         case WIFI_AP_DISCONNECTED:
         {
             ESP_LOGI(TAG, "Wi-Fi connection lost");
+            Light_AccessPointFailure();
             break;
         }
         case WIFI_AP_AUTHMODE_CHANGE:
         {
             ESP_LOGI(TAG, "Wi-Fi credential failure or change");
+            Light_AccessPointFailure();
             break;
         }
         case WIFI_NO_STORED_APS_FAILURE:
         {
             ESP_LOGI(TAG, "no stored Wi-Fi credentials");
+            Light_AccessPointNoCredentials();
             break;
         }
         case WIFI_NO_AVAILABLE_APS_FAILURE:
         {
             ESP_LOGI(TAG, "no Wi-Fi available");
+            Light_AccessPointFailure();
             break;
         }
         case WIFI_TIMEOUT_FAILURE:
         {
             ESP_LOGI(TAG, "Wi-Fi timeout");
+            Light_AccessPointFailure();
             break;
         }
         case WIFI_SCAN_FAILURE:
         {
-            ESP_LOGW(TAG, "Wi-Fi scan failure");
+            ESP_LOGE(TAG, "Wi-Fi scan failure");
+            Light_SystemFailure();
             break;
         }
         default:
         {
             ESP_LOGW(TAG, "unknown Wi-Fi failure code");
+            Light_SystemFailure();
         }
     }
+
+    // re-enable motion detectors
+    system_config.motion_detector = true; 
+    Encoder_EnableMotion();
+    Encoder_EnableIOInterrupts();
 }
 
  void ICACHE_FLASH_ATTR app_init(void)
 {
-    uart_init(BIT_RATE_115200, BIT_RATE_115200, DISABLE_UART1);
-
-
-    ESP_LOGD(TAG, "LSM6DS3, MAX17043, and LPS25HB Testing...");
-    //while(true)
-    {
-        LSM6DS3_Enable_I2C_Bridge(1);
-        uint16_t x = max17043_getVoltage();
-        ESP_LOGI(TAG, "MAX17043 Voltage %d", x);
-        uint8_t y;
-        LPS25HB_Get_DeviceID(&y);
-        ESP_LOGI(TAG, "DEVICEID %x", y);
-        // uint8_t i;
-        // for(i=0;i<8;i++)
-        //     ESP_LOGI(TAG, "RX SPI Value: %x", data[i]);
-        //os_delay_us(1000000);
-        system_soft_wdt_feed();
-    }
-
-    ESP_LOGI(TAG, "WS2812B Testing...");
-    //while(true)
-    {
-        ESP_LOGI(TAG, "Setting WS2812B");
-
-        WS2812_SetColor(WS2812_ORANGE, WS2812_PULSE);
-
-    }
-
+    system_config.wifi_connected = false;
+    Light_AccessPointSearching();
+    WiFi_Connect(WIFI_TIMEOUT);
+}
 
-    ESP_LOGI(TAG, "IO Testing...")
-    {
-        IO_InitIO();
-        //Encoder_SetSwitchCallback(os_printf("SWITCH_A"), os_printf("SWITCH_B"));
-        //Encoder_SetIMUCallback(os_printf("IMU"));
-        LSM6DS3_EnableMotion();
-        IO_EnableIOInterrupts();
+void user_init(void)
+{
 
-    }
+    uart_init(BIT_RATE_115200, BIT_RATE_115200, DISABLE_UART1); // this needs to be abstracted
 
-    ESP_LOGI(TAG, "WiFi Interface Testing...")
-     {
-         WiFi_SetCallbacks(wifi_success_cb, wifi_fail_cb);
-         WiFi_Connect(30*1000); // thirty seconds
-    }
+    os_printf("\n\n----------------------------------------------------------\n");
+    os_printf("\tIdeasX Encoder - Tyler Berezowsky\n");
+    os_printf("----------------------------------------------------------\n\n");
 
+    // Intialize UART and Wi-Fi
+    WiFi_Initialize();
+    Encoder_InitIO();
+    Encoder_DisableIOInterrupts();
+    IO_Shutdown();                       // set the shutdown pin for testing purporses
 
-}
+    WiFi_SetCallbacks(wifi_success_cb, wifi_fail_cb);
+    //Encoder_SetSwitchCallback(switch_a_cb, switch_b_cb);
+    Encoder_SetIMUCallback(imu_cb);
 
-void user_init(void)
-{
-    WiFi_Initialize();
     system_init_done_cb(app_init);
-    //WiFi_Initialize();
 }