Parcourir la source

将重要配置与数据库分离

guohui il y a 2 ans
Parent
commit
902b996dd9

BIN
04-源码/03-核心板/output/out/web_temp/main


+ 1 - 0
04-源码/03-核心板/output/out2/root/run/app/appweb.conf

@@ -8,6 +8,7 @@ AddHandler fileHandler
 
 Documents ../web
 UploadDir /root/dl
+LimitUpload 50MB
 
 <Route ^/action/>
     SetHandler actionHandler

BIN
04-源码/03-核心板/output/out2/root/run/app/smartPDU


+ 4 - 1
04-源码/03-核心板/smart_pdu/Makefile

@@ -53,6 +53,8 @@ CFILES += letter/src/shell_cmd_list.c \
 	  src/pduMIB_form.c \
 	  src/pduMIB_scalar.c \
 	  src/pduMIB_trap.c \
+	  src/paras.c \
+	  src/dflt.c \
 	  sys/sys.c
          
 DFLAGS += -DINNER_USE
@@ -71,7 +73,8 @@ IFLAGS += -I$(SYS_DIR)/usr/include \
           -I$(SRC_DIR)/snmp/include \
 	  -I$(SRC_DIR)/../upgd \
 	  -I$(SRC_DIR)/sys \
-	  -I$(SRC_DIR)/src
+	  -I$(SRC_DIR)/src \
+	  -I$(SRC_DIR)/user
           
 LFLAGS += -L${SRC_DIR}/modbus/lib \
           -L${SRC_DIR}/sqlite/lib \

+ 1 - 3
04-源码/03-核心板/smart_pdu/src/app.c

@@ -12,6 +12,7 @@
 #include "websocket_handle.h"
 #include "sys.h"
 
+
 static int keep_running;
 RETSIGTYPE stop_server(int __attribute__((unused)) a)
 {
@@ -713,7 +714,6 @@ int snmp_thread(void *arg)
 #include <sys/ipc.h> 
 #include <sys/msg.h>
 #include "upgrade.h"
-
 static key_t upgkey=0;
 int upg_send(int evt)
 {
@@ -758,8 +758,6 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
 
     int io_thread_flag = 0 ;
     int sensor_thread_flag = 0 ;
-    
-upg_init();
 
     //设备管理内存分配
     _globalDeviceManager->_global_device_info = (GlobalDeviceInfo*)malloc(sizeof(GlobalDeviceInfo));

+ 7 - 8
04-源码/03-核心板/smart_pdu/src/appweb_handle.c

@@ -2077,9 +2077,8 @@ static void communicationManagement(HttpStream *stream)
 
         if(ipv==IP_V4) {
             sys_get_net(info, ipv);
+            ack_str = communication_net_ack_to_json(info);
         }
-        
-        ack_str = communication_net_ack_to_json(info);
     }
     else if(strcmp(reqInfo.type,"WkIPV4Save")==0 || strcmp(reqInfo.type,"WkIPV6Save")==0 )  //保存数据
     {
@@ -2101,12 +2100,10 @@ static void communicationManagement(HttpStream *stream)
         ////////////////////////////////////////////////////////////////////////////////
         if(ipv==IP_V4) {
             sys_set_net(info, ipv);
+            ack_str = ctrl_sts_ack_to_json(); 
         }
-        //////////////////////////////////////////////////////////////////////////////
-        //写入数据库
-        
-        //应答    
-        ack_str = ctrl_sts_ack_to_json();             
+        //////////////////////////////////////////////////////////////////////////////    
+                    
     }
     //查询设置RS485参数
     else if(strcmp(reqInfo.type,"listRsQuery")==0)//modbus参数查询
@@ -2878,7 +2875,9 @@ static void equipmentMintenanceUpload(HttpStream *stream)
     char* ack_str = NULL ;
     q = stream->readq;
 
-    printf("______upload____ %d\n", stream->rx);
+    //MprList *mlist = espGetUploads(stream);
+    printf("______upload____\n");
+    
     //printf("______upload____ %d\n", stream->);
     
     

+ 3 - 1
04-源码/03-核心板/smart_pdu/src/common.h

@@ -27,6 +27,8 @@
 //是否在环境下运行
 #define OS_HANDWARE 1
 
+#define PARAS_FILE      "/root/run/pduParas"
+
 #define DATABASE_NAME  "pdu_dat.db" 
 #define SNMP_MIB_NAME  "pduMIB"
 
@@ -129,7 +131,7 @@ typedef struct
 
 typedef struct
 {
-    int           mode;    //0: static  1: dhcp
+    int           mode;    //1: static  0: dhcp
     char          ip_address[64] ; //ip地址
     char          mask[64]; //子网掩码
     char          gateway[64]; //网关

+ 46 - 0
04-源码/03-核心板/smart_pdu/src/dflt.c

@@ -0,0 +1,46 @@
+#include "paras.h"
+#include "config.h"
+
+
+all_paras_t DFLT_PARAS={
+
+    .dev = {
+        .product_id         = PROD_ID,
+        .product_number     = "X000001",
+        .product_name       = "SmartPDU",
+        .product_status     = "",
+        .product_type       = PROD_TYPE,
+        .product_pwr_type   = PROD_POWER_TYPE,
+        .product_version    = VERSION,
+        .product_language   = LANGUAGE,                  //多国语言
+        .product_count      = CASCADE_CNT,               //级联设备数
+        .product_samp_time  = SMPLE_TIME,                //采集周期 单位ms
+        .product_save_time  = SAVE_TIME,                 //保存周期 单位ms
+        
+        ._modbus_info = {                                //继电器控制端口
+            .product_modbus_type = 0,                    //modbus模式,0: master     1: slave
+            .product_modbus_baud = 115200,
+            .product_modbus_addr = 1,
+            .product_relay_ctrl_port = "/dev/ttyAS2",    //继电器modbus控制端口路径
+        },
+        
+        ._network_info = {
+            .mode = 1,                                   //0:dhcp   1:static
+            .ip_address = "192.168.1.132",
+            .mask = "255.255.255.0",
+            .gateway = "192.168.1.1",
+            .dns1 = "",
+            .dns2 = "",
+        },
+        
+        ._gmodbus_info = {
+            .product_modbus_type = 0,                   //modbus模式,0: master     1: slave
+            .product_modbus_baud = 115200,
+            .product_modbus_addr = 1,
+            .product_relay_ctrl_port = "/dev/ttyXXX",   //表头级联串口对应路径
+        },
+    }
+};
+
+
+

+ 16 - 7
04-源码/03-核心板/smart_pdu/src/json_handle.c

@@ -5,8 +5,10 @@
 #include <time.h>
 #include "common.h"
 #include "list.h"
+#include "paras.h"
 #include "language_common.h"
 
+
 #define TOTAL_COUNT 60 //计数长度
 
 //如果是在一个程序的循环中不断调用这个函数,那么是没有效果的
@@ -774,6 +776,8 @@ int json_to_over_equipment_mintenance(const char* str,_Equipment_Mintenance* _ov
 int json_to_system_config_info(void)
 {
     char* str = NULL;
+    char tmp[100];
+    
     // 创建 JSON 对象
     cJSON* root = cJSON_CreateObject();   
     // 添加基本键值对
@@ -785,7 +789,8 @@ int json_to_system_config_info(void)
     cJSON_AddNumberToObject(data_field, "systemLanguage", __globalDeviceManage._global_device_info->product_language);
     //返回websockt
     // cJSON_AddStringToObject(data_field,"webSocket","ws://192.168.2.132:6785/websocket/"); 
-    cJSON_AddStringToObject(data_field,"webSocket","ws://192.168.1.132:6785/websocket/"); 
+    snprintf(tmp, sizeof(tmp), "ws://%s/websocket/", paras_get()->dev._network_info.ip_address);
+    cJSON_AddStringToObject(data_field,"webSocket",tmp); 
     //返回websockt
     cJSON_AddStringToObject(data_field,"logo","");
 
@@ -2118,18 +2123,22 @@ char* ws_chn_status_ack_to_json(int type,_OverChnPwrAckInfo* _over_chn_pwr_back_
 char* communication_net_ack_to_json(NetworkInfo_t* _networkInfo_t)
 {
     char* str = NULL;
+    char tmp[10];
+    
     // 创建 JSON 对象
     cJSON* root = cJSON_CreateObject();   
     // 添加基本键值对
     cJSON_AddNumberToObject(root, "code", 200); 
     //创建数据
     cJSON* data_root_array = cJSON_CreateObject();  
-    cJSON_AddNumberToObject(root, "mode", _networkInfo_t->mode);   
-    cJSON_AddStringToObject(root, "ipaddress",  _networkInfo_t->ip_address); 
-    cJSON_AddStringToObject(root, "mask", _networkInfo_t->mask); 
-    cJSON_AddStringToObject(root, "gateway",  _networkInfo_t->gateway);  
-    cJSON_AddStringToObject(root, "dns1", _networkInfo_t->dns1);  
-    cJSON_AddStringToObject(root, "dns2", _networkInfo_t->dns2);  
+
+    sprintf(tmp, "%d", _networkInfo_t->mode);
+    cJSON_AddStringToObject(data_root_array, "mode", tmp);   
+    cJSON_AddStringToObject(data_root_array, "ipaddress",  _networkInfo_t->ip_address); 
+    cJSON_AddStringToObject(data_root_array, "mask", _networkInfo_t->mask); 
+    cJSON_AddStringToObject(data_root_array, "gateway",  _networkInfo_t->gateway);  
+    cJSON_AddStringToObject(data_root_array, "dns1", _networkInfo_t->dns1);  
+    cJSON_AddStringToObject(data_root_array, "dns2", _networkInfo_t->dns2);  
     //添加汇总
     cJSON_AddItemToObject(root, "data", data_root_array);
     //添加结果

+ 2 - 1
04-源码/03-核心板/smart_pdu/src/main.c

@@ -10,9 +10,9 @@
 #include "switch_ctrl.h"
 #include "app.h"
 #include "shell.h"
-
 #include "json_handle.h"
 
+
 //static GlobalDeviceManager* _globalDeviceManager;
 
 
@@ -109,6 +109,7 @@ int main(int argc,char* argv[])
     //userShellInit();
     //初始化日志组件
     initLogger();
+    
     //初始化系统
     _global_device_manage_init(&__globalDeviceManage);
 

+ 141 - 0
04-源码/03-核心板/smart_pdu/src/paras.c

@@ -0,0 +1,141 @@
+#include "paras.h"
+#include <stdlib.h>
+#include <stdio.h>
+#include "sys.h"
+
+
+//#define LOG log_print
+#define LOG printf
+
+
+all_paras_t allParas;
+////////////////////////////////////////////////////////////
+static int file_length(char* path)
+{
+    int r;
+    struct stat st;
+
+    r = stat(path, &st);
+    if (r) {
+        return -1;
+    }
+
+    return st.st_size;
+}
+
+static int file_save(char *path, void *buf, int len)
+{
+    int r;
+    FILE *fp;
+    
+    fp = fopen(path, "wb");
+    if(!fp) {
+        LOG("file_save, fopen %s failed, %d, %d\n", path);
+        return -1;
+    }
+    r = fwrite(buf, 1, len, fp);
+    if(r!=len) {
+        LOG("file_save %s failed, %d, %d\n", path, r, len);
+        r = -1;
+    }
+    else {
+        r = 0;
+    }
+    fclose(fp);
+
+    return r;
+}
+static int file_load(char* path, void* buf, int len)
+{
+    int r;
+    FILE* fp;
+
+    fp = fopen(path, "rb");
+    if (!fp) {
+        LOG("file_load, fopen %s failed, %d, %d\n", path);
+        return -1;
+    }
+    r = fread(buf, 1, len, fp);
+    if (r != len) {
+        LOG("file_load %s failed, %d, %d\n", path, r, len);
+        r = -1;
+    }
+    else {
+        r = 0;
+    }
+    fclose(fp);
+
+    return r;
+}
+static int file_remove(char *path)
+{
+    return remove(path);
+}
+
+static int do_check(all_paras_t *paras)
+{
+    int i,j;
+    
+
+    return 0;
+}
+
+
+
+int paras_load(void)
+{
+    int i,r=-1;
+    int flen,rlen;
+    NetworkInfo_t *p=&allParas.dev._network_info;
+
+    allParas = DFLT_PARAS;
+    flen = file_length(PARAS_FILE);
+    if(flen==sizeof(allParas)) {
+        rlen = file_load(PARAS_FILE, &allParas, flen);
+        if(rlen==flen) {
+            r = do_check(&allParas);
+            if(r) {
+                allParas = DFLT_PARAS;
+            }
+        }
+    }
+    
+    if(r) {
+        paras_save();
+        sys_set_net(p, IP_V4);
+    }
+    else {
+        sys_get_net(p, IP_V4);
+    }
+    
+    return r;
+}
+
+
+int paras_save(void)
+{
+    int r;
+    
+    r = do_check(&allParas);
+    if(r) {
+        return -1;
+    }
+    return file_save(PARAS_FILE, &allParas, sizeof(allParas));
+}
+
+
+int paras_reset(void)
+{
+    allParas = DFLT_PARAS;
+    return paras_save();
+}
+
+
+all_paras_t* paras_get(void)
+{
+    return &allParas;
+}
+
+
+
+

+ 31 - 0
04-源码/03-核心板/smart_pdu/src/paras.h

@@ -0,0 +1,31 @@
+#ifndef __PARAS_Hx__
+#define __PARAS_Hx__
+
+#include "common.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+
+typedef struct {
+    GlobalDeviceInfo dev;
+}all_paras_t;
+
+extern all_paras_t allParas;
+extern all_paras_t DFLT_PARAS;
+
+
+int paras_load(void);
+int paras_save(void);
+int paras_reset(void);
+all_paras_t* paras_get(void);
+
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif
+

+ 23 - 0
04-源码/03-核心板/smart_pdu/src/sqlite_handle.c

@@ -1,6 +1,9 @@
 #include "sqlite_handle.h"
 #include "elog.h"
 #include "time.h"
+#include "paras.h"
+
+
 #define	TOTAL_COUNT	60//统计总数
 
 /// @brief 初始化SQLite数据库
@@ -11,6 +14,9 @@ int sqlite_init(sqlite3** db, const char* daba_name)
 {
     int ret = 0;
     char *errorMsg = NULL;
+
+    paras_load();       //通过文件加载配置参数
+    
     ret = sqlite3_open(daba_name,db);
     if(ret != SQLITE_OK)
         return -1 ;
@@ -35,6 +41,7 @@ void sqlite_deinit(sqlite3 *db)
 /// @return 0:正常
 int dev_get_device_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
 {
+#if 0
     int res = 0 ;
     int rowIndex = 1 ;
     char *errorMsg = NULL;
@@ -80,6 +87,10 @@ int dev_get_device_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
     strcpy(_globalDeviceInfo->_modbus_info.product_relay_ctrl_port,pResult[rowIndex*ncolumn+13]);
 
     sqlite3_free_table(pResult);
+#else
+    *_globalDeviceInfo = paras_get()->dev;
+#endif
+    
     return 0;
 } 
 
@@ -91,6 +102,7 @@ int dev_get_device_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
 /// @return 
 int dev_update_device_genera_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
 {
+#if 0
     int res ;
     char select_sql[256] = {0};
     char *errorMsg = NULL;
@@ -113,6 +125,11 @@ int dev_update_device_genera_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInf
     if(res != SQLITE_OK)
         return -1 ;  
     sqlite3_free_table(pResult);
+#else
+    paras_get()->dev = *_globalDeviceInfo;
+    return paras_save();
+#endif
+    
     return 0;
 }
 
@@ -122,6 +139,7 @@ int dev_update_device_genera_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInf
 /// @return 
 int dev_update_device_modus_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
 {
+#if 0
     int res ;
     char select_sql[256] = {0};
     char *errorMsg = NULL;
@@ -140,6 +158,11 @@ int dev_update_device_modus_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo
     if(res != SQLITE_OK)
         return -1 ;  
     sqlite3_free_table(pResult);
+#else
+    paras_get()->dev = *_globalDeviceInfo;
+    return paras_save();
+#endif
+    
     return 0;
 }
 

+ 9 - 5
04-源码/03-核心板/smart_pdu/src/websocket_handle.c

@@ -3,12 +3,11 @@
 #include "pthread.h"
 #include "elog.h"
 #include "common.h"
+#include "paras.h"
 
 //获取本地IP以及端口进行初始化操作
 //static const char *s_listen_on = "ws://192.168.2.132:6785";
 
-static const char *s_listen_on = "ws://192.168.1.132:6785";
-
 static const char *s_web_root = ".";
 
 static void fn(struct mg_connection *c, int ev, void *ev_data) 
@@ -61,11 +60,16 @@ static void fn(struct mg_connection *c, int ev, void *ev_data)
 
 static void websocket_func(void* arg)
 {
+    char tmp[100];
+    
     struct mg_mgr mgr;  // Event manager
     mg_mgr_init(&mgr);  // Initialise event manager
-    log_d("Starting WS listener on %s/websocket\n", s_listen_on);
-    mg_http_listen(&mgr, s_listen_on, fn, NULL);  // Create HTTP listener
-    for (;;) mg_mgr_poll(&mgr, 1000);             // Infinite event loop
+    
+    snprintf(tmp, sizeof(tmp), "ws://%s:6785", paras_get()->dev._network_info.ip_address);
+    log_d("Starting WS listener on %s/websocket\n", tmp);
+    
+    mg_http_listen(&mgr, tmp, fn, NULL);        // Create HTTP listener
+    for (;;) mg_mgr_poll(&mgr, 1000);           // Infinite event loop
     mg_mgr_free(&mgr);
 }
 

+ 8 - 3
04-源码/03-核心板/smart_pdu/sys/sys.c

@@ -9,6 +9,7 @@
 #include "elog.h"
 #include "sys.h"
 #include "upgrade.h"
+#include "paras.h"
 
 
 #if 0
@@ -664,7 +665,7 @@ static int get_net(NetworkInfo_t *para)
 
 static int set_net(NetworkInfo_t *para)
 {
-    int tlen=0,len;
+    int r;
     char *p1,*p2,*p3,*p4;
     char *fpath=FILE_INTERFACE;
     int xlen=10*1000;
@@ -708,10 +709,14 @@ static int set_net(NetworkInfo_t *para)
     strcat(fbuf, pNet->e0);
     strcat(fbuf, pNet->e1);
 
-    file_save(fpath, fbuf, strlen(fbuf));
+    r = file_save(fpath, fbuf, strlen(fbuf));
     free(fbuf);
 
-    return 0;
+    if(r==0) {
+        paras_get()->dev._network_info = para2;
+    }
+
+    return r;
 
 }
 

+ 22 - 0
04-源码/03-核心板/smart_pdu/user/config.h

@@ -0,0 +1,22 @@
+#ifndef __CONFIG_Hx__
+#define __CONFIG_Hx__
+
+
+#define VERSION             "V0.0.1"
+
+
+#define PROD_ID             1
+#define PROD_TYPE           1
+#define PROD_POWER_TYPE     1
+
+
+#define LANGUAGE            0
+#define SMPLE_TIME          100         //ms
+#define SAVE_TIME           1000        //ms
+#define CASCADE_CNT         5
+
+
+
+#endif
+
+