Commit d2b4ee17 authored by aohui.li's avatar aohui.li

增加状态机、开启4G和以太网、开启以太网静态IP可配(v1.01)

parent 28d624b9
This diff is collapsed.
#ifndef WIT_H
#define WIT_H
#include "freertos/FreeRTOS.h"
#include "freertos/task.h"
#include "freertos/semphr.h"
#include "freertos/queue.h"
#include "freertos/timers.h"
#include "wit_config.h"
#include "stdbool.h"
#if CONFIG_W5100S_SPI_ETHERNET > 0
#include "../Telecom/eth/W5100S/wizchip_conf.h"
#endif
#include "../Telecom/eth/W5100S/wizchip_conf.h"
#include "mb.h"
#include "ts_iot01b.h"
......@@ -120,25 +123,73 @@ typedef struct {
#endif
typedef enum {
IDEL = 0, // 空闲,必须第一位,防止清空flash之后,初始化错误
POWER_ON = 1, // 上电应答
CONFIG_THR = 2, // 配置阈值状态
DETECTING = 3 , // 检测获取数据工作
PUSH = 4, // 正常上报MQTT
MISSING = 5, // 失联
STOP =6
}IOT_STATUS;
typedef enum{
LEVEL_UNKNOWN = 0, // 未知状态
LEVEL_0, // 轻度损耗
LEVEL_1, // 中度损伤
LEVEL_2, // 重度损伤
LEVEL_3, // 停止使用
}LEVEL;
typedef enum{
NO_WORKING = 0,
WORKING,
SENSOR_FINE,
SENSOR_ERROR
}IOT_WORK_STATUS_RESP;
#define ALIAS_MAX_NAME_LENGTH 8
//配置数据 (配置存储到内部FLASH --- 阈值与存储数据存储到外部FLASH)
typedef struct
{
unsigned short addr;
unsigned short id;
unsigned short sn;
bool bIsTimeout;
unsigned short id;
unsigned short sn;
char alias[ALIAS_MAX_NAME_LENGTH];
bool bIsUsed;
bool bIsPlugIn;
unsigned int rope_value;
bool beingWaiting;
unsigned char status;
}IOTDev;
bool beingDataWaiting;
bool beingStopWaiting;
bool beingConfigWaiting;
unsigned long g_ts;
unsigned short rope_value;
LEVEL level;
bool emergency;
IOT_STATUS status_machine;
unsigned short fifo_tail;
unsigned short fifo_data[FIFO_SIZE];
bool bIsFull;
unsigned long alarmRecord;
}wireRopeDev;
typedef struct
{
wireRopeDev wireRopeDevs[EACH_GROUP_MAX_NUM];
TimerHandle_t pxDataSendTimer;
bool DataSendFlag;
}wireRopeGroup;
typedef struct
{
char cModuleName[WIT_MODULE_NAME_MAX_SIZE]; //模块名称
unsigned long ulModuleNameValue; //检查模块名是否配置过
unsigned long ulPeriod; //发送周期
unsigned long ulDataPeriod; //发送周期
unsigned long ulFeaturePeriod; //发送周期
unsigned long ulConfigureValue; //检查以上内容是否配置过
unsigned long ulSerialNumber; //序列号
unsigned long ulPackageID; //包ID
......@@ -181,12 +232,9 @@ typedef struct
sSenTable xSenTable[WIT_SENSOR_MAX_CONNECT_NUM * WIT_SENSOR_GROUP_MAX_NUM];
unsigned long ulBleBinSize;
unsigned long ulSenParmInfoValue;
#if CONFIG_W5100S_SPI_ETHERNET > 0
wiz_NetInfo g_xConfigIp;
wiz_NetInfo g_xConfigIp;
unsigned long ulEthNetInfoValue; //检查以上信息是否配置过
#endif
IOTDev my_IOTDev[IOTDEV_MAX_NUM];
unsigned long my_IOTThreshold;
wireRopeGroup g_wireRopeGroup[WIREROPE_GROUP_MAX_NUM];
#endif
} WIT_Configure;
......@@ -254,11 +302,12 @@ bool WIT_GetMotorWork(unsigned char ucIndex);
unsigned long *get_ulPort(void);
char *sent_mqtt_ip(void);
#endif
#if CONFIG_W5100S_SPI_ETHERNET > 0
// #if CONFIG_W5100S_SPI_ETHERNET > 0
unsigned long get_status_dhcp(void);
wiz_NetInfo *get_gw_eth_info(void);
#endif
// #endif
void Message_Deal_Function(void);
unsigned long getIotConnectNum(void);
void Sensor_Status_Machine(void);
#endif
......@@ -11,8 +11,8 @@ extern "C"
#define TAG "Witium"
//软件版本号
#define WIT_VERSION "1.00"
#define WIT_VERSION_HEX 0x0100
#define WIT_VERSION "1.01"
#define WIT_VERSION_HEX 0x0101
//此宏直接在下载正式程序用
#define WIT_FIXED_MODULE_NAME 1
......@@ -84,6 +84,9 @@ extern "C"
#define WIT_MAX_TIME (0xFFFFFED8) // MOTT上发最大时长
#define WIT_ALARM_COUNT_THRESHOLD 5 // 预警N次才上报预警
#define WIT_FEATURE_PERIOD (15 * 60 * 1000)
#define WIT_DATA_PERIOD (15 * 60 * 1000)
#ifdef __cplusplus
}
#endif
......
......@@ -100,7 +100,15 @@ bool ACK_0AH(unsigned short id, unsigned short sn)
unsigned char cmd = 0x0A;
unsigned char data_size = 0x01;
unsigned char data[1] = {0x01};
printf("Send 0x0A\n");
return Response_Package(id, sn, cmd, data_size, data);
}
//68 00 3F 00 01 68 0C 01 02 1F 16
bool InquireStatus(unsigned short id, unsigned short sn)
{
unsigned char cmd = 0x0C;
unsigned char data_size = 0x01;
unsigned char data[1] = {0x02};
return Response_Package(id, sn, cmd, data_size, data);
}
......@@ -109,7 +117,7 @@ bool Start_Detect(unsigned short id, unsigned short sn)
unsigned char cmd = 0x04;
unsigned char data_size = 0x01;
unsigned char data[1] = {0x00};
printf("Send Start_Detect\n");
// printf("Send Start_Detect\n");
return Response_Package(id, sn, cmd, data_size, data);
}
......@@ -123,7 +131,7 @@ bool Stop_Detect(unsigned short id, unsigned short sn)
unsigned char cmd = 0x06;
unsigned char data_size = 0x01;
unsigned char data[1] = {0x00};
printf("Send Stop_Detect\n");
// printf("Send Stop_Detect\n");
return Response_Package(id, sn, cmd, data_size, data);
}
......@@ -194,7 +202,7 @@ bool data_frame_parsing(unsigned char *buf, int len, sIOT01B_Format* data)
// basic check
if(data->ucHeader != 0x68 || data->ucTail != 0x16)
{
printf("Header or Tail Error.\n");
// printf("Header[%2x] & Tail[%2x] Error.\n", data->ucHeader, data->ucTail);
return false;
}
......@@ -231,3 +239,84 @@ eIOT01B_Info IOT01B_Get_Collect_Data(sIOT01B_Format *df, unsigned short *value)
return EIOT01B_OK;
}
void queueInitFifo(unsigned short *fifo_tail, unsigned short fifo_data[], bool *isFull)
{
(*fifo_tail) = 0;
for(unsigned short i = 0; i < FIFO_SIZE; i++)
{
fifo_data[i] = 0;
}
(*isFull) = false;
}
unsigned short calculateAverage(unsigned short fifo_data[], bool isFull)
{
if(isFull != true) return 0;
unsigned short sum = 0;
for (int i = 0; i < FIFO_SIZE; i++)
{
sum += fifo_data[i];
}
printf("sum: %d\n", sum);
return sum / FIFO_SIZE;
}
void enqueueDataFifo(unsigned short *fifo_tail, unsigned short *fifo_data, int data, bool *isFull)
{
fifo_data[(*fifo_tail)] = data;
(*fifo_tail) = (*fifo_tail) + 1;
if ((*fifo_tail) >= FIFO_SIZE)
{
(*fifo_tail) = 0;
*isFull = true;
// printf("\n");
// for(int i = 0; i< FIFO_SIZE; i++)
// {
// printf("%d ", fifo_data[i]);
// }
// printf("\n");
}
}
unsigned short maxDataWireRope(unsigned short fifo_data[], bool isFull)
{
if(isFull != true) return 0;
int max = 0;
for (int i = 0; i < FIFO_SIZE; i++)
{
if (fifo_data[i] > max)
{
max = fifo_data[i];
}
}
return max;
}
int getAlarm( int alarmRecord, bool isFull)
{
if(isFull != true) return 0;
return (alarmRecord);
}
void setAlarm( unsigned long *alarmRecord)
{
if((*alarmRecord) >= 999999)
{
(*alarmRecord) = 999999;
}
else
{
(*alarmRecord)++;
}
}
......@@ -3,16 +3,19 @@
#include <stdint.h>
#include <stdbool.h>
// Slave Command
#define SLAVE_POWER_ON_CONTACK 0x01
#define SLAVE_ACK 0x03
#define SLAVE_HEARTBEAT 0x05
#define SLAVE_LINE_DETECT_DATA 0x07
#define SLAVE_RES_SYS_PARAMETER 0x09
#define WIREROPE_CMD_WAIT_AWAKE 0x01
#define WIREROPE_CMD_ACK_OR_NACK 0x03
#define WIREROPE_CMD_HEARTBEAT 0x05
#define WIREROPE_CMD_DATA_PERCENT 0x07
#define WIREROPE_CMD_SYSTEM_PARAM 0x09
#define WIREROPE_CMD_WORK_STATUS_MESSAGE 0x0B
#define WIREROPE_CMD_WORK_PARAM 0x0D
// Master Command
#define MASTER_ACK 0x0A
#define MASTER_START_DETECT 0x04
#define MASTER_ACK 0x0A
#define MASTER_START_DETECT 0x04
// Frame Define
......@@ -21,10 +24,14 @@
#define FRAME_TAIL 0x16
#define TCP_MESSAGE_MAX_LEN 256
#define TCP_MESSAGE_MAX_LEN 280
#define EACH_GROUP_MAX_NUM 4
#define WIREROPE_GROUP_MAX_NUM 2
#define IOTDEV_MAX_NUM 10
#define FIFO_SIZE 100
typedef enum {
EIOT01B_OK = 0,
......@@ -65,12 +72,13 @@ eIOT01B_Info IOT01B_Set_Stop_Collect(unsigned long ulDevId);
eIOT01B_Info IOT01B_Get_Collect_Data(sIOT01B_Format *df, unsigned short *value);
eIOT01B_Info IOT01B_Data_Parsing(void *ulData, unsigned short usSize);
void Message_Deal_Start_Task(void);
void message_deal_start_task(void);
void message_hex(unsigned char *buf, unsigned short len);
bool Message_Send(uint8_t *smessage, int len);
bool data_frame_parsing(unsigned char *buf, int len, sIOT01B_Format* data);
eIOT01B_Info IOT01B_Data_Parsing(void *ulData, unsigned short usSize);
bool ACK_0AH(unsigned short id, unsigned short sn);
bool InquireStatus(unsigned short id, unsigned short sn);
bool Set_Threshold(unsigned short id, unsigned short sn, unsigned short threshold);
bool Start_Detect(unsigned short id, unsigned short sn);
bool Stop_Detect(unsigned short id, unsigned short sn);
......@@ -78,6 +86,12 @@ void Get_SensorIOT_Data(unsigned short id, unsigned short sn);
void IOT_SetConfig();
// unsigned long getIotConnectNum(void);
void queueInitFifo(unsigned short *fifo_tail, unsigned short fifo_data[], bool *isFull);
unsigned short calculateAverage(unsigned short fifo_data[], bool isFull) ;
unsigned short maxDataWireRope(unsigned short fifo_data[], bool isFull) ;
int getAlarm( int alarmRecord, bool isFull);
void setAlarm( unsigned long *alarmRecord);
void enqueueDataFifo(unsigned short *fifo_tail, unsigned short *fifo_data, int data, bool *isFull) ;
......
......@@ -36,6 +36,8 @@ extern uint8 pub_buf[1024];
void ReadData(void);
static void make_basic_config_setting_json_callback(int8 *buf, CONFIG_MSG config_msg)
{
sprintf(buf, "settingsCallback({\"ver\":\"%X.%02X\",\
......@@ -224,9 +226,9 @@ void WriteData(CONFIG_MSG *config, uint16_t length)
wiz_NetInfo *eth_info = NULL;
unsigned long *value = NULL;
char *mqtt_ip = NULL;
#if CONFIG_W5100S_SPI_ETHERNET > 0
// #if CONFIG_W5100S_SPI_ETHERNET > 0
eth_info = get_gw_eth_info();
#endif
// #endif
value = get_ulPort();
mqtt_ip = sent_mqtt_ip();
if(eth_info == NULL || value == NULL || mqtt_ip == NULL)
......@@ -268,9 +270,9 @@ void ReadData(void)
ConfigMsg.mqttport[0] = *value % 256;
ConfigMsg.mqttport[1] = *value / 256;
#if CONFIG_W5100S_SPI_ETHERNET > 0
// #if CONFIG_W5100S_SPI_ETHERNET > 0
ConfigMsg.dhcpconfig = get_status_dhcp();
#endif
// #endif
ConfigMsg.dhcpconfig -= 1;
printf("IP, GW and Subnet updated successfully in gWIZNETINFO.\r\n");
......
......@@ -18,7 +18,9 @@
#include "socket.h"
#include "wizchip_conf.h"
#include "w5100s_conf.h"
#include "eth.h"
#if CONFIG_W5100S_SPI_ETHERNET > 0
#include "eth.h"
#endif
#include "ts_iot01b.h"
#include "freertos/FreeRTOS.h"
......@@ -34,28 +36,24 @@ uint16 local_port = 11111; // 定义本地端口11111
uint8_t g_IOTBuffer[200];
Tcp_Message g_Tcp_Message;
extern QueueHandle_t xMessageQueueHandle;
TimerHandle_t xSensorTimer = NULL;
TimerHandle_t xSensorDataFreshTimer = NULL;
TimerHandle_t xSensorTimeoutTimer = NULL;
TimerHandle_t xSensorDataUpdateTimer = NULL;
TCP_STATUS g_TcpServerStatus = TCP_SERVER_SOCKET_CLOSE;
extern TimerHandle_t g_xDataSendTimer[];
void do_tcp_server(void)
{
uint8_t count =0;
my_socket(2, Sn_MR_TCP, 11111, 0);
uint8_t ret;
uint16 len;
portBASE_TYPE ret_pB;
// my_socket(2, Sn_MR_TCP, 11111, 0);
while(1)
{
uint16 len = 0;
uint8_t ret = getSn_SR(SOCK_TCPS);
count++;
if(count == 500)
{
count = 0;
printf(">>>>>getSn_SR %d\n",ret);
}
// printf(" getSn_SR %d\n",ret);
len = 0;
ret = getSn_SR(SOCK_TCPS);
switch(ret) // 获取socket的状态
{
case SOCK_CLOSED: // socket处于关闭状态
......@@ -82,18 +80,24 @@ void do_tcp_server(void)
len = getSn_RX_RSR(SOCK_TCPS); // 定义len为已接收数据的长度
if(len > 0)
{
if(len > 256)
if(len > 280)
{
len =256;
len = 265;
}
recv(SOCK_TCPS, g_Tcp_Message.message, len); // 接收来自Client的数据
g_Tcp_Message.rec_len = len; // 添加字符串结束符
// printf("sock receive len[%d]: %s\n", g_Tcp_Message.rec_len, g_Tcp_Message.message);
if (xMessageQueueHandle != NULL)
{
xQueueSend( xMessageQueueHandle, &g_Tcp_Message, 0);
// disconnect(SOCK_TCPS); // 断开当前TCP连接
// close(SOCK_TCPS); // 关闭当前所使用socket
ret_pB = xQueueSend( xMessageQueueHandle, &g_Tcp_Message, 0); // 将数据发送到消息队列中
if(ret_pB == pdTRUE)
{
// printf("xQSend OK\n");
}
else
printf("xQSend Exx\n");
}
else
{
......@@ -129,7 +133,7 @@ bool Message_Send(uint8_t *smessage, int len)
}
else
{
printf("TCP SERVER DISCONNECT!!! \nTCP_SERVER_STATUS is [%d]\n", g_TcpServerStatus);
// printf("No Client ESTABLISHED [%x]\n", g_TcpServerStatus);
return false;
}
}
......@@ -137,14 +141,18 @@ bool Message_Send(uint8_t *smessage, int len)
void tcp_server_task_start(void)
{
printf("tcp_server_task START\n");
printf("1 start\n");
xTaskCreate(do_tcp_server, "tcp_server_task", 2048, NULL, 5, NULL);
}
void Message_Deal_Start_Task(void)
void message_deal_start_task(void)
{
printf("Message_Deal_Task START\n");
xMessageQueueHandle = xQueueCreate(40, sizeof(Tcp_Message));
xTaskCreate(Message_Deal_Function, "Message_Deal_Function", 8192, NULL, 5, NULL);
printf("2 start\n");
while(xMessageQueueHandle == NULL)
{
xMessageQueueHandle = xQueueCreate(100, sizeof(Tcp_Message));
}
xTaskCreate(Sensor_Status_Machine, "StatusMachine", 5120, NULL, 5, NULL);
xTaskCreate(Message_Deal_Function, "MessageDealFunction", 10240, NULL, 5, NULL);
}
......@@ -22,7 +22,9 @@
#include "driver/gpio.h"
#include "spi.h"
#include "esp_rom_gpio.h"
#include "eth.h"
#if CONFIG_W5100S_SPI_ETHERNET > 0
#include "eth.h"
#endif
#include "wit.h"
#include "freertos/FreeRTOS.h"
......@@ -74,7 +76,9 @@ void ETHERNET_Init(bool *bModuleStatus, bool *bCableStatus)
vTaskDelay(2000 / portTICK_PERIOD_MS);
}
// hw_ping_init();
if_eth_task_init();
#if CONFIG_W5100S_SPI_ETHERNET > 0
if_eth_task_init();
#endif
}
/**
......
......@@ -12,7 +12,7 @@
/* Private macros ------------------------------------------------------------*/
#define CELLUAR_POWER_KEY_PIN 1
#define CELLUAR_STATUS_PIN 38
#define POWER_KEY_PIN 46
#define POWER_KEY_PIN 3
#define CELLUAR_POWER_BASE_TIME 500 //500ms
......@@ -26,8 +26,8 @@ void Celluar_ConfigureGPIO(void)
esp_rom_gpio_pad_select_gpio(CELLUAR_STATUS_PIN);
gpio_set_direction(CELLUAR_STATUS_PIN, GPIO_MODE_INPUT); //
// POWER_KEY_PIN
// esp_rom_gpio_pad_select_gpio(POWER_KEY_PIN); // 选择个GPIO
// gpio_set_direction(POWER_KEY_PIN, GPIO_MODE_OUTPUT); // 把这个GPIO作为输出
esp_rom_gpio_pad_select_gpio(POWER_KEY_PIN); // 选择个GPIO
gpio_set_direction(POWER_KEY_PIN, GPIO_MODE_OUTPUT); // 把这个GPIO作为输出
gpio_set_level(POWER_KEY_PIN, 1);
// // EC20 PWR设置
......
......@@ -98,7 +98,7 @@ void Celluar_ConfigureUSB(void (*pFuncIdleCallBack)(void), void (*pFuncRxneCallB
{
usbh_cdc_driver_install(&config);
/* Waiting for USB device connected */
usbh_cdc_wait_connect(portMAX_DELAY);
usbh_cdc_wait_connect(5000);
g_xUSBHandler.pFuncRxneHandler = pFuncRxneCallBack;
g_xUSBHandler.pFuncIdleHandler = pFuncIdleCallBack;
gUSBSemaphore = xSemaphoreCreateBinary();
......
......@@ -21,25 +21,22 @@
#include "freertos/queue.h"
#include "wit.h"
#if CONFIG_W5100S_SPI_ETHERNET > 0
#include "httputil.h"
#endif
#define MAIN_TASK_STK (configMINIMAL_STACK_SIZE * 10)
#define MAIN_TASK_PRIORITY (tskIDLE_PRIORITY + 3)
#if CONFIG_W5100S_SPI_ETHERNET > 0
#define HTTP_TASK_STK (configMINIMAL_STACK_SIZE * 20)
#define HTTP_TASK_PRIORITY (tskIDLE_PRIORITY + 2)
#endif
#define TWDT_TIMEOUT_S 3 // TWDT超时时间
#define TASK_RESET_PERIOD_S 2 // 任务重置周期时间
static void Main_Task(void *pvParameter);
#if CONFIG_W5100S_SPI_ETHERNET > 0
static void Http_Task(void *pvParameter);
#endif
static void Http_Task(void *pvParameter);
static int bWITInitFin = 0;
......@@ -48,9 +45,7 @@ void app_main(void)
int rc = 0;
ESP_ERROR_CHECK(nvs_flash_init());
xTaskCreate(Main_Task, "Main Task", MAIN_TASK_STK, NULL, MAIN_TASK_PRIORITY, NULL);
#if CONFIG_W5100S_SPI_ETHERNET > 0
rc = xTaskCreate(Http_Task, "Http Task", HTTP_TASK_STK, NULL, HTTP_TASK_PRIORITY, NULL);
#endif
printf("rc is %d\r\n", rc);
}
......@@ -68,11 +63,10 @@ static void Main_Task(void *pvParameter)
vTaskDelay(20 / portTICK_PERIOD_MS);
}
}
#if CONFIG_W5100S_SPI_ETHERNET > 0
static void Http_Task(void *pvParameter)
{
//Init
// printf("Enter Http Task\n");
while(1)
{
if(bWITInitFin == 1)
......@@ -82,4 +76,4 @@ static void Http_Task(void *pvParameter)
vTaskDelay(1 / portTICK_PERIOD_MS);
}
}
#endif
......@@ -471,8 +471,8 @@ CONFIG_PARTITION_TABLE_MD5=y
# Witium Gateway Configure
#
# CONFIG_ESP32_WIFI is not set
# CONFIG_EC200S_USB_4G is not set
CONFIG_W5100S_SPI_ETHERNET=y
CONFIG_EC200S_USB_4G=y
# CONFIG_W5100S_SPI_ETHERNET is not set
# CONFIG_RS485_RTU is not set
CONFIG_BLUETOOTH=y
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment