Procházet zdrojové kódy

继续添加应用文件

guohui před 1 rokem
rodič
revize
220715e64f

binární
cust_data/qt/Qt_Test


+ 2 - 1
f407/applications/board.c

@@ -18,7 +18,8 @@ void rt_hw_board_init()
 
     /* Heap initialization */
 #if defined(RT_USING_HEAP)
-    rt_system_heap_init((void *) HEAP_BEGIN, (void *) HEAP_END);
+    rt_system_heap_init((void *) HEAP_BEGIN1, (void *) HEAP_END1);
+    //rt_system_heap_init((void *) HEAP_BEGIN2, (void *) HEAP_END2);
 #endif
 
     hw_board_init(BSP_CLOCK_SOURCE, BSP_CLOCK_SOURCE_FREQ_MHZ, BSP_CLOCK_SYSTEM_FREQ_MHZ);

+ 59 - 18
f407/applications/board.h

@@ -35,35 +35,76 @@ extern "C"
 #define ROM_SIZE               (1024 * 1024)
 #define ROM_END                ((uint32_t)(ROM_START + ROM_SIZE))
 
-#define RAM_START              (0x20000000)
-#define RAM_SIZE               (128 * 1024)
-#define RAM_END                (RAM_START + RAM_SIZE)
+#define RAM1_START             (0x20000000)
+#define RAM1_SIZE              (128 * 1024)
+#define RAM1_END               (RAM1_START + RAM1_SIZE)
 
+#define RAM2_START             (0x10000000)
+#define RAM2_SIZE              (64 * 1024)
+#define RAM2_END               (RAM2_START + RAM2_SIZE)
 
 #define BSP_CLOCK_SOURCE                  ("HSI")
 #define BSP_CLOCK_SOURCE_FREQ_MHZ         ((int32_t)0)
 #define BSP_CLOCK_SYSTEM_FREQ_MHZ         ((int32_t)168)
 
 
-//Onboard Peripheral Drivers
-#define BSP_USING_USB_TO_USART
-
 //On-chip Peripheral Drivers
 #define BSP_USING_GPIO
 #define BSP_USING_UART
-#define BSP_USING_UART1
-#define BSP_UART1_TX_PIN       "PA9"
-#define BSP_UART1_RX_PIN       "PA10"
-#define BSP_UART1_RX_BUFSIZE 1024
-#define BSP_UART1_TX_BUFSIZE 1024
-
-//#define BSP_USING_UART2
-//#define BSP_USING_UART3
-//#define BSP_UART2_RX_USING_DMA
-//#define BSP_UART2_TX_USING_DMA
-//#define BSP_UART3_RX_USING_DMA
-//#define BSP_UART3_TX_USING_DMA
 
+#ifdef BOARD_EVB_ATK
+    #define BSP_USING_UART1
+    #define BSP_UART1_TX_PIN            "PA9"
+    #define BSP_UART1_RX_PIN            "PA10"
+    #define BSP_UART1_RX_BUFSIZE        1024
+    #define BSP_UART1_TX_BUFSIZE        1024
+
+    #define BSP_USING_UART2
+    #define BSP_UART2_TX_PIN            "PA2"
+    #define BSP_UART2_RX_PIN            "PA3"
+    #define BSP_UART2_RX_BUFSIZE        1024
+    #define BSP_UART2_TX_BUFSIZE        1024
+    #define BSP_UART2_RX_USING_DMA
+    #define BSP_UART2_TX_USING_DMA
+    
+    #define BSP_USING_UART3
+    #define BSP_UART3_TX_PIN            "PB10"
+    #define BSP_UART3_RX_PIN            "PB11"
+    #define BSP_UART3_RX_BUFSIZE        1024
+    #define BSP_UART3_TX_BUFSIZE        1024
+    #define BSP_UART3_RX_USING_DMA
+    #define BSP_UART3_TX_USING_DMA
+#else
+    #define BSP_USING_UART1
+    #define BSP_UART1_TX_PIN            "PA9"
+    #define BSP_UART1_RX_PIN            "PA10"
+    #define BSP_UART1_RX_BUFSIZE        1024
+    #define BSP_UART1_TX_BUFSIZE        1024
+
+    #define BSP_USING_UART2
+    #define BSP_UART2_TX_PIN            "PA2"
+    #define BSP_UART2_RX_PIN            "PA3"
+    #define BSP_UART2_RX_BUFSIZE        1024
+    #define BSP_UART2_TX_BUFSIZE        1024
+    //#define BSP_UART2_RX_USING_DMA
+    //#define BSP_UART2_TX_USING_DMA
+    
+    #define BSP_USING_UART3
+    #define BSP_UART3_TX_PIN            "PB10"
+    #define BSP_UART3_RX_PIN            "PB11"
+    #define BSP_UART3_RX_BUFSIZE        1024
+    #define BSP_UART3_TX_BUFSIZE        1024
+    //#define BSP_UART3_RX_USING_DMA
+    //#define BSP_UART3_TX_USING_DMA
+    
+    #define BSP_USING_UART6
+    #define BSP_UART6_TX_PIN            "PC6"
+    #define BSP_UART6_RX_PIN            "PC7"
+    #define BSP_UART6_RX_BUFSIZE        1024
+    #define BSP_UART6_TX_BUFSIZE        1024
+    //#define BSP_UART6_RX_USING_DMA
+    //#define BSP_UART6_TX_USING_DMA
+#endif
 
 //#define BSP_USING_I2C2
 #define BSP_I2C2_SCL_PIN 16

+ 29 - 0
f407/applications/cfg.h

@@ -9,6 +9,22 @@
 /////////////PRJ DEFINE//////////////////////
 #define PRJ_TEST
 
+//#define BOARD_EVB_ATK
+#ifdef BOARD_EVB_ATK
+    #define POWER_PORT      "uart2"
+    #define SENSOR_PORT     "uart3"
+    #define CONSOLE_PORT    "uart1"
+    
+    #define NOR_PORT        "spi1"
+#else
+    #define POWER_PORT      "uart1"
+    #define CASCADE_PORT    "uart2"
+    #define SENSOR_PORT     "uart3"
+    #define CONSOLE_PORT    "uart6"
+    
+    #define NOR_PORT        "spi1"
+#endif
+
 
 
 #ifdef PRJ_TEST
@@ -22,6 +38,19 @@
     
     //#define USE_MG714
 
+    #define LANGUAGE                            LANG_ID_CHINESE
+    #define SMPLE_TIME                          30          //ms
+    #define SAVE_TIME                           60000       //ms
+    #define CASCADE_CNT                         0
+
+    #define PHASE_GROUP                         8
+
+    
+    #define CHANNEL_DELAY                       8
+
+    #define PROD_TYPE                           1
+    #define PROD_POWER_TYPE                     0
+
 #else
     #error define a PRJ_XXXX please!
 #endif

+ 68 - 38
f407/applications/protocol.h

@@ -1,7 +1,9 @@
-#ifndef __PROTOCOL_Hx__
-#define __PROTOCOL_Hx__
+#ifndef __DATADEF_Hx__
+#define __DATADEF_Hx__
 
 #include <stdint.h>
+#include "log.h"
+
 
 #define CH_MAX          12
 #define BRD_MAX         32
@@ -34,6 +36,12 @@ enum {
     PDU_AC_I3O3_X,
 };
 
+enum {
+    BOARD_TYPE_DC=0,
+    BOARD_TYPE_AC,
+    BOARD_TYPE_AC3,
+};
+
 enum {
     ALARM_TYPE_POWER=0,
     ALARM_TYPE_SENSOR,
@@ -43,12 +51,21 @@ enum {
     
     ALARM_TYPE_MAX
 };
+
+enum {
+    ALARM_V_UPPER     = (1<<2),
+    ALARM_V_LOWER     = (1<<4),
+    ALARM_C_UPPER     = (1<<6), 
+    ALARM_W_UPPER     = (1<<8),
+    ALARM_P_UPPER     = (1<<10),
+};
+
 enum {
     THRESHOLD_V_UPPER = (1<<0), //电压超上限
     THRESHOLD_V_LOWER = (1<<1), //电压超下限
     THRESHOLD_C_UPPER = (1<<2), //电流超上限
     THRESHOLD_P_UPPER = (1<<3), //功率超上限
-    THRESHOLD_W_UPPER = (1<<4), //电能超上限
+    THRESHOLD_W_UPPER = (1<<4), //电能/耗电量超上限
 };
 
 enum {
@@ -186,10 +203,10 @@ typedef struct {
 
 typedef struct {
     uint32_t            id[3];
-    uint32_t            chns;
+    uint32_t            chs;
     uint32_t            time;
     char                ver[12];
-}board_data_t;
+}board_info_t;
 
 typedef struct {
     modbus_data_t       cas;
@@ -199,7 +216,6 @@ typedef struct {
     network_data_t      netwk;
 }paras_data_t;
 
-
 typedef struct {
     uint8_t             lang;
 }sys_data_t;
@@ -213,49 +229,48 @@ typedef struct {
     float               current;                //电流
     float               power;                  //功率
     float               freq;                   //频率
-    float               consum;                 //耗电量consumption
+    float               consump;                //耗电量consumption
     float               factor;                 //功率因素    
     uint8_t             status;                 //开关状态     
     uint8_t             nwire;                  //零线状态
-    uint32_t            time;
-}power_data_t;
+}elect_data_t;
 typedef struct {
-    uint8_t             ch_idx;                 //该通道在全部板上的所排序号
-    uint8_t             ch_idx2;                //该通道在其所在的板上的序号
-    uint8_t             ph_order;               //0:A相 1:B相 2:C相
+    uint8_t             v_upper;                //电压超上限
+    uint8_t             v_lower;                //电压超下限
+    uint8_t             c_upper;                //电流超上限
+    uint8_t             p_upper;                //功率超上限
+    uint8_t             w_upper;                //耗电量超上限
     
-    power_data_t        *pdata;
-}ch_power_t;
-
-typedef struct {
-    uint8_t             en;
-    float               value;                  //threashold value
-    uint8_t             action;
-    uint8_t             action_para;
-}threshold_t;
+    uint8_t             ph_loss;                //缺相
+}alarm_data_t;
 typedef struct {
-    threshold_t         volt_upper;
-    threshold_t         volt_lower;
-    threshold_t         volt_over;
-    threshold_t         curr_upper;             //current
-    threshold_t         power_upper;
-    threshold_t         pcons_upper;            //power consumption
-}ch_threshold_t;
-
+    uint8_t             type;
+    uint8_t             addr;
+    uint8_t             ch;                      //该通道在全部板上的所排序号,程序始于0,用户始于1
+    uint8_t             sch;                     //该通道在其所在的板上的序号,程序始于0,用户始于1
+    uint8_t             pid;                     //phase id, 0:L1相 1:L2相 2:L3相
+}info_ch_t;
 typedef struct {
-    ch_power_t          pwr;
-    ch_threshold_t      thr;
-}ch_data_t;
+    info_ch_t           info;
+    elect_data_t        *pele;                  //电力信息
+    alarm_data_t        alarm;
+    uint32_t            time;
+}power_ch_t;
 
 typedef struct {
     uint8_t             type;
     uint8_t             addr;
     
-    ch_data_t           *pch[CH_MAX];
-}power_board_t;
+    uint8_t             chs;
+    power_ch_t          *pch;                   //根据实际通道数申请连续内存
+}power_brd_t;
 
 typedef struct {
-    power_board_t       *pbrd[BRD_MAX];
+    uint8_t             chs;                    //所有控制板的总通道数
+    power_ch_t          **pch;                  //动态指针
+    
+    uint8_t             cnt;
+    power_brd_t         *pbrd[BRD_MAX];
 }power_all_t;
 
 typedef struct {
@@ -263,7 +278,7 @@ typedef struct {
     float               current;                //电流
     float               power;                  //功率
     float               freq;                   //频率
-    float               consum;                 //耗电量
+    float               consump;                //耗电量
     
     float               active;                 //有功功率
     float               reactive;               //无功功率
@@ -276,12 +291,27 @@ typedef struct {
     uint8_t             time;
 }sensor_data_t;
 
+typedef struct {
+    uint8_t             en;
+    float               val;                    //threashold value
+    uint8_t             act;
+    uint8_t             act_para;
+}threshold_t;
+typedef struct {
+    threshold_t         volt_upper;
+    threshold_t         volt_lower;
+    threshold_t         volt_over;
+    threshold_t         curr_upper;             //current
+    threshold_t         power_upper;
+    threshold_t         pcons_upper;            //power consumption
+}threshold_ch_t;
+
 typedef struct {
     uint8_t             type;
     uint32_t            str_id;
     uint32_t            sep_id;
     uint32_t            time;
-}alarm_data_t;
+}alarm_msg_t;
 
 typedef struct {
     uint32_t            brd[BRD_MAX];
@@ -298,7 +328,7 @@ typedef struct {
     sys_data_t          sys;
     
     power_all_t         pall;
-    power_total_t       ptotal;
+    power_total_t       pttl;
 }all_data_t;
 //////////////////////////////
 typedef struct 

+ 2 - 0
f407/applications/db.c

@@ -1,5 +1,7 @@
 #include "db.h"
 
+
+
 int db_init(void)
 {
     return 0;

+ 22 - 0
f407/applications/db.h

@@ -1,6 +1,28 @@
 #ifndef __DB_Hx__
 #define __DB_Hx__
 
+enum {
+    TAB_ID_NTP=0,
+    TAB_ID_USER,
+    TAB_ID_ROLE,
+    TAB_ID_GROUP,
+    TAB_ID_SNMP,
+    TAB_ID_MAIL,
+    TAB_ID_MQTT,
+    TAB_ID_TIMER,
+    TAB_ID_POWER,
+    TAB_ID_POWER3,
+    TAB_ID_SENSOR,
+    TAB_ID_SENSOR_INFO,
+    TAB_ID_BREAKER,
+    
+    TAB_ID_LOG_INFO,
+    TAB_ID_ALARM_INFO,
+    TAB_ID_POWER_INFO,
+    TAB_ID_POWER3_INFO,
+    
+    TAB_ID_MAX
+};
 
 int db_init(void);
 

+ 9 - 33
f407/applications/dflt.c

@@ -1,12 +1,11 @@
-#include "common.h"
-#include "mqtt.h"
+#include "datadef.h"
 #include "cfg.h"
 
 
-GlobalDeviceInfo DFLT_PARAS={
+paras_data_t DFLT_PARAS={
 
-        .product = {
-            .id         = PROD_ID,
+        .prod = {
+            .id         = 1011,
             .pname = "Smart PDU",
             .pnumber = "GCX00000X",
             .number     = "X00001",
@@ -26,42 +25,19 @@ GlobalDeviceInfo DFLT_PARAS={
             .ch_delay   = CHANNEL_DELAY,
         },
         
-        .relay = {                                      //继电器控制端口
-            .mode = 1,                                  //modbus模式,0: master     1: slave
-            .addr = 1,
-            .baudrate = 115200,
-            .path = "/dev/ttyAS2",                      //继电器modbus控制端口路径
-        },
-        
-        .network = {
+        .netwk = {
             .mode = 1,                                   //0:dhcp   1:static
-            .ip_address = "192.168.1.132",
+            .ipaddr = "192.168.1.132",
             .mask = "255.255.255.0",
             .gateway = "192.168.1.1",
             .dns1 = "8.8.8.8",
             .dns2 = "1.1.1.1",
         },
         
-        .cascade = {
-            .mode = MODBUS_SLAVE,                       //modbus模式,0: master     1: slave
+        .cas = {
+            .mode = MODBUS_SLAVE,
             .addr = 1,
-            .baudrate = 115200,
-            .path = "/dev/ttyAS5",                      //表头级联串口对应路径
-        },
-
-        .ptotal = {
-            .voltage = 500,
-            .current = 100,
-            .power = 100,
-            .brdMax = 24,
-        },
-
-        .webcfg = {
-            .monway = 2,
-            .netsw  = 0,
-            .nwire  = 0,
-            .ipv4   = 1,
-            .ipv6   = 1,
+            .baud = 115200,
         },
 
         .misc = {

+ 32 - 10
f407/applications/fs.c

@@ -16,6 +16,10 @@
     #define LOGE  rt_kprintf
 #endif
 
+#define MALLOC   malloc
+#define FREE     free
+
+
 #define FS_TYPE   "elm"
 //#define FS_TYPE   "lfs"
 
@@ -68,6 +72,22 @@ static mnt_info_t* get_info(fs_handle_t *h, char *dev)
     }
     return NULL;
 }
+static int dfs_mounts(const char *dev, const char *path, const char *fs_type)
+{
+    int r,err;
+    char *p=NULL,tmp;
+    
+    p = strchr(path, '/');
+    while(p) {
+        tmp = *p;
+        *p = 0;
+        r = dfs_mount(dev, path, fs_type, 0, 0);
+        LOGD("___ %s mount %s!\n", path, r?"failed":"ok");
+        *p = tmp;
+        
+        p = strchr(p+1, '/');
+    }
+}
 static int do_mount(fs_handle_t *h, char *dev, int flag)
 {
     int r=0;
@@ -79,10 +99,12 @@ static int do_mount(fs_handle_t *h, char *dev, int flag)
         return -1;
     }
     
+    //flag>0表示挂载, 若已经挂载则退出
     if(flag && h->mounted[info->id]) {
         return 0;
     }
     
+    //flag=0表示卸载, 若已经已经卸载则退出
     if(!flag && !h->mounted[info->id]) {
         return 0;
     }
@@ -90,12 +112,12 @@ static int do_mount(fs_handle_t *h, char *dev, int flag)
     devid = rt_device_find(info->dev);
     if(devid) {
         if(flag) {
-            r = dfs_mount(info->dev, info->mpath, info->ftype, 0, 0);
+            r = dfs_mounts(info->dev, info->mpath, info->ftype);
             if (r) {
                 if(rt_get_errno()==EPERM) {
                     r = dfs_mkfs(info->dev, info->ftype);
                     if(r==0) {
-                        r = dfs_mount(info->dev, info->mpath, info->ftype, 0, 0);
+                        r = dfs_mounts(info->dev, info->mpath, info->ftype);
                         if(r==0) {
                             h->mounted[info->id] = 1;
                         }
@@ -176,13 +198,13 @@ int fs_exist(char* path)
 int fs_save(char *path, void *buf, int len)
 {
     int r;
-    FILE *fp;
+    FILE *fp=fopen(path, "w");;
     
-    fp = fopen(path, "w");
     if(!fp) {
         LOGE("file_save, fopen %s failed\n", path);
         return -1;
     }
+    
     r = fwrite(buf, 1, len, fp);
     if(r!=len) {
         LOGE("file_save %s failed, %d, %d\n", path, r, len);
@@ -208,7 +230,7 @@ int fs_load(char* path, buf_t *fbuf)
     }
 
     blen = flen+1;
-    fbuf->buf = (char*)malloc(blen);
+    fbuf->buf = (char*)MALLOC(blen);
     if(!fbuf->buf) {
         LOGE("____ file_load, %s malloc %d failed\n", path, flen);
         return -1;
@@ -219,13 +241,13 @@ int fs_load(char* path, buf_t *fbuf)
     fp = fopen(path, "r");
     if (!fp) {
         LOGE("file_load, fopen %s failed\n", path);;
-        free(fbuf->buf);
+        FREE(fbuf->buf);
         return -1;
     }
     r = fread(fbuf->buf, 1, flen, fp);
     if (r != flen) {
         LOGE("file_load %s failed, %d, %d\n", path, r, flen);
-        fclose(fp); free(fbuf->buf);
+        fclose(fp); FREE(fbuf->buf);
         r = -1;
     }
     else {
@@ -250,7 +272,7 @@ char* fs_load2(char* path, int add0)
     }
 
     blen = flen+(add0?1:0);
-    fbuf = (char*)malloc(blen);
+    fbuf = (char*)MALLOC(blen);
     if(!fbuf) {
         LOGE("____ file_load2, %s malloc %d failed\n", path, flen);
         return NULL;
@@ -259,13 +281,13 @@ char* fs_load2(char* path, int add0)
     fp = fopen(path, "r");
     if (!fp) {
         LOGE("file_load2, fopen %s failed\n", path);;
-        free(fbuf);
+        FREE(fbuf);
         return NULL;
     }
     r = fread(fbuf, 1, flen, fp);
     if (r != flen) {
         LOGE("file_load2 %s failed, %d, %d\n", path, r, flen);
-        fclose(fp); free(fbuf);
+        fclose(fp); FREE(fbuf);
         fbuf = NULL;
     }
     if(add0) fbuf[flen] = 0;

+ 2 - 2
f407/applications/list.c

@@ -3,8 +3,8 @@
 #include <pthread.h>
 
 
-#define MALLOC  rt_malloc
-#define FREE    rt_free
+#define MALLOC  malloc
+#define FREE    free
 
 #define LOGD    LOG_D
 #define LOGE    LOG_E

+ 117 - 0
f407/applications/log.c

@@ -0,0 +1,117 @@
+#include "log.h"
+#include "lock.h"
+#include "list.h"
+#include <rtdbg.h>
+
+
+
+
+enum {
+    LV_INFO=0,
+    LV_DEBUG,
+    LV_WARN,
+    LV_ERROR,
+
+    LV_MAX
+};
+
+#define LOGx(lv, fmt, ...)  log_print(lv, fmt, ##__VA_ARGS__)
+//#define LOGx(lv, fmt, ...)  printf(fmt, ##__VA_ARGS__)
+
+#define LOGI(fmt, ...)      LOGx(LV_INFO,  fmt, ##__VA_ARGS__)
+#define LOGD(fmt, ...)      LOGx(LV_DEBUG, fmt, ##__VA_ARGS__)
+#define LOGW(fmt, ...)      LOGx(LV_WARN,  fmt, ##__VA_ARGS__)
+#define LOGE(fmt, ...)      LOGx(LV_ERROR, fmt, ##__VA_ARGS__)
+
+
+
+
+
+
+
+
+
+#define LOG_BUF_LEN  1000
+
+typedef struct {
+    lock_t   lck;
+    handle_t list;
+    uint8_t  enable;
+    uint8_t  flags;
+    char     buf[LOG_BUF_LEN];
+}log_handle_t;
+static log_handle_t logHandle={0};
+
+int log_init(void)
+{
+    log_handle_t *h=&logHandle;
+    
+    return 0;
+}
+
+
+int log_deinit(void)
+{
+    log_handle_t *h=&logHandle;
+    
+    return 0;
+}
+
+
+int log_set(LOG_LEVEL lv, int en)
+{
+    lock_on(logHandle.lck);
+    if(en) {
+        logHandle.flag |= lv;
+    }
+    else {
+        logHandle.flag |= ~lv;
+    }
+    lock_off(logHandle.lck);
+    
+    return 0;
+}
+
+
+int log_print(LOG_LEVEL lv, char *fmt, ...)
+{
+    int len;
+    va_list args;
+    log_handle_t *h=&logHandle;
+    
+    if(!h->enable || !(h->flag&lv)) {
+        return -1;
+    }    
+    
+    lock_on(logHandle.lck);
+    
+    va_start(args, fmt);
+    //dal_rtc_get(&dt);
+    //vsnprintf(logHandle.buffer, LOG_BUF_LEN, "%02d:%02d:%02d, %s%s", dt.time.hour, dt.time.min, dt.time.sec, fmt, args);
+    vsnprintf(h->buf, LOG_BUF_LEN, fmt, args);
+    //vprintf(fmt, args);
+    va_end(args);
+    
+    len = strlen(h->buf);
+    //dal_uart_write(logHandle.hlog, h->buf, len);
+    //list_append(logHandle.list, lv, logHandle.buffer, len);
+
+    lock_off(logHandle.lck);
+
+    return 0;
+}
+
+
+int log_save(void)
+{
+    log_handle_t *h=&logHandle;
+    
+    return 0;
+}
+
+
+
+
+
+
+

+ 6 - 9
f407/applications/log.h

@@ -1,16 +1,13 @@
 #ifndef __LOG_Hx__
 #define __LOG_Hx__
 
+#include <rtdbg.h>
 
+#define LOGD   LOG_D
+#define LOGW   LOG_W
+#define LOGI   LOG_I
+#define LOGE   LOG_E
 
-
-
-
-
-
-
-
-
-
+                                
 #endif
 

+ 50 - 27
f407/applications/main.c

@@ -1,15 +1,3 @@
-/*
- * Copyright (c) 2006-2021, RT-Thread Development Team
- *
- * SPDX-License-Identifier: Apache-2.0
- *
- * Change Logs:
- * Date           Author       Notes
- * 2018-11-06     SummerGift   first version
- * 2018-11-19     flybreak     add stm32f407-atk-explorer bsp
- * 2023-12-03     Meco Man     support nano version
- */
-
 #include <board.h>
 #include <rtthread.h>
 #include <drv_gpio.h>
@@ -21,23 +9,39 @@
 #include <unistd.h>
 #include "web.h"
 #include "fs.h"
+#include "power.h"
+#include "cfg.h"
 
 //https://embedded-rd.blog.csdn.net/article/details/109643188
 
 extern void lwip_sys_init(void);
-#define LED0_PIN    GET_PIN(F, 9)
-#define LED1_PIN    GET_PIN(F, 10)
+
+#ifdef BOARD_EVB_ATK
+    #define LED0_PIN    GET_PIN(F, 9)
+    #define LED1_PIN    GET_PIN(F, 10)
+#else
+    #define LED0_PIN    GET_PIN(E, 6)
+#endif
+
 
 static void led_init(void)
 {
+#ifdef BOARD_EVB_ATK
     rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
     rt_pin_mode(LED1_PIN, PIN_MODE_OUTPUT);
+#else
+    rt_pin_mode(LED0_PIN, PIN_MODE_OUTPUT);
+#endif
 }
 static void led_toggle(void)
 {
     static rt_ssize_t v=PIN_LOW;
+#ifdef BOARD_EVB_ATK
     rt_pin_write(LED0_PIN, v);
     rt_pin_write(LED1_PIN, v);
+#else
+    rt_pin_write(LED0_PIN, v);
+#endif
     v = (v==PIN_LOW)?PIN_HIGH:PIN_LOW;
 }
 
@@ -124,31 +128,52 @@ __exit:
     return ret;
 }
 
+static int sd_mount(void)
+{
+    int r=1,n=0;
+    r = mmcsd_wait_cd_changed(500);
+    if(r==MMCSD_HOST_PLUGED) {
+        r = fs_mount("sd", 1);
+    }
+    else if(r==MMCSD_HOST_UNPLUGED) {
+        r = fs_mount("sd", 0);
+    }
+    return r;
+}
+
 
 static int user_init(void)
 {
-    
+    int r,n=0;
     led_init();
-    
     //rt_hw_lcd_init();
+    //net_init("0.0.0.0", SERVER_PORT);
     
-    rt_thread_mdelay(3000);
-    fs_mount("sd", 1);
-    
-    lwip_sys_init();
+    power_init();
+    while(n<10) {
+        r = sd_mount();
+        if(r<=0) {
+            break;
+        }
+        
+        n++;
+    }
+
     web_init();
-    //net_init("0.0.0.0", SERVER_PORT);
     
     return 0;
 }
 
-#define THRAD_MAX  8
+#define THRAD_MAX  3
 static int flags[THRAD_MAX];
 static void my_thread(void *arg)
 {
-    int p=*(int*)arg;
+    int i,j,p=*(int*)arg;
     while(1) {
-        rt_kprintf("____thread %d\n", p);
+        for(i=0; i<10; i++) {
+            while(j++<100000);
+        }
+        sleep(1);
     }
 }
 static void my_start(void)
@@ -159,7 +184,7 @@ static void my_start(void)
         flags[i] = i;
         rt_thread_t tid = rt_thread_create(NULL, my_thread, &flags[i], 2048, 5, 20);
         if(tid==NULL) {
-            rt_kprintf("___ thread create failed\n");
+            rt_kprintf("___ thread %d create failed\n", i);
         }
         rt_thread_startup(tid);
     }
@@ -169,8 +194,6 @@ static void my_start(void)
 int main(void)
 {
     user_init();
-    
-    //my_start();
     while (1) {
         led_toggle();
         rt_thread_mdelay(500);

+ 76 - 33
f407/applications/mb.c

@@ -1,14 +1,23 @@
 #include "mb.h"
 #include "list.h"
-#include "modbus.h"
+
+
+#define MALLOC   malloc
+#define FREE     free
 
 typedef struct {
-    mb_inst_t  *hinst;
-    uint8_t    type;
+    mb_inst_t  *h;
     uint8_t    mode;
-    uint8_t    quit;
+    uint8_t    type;
+}mb_conn_t;
+
+typedef struct {
+    mb_conn_t  rtu;
+    mb_conn_t  tcp;
     
     rt_thread_t tid;
+    uint8_t    quit;
+    
     handle_t   rx;
     handle_t   tx;
     
@@ -18,19 +27,26 @@ static mb_handle_t mbHandle={0};
 typedef void (*thread_fn_t)(void *arg);
 
 
+static void mb_handle(mb_conn_t *c)
+{
+    if(c->mode==MB_MODE_MASTER) {
+        
+    }
+    else {
+        mb_slave_fsm(c->h);
+    }
+}
+
 static void mb_thread(void *arg)
 {
     mb_handle_t *h=(mb_handle_t*)arg;
+    
     while(h->quit==0) {
-        if(h->mode==MB_MODE_MASTER) {
-            
-        }
-        else {
-            mb_slave_fsm(h->hinst);
-        }
+        mb_handle(&h->rtu);
+        //mb_handle(&h->tcp);
     }
-    mb_destory(h->hinst);
-    
+    mb_destory(h->rtu.h);
+    mb_destory(h->tcp.h);
     h->quit = 2;
 }
 
@@ -53,40 +69,67 @@ static void mb_start(mb_handle_t *h, int flag)
 }
 
 
-void* mb_init(char *dev, int type, int mode)
+void* mb_init(mb_para_t *para)
 {
     list_cfg_t lc={0,LIST_FULL_FIFO,10};
-    mb_handle_t *h=(mb_handle_t*)rt_malloc(sizeof(mb_handle_t));
+    mb_handle_t *h=NULL;
+    
+    if(!para) {
+        return NULL;
+    }
     
+    h = (mb_handle_t*)MALLOC(sizeof(mb_handle_t));
     if(h) {
-        h->type = (type==MB_TYPE_RTU)?MB_BACKEND_TYPE_RTU:MB_BACKEND_TYPE_TCP;
-        h->mode = mode;
+        memset(h, 0, sizeof(mb_handle_t));
         
-        mb_backend_param_t param = {
-            .rtu.dev = "uart2",
-            .rtu.baudrate = 9600,
-            .rtu.parity = 0,
-            .rtu.pin = -1,
-            .rtu.lvl = 0
-        };
         h->rx = list_init(&lc);
         h->tx = list_init(&lc);
         
-        h->hinst = mb_create(h->type, &param);
-        if(h->mode==MB_MODE_MASTER) {
-            
+        mb_setup(h, para);
+        mb_start(h, 1);
+    }
+    
+    return h;
+}
+
+
+int mb_setup(void *h, mb_para_t *para)
+{
+    mb_backend_param_t param={0};
+    mb_handle_t *mh=(mb_handle_t*)h;
+    
+    if(!mh || !para) {
+        return -1;
+    }
+    
+    if(para->type==MB_TYPE_RTU) {
+        
+        if(mh->rtu.h) {
+            mb_disconn(mh->rtu.h);
+            mb_destory(mh->rtu.h);
         }
-        else {
-            
+        
+        param.rtu = para->para.rtu;
+        mh->rtu.type = (para->type==MB_TYPE_RTU)?MB_BACKEND_TYPE_RTU:MB_BACKEND_TYPE_TCP;
+        mh->rtu.mode = para->mode;
+        mh->rtu.h = mb_create(mh->rtu.type, &param);
+        if(!mh->rtu.h) {
+            return -1;
         }
         
-        mb_start(h, 1);
+    }
+    else if(para->type==MB_TYPE_TCP) {
+        
+    }
+    else {
+        return -1;
     }
     
-    return h;
+    return 0;
 }
 
 
+
 int mb_deinit(void *h)
 {
     mb_handle_t *mh=(mb_handle_t*)h;
@@ -96,7 +139,7 @@ int mb_deinit(void *h)
     mb_start(mh, 0);
     list_free(mh->rx);
     list_free(mh->tx);
-    rt_free(mh);
+    FREE(mh);
     
     return 0;
 }
@@ -104,7 +147,7 @@ int mb_deinit(void *h)
 
 //
 
-int mb_read(void *h, void *data, int len, int timeout)
+int mb_read(void *h, uint8_t addr, uint16_t reg, void *data, int len, int timeout)
 {
     int r=-1,sz=0;
     mb_handle_t *mh=(mb_handle_t*)h;
@@ -147,7 +190,7 @@ int mb_read(void *h, void *data, int len, int timeout)
 }
 
 
-int mb_write(void *h, void *data, int len)
+int mb_write(void *h, uint8_t addr, uint16_t reg, void *data, int len)
 {
     mb_handle_t *mh=(mb_handle_t*)h;
     if(!mh) {

+ 21 - 8
f407/applications/mb.h

@@ -2,6 +2,8 @@
 #define __MB_Hx__
 
 #include <stdint.h>
+#include "modbus.h"
+#include "datadef.h"
 
 enum {
     MB_MODE_MASTER=0,
@@ -11,18 +13,29 @@ enum {
     MB_TYPE_RTU=0,
     MB_TYPE_TCP,
 };
+
 typedef struct {
-    char     dev[8];
-    uint8_t  type;
-    uint8_t  mode;
-    uint8_t  addr;
-    uint16_t port;
+    uint8_t         type;
+    uint8_t         mode;
+    mb_backend_param_t para;
 }mb_para_t;
 
-void* mb_init(char *dev, int type, int mode);
+
+typedef int (*mb_fn_t)(void *data, int len);
+typedef struct {
+    uint8_t     rw;     //0:read, 1:write
+    uint16_t    reg;
+    uint16_t    *data;
+    uint32_t    len;
+    uint32_t    time_e;
+}mb_data_t;
+
+void* mb_init(mb_para_t *para);
 int mb_deinit(void *h);
-int mb_read(void *h, void *data, int len, int timeout);
-int mb_write(void *h, void *data, int len);
+int mb_setup(void *h, mb_para_t *para);
+
+int mb_read(void *h, uint8_t addr, uint16_t reg, void *data, int len, int timeout);
+int mb_write(void *h, uint8_t addr, uint16_t reg, void *data, int len);
 
 #endif
 

+ 1 - 1
f407/applications/packages/mongoose-v6.7/mongoose.h

@@ -4060,7 +4060,7 @@ extern "C" {
 #ifdef PATH_MAX
 #define MG_MAX_PATH PATH_MAX
 #else
-#define MG_MAX_PATH 256
+#define MG_MAX_PATH 128
 #endif
 #endif
 

+ 196 - 131
f407/applications/paras.c

@@ -1,31 +1,31 @@
 #include <stdlib.h>
 #include <stdio.h>
 #include <math.h>
+#include <rtklibc.h>
 #include "sys.h"
-#include "file.h"
+#include "fs.h"
 #include "lock.h"
-#include "xlist.h"
+#include "list.h"
 #include "paras.h"
-#include "cascade.h"
-#include "switch_ctrl.h"
 #include "dictionary.h"
 #include "iniparser.h"
-#include "sqlite_handle.h"
-
-
-//#define READ_INI
+#include "db.h"
+#include <rtdbg.h>
 
 
 #if 1
-    #define LOGD            log_d
-    #define LOGE            log_e
-    #define LOGW            log_w
+    #define LOGD            LOG_D
+    #define LOGE            LOG_E
+    #define LOGW            LOG_W
 #else
     #define LOGD            printf
     #define LOGE            printf
     #define LOGW            printf
 #endif
 
+#define MALLOC   malloc
+#define FREE     free
+
 enum {
     TYPE_INT=0,
     TYPE_STR,
@@ -39,33 +39,25 @@ enum {
     PARAS_CREATE,
 };
 
-extern GlobalDeviceInfo DFLT_PARAS;
+extern paras_data_t DFLT_PARAS;
 
 typedef struct {
     dictionary          *dic;
-    GlobalDeviceInfo    *info;
+    paras_data_t         paras;
     char                path[200];
 }paras_handle_t;
 static paras_handle_t  paraHandle={0};
 
 
 #if 1
-static GlobalDeviceManager *get_dm(void)
-{
-    return &__globalDeviceManage;
-}
 static int is_power3(void)
 {
-    GlobalDeviceManager *dm=get_dm();
-    if(dm->_globalDevInfo.product.pwr_type>=SmartPDU_Tree_AC_Tree) {
+    paras_handle_t *h=&paraHandle;
+    if(h->paras.prod.pwr_type>=PDU_AC_I3O3) {
         return 1;
     }
     return 0;
 }
-static GlobalDeviceInfo *get_info(void)
-{
-    return &get_dm()->_globalDevInfo;
-}
 static int feq(double a, double b)
 {
     return (fabs(a-b)<(1e-6))?1:0;
@@ -88,7 +80,7 @@ static int str_del(char *b, char *s)
     }
 
     int sl=strlen(s);
-    char *p1,*p2,*b2=strdup(b);
+    char *p1,*p2,*b2=rt_strdup(b);
     if(!b2) return -1;
 
     p1=b2;
@@ -98,7 +90,7 @@ static int str_del(char *b, char *s)
         memcpy(b,p1,p2-p1);
         b += p2-p1; p1 = p2+sl;
     }
-    strcpy(b,p1); free(b2);
+    strcpy(b,p1); FREE(b2);
     
     return 0;
 }
@@ -223,7 +215,7 @@ static int ini_rw(dictionary *dic, char *key, void *val, int len, int type, int
 }
 
 
-static int proc_prod(dictionary *dic, int op, ProductInfo_t *prod)
+static int proc_prod(dictionary *dic, int op, product_data_t *prod)
 {
     int r=0;
     char *p=NULL;
@@ -239,7 +231,7 @@ static int proc_prod(dictionary *dic, int op, ProductInfo_t *prod)
             LOGE("___ check product.type %d is wrong\n", prod->type);
             r = -1;
         }
-        if(prod->pwr_type>SmartPDU_Tree_AC_One_B) {
+        if(prod->pwr_type>PDU_AC_I3O3_X) {
             LOGE("___ check product.pwr_type %d is wrong\n", prod->pwr_type);
             r = -1;
         }
@@ -470,7 +462,7 @@ static int proc_prod(dictionary *dic, int op, ProductInfo_t *prod)
 
     return r;
 }
-static int proc_modbus(dictionary *dic, int op, ModbusInfo_t *mb)
+static int proc_modbus(dictionary *dic, int op, modbus_data_t *mb)
 {
     int r=0;
     char temp[100];
@@ -540,11 +532,11 @@ static int proc_modbus(dictionary *dic, int op, ModbusInfo_t *mb)
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1;
         } else {
-            mb->baudrate = r;
+            mb->baud = r;
         }
     }
     else {
-        sprintf(temp, "%d", mb->baudrate);
+        sprintf(temp, "%d", mb->baud);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -559,6 +551,8 @@ static int proc_modbus(dictionary *dic, int op, ModbusInfo_t *mb)
 
     return r;
 }
+
+#if 0
 static int proc_ptotal(dictionary *dic, int op, PowerTotal_t *ptotal)
 {
     int r=0;
@@ -1599,14 +1593,15 @@ quit:
     iniparser_freedict(dic);
     return r;
 }
-static int proc_role(char *path, int op, RoleInfo *role, handle_t l)
+
+
+static int proc_role(char *path, int op, role_data_t *role, handle_t l)
 {
     int i=1,r=0;
     char temp[100];
     char *p,token[100];
     dictionary *dic=NULL;
-    RoleInfo role2,*prole=role;
-    GlobalDeviceManager *dm=get_dm();
+    role_data_t role2,*prole=role;
 
     switch(op) {
         case PARAS_CHECK:
@@ -1754,10 +1749,6 @@ static int proc_role(char *path, int op, RoleInfo *role, handle_t l)
                 cnt++;
             }
 
-            list_for_each_entry_safe(node,next,&prole->list,list) {
-                list_del(&node->list); free(node);
-            }
-
             if(cnt>0) {
                 r = ini_dump(path, dic);
             }
@@ -1775,7 +1766,7 @@ static int proc_role(char *path, int op, RoleInfo *role, handle_t l)
 static int find_role_id(handle_t l, node_t *node, node_t *xd, void *arg, int *act)
 {
     int id=(*(int*)arg);
-    RoleInfo *info=(RoleInfo*)xd->buf;
+    role_data_t *info=(RoleInfo*)xd->buf;
 
     if(id==info->roleID) {
         *act = LIST_ACT_STOP;
@@ -1783,14 +1774,13 @@ static int find_role_id(handle_t l, node_t *node, node_t *xd, void *arg, int *ac
     }
     return -1;
 }
-static int proc_user(char *path, int op, UserInfo *user, handle_t l)
+static int proc_user(char *path, int op, user_data_t *user, handle_t l)
 {
     int i=1,r=0;
     char temp[100];
     char *p,token[100];
     dictionary *dic=NULL;
-    UserInfo user2,*puser=user;
-    GlobalDeviceManager *dm=get_dm();
+    user_data_t user2,*puser=user;
 
     switch(op) {
         case PARAS_CHECK:
@@ -1968,7 +1958,6 @@ static int proc_group(char *path, int op, GroupInfo *group)
     char *p,token[100];
     dictionary *dic=NULL;
     GroupInfo group2,*pgroup=group;
-    GlobalDeviceManager *dm=get_dm();
 
     switch(op) {
         case PARAS_CHECK:
@@ -3050,7 +3039,7 @@ static int proc_power3(char *path, int op, GlobalTreeACManager *power)
     return r;
 }
 
-#if 0
+
 static int proc_timer(char *path, int op, timer_data_t *timer)
 {
     int r=0;
@@ -3218,7 +3207,7 @@ quit:
 #endif
 /////////////////////////////////////////////////////////////////////////////////
 
-static dictionary* ini_load(char *path, GlobalDeviceInfo *info)
+static dictionary* ini_load(char *path, paras_data_t *info)
 {
     int r=-1;
     
@@ -3227,41 +3216,34 @@ static dictionary* ini_load(char *path, GlobalDeviceInfo *info)
         return NULL;
     }
     
-    r = proc_prod(dic, PARAS_READ, &info->product);
+    r = proc_prod(dic, PARAS_READ, &info->prod);
     if(r) {
         LOGE("___proc_prod failed\n");
     }
 
-    r = proc_modbus(dic, PARAS_READ, &info->cascade);
+    r = proc_modbus(dic, PARAS_READ, &info->cas);
     if(r) {
         LOGE("___proc_modbus failed\n");
     }
 
-    r = proc_ptotal(dic, PARAS_READ, &info->ptotal);
-    if(r) {
-        LOGE("___proc_ptotal failed\n");
-    }
-
-    r = proc_webcfg(dic, PARAS_READ, &info->webcfg);
-    if(r) {
-        LOGE("___proc_webcfg failed\n");
-    }
-
+#if 0
     r = proc_misc(dic, PARAS_READ, &info->misc);
     if(r) {
         LOGE("___proc_misc failed\n");
     }
-
+#endif
+    
     return dic;
 }
 static int ini_check(char *path)
 {
-    GlobalDeviceInfo info=DFLT_PARAS;
-    dictionary *dic=ini_load(path, &info);
-
-    if(!dic) {
+    paras_data_t *p=(paras_data_t*)MALLOC(sizeof(paras_data_t));
+    
+    if(!p) {
         return -1;
     }
+    
+    dictionary *dic=ini_load(path, p);
     iniparser_freedict(dic);
 
     return 0;
@@ -3270,8 +3252,8 @@ static int ini_reset(paras_handle_t *h)
 {
     int r;
     FILE *fp=NULL;
-    char tmp[200];
-    GlobalDeviceInfo *info=&DFLT_PARAS;
+    char tmp[100];
+    paras_data_t *p=&DFLT_PARAS;
 
     fp = fopen(h->path, "w");
     if (fp==NULL) {
@@ -3280,55 +3262,36 @@ static int ini_reset(paras_handle_t *h)
     }
 
     fprintf(fp, "[product]\n");
-    fprintf(fp, "id          = \"%d\"\n", info->product.id);
-    fprintf(fp, "number      = \"%s\"\n", info->product.number);
-    fprintf(fp, "name        = \"%s\"\n", info->product.name);
-    fprintf(fp, "type        = \"%d\"\n", info->product.type);
-    fprintf(fp, "pwrtype     = \"%d\"\n", info->product.pwr_type);
-    //fprintf(fp, "version     = %s\\"n", info->product.version);
-    fprintf(fp, "language    = \"%d\"\n", info->product.language);
-    fprintf(fp, "samptime    = \"%d\"\n", info->product.samp_time);
-    fprintf(fp, "savetime    = \"%d\"\n", info->product.save_time);
-    fprintf(fp, "ph_group    = \"%d\"\n", info->product.ph_group);
-    fprintf(fp, "ch_delay    = \"%d\"\n", info->product.ch_delay);
+    fprintf(fp, "id          = \"%d\"\n", p->prod.id);
+    fprintf(fp, "number      = \"%s\"\n", p->prod.number);
+    fprintf(fp, "name        = \"%s\"\n", p->prod.name);
+    fprintf(fp, "type        = \"%d\"\n", p->prod.type);
+    fprintf(fp, "pwrtype     = \"%d\"\n", p->prod.pwr_type);
+    //fprintf(fp, "version     = %s\\"n", p->prod.version);
+    fprintf(fp, "language    = \"%d\"\n", p->prod.language);
+    fprintf(fp, "samptime    = \"%d\"\n", p->prod.samp_time);
+    fprintf(fp, "savetime    = \"%d\"\n", p->prod.save_time);
+    fprintf(fp, "ph_group    = \"%d\"\n", p->prod.ph_group);
+    fprintf(fp, "ch_delay    = \"%d\"\n", p->prod.ch_delay);
     fprintf(fp, "\n");
 
     fprintf(fp, "[modbus]\n");
-    fprintf(fp, "mode        = \"%d\"\n", info->cascade.mode);
-    fprintf(fp, "address     = \"%d\"\n", info->cascade.addr);
-    fprintf(fp, "baudrate    = \"%d\"\n", info->cascade.baudrate);
-    fprintf(fp, "\n");
-
-    fprintf(fp, "[ptotal]\n");
-    fprintf(fp, "voltage     = \"%d\"\n", info->ptotal.voltage);
-    fprintf(fp, "current     = \"%d\"\n", info->ptotal.current);
-    fprintf(fp, "power       = \"%d\"\n", info->ptotal.power);
-    fprintf(fp, "brd_max     = \"%d\"\n", info->ptotal.brdMax);
-    fprintf(fp, "\n");
-
-    fprintf(fp, "[webcfg]\n");
-    fprintf(fp, "monway      = \"%d\"\n", info->webcfg.monway);
-    fprintf(fp, "netsw       = \"%d\"\n", info->webcfg.netsw);
-    fprintf(fp, "nwire       = \"%d\"\n", info->webcfg.nwire);
-    fprintf(fp, "ipv4        = \"%d\"\n", info->webcfg.ipv4);
-    fprintf(fp, "ipv6        = \"%d\"\n", info->webcfg.ipv6);
+    fprintf(fp, "mode        = \"%d\"\n", p->cas.mode);
+    fprintf(fp, "address     = \"%d\"\n", p->cas.addr);
+    fprintf(fp, "baudrate    = \"%d\"\n", p->cas.baud);
     fprintf(fp, "\n");
 
     fprintf(fp, "[misc]\n");
-    fprintf(fp, "watchdog    = \"%d\"\n", info->misc.watchdog);
-    fprintf(fp, "fliptime    = \"%d\"\n", info->misc.flip_time);
+    fprintf(fp, "watchdog    = \"%d\"\n", p->misc.watchdog);
+    fprintf(fp, "fliptime    = \"%d\"\n", p->misc.flip_time);
     fprintf(fp, "\n");
 
     fclose(fp);
 
-    sys_get_path(tmp, INI_FILE_BAK_NAME);
-    file_copy(tmp, h->path);
-    sys_chmod();
-
     if(h->dic) {
         iniparser_freedict(h->dic);
     }
-    h->dic = ini_load(h->path, h->info);
+    h->dic = ini_load(h->path, &h->paras);
 
     return 0;
 }
@@ -3341,13 +3304,13 @@ static int ini_save(paras_handle_t *h)
 {
     int r=-1;
     
-    r = proc_prod(h->dic, PARAS_WRITE, &h->info->product);
+    r = proc_prod(h->dic, PARAS_WRITE, &h->paras.prod);
     if(r) {
         LOGE("___ini_w_dev failed\n");
         return -1;
     }
 
-    r = proc_modbus(h->dic, PARAS_WRITE, &h->info->cascade);
+    r = proc_modbus(h->dic, PARAS_WRITE, &h->paras.cas);
     if(r) {
         LOGE("___ini_w_modbus failed\n");
         return -1;
@@ -3365,20 +3328,122 @@ static int ini_save(paras_handle_t *h)
 }
 #endif
 ////////////////////////////////////////////////////////////
+static char *str_get(char *buf, char *tok, char *dst, int dstlen)
+{
+    int n=0;
+    char *t=dst,*p=strstr(buf,tok);
+    if(!p) {
+        return NULL;
+    }
+    while((*p)!=':') {
+        if((*p)=='\r' || (*p)=='\n') {
+            return NULL;
+        }
+        p++;
+    }
+    p++;
+
+    while((*p)!='"') {
+        if((*p)=='\r' || (*p)=='\n') {
+            return NULL;
+        }
+        p++;
+    }
+    p++;
+
+    while((*p)!='"') {
+        if((*p)=='\r' || (*p)=='\n') {
+            return NULL;
+        }
+
+        *dst++ = *p++;
+        n++;
+        if(n>=dstlen-1) {
+            LOGE("str_get %s, dst buf length %d is too small!\n", tok, dstlen);
+            return NULL;
+        }
+    }
+    *dst = 0;
+
+    return t;
+}
+
+static int get_prod(paras_data_t *info)
+{
+    int r;
+    char *p,*tok;
+    buf_t fbuf;
+    char path[100]={0};
+
+    r = fs_load(INF_NAME, &fbuf);
+    if(r) {
+        return -1;
+    }
+
+    tok = "product_name";
+    p = str_get(fbuf.buf, tok, info->prod.pname, sizeof(info->prod.pname));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "product_sn";
+    p = str_get(fbuf.buf, tok, info->prod.pnumber, sizeof(info->prod.pnumber));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+#if 0
+    tok = "device_name";
+    p = str_get(fbuf.buf, tok, info->prod.name, sizeof(info->prod.name));
+    if(p) LOGD("___%s:%s\n", tok, p);
+#endif
+
+    tok = "device_no";
+    p = str_get(fbuf.buf, tok, info->prod.number, sizeof(info->prod.number));
+    if (p)
+        LOGD("___%s:%s\n", tok, p);
+
+    tok = "device_date";
+    p = str_get(fbuf.buf, tok,  info->prod.date, sizeof(info->prod.date));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "device_batch";
+    p = str_get(fbuf.buf, tok, info->prod.batch, sizeof(info->prod.batch));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "service_name";
+    p = str_get(fbuf.buf, tok, info->serv.name, sizeof(info->serv.name));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "service_site";
+    p = str_get(fbuf.buf, tok, info->serv.site, sizeof(info->serv.site));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "service_mail";
+    p = str_get(fbuf.buf, tok, info->serv.mail, sizeof(info->serv.mail));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "service_address";
+    p = str_get(fbuf.buf, tok, info->serv.addr, sizeof(info->serv.addr));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    tok = "service_telephone";
+    p = str_get(fbuf.buf, tok, info->serv.tele, sizeof(info->serv.tele));
+    if(p) LOGD("___%s:%s\n", tok, p);
+
+    FREE(fbuf.buf);
+    return 0;
+}
+
+
 
 int paras_init(void)
 {
     int r=0;
-    GlobalDeviceManager *dm=get_dm();
     paras_handle_t  *h=&paraHandle;
     
     lock_s_hold(LOCK_ID_PARAS);
     memset(&paraHandle, 0, sizeof(paraHandle));
-    h->info = get_info();
-    *h->info=DFLT_PARAS;
-    sys_get_prod(h->info);
-    sys_get_path(h->path, INI_FILE_NAME);
-    h->dic = ini_load(h->path, h->info);
+    h->paras = DFLT_PARAS;
+    get_prod(&h->paras);
+    sprintf(h->path, "/cfg/%s", INI_NAME);
+    h->dic = ini_load(h->path, &h->paras);
     if(h->dic==NULL) {
         r = ini_reset(h);
     }
@@ -3420,7 +3485,7 @@ int paras_load(char *path)
 
     lock_s_hold(LOCK_ID_PARAS);
     ini_free(h);
-    h->dic = ini_load(path, h->info);
+    h->dic = ini_load(path, &h->paras);
     if(h->dic) r = 0;
     lock_s_release(LOCK_ID_PARAS);
     
@@ -3446,7 +3511,7 @@ int paras_copy(char *dst, char *src)
     int r=-1;
 
     lock_s_hold(LOCK_ID_PARAS);
-    r = file_copy(dst, src);
+    r = fs_copy(dst, src);
     lock_s_release(LOCK_ID_PARAS);
 
     return r;
@@ -3477,27 +3542,27 @@ int paras_serv_xport(char *path, int io)
         l = NULL;//xlist_init(&lc);
 
         //r *= proc_role(path,  PARAS_READ, NULL, l);
-        r *= proc_user(path,  PARAS_READ, NULL, l);
-        r *= proc_group(path, PARAS_READ, NULL);
-        r *= proc_ntp(path,   PARAS_READ, NULL);
-        r *= proc_mqtt(path,  PARAS_READ, NULL);
-        r *= proc_mail(path,  PARAS_READ, NULL);
-        r *= proc_snmp(path,  PARAS_READ, NULL);
+        //r *= proc_user(path,  PARAS_READ, NULL, l);
+        //r *= proc_group(path, PARAS_READ, NULL);
+        //r *= proc_ntp(path,   PARAS_READ, NULL);
+        //r *= proc_mqtt(path,  PARAS_READ, NULL);
+        //r *= proc_mail(path,  PARAS_READ, NULL);
+        //r *= proc_snmp(path,  PARAS_READ, NULL);
         //r *= proc_timer(path, PARAS_READ, NULL);
 
         //xlist_free(l);
     }
     else if(io==PARAS_EXPORT) {
-        get_curtime_str(temp,sizeof(temp));
-        sprintf(path, "/tmp/service_%s.ini", temp);
+        //get_curtime_str(temp,sizeof(temp));
+        //sprintf(path, "/tmp/service_%s.ini", temp);
 
         //r *= proc_role(path,  PARAS_WRITE, NULL, NULL);
-        r *= proc_user(path,  PARAS_WRITE, NULL, NULL);
-        r *= proc_group(path, PARAS_WRITE, NULL);
-        r *= proc_ntp(path,   PARAS_WRITE, NULL);
-        r *= proc_mqtt(path,  PARAS_WRITE, NULL);
-        r *= proc_mail(path,  PARAS_WRITE, NULL);
-        r *= proc_snmp(path,  PARAS_WRITE, NULL);
+        //r *= proc_user(path,  PARAS_WRITE, NULL, NULL);
+        //r *= proc_group(path, PARAS_WRITE, NULL);
+        //r *= proc_ntp(path,   PARAS_WRITE, NULL);
+        //r *= proc_mqtt(path,  PARAS_WRITE, NULL);
+        //r *= proc_mail(path,  PARAS_WRITE, NULL);
+        //r *= proc_snmp(path,  PARAS_WRITE, NULL);
         //r *= proc_timer(path, PARAS_WRITE, NULL);
     }
 
@@ -3512,21 +3577,21 @@ int paras_alarm_xport(char *path, int io)
     pwr3 = is_power3();
     if(io==PARAS_IMPORT) {
         if(pwr3) {
-            r = proc_power3(path, PARAS_READ, NULL);
+            //r = proc_power3(path, PARAS_READ, NULL);
         }
         else {
-            r = proc_power(path, PARAS_READ, NULL);
+            //r = proc_power(path, PARAS_READ, NULL);
         }
     }
     else if(io==PARAS_EXPORT) {
-        get_curtime_str(temp,sizeof(temp));
+        //get_curtime_str(temp,sizeof(temp));
         sprintf(path, "/tmp/power_%s.ini", temp);
 
         if(pwr3) {
-            r = proc_power3(path, PARAS_WRITE, NULL);
+            //r = proc_power3(path, PARAS_WRITE, NULL);
         }
         else {
-            r = proc_power(path, PARAS_WRITE, NULL);
+            //r = proc_power(path, PARAS_WRITE, NULL);
         }
     }
 
@@ -3539,13 +3604,13 @@ int paras_sensor_xport(char *path, int io)
     char temp[100];
     
     if(io==PARAS_IMPORT) {
-        r = proc_sensor(path, PARAS_READ, NULL);
+        //r = proc_sensor(path, PARAS_READ, NULL);
     }
     else if(io==PARAS_EXPORT) {
-        get_curtime_str(temp,sizeof(temp));
+        //get_curtime_str(temp,sizeof(temp));
         sprintf(path, "/tmp/sensor_%s.ini", temp);
 
-        r = proc_sensor(path, PARAS_WRITE, NULL);
+        //r = proc_sensor(path, PARAS_WRITE, NULL);
     }
 
     return r;

+ 326 - 9
f407/applications/power.c

@@ -1,37 +1,354 @@
-#include "web.h"
+#include "mb.h"
+#include "cfg.h"
+#include "lock.h"
+#include "list.h"
+#include "power.h"
 #include "thread.h"
-#include "mongoose.h"
-
-
-
-
+#include "datadef.h"
 
+typedef struct {
+    int8_t  type;
+    uint8_t chs;
+}ch_info_t;
+typedef struct {
+    void*           mb;
+    
+    power_all_t     pall;
+    lock_t          lck;
+}power_handle_t;
+static power_handle_t pwrHandle={0};
 
+static void memswap(uint8_t *buf, int len)
+{
+    int i;
+    uint8_t tmp;
+    for(i=0; i<len; i+=2) {
+        tmp = buf[i];
+        buf[i] = buf[i+1];
+        buf[i+1] = tmp;
+    }
+}
+static int reg_read(power_handle_t *h, uint8_t addr, uint16_t reg, uint16_t *data, int cnt)
+{
+    return mb_read(h->mb, addr, reg, data, cnt, 100);
+}
+static int reg_write(power_handle_t *h, uint8_t addr, uint16_t reg, uint16_t *data, int cnt)
+{
+    return mb_write(h->mb, addr, reg, data, cnt);
+}
 
+static int get_info(power_handle_t *h, int addr, ch_info_t *info)
+{
+    int i,r=-1;
+    uint16_t tmp=0;
+    
+    r = reg_read(h->mb, addr, POWER_AC_GET_INFO, &tmp, 1);
+    if(r==0) {
+        info->type = (tmp>>8)&0xFF;
+        info->chs = tmp&0xFF;
+        return 0;
+    }
 
+    r = reg_read(h->mb, addr, POWER_DC_GET_INFO, &tmp, 1);
+    if(r==0) {
+        info->type = (tmp>>8)&0xFF;
+        info->chs = tmp&0xFF;
+    }
+    
+    return r;
+}
+static int power_scan(power_handle_t *h, int max_addr)
+{
+    int r,i,j,idx=0,chs=0;
+    ch_info_t info;
+    
+    lock_d_hold(h->lck);
+    for(i=1; i<=max_addr; i++) {
+        r = get_info(h, i, &info);
+        if(r==0) {
+            h->pall.pbrd[i] = (power_brd_t*)calloc(1, sizeof(power_brd_t));
+            if(h->pall.pbrd[i]) {
+                h->pall.pbrd[i]->type = info.type;
+                h->pall.pbrd[i]->chs  = info.chs;
+                h->pall.pbrd[i]->addr = i;
+                h->pall.pbrd[i]->pch = (power_ch_t*)calloc(1, sizeof(power_ch_t)*info.chs);
+                if(h->pall.pbrd[i]->pch) {
+                    for(j=0; j<info.chs; j++) {
+                        h->pall.pbrd[i]->pch[j].info.addr = i;
+                        h->pall.pbrd[i]->pch[j].info.ch  = idx;      //序号程序从1开始
+                        h->pall.pbrd[i]->pch[j].info.sch = j+1;      //序号从1开始
+                        h->pall.pbrd[i]->pch[j].info.pid = i;
+                        h->pall.pbrd[i]->pch[j].info.addr = i;
+                        
+                        idx++;
+                    }
+                }
+            }
+            chs += info.chs;
+        }
+    }
+    
+    if(chs>0) {
+        idx = 0;
+        h->pall.chs = 0;
+        h->pall.pch = (power_ch_t**)calloc(1, sizeof(power_ch_t*)*chs);
+        if(h->pall.pch) {
+            h->pall.chs = chs;
+            for(i=1; i<=max_addr; i++) {
+                power_brd_t *pbrd=h->pall.pbrd[i];
+                for(j=0; j<pbrd->chs; j++) {
+                    h->pall.pch[idx++] = &h->pall.pbrd[i]->pch[j];
+                }
+            } 
+        }
+    }
+    
+    
+    lock_d_release(h->lck);
+    
+    return 0;
+}
 
+static int get_brd(power_handle_t *h, uint8_t addr, power_brd_t *pbrd)
+{
+    int r,i,j;
+    uint32_t val;
+    uint16_t tmp[100];
+    //g_switch_get_all_out_info()   
+    //g_switch_get_t_ac_in_info()
+    //g_switch_set_t_ac_alarm_missing_ph()
+    //threshold and alarm process
+    switch(pbrd->type) {
+        case BOARD_TYPE_DC:
+        {
+            
+        }
+        break;
+        
+        case BOARD_TYPE_AC:
+        {
+            r = reg_read(h, pbrd->addr, POWER_AC_CUR_INFO_L, tmp, pbrd->chs);
+            if(r==0 && pbrd->pch) {
+                for (i=0; i<pbrd->chs; i++) {
+                    int idx = i * 12;
+                    // 解电压数据
+                    val = (tmp[1 + idx] << 16) | tmp[0 + idx];
+                    pbrd->pch[i].pele[0].voltage = val / 1000.0;
+                    // 解电流数据
+                    val = (tmp[3 + idx] << 16) | tmp[2 + idx];
+                    pbrd->pch[i].pele[0].current = val / 1000.0;
+                    // 解功率数据
+                    val = (tmp[5 + idx] << 16) | tmp[4 + idx];
+                    pbrd->pch[i].pele[0].power = val / 1000.0;
+                    // 解频率数据
+                    val = (tmp[7 + idx] << 16) | tmp[6 + idx];
+                    pbrd->pch[i].pele[0].freq = val / 1000.0;
+                    // 解耗电量数据
+                    val = (tmp[9 + idx] << 16) | tmp[8 + idx];
+                    pbrd->pch[i].pele[0].consump = val / 1000.0;
+                    // 解功率因素数据
+                    val = (tmp[11 + idx] << 16) | tmp[10 + idx];
+                    pbrd->pch[i].pele[0].factor = val / 1000.0;
+                }
+            }
+            
+            r = reg_read(h, pbrd->addr, POWER_AC_STAT_INFO_L, tmp, pbrd->chs);
+            if(r==0 && pbrd->pch) {
+                for (i=0; i<pbrd->chs; i++) {
+                    //pbrd->pch[i].alarm.status     = tmp[i] & (0x01);
+                    pbrd->pch[i].alarm.v_upper  = tmp[i] & ALARM_V_UPPER;
+                    pbrd->pch[i].alarm.v_lower  = tmp[i] & ALARM_V_LOWER;
+                    pbrd->pch[i].alarm.c_upper  = tmp[i] & ALARM_C_UPPER;
+                    pbrd->pch[i].alarm.p_upper  = tmp[i] & ALARM_P_UPPER;
+                    pbrd->pch[i].alarm.w_upper  = tmp[i] & ALARM_W_UPPER;
+                    
+                    pbrd->pch[i].alarm.ph_loss  = 0;
+                }
+            }
+        }
+        break;
+        
+        case BOARD_TYPE_AC3:
+        {
+            r = reg_read(h, pbrd->addr, POWER_AC3_ALARM_MISSING_PH, tmp, pbrd->chs);
+            if(r==0 && pbrd->pch) {
+                for (i=0; i<pbrd->chs; i++) {
+                    //pbrd->pch[i].alarm.status     = tmp[i] & (0x01);
+                    pbrd->pch[i].alarm.v_upper  = tmp[i] & ALARM_V_UPPER;
+                    pbrd->pch[i].alarm.v_lower  = tmp[i] & ALARM_V_LOWER;
+                    pbrd->pch[i].alarm.c_upper  = tmp[i] & ALARM_C_UPPER;
+                    pbrd->pch[i].alarm.p_upper  = tmp[i] & ALARM_P_UPPER;
+                    pbrd->pch[i].alarm.w_upper  = tmp[i] & ALARM_W_UPPER;
+                    
+                    pbrd->pch[i].alarm.ph_loss  = 0;
+                }
+            }
+        }
+        break;
+        
+        default:
+        return -1;
+        
+    }
+    
+    return 0;
+}
 
+static int power_sample(power_handle_t *h, int addr, ch_info_t *info)
+{
+    //g_switch_get_all_out_info()   
+    
+    //g_switch_get_t_ac_in_info()
+    
+    //g_switch_set_t_ac_alarm_missing_ph()
+    
+    //threshold and alarm process
+    
+    return 0;
+}
 
 static void *power_thread(void *arg)
 {
     thread_handle_t *th=(thread_handle_t*)arg;
+    power_handle_t *h=(power_handle_t*)th->arg;;
     
     while(th->quit==0) {
         
-        //msleep(100);
+        //power_get();
+        //
+        
     }
-    
     pthread_exit(NULL);
 }
 
 
+
+
 int power_init(void)
 {
-    //thread_start();
+    power_handle_t *h=&pwrHandle;
+    list_cfg_t lc={0,LIST_FULL_FIFO,10};
+    mb_para_t para={
+        .mode = MB_MODE_MASTER,
+        .type = MB_TYPE_RTU,
+        
+        .para = {
+            .rtu = {
+                .dev = "uart3",         //设备名
+                .baudrate = 115200,     //波特率
+                .parity = 0,            //校验位
+                .pin = -1,              //收发控制引脚, <0 表示不使用
+                .lvl = 0,               //发送控制电平
+            }
+        }
+    };
+    
+    h->lck = lock_d_init();
+    h->mb = mb_init(&para);
+    if(!h->mb) {
+        return -1;
+    }
+    thread_start(THREAD_ID_POWER, power_thread, h);
+    
     return 0;
 }
 
 
+int power_deinit(void)
+{
+    power_handle_t *h=&pwrHandle;
+    
+    lock_d_deinit(h->lck);
+    mb_deinit(h->mb);
+    
+    return 0;
+}
+
+
+int power_clear(void)
+{
+    int i,j;
+    power_handle_t *h=&pwrHandle;
+    
+    lock_d_hold(h->lck);
+    for(i=0; i<BRD_MAX; i++) {
+        if(h->pall.pbrd[i]) {
+            for(j=0; j<h->pall.pbrd[i]->cnt; j++) {
+                if(h->pall.pbrd[i]->pch) {
+                    free(h->pall.pbrd[i]->pch);
+                    h->pall.pbrd[i]->pch = NULL;
+                }
+                h->pall.pbrd[i]->cnt = 0;
+            }
+            free(h->pall.pbrd[i]);
+            h->pall.pbrd[i] = NULL;
+        }
+        h->pall.cnt = 0;
+    }
+    lock_d_release(h->lck);
+    
+    return 0;
+}
+
+
+int power_rw_threshold(int rw, threshold_t *thr)
+{
+    int r;
+    power_handle_t *h=&pwrHandle;
+    
+    if(rw==RW_READ) {
+        //mb_write(h->b);
+    }
+    else if(rw==RW_WRITE) {
+        //mb_write();
+    }
+    else {
+        return -1;
+    }
+    
+    return 0;
+}
+
+
+int power_reset_consum(int addr)
+{
+    int r;
+    power_handle_t *h=&pwrHandle;
+    
+    
+    return 0;
+}
+
+
+int power_get_alarm(int addr, int ch, alarm_data_t *alarm)
+{
+    int r;
+    power_handle_t *h=&pwrHandle;
+    
+    
+    return 0;
+}
+
+
+int power_set_ch_switch(int addr, int ch, int on)
+{
+    int r;
+    power_handle_t *h=&pwrHandle;
+    
+    
+    
+    return 0;
+}
+
+
+
+
+
+
+
+
+
+
 
 
 

+ 79 - 79
f407/applications/power.h

@@ -1,97 +1,97 @@
 #ifndef __POWER_Hx__
 #define __POWER_Hx__
 
+#include "datadef.h"
 
+#define POWER_AC_GET_INFO                         0x0FA0          //鑾峰彇缁х數鍣ㄦ澘绫诲瀷閫氶亾
+#define POWER_AC_CUR_INFO_L                       0x0FAB          //鍗曠浉灏忕數娴佺户鐢靛櫒淇℃伅锛屽叡8璺�户鐢靛櫒
+#define POWER_AC_STAT_INFO_L                      0x1071          //单相小电流继电器开关状态,共8路继电器
+#define POWER_AC_CUR_INFO_H                       0x1015          //鍗曠浉澶х數娴佺户鐢靛櫒淇℃伅锛屽叡4璺�户鐢靛櫒
+#define POWER_AC_STAT_INFO_H                      0x1083          //单相大电流继电器开关状态,共4路继电器
+#define POWER_AC_BRK_INFO                         0x10D6          //单相控制板开关检测信息
+#define POWER_AC_TOTAL_ALATRM                     0x10E0          //鍗曠浉鎺у埗鏉挎€讳綋鎶ヨ�淇℃伅 2024.11.12
+#define POWER_AC_START_DELAY_TIME_L               0x1194          //单相小电流继电器板开启延时
+#define POWER_AC_STOP_DELAY_TIME_L                0x11A6          //单相小电流继电器板关闭延时
+#define POWER_AC_START_DELAY_TIME_H               0x11B8          //单相大电流继电器板开启延时
+#define POWER_AC_STOP_DELAY_TIME_H                0x11C6          //单相大电流继电器板关闭延时
+#define POWER_AC_CH_STAT_L                        0x11EA          //设置单相小电流通道开关状态
+#define POWER_AC_CH_STAT_H                        0x11FC          //设置单相大电流通道开关状态
+#define POWER_AC_THRESHOLD_L                      0x1215          //设置单相小电流通道超限报警阈值
+#define POWER_AC_THRESHOLD_H                      0x129F          //璁剧疆鍗曠浉澶х數娴侀€氶亾瓒呴檺鎶ヨ�闃堝€糥
+#define POWER_AC_KB_VAL_L                         0x1203          //设置单相小电流通道K、B值
+#define POWER_AC_KB_VAL_H                         0x124D          //设置单相大电流通道K、B值
+#define POWER_AC_RESET_CONSUMP                    0x1400          //重置单相耗电量
+#define POWER_AC_ALARM_CTL                        0x13EC          //瓒呴檺鍔ㄤ綔
+#define POWER_AC_TOTAL_THRESHOLD                  0x1450          //设置单相总超限报警阈值 2024.11.12
+#define POWER_AC_ALARM_TOTAL_CTL                  0x1482          //鎬讳綋瓒呴檺鍔ㄤ綔   2024.11.12       
 
-#define POWER_CHN_INFO                            0x0FA0          //获取继电器板类型通道
-#define POWER_AC_CUR_INFO_S                       0x0FAB          //单相小电流继电器信息,共8路继电器
-#define POWER_AC_STAT_INFO_S                      0x1071          //单相小电流继电器开关状态,共8路继电器
-#define POWER_AC_CUR_INFO_B                       0x1015          //单相大电流继电器信息,共4路继电器
-#define POWER_AC_STAT_INFO_B                      0x1083          //单相大电流继电器开关状态,共4路继电器
-#define POWER_AC_BRK_INFO                         0x10D6          //单相控制板开关检测信息
-#define POWER_AC_TOTAL_ALATRM                     0x10E0          //单相控制板总体报警信息 2024.11.12
-#define POWER_AC_START_DELAY_TIME_S               0x1194          //单相小电流继电器板开启延时
-#define POWER_AC_STOP_DELAY_TIME_S                0x11A6          //单相小电流继电器板关闭延时
-#define POWER_AC_START_DELAY_TIME_B               0x11B8          //单相大电流继电器板开启延时
-#define POWER_AC_STOP_DELAY_TIME_B                0x11C6          //单相大电流继电器板关闭延时
-#define POWER_AC_CHN_STAT_S                       0x11EA          //设置单相小电流通道开关状态
-#define POWER_AC_CHN_STAT_B                       0x11FC          //设置单相大电流通道开关状态
-#define POWER_AC_THRESHOLD_S                      0x1215          //设置单相小电流通道超限报警阈值
-#define POWER_AC_THRESHOLD_B                      0x129F          //设置单相大电流通道超限报警阈值X
-#define POWER_AC_KB_VAL_S                         0x1203          //设置单相小电流通道K、B值
-#define POWER_AC_KB_VAL_B                         0x124D          //设置单相大电流通道K、B值
-#define POWER_AC_RESET_CONSUMPTION                0x1400          //重置单相耗电量
-#define POWER_AC_ALARM_CTL                        0x13EC          //超限动作
-#define POWER_AC_TOTAL_THRESHOLD                  0x1450          //设置单相总超限报警阈值 2024.11.12
-#define POWER_AC_ALARM_TOTAL_CTL                  0x1482          //总体超限动作   2024.11.12       
+#define POWER_DC_SET_STAT                         0x120A          //设置直流继电器开关状态
+#define POWER_DC_SET_THRESHOLD                    0x12E9          //璁剧疆鐩存祦缁х數鍣ㄨ秴闄愭姤璀�
+#define POWER_DC_SET_KB_VAL                       0x136D          //设置直流通道K、B值
+#define POWER_DC_SET_START_DELAY                  0x11D4          //直流继电器控制板开启延时
+#define POWER_DC_SET_STOP_DELAY                   0x11DF          //鐩存祦缁х數鍣ㄦ帶鍒舵澘鍏抽棴寤舵椂
+#define POWER_DC_SET_OUT_INFO                     0x104F          //直流继电器电路控制板信息,采集一路输出
+#define POWER_DC_SET_STAT_INFO                    0x1097          //直流继电器电路控制板开关状态,采集一路输出
+#define POWER_DC_SET_IN_INFO                      0x105F          //鐩存祦鎬荤數娴佺數鍘嬮噰闆嗘帶鍒舵澘锛岄噰闆嗚�澶囪緭鍏ョ數鍘嬪拰杈撳叆鐢垫祦
 
-#define POWER_DC_STAT                             0x120A          //设置直流继电器开关状态
-#define POWER_DC_THRESHOLD                        0x12E9          //设置直流继电器超限报警X
-#define POWER_DC_KB_VAL                           0x136D          //设置直流通道K、B值
-#define POWER_DC_START_DELAY_TIME                 0x11D4          //直流继电器控制板开启延时
-#define POWER_DC_STOP_DELAY_TIME                  0x11DF          //直流继电器控制板关闭延时
-#define POWER_DC_OUT_INFO                         0x104F          //直流继电器电路控制板信息,采集一路输出
-#define POWER_DC_STAT_INFO                        0x1097          //直流继电器电路控制板开关状态,采集一路输出
-#define POWER_DC_IN_INFO                          0x105F          //直流总电流电压采集控制板,采集设备输入电压和输入电流
+#define POWER_DC_GET_INFO                         0x1770          //鑾峰彇鐩存祦PDU绫诲瀷閫氶亾
+#define POWER_DC_GET_TOTAL_ALARM                  0x1776          //直流PDU总报警信息 2024.11.12
+#define POWER_DC_GET_OUT_INFO                     0x177A          //鐩存祦PDU杈撳嚭
+#define POWER_DC_GET_STAT_INFO                    0x17E2          //鐩存祦PDU寮€鍏崇姸
+#define POWER_DC_GET_WARNING                      0x179A          //鐩存祦PDU鎶ヨ�淇℃伅
+#define POWER_DC_GET_STAT_ERROR                   0x17E4          //直流PDU故障状态
+#define POWER_DC_GET_IN_INFO                      0x1772          //鐩存祦PDU閲囬泦杈撳叆鐢靛帇涓庤緭鍏ョ數
+#define POWER_DC_GET_START_DELAY                  0x17E6          //鐩存祦PDU寤舵椂
+#define POWER_DC_GET_STOP_DELAY                   0x17F6          //鐩存祦PDU寤舵椂
+#define POWER_DC_SET_THRESHOLD_MAX_VOL            0x17A2          //max voltage threshold
+#define POWER_DC_SET_THRESHOLD_MIN_VOL            0x17B2          //min voltage threshold
+#define POWER_DC_SET_THRESHOLD_MAX_CUR            0x17C2          //max current threshold
+#define POWER_DC_SET_THRESHOLD_MIN_CUR            0x17D2          //max current threshold
+#define POWER_DC_SET_THRESHOLD_MAX_POWER          0x1810          //max power threshold
+#define POWER_DC_SET_THRESHOLD_MAX_POWERCON       0x181A          //max powercon threshold
+#define POWER_DC_SET_ALL_OPEN_INFO                0x1806          //ALL OPEN鐩存祦PDU寮€鍏崇姸
+#define POWER_DC_SET_ALL_CLOSE_INFO               0x1807          //ALL OPEN鐩存祦PDU寮€鍏崇姸
+#define POWER_DC_SET_ALARM_CTL                    0x182E          //瓒呴檺鍔ㄤ綔
+#define POWER_DC_SET_CONSUMP_CLEAR   	          0x1838          //重置直流耗电量
+#define POWER_DC_SET_THRESHOLD_TOTAL_VOL_MAX      0x184C          //max total voltage threshold 2024.11.12
+#define POWER_DC_SET_THRESHOLD_TOTAL_VOL_MIN      0x184D          //min total voltage threshold 2024.11.12
+#define POWER_DC_SET_THRESHOLD_TOTAL_CUR_MAX      0x184E          //max total current threshold 2024.11.12
+#define POWER_DC_SET_THRESHOLD_TOTAL_PWR_MAX      0x184F          //max total power threshold 2024.11.12
+#define POWER_DC_SET_THRESHOLD_TOTAL_PWRCON_MAX   0x1850          //max total powercon threshold 2024.11.12
+#define POWER_DC_SET_ALARM_CTL_TOTAL              0x1856          //鎬讳綋瓒呴檺鍔ㄤ綔   2024.11.12       
 
-#define POWER_DCP_TYPE_CHN_INFO                   0x1770          //获取直流PDU类型通道
-#define POWER_DCP_TOTAL_ALARM                     0x1776          //直流PDU总报警信息 2024.11.12
-#define POWER_DCP_OUT_INFO                        0x177A          //直流PDU输出
-#define POWER_DCP_STAT_INFO                       0x17E2          //直流PDU开关状
-#define POWER_DCP_WARNING                         0x179A          //直流PDU报警信息
-#define POWER_DCP_STAT_ERROR                      0x17E4          //直流PDU故障状态
-#define POWER_DCP_IN_INFO                         0x1772          //直流PDU采集输入电压与输入电
-#define POWER_DCP_START_DELAY_TIME                0x17E6          //直流PDU延时
-#define POWER_DCP_STOP_DELAY_TIME                 0x17F6          //直流PDU延时
-#define POWER_DCP_THRESHOLD_MAX_VOL               0x17A2          //max voltage threshold
-#define POWER_DCP_THRESHOLD_MIN_VOL               0x17B2          //min voltage threshold
-#define POWER_DCP_THRESHOLD_MAX_CUR               0x17C2          //max current threshold
-#define POWER_DCP_THRESHOLD_MIN_CUR               0x17D2          //max current threshold
-#define POWER_DCP_THRESHOLD_MAX_POWER             0x1810          //max power threshold
-#define POWER_DCP_THRESHOLD_MAX_POWERCON          0x181A          //max powercon threshold
-#define POWER_DCP_ALL_OPEN_INFO                   0x1806          //ALL OPEN直流PDU开关状
-#define POWER_DCP_ALL_CLOSE_INFO                  0x1807          //ALL OPEN直流PDU开关状
-#define POWER_DCP_ALARM_CTL                       0x182E          //超限动作
-#define POWER_DCP_RESET_CONSUMPTION   	          0x1838          //重置直流耗电量
-#define POWER_DCP_THRESHOLD_TOTAL_VOL_MAX         0x184C          //max total voltage threshold 2024.11.12
-#define POWER_DCP_THRESHOLD_TOTAL_VOL_MIN         0x184D          //min total voltage threshold 2024.11.12
-#define POWER_DCP_THRESHOLD_TOTAL_CUR_MAX         0x184E          //max total current threshold 2024.11.12
-#define POWER_DCP_THRESHOLD_TOTAL_PWR_MAX         0x184F          //max total power threshold 2024.11.12
-#define POWER_DCP_THRESHOLD_TOTAL_PWRCON_MAX      0x1850          //max total powercon threshold 2024.11.12
-#define POWER_DCP_ALARM_CTL_TOTAL                 0x1856          //总体超限动作   2024.11.12       
-
-#define POWER_AC3_TYPE_CHN_INFO                   0x1770          //获取三项类型通道
-#define POWER_AC3_IN_INFO                         0x1771          //三项交流输入
-#define POWER_AC3_OUT_INFO                        0x177D          //三项交流输出
-#define POWER_AC3_OUT_ENABLE                      0x182E          //三项交流输出按通道开关状态及控制使能
-#define POWER_AC3_NF_STATUS                       0x1837          //三项交流零线断路器状态
-#define POWER_AC3_CH_OUT_ENABLE                   0x183A          //三项交流输出按插头开关状态及控制使
-#define POWER_AC3_IN_ENABLE                       0x182D          //三项交流输入超限使能
-#define POWER_AC3_OUT_ERROR                       0x17DE          //三项交流输出故障状态
-#define POWER_AC3_IN_TOTAL_ERROR                  0x17CA          //三项交流总输入故障状态 2024.11.12 
-#define POWER_AC3_IN_ERROR                        0x17DD          //三项交流输入故障状态
-#define POWER_AC3_START_DELAY_TIME                0x1840          //三项交流延时
-#define POWER_AC3_STOP_DELAY_TIME                 0x184C          //三项交流延时
-#define POWER_AC3_THRESHOLD_IN                    0x17EA          //设置三项交流输入超限报警 
-#define POWER_AC3_THRESHOLD_OUT                   0x17EF          //设置三项交流输出超限报警
-#define POWER_AC3_ALL_OPEN_INFO                   0x182B          //ALL OPEN直流PDU开关状
-#define POWER_AC3_ALL_CLOSE_INFO                  0x182C          //ALL OPEN直流PDU开关状
+#define POWER_AC3_GET_INFO                        0x1770          //鑾峰彇涓夐」绫诲瀷閫氶亾
+#define POWER_AC3_IN_INFO                         0x1771          //涓夐」浜ゆ祦杈撳叆
+#define POWER_AC3_OUT_INFO                        0x177D          //涓夐」浜ゆ祦杈撳嚭
+#define POWER_AC3_OUT_ENABLE                      0x182E          //涓夐」浜ゆ祦杈撳嚭鎸夐€氶亾寮€鍏崇姸鎬佸強鎺у埗浣胯兘
+#define POWER_AC3_NF_STATUS                       0x1837          //三项交流零线断路器状态
+#define POWER_AC3_CH_OUT_ENABLE                   0x183A          //三项交流输出按插头开关状态及控制使
+#define POWER_AC3_IN_ENABLE                       0x182D          //涓夐」浜ゆ祦杈撳叆瓒呴檺浣胯兘
+#define POWER_AC3_OUT_ERROR                       0x17DE          //三项交流输出故障状态
+#define POWER_AC3_IN_TOTAL_ERROR                  0x17CA          //三项交流总输入故障状态 2024.11.12 
+#define POWER_AC3_IN_ERROR                        0x17DD          //三项交流输入故障状态
+#define POWER_AC3_START_DELAY_TIME                0x1840          //涓夐」浜ゆ祦寤舵椂
+#define POWER_AC3_STOP_DELAY_TIME                 0x184C          //涓夐」浜ゆ祦寤舵椂
+#define POWER_AC3_THRESHOLD_IN                    0x17EA          //璁剧疆涓夐」浜ゆ祦杈撳叆瓒呴檺鎶ヨ� 
+#define POWER_AC3_THRESHOLD_OUT                   0x17EF          //璁剧疆涓夐」浜ゆ祦杈撳嚭瓒呴檺鎶ヨ�
+#define POWER_AC3_ALL_OPEN_INFO                   0x182B          //ALL OPEN鐩存祦PDU寮€鍏崇姸
+#define POWER_AC3_ALL_CLOSE_INFO                  0x182C          //ALL OPEN鐩存祦PDU寮€鍏崇姸
 #define POWER_AC3_THRESHOLD_VOL_MAX               0x17EF          //max voltage threshold
 #define POWER_AC3_THRESHOLD_VOL_MIN               0x17FB          //min voltage threshold
 #define POWER_AC3_THRESHOLD_CUR_MAX               0x1807          //max current threshold
 #define POWER_AC3_THRESHOLD_PWR_MAX               0x1813          //max POWER threshold
 #define POWER_AC3_THRESHOLD_PWRCON_MAX            0x181F          //max PWRCON threshold
-#define POWER_AC3_ALARM_MISSING_PH                0x1856          //缺相报警
-#define POWER_AC3_TOTAL_ALARM_CTL                 0x185F          //总体超限动作 2024.11.12 
-#define POWER_AC3_ALARM_CTL                       0x1860          //超限动作
-#define POWER_AC3_RESET_CONSUMPTION_PH            0x189C          //重置PH耗电量
-#define POWER_AC3_RESET_CONSUMPTION               0x18A5          //重置all耗电量
-#define POWER_AC3_BREAKER_INFO                    0x17D4          //三相控制板开关检测信息
+#define POWER_AC3_ALARM_MISSING_PH                0x1856          //缂虹浉鎶ヨ�
+#define POWER_AC3_TOTAL_ALARM_CTL                 0x185F          //鎬讳綋瓒呴檺鍔ㄤ綔 2024.11.12 
+#define POWER_AC3_ALARM_CTL                       0x1860          //瓒呴檺鍔ㄤ綔
+#define POWER_AC3_RESET_CONSUMP                   0x189C          //重置PH耗电量
+#define POWER_AC3_RESET_CONSUMP_ALL               0x18A5          //重置all耗电量
+#define POWER_AC3_BREAKER_INFO                    0x17D4          //三相控制板开关检测信息
 
 
 int power_init(void);
-
-
+int power_deinit(void);
+int power_clear(void);
 
 #endif
 

+ 17 - 2
f407/applications/rtconfig.h

@@ -1,12 +1,13 @@
 #ifndef RT_CONFIG_H__
 #define RT_CONFIG_H__
 
+#include "cfg.h"
+
 /* RT-Thread Configuration */
 
 #define SOC_STM32F407ZG
 #define SOC_FAMILY_STM32
 #define SOC_SERIES_STM32F4
-#define BOARD_STM32F407_ATK_EXPLORER
 
 #define DBG_ENABLE
 //#define DBG_LEVEL DBG_INFO
@@ -25,7 +26,6 @@
 #define RT_IDLE_HOOK_LIST_SIZE 4
 #define IDLE_THREAD_STACK_SIZE 1024
 
-//#define RT_USING_PTHREADS
 
 // kservice optimization
 #define RT_USING_DEBUG
@@ -52,7 +52,13 @@
 #define RT_USING_DEVICE
 #define RT_USING_CONSOLE
 #define RT_CONSOLEBUF_SIZE 128
+
+#ifdef BOARD_EVB_ATK
 #define RT_CONSOLE_DEVICE_NAME "uart1"
+#else
+#define RT_CONSOLE_DEVICE_NAME "uart6"
+#endif
+
 #define RT_VER_NUM 0x50100
 #define RT_BACKTRACE_LEVEL_MAX_NR 32
 #define RT_USING_HW_ATOMIC
@@ -87,6 +93,13 @@
 #define FINSH_USING_OPTION_COMPLETION
 
 
+#define RT_USING_FAL
+#define FAL_DEBUG_CONFIG
+#define FAL_DEBUG 1
+#define FAL_PART_HAS_TABLE_CFG
+#define FAL_USING_SFUD_PORT
+#define FAL_USING_NOR_FLASH_DEV_NAME "nor"
+
 
 //Device Drivers
 #define RT_USING_DEVICE_IPC
@@ -101,6 +114,8 @@
 #define RT_SERIAL_RB_BUFSZ 64
 #define RT_USING_SDIO
 #define RT_USING_I2C
+#define RT_USING_SPI
+#define RT_USING_SFUD
 #define RT_USING_I2C_BITOPS
 #define RT_USING_PIN
 

+ 1 - 2
f407/applications/sys.h

@@ -1,8 +1,7 @@
 #ifndef __SYS_H__
 #define __SYS_H__
 
-#include <stdint.h>
-#include "protocol.h"
+#include "datadef.h"
 
 enum {
     IP_DHCP=0,

+ 1 - 1
f407/applications/thread.h

@@ -17,7 +17,7 @@ enum {
     THREAD_ID_WEB,
     THREAD_ID_SNMP,
     THREAD_ID_POWER,
-    THREAD_ID_POLLING,
+    THREAD_ID_POLL,
     THREAD_ID_MQTT,
     THREAD_ID_MAIL,
     

+ 6 - 1
f407/applications/web.c

@@ -55,8 +55,13 @@ static void http_fn(struct mg_connection *c, int ev, void *ev_data)
         mg_serve_http(c, (struct http_message *)ev_data, h->opts);
     }
     else if(ev == MG_EV_WEBSOCKET_FRAME) {
+        static int cnt=0;
+        char tmp[30];
         struct websocket_message *wm = (struct websocket_message *) ev_data;
-        web_send(wm->data, wm->size, 1);
+        
+        sprintf(tmp, "hello %d\n", cnt++);
+        //web_send(wm->data, wm->size, 1);
+        web_send(tmp, strlen(tmp)+1, 1);
     }
     else {
         //

+ 15 - 5
f407/drivers/drv/include/drv_common.h

@@ -43,13 +43,21 @@ void _Error_Handler(char *s, int num);
 #define STM32_FLASH_SIZE               ROM_SIZE
 #define STM32_FLASH_END_ADDRESS        ROM_END
 
-#define STM32_SRAM1_SIZE               RAM_SIZE
-#define STM32_SRAM1_START              RAM_START
-#define STM32_SRAM1_END                RAM_END
+#define STM32_SRAM1_SIZE               RAM1_SIZE
+#define STM32_SRAM1_START              RAM1_START
+#define STM32_SRAM1_END                RAM1_END
+
+#define STM32_SRAM2_SIZE               RAM2_SIZE
+#define STM32_SRAM2_START              RAM2_START
+#define STM32_SRAM2_END                RAM2_END
 
 #if defined(__CC_ARM) || defined(__CLANG_ARM)
 extern int Image$$RW_IRAM1$$ZI$$Limit;
-#define HEAP_BEGIN      ((void *)&Image$$RW_IRAM1$$ZI$$Limit)
+extern int Image$$RW_IRAM2$$ZI$$Limit;
+
+#define HEAP_BEGIN1      ((void *)&Image$$RW_IRAM1$$ZI$$Limit)
+#define HEAP_BEGIN2      ((void *)&Image$$RW_IRAM2$$ZI$$Limit)
+
 #elif __ICCARM__
 #pragma section="CSTACK"
 #define HEAP_BEGIN      (__segment_end("CSTACK"))
@@ -58,7 +66,9 @@ extern int __bss_end;
 #define HEAP_BEGIN      ((void *)&__bss_end)
 #endif
 
-#define HEAP_END                       STM32_SRAM1_END
+#define HEAP_END1                       STM32_SRAM1_END
+#define HEAP_END2                       STM32_SRAM2_END
+
 #ifdef __cplusplus
 }
 #endif

+ 84 - 0
f407/drivers/drv/stm32f4xx_hal_msp.c

@@ -717,6 +717,30 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
 
   /* USER CODE END USART1_MspInit 1 */
   }
+  else if(huart->Instance==USART2)
+  {
+  /* USER CODE BEGIN USART2_MspInit 0 */
+
+  /* USER CODE END USART2_MspInit 0 */
+    /* Peripheral clock enable */
+    __HAL_RCC_USART2_CLK_ENABLE();
+
+    __HAL_RCC_GPIOA_CLK_ENABLE();
+    /**USART2 GPIO Configuration
+    PA2     ------> USART2_TX
+    PA3     ------> USART2_RX
+    */
+    GPIO_InitStruct.Pin = GPIO_PIN_2|GPIO_PIN_3;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+    GPIO_InitStruct.Alternate = GPIO_AF7_USART2;
+    HAL_GPIO_Init(GPIOA, &GPIO_InitStruct);
+
+  /* USER CODE BEGIN USART2_MspInit 1 */
+
+  /* USER CODE END USART2_MspInit 1 */
+  }
   else if(huart->Instance==USART3)
   {
   /* USER CODE BEGIN USART3_MspInit 0 */
@@ -741,6 +765,30 @@ void HAL_UART_MspInit(UART_HandleTypeDef* huart)
 
   /* USER CODE END USART3_MspInit 1 */
   }
+  else if(huart->Instance==USART6)
+  {
+  /* USER CODE BEGIN USART6_MspInit 0 */
+
+  /* USER CODE END USART6_MspInit 0 */
+    /* Peripheral clock enable */
+    __HAL_RCC_USART6_CLK_ENABLE();
+
+    __HAL_RCC_GPIOC_CLK_ENABLE();
+    /**USART6 GPIO Configuration
+    PC6     ------> USART6_TX
+    PC7     ------> USART6_RX
+    */
+    GPIO_InitStruct.Pin = GPIO_PIN_6|GPIO_PIN_7;
+    GPIO_InitStruct.Mode = GPIO_MODE_AF_PP;
+    GPIO_InitStruct.Pull = GPIO_NOPULL;
+    GPIO_InitStruct.Speed = GPIO_SPEED_FREQ_VERY_HIGH;
+    GPIO_InitStruct.Alternate = GPIO_AF8_USART6;
+    HAL_GPIO_Init(GPIOC, &GPIO_InitStruct);
+
+  /* USER CODE BEGIN USART6_MspInit 1 */
+
+  /* USER CODE END USART6_MspInit 1 */
+  }
 
 }
 
@@ -772,6 +820,24 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
 
   /* USER CODE END USART1_MspDeInit 1 */
   }
+  else if(huart->Instance==USART2)
+  {
+  /* USER CODE BEGIN USART2_MspDeInit 0 */
+
+  /* USER CODE END USART2_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_USART2_CLK_DISABLE();
+
+    /**USART2 GPIO Configuration
+    PA2     ------> USART2_TX
+    PA3     ------> USART2_RX
+    */
+    HAL_GPIO_DeInit(GPIOA, GPIO_PIN_2|GPIO_PIN_3);
+
+  /* USER CODE BEGIN USART2_MspDeInit 1 */
+
+  /* USER CODE END USART2_MspDeInit 1 */
+  }
   else if(huart->Instance==USART3)
   {
   /* USER CODE BEGIN USART3_MspDeInit 0 */
@@ -790,6 +856,24 @@ void HAL_UART_MspDeInit(UART_HandleTypeDef* huart)
 
   /* USER CODE END USART3_MspDeInit 1 */
   }
+  else if(huart->Instance==USART6)
+  {
+  /* USER CODE BEGIN USART6_MspDeInit 0 */
+
+  /* USER CODE END USART6_MspDeInit 0 */
+    /* Peripheral clock disable */
+    __HAL_RCC_USART6_CLK_DISABLE();
+
+    /**USART6 GPIO Configuration
+    PC6     ------> USART6_TX
+    PC7     ------> USART6_RX
+    */
+    HAL_GPIO_DeInit(GPIOC, GPIO_PIN_6|GPIO_PIN_7);
+
+  /* USER CODE BEGIN USART6_MspDeInit 1 */
+
+  /* USER CODE END USART6_MspDeInit 1 */
+  }
 
 }
 

Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 1024 - 698
f407/project/app/app.uvoptx


Rozdílová data souboru nebyla zobrazena, protože soubor je příliš velký
+ 228 - 78
f407/project/app/app.uvprojx


+ 1 - 1
f407/project/boot/boot.uvoptx

@@ -73,7 +73,7 @@
         <LExpSel>0</LExpSel>
       </OPTXL>
       <OPTFL>
-        <tvExp>0</tvExp>
+        <tvExp>1</tvExp>
         <tvExpOptDlg>0</tvExpOptDlg>
         <IsCurrentTarget>1</IsCurrentTarget>
       </OPTFL>

+ 1 - 3
f407/rt-thread/components/fal/samples/porting/fal_cfg.h

@@ -14,16 +14,14 @@
 #include <rtconfig.h>
 #include <board.h>
 
-#define NOR_FLASH_DEV_NAME             "norflash0"
+#define NOR_FLASH_DEV_NAME             "nor"
 
 /* ===================== Flash device Configuration ========================= */
-extern const struct fal_flash_dev stm32f2_onchip_flash;
 extern struct fal_flash_dev nor_flash0;
 
 /* flash device table */
 #define FAL_FLASH_DEV_TABLE                                          \
 {                                                                    \
-    &stm32f2_onchip_flash,                                           \
     &nor_flash0,                                                     \
 }
 /* ====================== Partition Configuration ========================== */

+ 1 - 1
f407/rt-thread/components/net/lwip/lwip-2.1.2/src/core/init.c

@@ -343,7 +343,7 @@ lwip_init(void)
   /* Modules initialization */
   stats_init();
 #if !NO_SYS
-  sys_init();
+  //sys_init();
 #endif /* !NO_SYS */
   mem_init();
   memp_init();

+ 1 - 4
f407/rt-thread/components/net/lwip/port/sys_arch.c

@@ -102,10 +102,7 @@ int lwip_system_init(void)
 }
 INIT_PREV_EXPORT(lwip_system_init);
 
-void sys_init(void)
-{
-    /* nothing on RT-Thread porting */
-}
+
 
 void lwip_sys_init(void)
 {

+ 4 - 4
pro/config/cfg.h

@@ -14,21 +14,21 @@
 //#define PRJ_USASL_AC_I3_O3
 //#define PRJ_ITK_AC_I1_O1
 //#define PRJ_ITK_AC_I3_O1
-//#define PRJ_STSC_I3_O3
+#define PRJ_STSC_I3_O3
 //#define PRJ_LITECH_AC_I1_O1
 //#define PRJ_LITECH_AC_I3_O1
 //#define PRJ_INSPUR_DC_I_DC_O
 //#define PRJ_ANDERSON_AC_I3_O3
 //#define PRJ_HYPERTEC_AC_I3_O1
 //#define PRJ_SG_I3_O3
-#define PRJ_TEST
+//#define PRJ_TEST
 //#define PRJ_TEST_AC_I1_O1
 //#define PRJ_TEST_AC_I3_O1
 //#define PRJ_IP_AC_I3_O3
-//
+//#define PRJ_INST2302_DC_OLED
 
 
-#define USE_BOARD_UPGRADE
+//#define USE_BOARD_UPGRADE
 
 #define USE_MAIL
 #define MAIL_SEND_BUILTIN

+ 2 - 2
pro/src/json_handle.c

@@ -3301,8 +3301,8 @@ char* over_sensor_history_info_to_json(_OverSensorBackInfo* _over_all_sensor_bac
                 cJSON* type_data_array = cJSON_CreateArray();
                 cJSON* type_data = cJSON_CreateObject();
                 cJSON_AddStringToObject(type_data,"typeName",language_temperature[__globalDeviceManage._globalDevInfo.product.language]);
-                cJSON* ydate_gas_array = cJSON_CreateFloatArray(_temp->gas_sensor.ydata,TOTAL_COUNT);
-                cJSON_AddItemToObject(type_data,"ydata",ydate_gas_array);
+                cJSON* ydate_array = cJSON_CreateFloatArray(_temp->temp_sensor.ydata,TOTAL_COUNT);
+                cJSON_AddItemToObject(type_data,"ydata",ydate_array);
                 cJSON_AddStringToObject(type_data,"type","0");
                 cJSON_AddItemToArray(type_data_array,type_data);
                 //cJSON_AddArrayToObject(data,type_data_array);

+ 3 - 1
pro/src/lock.c

@@ -105,7 +105,9 @@ int lock_d_deinit(lock_t h)
         return -1;
     }
     
-    return pthread_mutex_destroy((pthread_mutex_t*)h);
+    r = pthread_mutex_destroy((pthread_mutex_t*)h);
+    free((void*)h);
+    return r;
 }
 
 

+ 3 - 3
pub

@@ -14,12 +14,12 @@
 #PRJS="PRJ_RELEASE_AC_I1_O1"
 #PRJS="PRJ_RELEASE_AC_I3_O1"
 #PRJS="PRJ_RELEASE_AC_I3_O3"
-#PRJS="PRJ_STSC_I3_O3"
+PRJS="PRJ_STSC_I3_O3"
 #PRJS="PRJ_SG_I3_O3"
 #PRJS="PRJ_TEST"
 #PRJS="PRJ_TEST_AC_I1_O1"
 #PRJS="PRJ_TEST_AC_I3_O1"
-PRJS="PRJ_INST2302_DC_OLED"
+#PRJS="PRJ_INST2302_DC_OLED"
 
 #PRJS="PRJ_USASL_AC_I3_O1 PRJ_USASL_AC_I3_O3"
 #PRJS="PRJ_XIAN_AC_I1_O1_P4 PRJ_XIAN_AC_I1_O1_P8"
@@ -73,7 +73,7 @@ function do_copy()
     cp -f $custdir/cert/server.*         $appdir/cert/
     cp -f $custdir/changes.txt           $appdir/
     cp -f $custdir/db/pdu_dat.db         $appdir/
-    cp -f $custdir/../Qt/Qt_Test/Qt_Test $appdir/
+    cp -f $custdir/qt/Qt_Test            $appdir/
     
     if [ "$1" = "PRJ_XIAN_AC_I1_O1_P4" ]; then
         name=ac_in1_out1_p4_xian