stash
This commit is contained in:
		
							parent
							
								
									b7ccdfd5d3
								
							
						
					
					
						commit
						56cddf7073
					
				
					 7 changed files with 79 additions and 20 deletions
				
			
		| 
						 | 
				
			
			@ -8,6 +8,6 @@ RUN cd app/modules/sdk; export CT_EXPERIMENTAL=y; export CT_ALLOW_BUILD_AS_ROOT=
 | 
			
		|||
USER 0
 | 
			
		||||
RUN apt remove --purge -y python2 && apt autoremove --purge -y && apt install -y python3 python3-serial
 | 
			
		||||
RUN apt install -y --reinstall python-is-python3
 | 
			
		||||
USER 0
 | 
			
		||||
USER 1000
 | 
			
		||||
WORKDIR /app
 | 
			
		||||
ENV PATH=/app/modules/sdk/xtensa-lx106-elf/bin:$PATH
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -11,9 +11,9 @@
 | 
			
		|||
#include <espressif/esp_common.h>
 | 
			
		||||
#include <esp/uart.h>
 | 
			
		||||
 | 
			
		||||
void user_init(void)
 | 
			
		||||
{
 | 
			
		||||
#define PUB_MSG_LEN 16
 | 
			
		||||
 | 
			
		||||
void user_init(void) {
 | 
			
		||||
    uart_set_baud(0, 115200);
 | 
			
		||||
    printf("SDK version: %s\n", sdk_system_get_sdk_version());
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -30,4 +30,11 @@ void user_init(void)
 | 
			
		|||
    xTaskCreate(&httpd_task, "httpd_task", 1024, NULL, 2, NULL);
 | 
			
		||||
 | 
			
		||||
    xTaskCreate(&lux_task, "lux_task", 512, NULL, 1, NULL);
 | 
			
		||||
 | 
			
		||||
    wifi_alive = xSemaphoreCreateBinary();
 | 
			
		||||
    publish_queue = xQueueCreate(3, PUB_MSG_LEN);
 | 
			
		||||
 | 
			
		||||
    xTaskCreate(&beat_task, "beat_task", 256, NULL, 3, NULL);
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -3,6 +3,7 @@
 | 
			
		|||
//
 | 
			
		||||
 | 
			
		||||
#include "mqtt.h"
 | 
			
		||||
#include "wifi.h"
 | 
			
		||||
 | 
			
		||||
#include <stdio.h>
 | 
			
		||||
#include <string.h>
 | 
			
		||||
| 
						 | 
				
			
			@ -22,15 +23,18 @@ extern "C" {
 | 
			
		|||
 | 
			
		||||
/* You can use http://test.mosquitto.org/ to test mqtt_client instead
 | 
			
		||||
 * of setting up your own MQTT server */
 | 
			
		||||
#define MQTT_HOST ("172.16.0.42")
 | 
			
		||||
//#define MQTT_HOST ("172.16.0.42")
 | 
			
		||||
#define MQTT_HOST ("10.23.42.187")
 | 
			
		||||
#define MQTT_PORT 1883
 | 
			
		||||
 | 
			
		||||
#define MQTT_USER NULL
 | 
			
		||||
#define MQTT_PASS NULL
 | 
			
		||||
 | 
			
		||||
QueueHandle_t publish_queue;
 | 
			
		||||
 | 
			
		||||
#define PUB_MSG_LEN 16
 | 
			
		||||
 | 
			
		||||
QueueHandle_t publish_queue;
 | 
			
		||||
 | 
			
		||||
extern "C" void beat_task(void *pvParameters) {
 | 
			
		||||
    TickType_t xLastWakeTime = xTaskGetTickCount();
 | 
			
		||||
    char msg[PUB_MSG_LEN];
 | 
			
		||||
| 
						 | 
				
			
			@ -98,13 +102,14 @@ extern "C" void mqtt_task(void *pvParameters) {
 | 
			
		|||
    strcat(mqtt_client_id, get_my_id());
 | 
			
		||||
 | 
			
		||||
    while (1) {
 | 
			
		||||
        xSemaphoreTake(wifi_alive, portMAX_DELAY);
 | 
			
		||||
        printf("%s: started\n\r", __func__);
 | 
			
		||||
        printf("%s: (Re)connecting to MQTT server %s ... ", __func__,
 | 
			
		||||
               MQTT_HOST);
 | 
			
		||||
        ret = mqtt_network_connect(&network, MQTT_HOST, MQTT_PORT);
 | 
			
		||||
        if(ret) {
 | 
			
		||||
            printf("error: %d\n\r", ret);
 | 
			
		||||
            taskYIELD();
 | 
			
		||||
            printf("error 1: %d\n\r", ret);
 | 
			
		||||
            vTaskDelay(1000 / portTICK_PERIOD_MS);
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        printf("done\n\r");
 | 
			
		||||
| 
						 | 
				
			
			@ -121,9 +126,9 @@ extern "C" void mqtt_task(void *pvParameters) {
 | 
			
		|||
        printf("Send MQTT connect ... ");
 | 
			
		||||
        ret = mqtt_connect(&client, &data);
 | 
			
		||||
        if(ret) {
 | 
			
		||||
            printf("error: %d\n\r", ret);
 | 
			
		||||
            printf("error 2: %d\n\r", ret);
 | 
			
		||||
            mqtt_network_disconnect(&network);
 | 
			
		||||
            taskYIELD();
 | 
			
		||||
            vTaskDelay(1000 / portTICK_PERIOD_MS);
 | 
			
		||||
            continue;
 | 
			
		||||
        }
 | 
			
		||||
        printf("done\r\n");
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -5,6 +5,10 @@
 | 
			
		|||
#ifndef FIRMWARE_MQTT_H
 | 
			
		||||
#define FIRMWARE_MQTT_H
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#include <FreeRTOS.h>
 | 
			
		||||
#include <queue.h>
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
extern "C" {
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -12,6 +16,8 @@ extern "C" {
 | 
			
		|||
void mqtt_task(void *pvParameters);
 | 
			
		||||
void beat_task(void *pvParameters);
 | 
			
		||||
 | 
			
		||||
extern QueueHandle_t publish_queue;
 | 
			
		||||
 | 
			
		||||
#ifdef __cplusplus
 | 
			
		||||
}
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -60,7 +60,8 @@ void websocket_task(void *pvParameter) {
 | 
			
		|||
                UNLOCK_TCPIP_CORE();
 | 
			
		||||
            } else
 | 
			
		||||
                syslog("buffer too small -1\n");
 | 
			
		||||
            vTaskDelayMs(1000);
 | 
			
		||||
 | 
			
		||||
            taskYIELD();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //Global Info
 | 
			
		||||
| 
						 | 
				
			
			@ -94,7 +95,8 @@ void websocket_task(void *pvParameter) {
 | 
			
		|||
                UNLOCK_TCPIP_CORE();
 | 
			
		||||
            } else
 | 
			
		||||
                syslog("buffer too small 0\n");
 | 
			
		||||
            vTaskDelayMs(1000);
 | 
			
		||||
 | 
			
		||||
            taskYIELD();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        //Connection Info
 | 
			
		||||
| 
						 | 
				
			
			@ -117,7 +119,8 @@ void websocket_task(void *pvParameter) {
 | 
			
		|||
                UNLOCK_TCPIP_CORE();
 | 
			
		||||
            } else
 | 
			
		||||
                syslog("buffer too small 1\n");
 | 
			
		||||
            vTaskDelayMs(1000);
 | 
			
		||||
 | 
			
		||||
            taskYIELD();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        if(has_changed.wifi) {
 | 
			
		||||
| 
						 | 
				
			
			@ -175,7 +178,8 @@ void websocket_task(void *pvParameter) {
 | 
			
		|||
                    syslog("buffer too small 2\n");
 | 
			
		||||
            }
 | 
			
		||||
 | 
			
		||||
            vTaskDelayMs(1000);
 | 
			
		||||
 | 
			
		||||
            taskYIELD();
 | 
			
		||||
 | 
			
		||||
            if(opmode == STATION_MODE || opmode == STATIONAP_MODE) {
 | 
			
		||||
                uint8_t hwaddr[6];
 | 
			
		||||
| 
						 | 
				
			
			@ -204,7 +208,8 @@ void websocket_task(void *pvParameter) {
 | 
			
		|||
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        vTaskDelayMs(250);
 | 
			
		||||
 | 
			
		||||
        taskYIELD();
 | 
			
		||||
        {
 | 
			
		||||
            uint8_t response[3];
 | 
			
		||||
            uint16_t val;
 | 
			
		||||
| 
						 | 
				
			
			@ -354,11 +359,11 @@ void websocket_cb(struct tcp_pcb *pcb, char *data, u16_t data_len,
 | 
			
		|||
    if(ret == OK) {
 | 
			
		||||
        if(cmd == 'R' || cmd == 'C') { // Restart
 | 
			
		||||
            printf("rebooting now");
 | 
			
		||||
            vTaskDelay(1000 / portTICK_PERIOD_MS);
 | 
			
		||||
            taskYIELD();
 | 
			
		||||
            vPortEnterCritical();
 | 
			
		||||
            sdk_system_restart();
 | 
			
		||||
        } else if(cmd == 'X') { // Clear Config
 | 
			
		||||
            vTaskDelay(1000 / portTICK_PERIOD_MS);
 | 
			
		||||
            taskYIELD();
 | 
			
		||||
            system_clear_config();
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
| 
						 | 
				
			
			@ -378,8 +383,9 @@ void websocket_open_cb(struct tcp_pcb *pcb, const char *uri) {
 | 
			
		|||
extern "C" void httpd_task(void *pvParameters) {
 | 
			
		||||
    (void) pvParameters;
 | 
			
		||||
 | 
			
		||||
    while (!uxSemaphoreGetCount(wifi_available_semaphore))
 | 
			
		||||
        vTaskDelay(500 / portTICK_PERIOD_MS);
 | 
			
		||||
    //while (!uxSemaphoreGetCount(wifi_available_semaphore))
 | 
			
		||||
    //    taskYIELD();
 | 
			
		||||
    printf("httpd_task: wifi is available\n");
 | 
			
		||||
    websocket_register_callbacks((tWsOpenHandler) websocket_open_cb, (tWsHandler) websocket_cb);
 | 
			
		||||
    httpd_init();
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -32,6 +32,7 @@ char *wifi_ap_ssid = nullptr;
 | 
			
		|||
char *wifi_ap_password = nullptr;
 | 
			
		||||
 | 
			
		||||
SemaphoreHandle_t wifi_available_semaphore = nullptr;
 | 
			
		||||
SemaphoreHandle_t wifi_alive = nullptr;
 | 
			
		||||
 | 
			
		||||
[[noreturn]] static void dns_task(void *pvParameters) {
 | 
			
		||||
    char *wifi_ap_ip_addr = nullptr;
 | 
			
		||||
| 
						 | 
				
			
			@ -347,5 +348,38 @@ extern "C" void wifi_task(void *pvParameters) {
 | 
			
		|||
    xSemaphoreGive(wifi_available_semaphore);
 | 
			
		||||
 | 
			
		||||
    //monitor loop connection here
 | 
			
		||||
    vTaskDelete(nullptr);
 | 
			
		||||
    uint8_t status = 0;
 | 
			
		||||
    uint8_t retries = 30;
 | 
			
		||||
 | 
			
		||||
    while (1) {
 | 
			
		||||
        while ((status != STATION_GOT_IP) && (retries)) {
 | 
			
		||||
            status = sdk_wifi_station_get_connect_status();
 | 
			
		||||
            printf("%s: status = %d\n\r", __func__, status);
 | 
			
		||||
            if(status == STATION_WRONG_PASSWORD) {
 | 
			
		||||
                printf("WiFi: wrong password\n\r");
 | 
			
		||||
                break;
 | 
			
		||||
            } else if(status == STATION_NO_AP_FOUND) {
 | 
			
		||||
                printf("WiFi: AP not found\n\r");
 | 
			
		||||
                break;
 | 
			
		||||
            } else if(status == STATION_CONNECT_FAIL) {
 | 
			
		||||
                printf("WiFi: connection failed\r\n");
 | 
			
		||||
                break;
 | 
			
		||||
            }
 | 
			
		||||
            vTaskDelay(1000 / portTICK_PERIOD_MS);
 | 
			
		||||
            --retries;
 | 
			
		||||
        }
 | 
			
		||||
        if(status == STATION_GOT_IP) {
 | 
			
		||||
            printf("WiFi: Connected\n\r");
 | 
			
		||||
            xSemaphoreGive(wifi_alive);
 | 
			
		||||
            taskYIELD();
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        while ((status = sdk_wifi_station_get_connect_status()) == STATION_GOT_IP) {
 | 
			
		||||
            xSemaphoreGive(wifi_alive);
 | 
			
		||||
            taskYIELD();
 | 
			
		||||
        }
 | 
			
		||||
        printf("WiFi: disconnected\n\r");
 | 
			
		||||
        sdk_wifi_station_disconnect();
 | 
			
		||||
        vTaskDelay(1000 / portTICK_PERIOD_MS);
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
| 
						 | 
				
			
			@ -13,6 +13,7 @@ extern "C" {
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
extern SemaphoreHandle_t wifi_available_semaphore;
 | 
			
		||||
extern SemaphoreHandle_t wifi_alive;
 | 
			
		||||
 | 
			
		||||
void wifi_task(void *pvParameters);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue