Explorar el Código

将关键配置从数据库独立出来(smartPDU.ini)。
默认参数定义在cfg.h和dflt.c中,
smartPDU.ini无需内置,不存在时,将通过程序用默认参数自动生成

guohui hace 2 años
padre
commit
4460498865

BIN
output/t113i/root/run/app/pdu_dat.db


BIN
output/t113i/root/run/app/pdu_dat_bak.db


+ 131 - 116
pro/config/cfg.h

@@ -3,8 +3,6 @@
 
 
 #define VERSION                                 "V0.0.1"
-
-
 #define PROD_ID                                 0
 #define PROD_TYPE                               1
 
@@ -24,141 +22,158 @@
 
 
 #if (defined PRJ_XIAN_AC_I1_O1_P4) || (defined PRJ_XIAN_AC_I1_O1_P8)  //GOM037
-#define LANGUAGE                            0           //chinese
-#define SMPLE_TIME                          30          //ms
-#define SAVE_TIME                           60000       //ms
-#define CASCADE_CNT                         5
-
-#define MAX_CHN_COUNT                       16
-#define PHASE_GROUP_CNT                     8
-
-#ifdef PRJ_XIAN_AC_I1_O1_P4
-//#define GOM037PDU_GC20_04K_125H        //ac_in1_out1_40a_p4_5ch_nologo_cn
-#define CHANNEL_DELAY_SEC               5
-#else
-//#define GOM037_PDU_GC10_08K_80H        //ac_in1_out1_40a_p8_5ch_nologo_cn
-#define CHANNEL_DELAY_SEC               8
-#endif
-
-#define USE_SMTP
-#define SMTP_SEND_BUILTIN
-
-#define PROD_POWER_TYPE                     0
-#define IN_INDEX_MAP                        {3,2,0,1}
+    #define LANGUAGE                            0           //chinese
+    #define SMPLE_TIME                          30          //ms
+    #define SAVE_TIME                           60000       //ms
+    #define CASCADE_CNT                         0
+
+    #define MAX_CHN_COUNT                       16
+    #define PHASE_GROUP                         8
+
+    #ifdef PRJ_XIAN_AC_I1_O1_P4
+        //#define GOM037PDU_GC20_04K_125H       //ac_in1_out1_40a_p4_5ch_nologo_cn
+        #define CHANNEL_DELAY                   5
+    #else
+        //#define GOM037_PDU_GC10_08K_80H       //ac_in1_out1_40a_p8_5ch_nologo_cn
+        #define CHANNEL_DELAY                   8
+    #endif
+
+    #define USE_SMTP
+    #define SMTP_SEND_BUILTIN
+
+    #define PROD_POWER_TYPE                     0
+    #define IN_INDEX_MAP                        {3,2,0,1}
 #elif (defined PRJ_USASL_AC_I3_O1) || (defined PRJ_USASL_AC_I3_O3)
-
-#define LANGUAGE                            1           //english
-#define SMPLE_TIME                          30          //ms
-#define SAVE_TIME                           60000       //ms
-#define CASCADE_CNT                         5
-
-#define MAX_CHN_COUNT                       16
-#define PHASE_GROUP_CNT                     8
-
-#define USE_SMTP
-#define SMTP_SEND_BUILTIN
-
-//#define PDU_GC40_03K_125H           //ac_in3_out3_40a_p8_12ch_nologo_en
-//#define PDU_GC60_04K_125H           //ac_in3_out1_40a_p4_24ch_nologo_en
-#ifdef PRJ_USASL_AC_I3_O1
-#define PROD_POWER_TYPE                 5
-#else
-#define PROD_POWER_TYPE                 3
-#endif
+    #define LANGUAGE                            1           //english
+    #define SMPLE_TIME                          30          //ms
+    #define SAVE_TIME                           60000       //ms
+    #define CASCADE_CNT                         0
+
+    #define MAX_CHN_COUNT                       16
+    #define PHASE_GROUP                         8
+    #define CHANNEL_DELAY                       8
+
+    #define USE_SMTP
+    #define SMTP_SEND_BUILTIN
+
+    //#define PDU_GC40_03K_125H           //ac_in3_out3_40a_p8_12ch_nologo_en
+    //#define PDU_GC60_04K_125H           //ac_in3_out1_40a_p4_24ch_nologo_en
+    #ifdef PRJ_USASL_AC_I3_O1
+        #define PROD_POWER_TYPE                 5
+    #else
+        #define PROD_POWER_TYPE                 3
+    #endif
 #elif (defined PRJ_ITK_AC_I1_O1) || (defined PRJ_ITK_AC_I3_O1)
-
-#define LANGUAGE                            2           //russia
-#define SMPLE_TIME                          30          //ms
-#define SAVE_TIME                           60000       //ms
-#define CASCADE_CNT                         5
-
-#define MAX_CHN_COUNT                       16
-#define PHASE_GROUP_CNT                     8
-
-#define USE_SMTP
-#define SMTP_SEND_BUILTIN
-
-#ifdef PRJ_ITK_AC_I1_O1
-#define PROD_POWER_TYPE                 0
-#else
-#define PROD_POWER_TYPE                 5
-#endif
-
+    #define LANGUAGE                            2           //russia
+    #define SMPLE_TIME                          30          //ms
+    #define SAVE_TIME                           60000       //ms
+    #define CASCADE_CNT                         0
+
+    #define MAX_CHN_COUNT                       16
+    #define PHASE_GROUP                         8
+    #define CHANNEL_DELAY                       8
+
+    #define USE_SMTP
+    #define SMTP_SEND_BUILTIN
+
+    #ifdef PRJ_ITK_AC_I1_O1
+        #define PROD_POWER_TYPE                 0
+    #else
+        #define PROD_POWER_TYPE                 5
+    #endif
 #elif (defined PRJ_LITECH_AC_I1_O1) || (defined PRJ_LITECH_AC_I3_O1)
-
-#define LANGUAGE                            1           //english
-#define SMPLE_TIME                          30          //ms
-#define SAVE_TIME                           60000       //ms
-#define CASCADE_CNT                         5
-
-#define MAX_CHN_COUNT                       16
-#define PHASE_GROUP_CNT                     8
-
-#define USE_SMTP
-#define SMTP_SEND_BUILTIN
-
-#ifdef PRJ_LITECH_AC_I1_O1
-#define PROD_POWER_TYPE                 0
-#else
-#define PROD_POWER_TYPE                 5
-#endif
+    #define LANGUAGE                            1           //english
+    #define SMPLE_TIME                          30          //ms
+    #define SAVE_TIME                           60000       //ms
+    #define CASCADE_CNT                         0
+
+    #define MAX_CHN_COUNT                       16
+    #define PHASE_GROUP                         8
+    #define CHANNEL_DELAY                       8
+
+    #define USE_SMTP
+    #define SMTP_SEND_BUILTIN
+
+    #ifdef PRJ_LITECH_AC_I1_O1
+        #define PROD_POWER_TYPE                 0
+    #else
+        #define PROD_POWER_TYPE                 5
+    #endif
 #elif defined PRJ_STSC_I3_O3
-#define LANGUAGE                            1           //english
-#define SMPLE_TIME                          30          //ms
-#define SAVE_TIME                           60000       //ms
-#define CASCADE_CNT                         5
+    #define LANGUAGE                            1           //english
+    #define SMPLE_TIME                          30          //ms
+    #define SAVE_TIME                           60000       //ms
+    #define CASCADE_CNT                         0
 
-#define MAX_CHN_COUNT                       24
-#define PHASE_GROUP_CNT                     8
+    #define MAX_CHN_COUNT                       24
+    #define PHASE_GROUP                         8
+    #define CHANNEL_DELAY                       8
 
-#define USE_SMTP
-#define SMTP_SEND_BUILTIN
+    #define USE_SMTP
+    #define SMTP_SEND_BUILTIN
 
-#define PROD_POWER_TYPE                     3
+    #define PROD_POWER_TYPE                     3
 #elif defined PRJ_ANDERSON_AC_I3_O3
+    #define LANGUAGE                            1           //english
+    #define SMPLE_TIME                          30          //ms
+    #define SAVE_TIME                           60000       //ms
+    #define CASCADE_CNT                         0
 
-#define LANGUAGE                            1           //english
-#define SMPLE_TIME                          30          //ms
-#define SAVE_TIME                           60000       //ms
-#define CASCADE_CNT                         5
-
-#define MAX_CHN_COUNT                       24
-#define PHASE_GROUP_CNT                     8
+    #define MAX_CHN_COUNT                       24
+    #define PHASE_GROUP                         8
+    #define CHANNEL_DELAY                       8
 
-#define USE_SMTP
-#define SMTP_SEND_BUILTIN
+    #define USE_SMTP
+    #define SMTP_SEND_BUILTIN
 
-#define SW_STATIC_PORT_START
-#define SW_PORT_INDEX_START                 0
-#define SW_PORT_INDEX_END                   21
+    #define SW_STATIC_PORT_START
+    #define SW_PORT_INDEX_START                 0
+    #define SW_PORT_INDEX_END                   21
 #elif defined PRJ_HYPERTEC_AC_I3_O1
-//ac_in3_out1_36ch_nologo_en_hypertec
-#define USE_SMTP
-#define SMTP_SEND_BUILTIN
+    //ac_in3_out1_36ch_nologo_en_hypertec
 
-#undef PHASE_GROUP_CNT
-#undef CHANNEL_DELAY_SEC
+    #define LANGUAGE                            1           //english
+    #define SMPLE_TIME                          30          //ms
+    #define SAVE_TIME                           60000       //ms
+    #define CASCADE_CNT                         0
 
-#define PHASE_GROUP_CNT                     6
-#define CHANNEL_DELAY_SEC                   6
+    #define USE_SMTP
+    #define SMTP_SEND_BUILTIN
+
+    #define MAX_CHN_COUNT                       16
+    #define PHASE_GROUP                         6
+    #define CHANNEL_DELAY                       6
+
+    #define PROD_POWER_TYPE                     5
 #elif defined PRJ_INSPUR_DC_I_DC_O
-#define USE_SMTP
-#define SMTP_SEND_BUILTIN
+    #define LANGUAGE                            0           //english
+    #define SMPLE_TIME                          30          //ms
+    #define SAVE_TIME                           60000       //ms
+    #define CASCADE_CNT                         0
 
-#define PROD_POWER_TYPE                     1
+    #define USE_SMTP
+    #define SMTP_SEND_BUILTIN
+
+    #define PROD_POWER_TYPE                     1
 #elif defined PRJ_TEST
-//#define USE_SMTP
-//#define SMTP_SEND_BUILTIN
+    #define LANGUAGE                            0           //chinese
+    #define SMPLE_TIME                          30          //ms
+    #define SAVE_TIME                           60000       //ms
+    #define CASCADE_CNT                         0
+
+    //#define USE_SMTP
+    //#define SMTP_SEND_BUILTIN
 
-//#define USE_MQTT
-//#define MQTT_SERVER_BUILTIN
+    //#define USE_MQTT
+    //#define MQTT_SERVER_BUILTIN
 
-#undef MAX_CHN_COUNT
-#define MAX_CHN_COUNT                       2//4
+    #define MAX_CHN_COUNT                       2//4
+    #define PHASE_GROUP                         8
+    #define CHANNEL_DELAY                       8
 
-#define PROD_POWER_TYPE                     3
+    #define PROD_POWER_TYPE                     3
 #else
-#error define a PRJ_XXXX please!
+    #error define a PRJ_XXXX please!
 #endif
 
 #endif

+ 61 - 107
pro/src/app.c

@@ -94,9 +94,9 @@ void* power_thread(void* arg)
     dev_search_last_Index(_globalDeviceManager->db, &lastIndex, tabPower);       // 查询日志最大点
     dev_search_last_Index(_globalDeviceManager->db, &lastIndex3, tabPower3);      // 查询日志最大点
     InitHashTable(_globalDeviceManager);
-    unsigned int samp_time = _globalDeviceManager->_globalDevInfo.product_samp_time;
+    unsigned int samp_time = _globalDeviceManager->_globalDevInfo.product.samp_time;
     unsigned int usleepTime = samp_time*1000;
-    unsigned int sSaveTime = _globalDeviceManager->_globalDevInfo.product_save_time;
+    unsigned int sSaveTime = _globalDeviceManager->_globalDevInfo.product.save_time;
     log_d("samp_time:%dms save_time:%dms\n", samp_time,sSaveTime);
 
     bool isErrorBreak=false;
@@ -189,7 +189,7 @@ void* power_thread(void* arg)
         memset(VavgTimes,0,sizeof(VavgTimes));
         
         lock_s_hold(LOCK_ID_POWER_UPDATE);
-        if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B)
+        if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)
         {
             list_for_each_entry(pTreeAPowerInfo, &_globalDeviceManager->_globalPowerManger.list_Tree_AC, list_Tree_AC)
             {
@@ -218,8 +218,8 @@ void* power_thread(void* arg)
             memcpy(&_globalPowerInfo._power_info,
             &_globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerInfo[(int)_globalPowerMangerTemp->product_ch_addr-1],
             sizeof(PowerInfo));
-            if(_globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_AC ||
-                _globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_DC)
+            if(_globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_AC ||
+                _globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_DC)
             {
                 if (_chn<64)
                 {
@@ -244,7 +244,7 @@ void* power_thread(void* arg)
               case AC_SINGLE_B_TYPE:
                   {
                     //累加总电源信息
-                    _globalTotalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                    _globalTotalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product.id;
                     _globalTotalPowerInfo.product_ch_id = 0 ; //总电源通道信息为0
                     _globalTotalPowerInfo.product_status = 0 ;
                     _globalTotalPowerInfo._power_info.voltage =  _globalTotalPowerInfo._power_info.voltage > _globalPowerInfo._power_info.voltage ? _globalTotalPowerInfo._power_info.voltage : _globalPowerInfo._power_info.voltage;
@@ -255,7 +255,7 @@ void* power_thread(void* arg)
                     _globalTotalPowerInfo._power_info.factor = _globalTotalPowerInfo._power_info.factor > _globalPowerInfo._power_info.factor ? _globalTotalPowerInfo._power_info.factor : _globalPowerInfo._power_info.factor;
 
                     //补全信息
-                    _globalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                    _globalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product.id;
                     _globalPowerInfo.product_ch_id = _globalPowerMangerTemp->product_ch_id ;
                     _globalPowerInfo.product_status = _globalPowerInfo._power_info.status ;
 
@@ -318,7 +318,7 @@ void* power_thread(void* arg)
                         if(_globalPowerWarningInfo.w_consumption)dev_Alarm_send_message(_globalDeviceManager,_globalPowerMangerTemp,WARNING_P_UP);
                     }
                     //动作
-                    if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B)
+                    if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)
                     {
                         GlobalTreeACManager *_pTreeACPowerPhData = NULL;
                         memset(&_globalPowerInfo._power_info, 0, sizeof(_globalPowerInfo._power_info));
@@ -326,7 +326,7 @@ void* power_thread(void* arg)
                         list_for_each_entry(_pTreeACPowerMangerTemp, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
                         {
                             //筛选控制中的数据
-                            if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B && _pTreeACPowerMangerTemp->product_ph_outputStatus == 2)
+                            if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B && _pTreeACPowerMangerTemp->product_ph_outputStatus == 2)
                             {
                                 continue;
                             }
@@ -469,11 +469,11 @@ void* power_thread(void* arg)
                     _globalPowerMangerTemp->product_ch_status = _globalPowerInfo._power_info.status ;
 
                     //累加总电源信息
-                    _globalTotalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                    _globalTotalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product.id;
                     _globalTotalPowerInfo.product_ch_id = 0 ; //总电源通道信息为0
                     _globalTotalPowerInfo.product_status = 0 ;
                     //补全信息
-                    _globalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                    _globalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product.id;
                     _globalPowerInfo.product_ch_id = _globalPowerMangerTemp->product_ch_id ;
 
                     gettimeofday(&tv, NULL);
@@ -569,7 +569,7 @@ void* power_thread(void* arg)
                     int k = 0;
                     list_for_each_entry(_pTreeACPowerMangerTemp, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
                     {
-                        if (__globalDeviceManage._globalDevInfo.product_pwr_type==SmartPDU_Tree_AC_One&&_pTreeACPowerMangerTemp->product_ph_outputStatus==2)
+                        if (__globalDeviceManage._globalDevInfo.product.pwr_type==SmartPDU_Tree_AC_One&&_pTreeACPowerMangerTemp->product_ph_outputStatus==2)
                         {
                             continue;
                         }                        
@@ -691,11 +691,11 @@ void* power_thread(void* arg)
                      }
 
                     //累加总电源信息
-                    _globalTotalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                    _globalTotalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product.id;
                     _globalTotalPowerInfo.product_ch_id = 0 ; //总电源通道信息为0
                     _globalTotalPowerInfo.product_status = 0 ;
                     //补全信息
-                    _globalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                    _globalPowerInfo.product_id = _globalDeviceManager->_globalDevInfo.product.id;
                     _globalPowerInfo.product_ch_id = _globalPowerMangerTemp->product_ch_id ;
 
                     gettimeofday(&tv, NULL);
@@ -854,8 +854,8 @@ void* power_thread(void* arg)
         }
 
         //all 
-        if(__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_AC
-         || __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_DC)
+        if(__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_AC
+         || __globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_DC)
         {
             __globalDeviceManage.single_mmap->total_current = _globalTotalPowerInfo._power_info.current*1000;
             __globalDeviceManage.single_mmap->total_power = _globalTotalPowerInfo._power_info.power*1000;
@@ -864,12 +864,12 @@ void* power_thread(void* arg)
             // printf("total_valtage = %d  consumer = %d power = %d\n",__globalDeviceManage.single_mmap->total_valtage,
             //         __globalDeviceManage.single_mmap->total_current
             //         ,__globalDeviceManage.single_mmap->total_power);
-            __globalDeviceManage.single_mmap->dev_chn = __globalDeviceManage._globalDevInfo.product_pwr_type << 8 | _chn;
+            __globalDeviceManage.single_mmap->dev_chn = __globalDeviceManage._globalDevInfo.product.pwr_type << 8 | _chn;
 
         }
         //输入数据再处理(三项)
         //memset(_pTreeACPowerMangerTemp,0,sizeof(GlobalTreeACManager));
-        if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree || __globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
+        if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree || __globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One)
         {
             _pTreeACPowerMangerTemp = NULL;
             list_for_each_entry(_pTreeACPowerMangerTemp, &_globalDeviceManager->_globalPowerManger.list_Tree_AC, list_Tree_AC)
@@ -931,10 +931,10 @@ void* power_thread(void* arg)
             }
             if (__globalDeviceManage.triphasic_mmap)
             {
-                __globalDeviceManage.triphasic_mmap->dev_chn = __globalDeviceManage._globalDevInfo.product_pwr_type << 8 | _chn;
+                __globalDeviceManage.triphasic_mmap->dev_chn = __globalDeviceManage._globalDevInfo.product.pwr_type << 8 | _chn;
             }
         }
-        if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B)
+        if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)
         {
             _pTreeACPowerMangerTemp = NULL;
             list_for_each_entry(_pTreeACPowerMangerTemp, &_globalDeviceManager->_globalPowerManger.list_Tree_AC, list_Tree_AC)
@@ -975,7 +975,7 @@ void* power_thread(void* arg)
             }
             if (_globalDeviceManager->triphasic_mmap)
             {
-                __globalDeviceManage.triphasic_mmap->dev_chn = __globalDeviceManage._globalDevInfo.product_pwr_type << 8 | _chn;
+                __globalDeviceManage.triphasic_mmap->dev_chn = __globalDeviceManage._globalDevInfo.product.pwr_type << 8 | _chn;
             }
         }
 
@@ -1302,7 +1302,7 @@ void* sensor_thread(void* arg)
 {
 #if 1
    GlobalDeviceManager *_globalDeviceManager = (GlobalDeviceManager *)&__globalDeviceManage;
-    unsigned int samp_time = _globalDeviceManager->_globalDevInfo.product_samp_time;
+    unsigned int samp_time = _globalDeviceManager->_globalDevInfo.product.samp_time;
     GlobalSensorManger *_globalSensorMangerTemp;
     int ret = 0;
     GlobalSensorInfo _globalSensorInfo;
@@ -1359,7 +1359,7 @@ void* sensor_thread(void* arg)
             t = localtime(&tv.tv_sec);
             sprintf(_globalSensorInfo.samp_time, "%04d-%02d-%02d %02d:%02d:%02d.%03ld",
                     t->tm_year + 1900, t->tm_mon+1, t->tm_mday, t->tm_hour, t->tm_min, t->tm_sec, tv.tv_usec / 1000);
-            _globalSensorInfo.product_id = __globalDeviceManage._globalDevInfo.product_id;
+            _globalSensorInfo.product_id = __globalDeviceManage._globalDevInfo.product.id;
             _globalSensorInfo.sensor_id = _globalSensorMangerTemp->sensor_id;
             _globalSensorInfo.product_log_time=_globalSensorMangerTemp->Cur_sensor_info.product_log_time;
             switch (_globalSensorMangerTemp->sensor_type)
@@ -1393,8 +1393,8 @@ void* sensor_thread(void* arg)
 
                 _globalSensorInfo.val1 = temperature;
                 _globalSensorInfo.val2 = humidity;
-                if(_globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_AC ||
-                _globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_DC)
+                if(_globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_AC ||
+                _globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_DC)
                 {
                     if(_globalDeviceManager->single_mmap) {
                         _globalDeviceManager->single_mmap->total_temp.temperature = _globalSensorInfo.val1 *100;
@@ -1488,7 +1488,7 @@ void* sensor_thread(void* arg)
             strftime(_globalSensorMangerTemp->Cur_sensor_info.samp_time, sizeof(_globalSensorMangerTemp->Cur_sensor_info.samp_time), "%Y-%m-%d %H:%M:%S", t);
             sprintf(buffer, ".%03ld", tv.tv_usec / 1000);
             strcat(_globalSensorMangerTemp->Cur_sensor_info.samp_time, buffer);*/
-            if (difftime(now, _globalSensorMangerTemp->Cur_sensor_info.product_log_time) > (_globalDeviceManager->_globalDevInfo.product_save_time / 1000))
+            if (difftime(now, _globalSensorMangerTemp->Cur_sensor_info.product_log_time) > (_globalDeviceManager->_globalDevInfo.product.save_time / 1000))
             {
                 _globalSensorMangerTemp->Cur_sensor_info.product_log_time = now;
                 // 插入数据库
@@ -1543,12 +1543,11 @@ void* shm_thread(void *arg)
                 memcpy(&pShmData, _globalDeviceManager->g_shm_Data, sizeof(smartPDU_shm_data));
                 if (_globalDeviceManager->g_shm_Data->bPDUSet > 0) // 已更新
                 {
-                    int nselect = _globalDeviceManager->g_shm_Data->nSelectPowerCH;
-                    int nIndex = 0;
-                    if (nselect == 0)
+                    int nselect=_globalDeviceManager->g_shm_Data->nSelectPowerCH;
+                    int nIndex=0;
+                    if (nselect==0)
                     {
                         //_globalDeviceManager->_globalPowerManger;
-
                         _globalDeviceManager->g_shm_Data->fV = _globalDeviceManager->_globalPowerManger._PowerInfo.voltage;
                         _globalDeviceManager->g_shm_Data->fA = _globalDeviceManager->_globalPowerManger._PowerInfo.current;
                         _globalDeviceManager->g_shm_Data->fW = _globalDeviceManager->_globalPowerManger._PowerInfo.power;
@@ -1560,72 +1559,36 @@ void* shm_thread(void *arg)
                     }
                     else
                     {
-                        int nselectPH = _globalDeviceManager->g_shm_Data->nSelectPh;
                         list_for_each_entry(_globalPowerMangerTemp, &_globalDeviceManager->_globalPowerManger.list, list)
                         {
                             nIndex += 1;
                             if (nselect <= nIndex)
-                                break;
-                        }
-                        if ((_globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree||
-                        _globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One ||
-                        _globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B) && 
-                        _globalDeviceManager->g_shm_Data->bT_ACType == 1&&nselectPH>0)
-                        {
-                            nIndex=0;
-                            GlobalTreeACManager *_pTreeACPowerPhData = NULL;
-                            int k = 0;
-                            list_for_each_entry(_pTreeACPowerPhData, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
-                            {
-                                k += 1;
-                                if (nselectPH <= nIndex)
-                                    break;
-                            }
-                            if (_pTreeACPowerPhData)
-                            {
-                                _globalDeviceManager->g_shm_Data->fV = _pTreeACPowerPhData->_PowerInfo.voltage;
-                                _globalDeviceManager->g_shm_Data->fA = _pTreeACPowerPhData->_PowerInfo.current;
-                                _globalDeviceManager->g_shm_Data->fW = _pTreeACPowerPhData->_PowerInfo.power;
-                                _globalDeviceManager->g_shm_Data->fF = _pTreeACPowerPhData->_PowerInfo.factor;
-                                _globalDeviceManager->g_shm_Data->fS = _pTreeACPowerPhData->_PowerInfo.consumption;
-                                _globalDeviceManager->g_shm_Data->nStatus = _pTreeACPowerPhData->_PowerInfo.status;
-                                _globalDeviceManager->g_shm_Data->fT = _globalDeviceManager->g_modebus_read.temprature;
-                                _globalDeviceManager->g_shm_Data->fH = _globalDeviceManager->g_modebus_read.humidity;
-                            }
-                        }
-                        else
-                        {
-                            _globalDeviceManager->g_shm_Data->fV = _globalPowerMangerTemp->_PowerInfo.voltage;
-                            _globalDeviceManager->g_shm_Data->fA = _globalPowerMangerTemp->_PowerInfo.current;
-                            _globalDeviceManager->g_shm_Data->fW = _globalPowerMangerTemp->_PowerInfo.power;
-                            _globalDeviceManager->g_shm_Data->fF = _globalPowerMangerTemp->_PowerInfo.factor;
-                            _globalDeviceManager->g_shm_Data->fS = _globalPowerMangerTemp->_PowerInfo.consumption;
-                            _globalDeviceManager->g_shm_Data->nStatus = _globalPowerMangerTemp->_PowerInfo.status;
-                            _globalDeviceManager->g_shm_Data->fT = _globalDeviceManager->g_modebus_read.temprature;
-                            _globalDeviceManager->g_shm_Data->fH = _globalDeviceManager->g_modebus_read.humidity;
+                            break;
                         }
+                        // GlobalPowerInfo _globalPowerInfo;
+                        // memset(&_globalPowerInfo._power_info, 0, sizeof(PowerInfo));
+                        // memcpy(&_globalPowerInfo._power_info,
+                        //        &_globalDeviceManager->_all_ctrl_board[0]._PowerInfo[0],
+                        //        sizeof(PowerInfo));
+                        _globalDeviceManager->g_shm_Data->fV = _globalPowerMangerTemp->_PowerInfo.voltage;
+                        _globalDeviceManager->g_shm_Data->fA = _globalPowerMangerTemp->_PowerInfo.current;
+                        _globalDeviceManager->g_shm_Data->fW = _globalPowerMangerTemp->_PowerInfo.power;
+                        _globalDeviceManager->g_shm_Data->fF = _globalPowerMangerTemp->_PowerInfo.factor;
+                        _globalDeviceManager->g_shm_Data->fS = _globalPowerMangerTemp->_PowerInfo.consumption;
+                        _globalDeviceManager->g_shm_Data->nStatus = _globalPowerMangerTemp->_PowerInfo.status;
+                        _globalDeviceManager->g_shm_Data->fT = _globalDeviceManager->g_modebus_read.temprature;
+                        _globalDeviceManager->g_shm_Data->fH = _globalDeviceManager->g_modebus_read.humidity;
                     }
                 }
                 else if (_globalDeviceManager->g_shm_Data->bPDUSet == 0)
                 { // 等于于0则更新pdu数据
-                    int nMaxCh = 0;
+                    int nMaxCh=0;
                     list_for_each_entry(_globalPowerMangerTemp, &_globalDeviceManager->_globalPowerManger.list, list)
                     {
-                        nMaxCh += 1;
-                    }
-                    _globalDeviceManager->g_shm_Data->nMaxCh = nMaxCh;
-                    if ((_globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree||
-                        _globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One ||
-                        _globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B))
-                    {
-                        _globalDeviceManager->g_shm_Data->bT_ACType = 1;
-                    }
-                    else
-                    {
-                        _globalDeviceManager->g_shm_Data->bT_ACType = 0;
+                        nMaxCh+=1;
                     }
-
-                    _globalDeviceManager->g_shm_Data->bPDUSet = 1;
+                     _globalDeviceManager->g_shm_Data->nMaxCh = nMaxCh;
+                     _globalDeviceManager->g_shm_Data->bPDUSet = 1;
                 }
                 else
                 { // 小于0 则主程序已析构退出重新等待加载
@@ -1765,18 +1728,10 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
         return -1 ;
     }
     log_i("database %s open ok.\n", path);
-    
-    //查询设备总体参数
-    if(dev_get_device_info(_globalDeviceManager->db,&_globalDeviceManager->_globalDevInfo)!=0)
-    {
-        log_e("get device info error.\n");
-        return -1 ;
-    }
-    log_i("get device info ok.\n");
 
 
-    if(_globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_AC ||
-        _globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_DC)       // single AC
+    if(_globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_AC ||
+        _globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_DC)       // single AC
     {
         _globalDeviceManager->single_mmap =(cascade_single_mmap_t*)malloc(sizeof(cascade_single_mmap_t));
         if(_globalDeviceManager->single_mmap==NULL)
@@ -1811,13 +1766,13 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     memset(_globalDeviceManager->_globalPowerManger.global_over_manager, 0, sizeof(GlobalOverManager));
     //查询是否存在全部通道信息
     ret = dev_get_power_manage_info(_globalDeviceManager->db,
-                                    _globalDeviceManager->_globalDevInfo.product_id,0,
+                                    _globalDeviceManager->_globalDevInfo.product.id,0,
                                     0, //1*8+j
                                     &_globalDeviceManager->_globalPowerManger);
     //未查询到信息 则插入
     if(ret==-1)
     {
-        _globalDeviceManager->_globalPowerManger.product_id = _globalDeviceManager->_globalDevInfo.product_id;
+        _globalDeviceManager->_globalPowerManger.product_id = _globalDeviceManager->_globalDevInfo.product.id;
         _globalDeviceManager->_globalPowerManger.product_saddr = 0 ;
         _globalDeviceManager->_globalPowerManger.product_ch_id = 0;
         _globalDeviceManager->_globalPowerManger.product_ch_addr = 0;
@@ -1834,7 +1789,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
         _globalDeviceManager->_globalPowerManger.global_over_manager->product_vol_over_upper_threshold_ctrl = ALARM_CTRL_ALARM_ONLY;
 
         if(dev_insert_power_manage_info(_globalDeviceManager->db,
-                                    _globalDeviceManager->_globalDevInfo.product_id,
+                                    _globalDeviceManager->_globalDevInfo.product.id,
                                     0,
                                     &_globalDeviceManager->_globalPowerManger)!=0)
         {
@@ -1849,9 +1804,9 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
 
     INIT_LIST_HEAD(&_globalDeviceManager->_globalPowerManger.list_Tree_AC);
     
-    if (_globalDeviceManager->_globalDevInfo.product_pwr_type==SmartPDU_Tree_AC_Tree
-    ||_globalDeviceManager->_globalDevInfo.product_pwr_type==SmartPDU_Tree_AC_One
-    ||_globalDeviceManager->_globalDevInfo.product_pwr_type==SmartPDU_Tree_AC_One_B
+    if (_globalDeviceManager->_globalDevInfo.product.pwr_type==SmartPDU_Tree_AC_Tree
+    ||_globalDeviceManager->_globalDevInfo.product.pwr_type==SmartPDU_Tree_AC_One
+    ||_globalDeviceManager->_globalDevInfo.product.pwr_type==SmartPDU_Tree_AC_One_B
     )
     {
         __globalDeviceManage.nTreeACLshow=0;
@@ -1879,21 +1834,21 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
             }
             memset(_globalTACManager->global_over_manager, 0, sizeof(GlobalOverManager));
             ret = dev_get_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                 _globalDeviceManager->_globalDevInfo.product_id, 0,TreeACindex + 1,
+                                                 _globalDeviceManager->_globalDevInfo.product.id, 0,TreeACindex + 1,
                                                  TreeACindex, // 1*8+j
                                                  _globalTACManager);
             _globalTACManager->product_ch_addr = TreeACindex + 1;
             // 未查询到信息 则插入
             if (ret == -1)
             {
-                _globalTACManager->product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                _globalTACManager->product_id = _globalDeviceManager->_globalDevInfo.product.id;
                 _globalTACManager->product_saddr = 0;
                 _globalTACManager->product_ch_id = chn;
                 _globalTACManager->product_ch_addr = TreeACindex + 1;
                 _globalTACManager->product_ph_id = nTac_chn;
                 _globalTACManager->product_ph_type = (TreeACindex + 3) % 3;
                 if (dev_insert_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                      _globalDeviceManager->_globalDevInfo.product_id,
+                                                      _globalDeviceManager->_globalDevInfo.product.id,
                                                       _globalTACManager->product_ch_id,
                                                       _globalTACManager) != 0)
                 {
@@ -1967,7 +1922,6 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     chn = 1 ;
     nTac_chn=3;
 
-    //int nGroups=CHANNEL_DELAY_SEC;
     char strLog[200]={"MODBUS"};
     dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],strLog);
     log_d("GCPDU init begin!");
@@ -1981,7 +1935,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     /////////////////////////////////////////
     ///todo:此信息需要和数据库更新以后在关联
     ret = dev_get_sensor_manage_info(_globalDeviceManager->db,
-                                    _globalDeviceManager->_globalDevInfo.product_id,
+                                    _globalDeviceManager->_globalDevInfo.product.id,
                                     &_globalDeviceManager->_globalSensorManger);
     if(ret!=0)
     {
@@ -1991,7 +1945,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
         log_d("get sensor info ok.");
 
     dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],"sensor");
-    ret =dev_get_breaker_manage_info(_globalDeviceManager->db,_globalDeviceManager->_globalDevInfo.product_id,
+    ret =dev_get_breaker_manage_info(_globalDeviceManager->db,_globalDeviceManager->_globalDevInfo.product.id,
                 &_globalDeviceManager->g_new_global_breaker);
 
     if(ret!=0)
@@ -2022,7 +1976,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
         strcpy(_globalNTPManager.ntpaddress, "119.28.183.184");
         strcpy(_globalNTPManager.ntpName, "百度NTP");
         _globalNTPManager.port = 123;
-        _globalNTPManager.product_id = _globalDeviceManager->_globalDevInfo.product_id;
+        _globalNTPManager.product_id = _globalDeviceManager->_globalDevInfo.product.id;
         time_t t = time(NULL);
         struct tm* ptm = localtime(&t);
         sprintf(_globalNTPManager.time, "%04d-%02d-%02d %02d:%02d:%02d", ptm->tm_year + 1900, ptm->tm_mon + 1, ptm->tm_mday, ptm->tm_hour, ptm->tm_min, ptm->tm_sec);

La diferencia del archivo ha sido suprimido porque es demasiado grande
+ 142 - 139
pro/src/appweb_handle.c


+ 36 - 57
pro/src/cascade.c

@@ -22,13 +22,6 @@
 #define MB_MAX_LEN      250
 
 
-//#define MB_PARA_SIM
-//#define SLAVE_DATA_SIM
-
-
-#ifdef MB_PARA_SIM
-    #define MB_MASTER       0
-#endif
 
 typedef struct {
     
@@ -67,21 +60,7 @@ static inline GlobalDeviceManager* get_dm2(void)
 }
 static inline ModbusInfo_t *get_mb(void)
 {
-#ifdef MB_PARA_SIM
-    static ModbusInfo_t mbinfo={
-    #if (MB_MASTER==1)
-        .product_modbus_type=0,
-    #else
-        .product_modbus_type=1,
-    #endif
-        .product_modbus_addr=1,
-        .product_modbus_baud=115200,
-    };
-
-    return &mbinfo;
-#else
-    return &get_dm()->_globalDevInfo._gmodbus_info;
-#endif
+    return &get_dm()->_globalDevInfo.cascade;
 }
 static int slave_init(cascade_handle_t *cas)
 {
@@ -145,9 +124,9 @@ static int slave_get_info(cascade_handle_t *cas)
     slave_info_t *info=&cas->sInfo;
 
     info->cnt=0;
-    info->prod.product_type = dm->_globalDevInfo.product_type;
-    info->prod.product_pwr_type = dm->_globalDevInfo.product_pwr_type;
-    info->prod.product_id = dm->_globalDevInfo.product_id;
+    info->prod.product_type = dm->_globalDevInfo.product.type;
+    info->prod.product_pwr_type = dm->_globalDevInfo.product.pwr_type;
+    info->prod.product_id = dm->_globalDevInfo.product.id;
 
     if(!list_empty(&dm->_globalPowerManger.list_Tree_AC)) {
         cnt2 = 0;
@@ -183,7 +162,7 @@ static int slave_get_info(cascade_handle_t *cas)
             info->ch[cnt].stop_delay  = tmp->product_ch_stop_delay;
 
             info->ch[cnt].chinfo = tmp->_PowerInfo;
-            if (tmp->product_ch_type==TREE_AC_TYPE||dm->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B) {
+            if (tmp->product_ch_type==TREE_AC_TYPE||dm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B) {
                 cnt2 = 0;
                 list_for_each_entry(tmp3, &tmp->list_Tree_AC, list_Tree_AC)
                 {
@@ -248,7 +227,7 @@ static int get_pwr_info(int chId, GlobalPowerManger *power)
     list_for_each_entry(tmp, &dm->_globalPowerManger.list, list)
     {
         if(tmp->product_ch_id==chId) {
-            power->product_id = dm->_globalDevInfo.product_id;
+            power->product_id = dm->_globalDevInfo.product.id;
             power->product_ch_id = tmp->product_ch_id;
             strcpy(power->product_ch_name, tmp->product_ch_name);
             power->product_ch_type = tmp->product_ch_type;
@@ -284,7 +263,7 @@ static int slave_breaker_update(cascade_breaker_update_t *data)
                     strcpy(temp->breaker_switch_name,data->switch_name);
                     strcpy(temp->breaker_chns_name,data->breaker_chns);
                     dev_update_breaker_genera_manage(dm->db,
-                    dm->_globalDevInfo.product_id,data->switch_id,temp);
+                    dm->_globalDevInfo.product.id,data->switch_id,temp);
                     ret = 0;
                     break;
                 }
@@ -318,7 +297,7 @@ static int slave_breaker_delete(cascade_braeker_delete_t *data)
                 }
                 if(temp->breaker_id == data->switch_id)
                 {
-                    dev_delete_breaker_manage(dm->db,dm->_globalDevInfo.product_id,data->switch_id);
+                    dev_delete_breaker_manage(dm->db,dm->_globalDevInfo.product.id,data->switch_id);
                     list_del(&temp->list);
                     free(temp);
                     if(!list_empty(&dm->g_new_global_breaker.list))
@@ -371,7 +350,7 @@ static int slave_breaker_add(cascade_breaker_add_t *data)
         }
         GlobalBreakerManager *breakerManager = (GlobalBreakerManager*) malloc(sizeof(GlobalBreakerManager));
         memset(breakerManager,0,sizeof(GlobalBreakerManager));
-        breakerManager->product_id = __globalDeviceManage._globalDevInfo.product_id;
+        breakerManager->product_id = __globalDeviceManage._globalDevInfo.product.id;
         breakerManager->breaker_gather_addr = data->cjdz;
         strcpy(breakerManager->breaker_com,data->com);
         strcpy(breakerManager->breaker_gather_type,data->cjfs);
@@ -448,7 +427,7 @@ static int slave_save(cascade_handle_t *cas)
         LOGE("____ get_pwr_info failed\n");
         return -1;
     }
-    r = dev_update_power_manage_genera_info(dm->db, dm->_globalDevInfo.product_id, cas->cmd.chId, &power);
+    r = dev_update_power_manage_genera_info(dm->db, dm->_globalDevInfo.product.id, cas->cmd.chId, &power);
 
     return r;
 }
@@ -901,11 +880,11 @@ static int power_init(cascade_handle_t *cas)
     GlobalDeviceManager *dm=get_dm();
     GlobalDeviceManager *dm2=get_dm2();
 
-    dm2->_globalDevInfo.product_pwr_type = dm->_globalDevInfo.product_pwr_type;
-    dm2->_globalDevInfo.product_id = dm->_globalDevInfo.product_id;
-    strcpy(dm2->_globalDevInfo.product_name, dm->_globalDevInfo.product_name);
-    strcpy(dm2->_globalDevInfo.product_number, dm->_globalDevInfo.product_number);
-    strcpy(dm2->_globalDevInfo.product_status, dm->_globalDevInfo.product_status);
+    dm2->_globalDevInfo.product.pwr_type = dm->_globalDevInfo.product.pwr_type;
+    dm2->_globalDevInfo.product.id = dm->_globalDevInfo.product.id;
+    strcpy(dm2->_globalDevInfo.product.name, dm->_globalDevInfo.product.name);
+    strcpy(dm2->_globalDevInfo.product.number, dm->_globalDevInfo.product.number);
+    strcpy(dm2->_globalDevInfo.product.status, dm->_globalDevInfo.product.status);
     
     INIT_LIST_HEAD(&dm2->_globalPowerManger.list);
     INIT_LIST_HEAD(&dm2->_globalPowerManger.list_Tree_AC);
@@ -956,7 +935,7 @@ static int power_clear(cascade_handle_t *cas)
                 continue;
             }
 
-            if (tmp->product_ch_type==TREE_AC_TYPE||__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B) {
+            if (tmp->product_ch_type==TREE_AC_TYPE||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B) {
                 if(list_empty(&tmp->list_Tree_AC)) {
                     continue;
                 }
@@ -1019,7 +998,7 @@ static int power_add(cascade_handle_t *cas)
     cascade_lock();
     power_clear(cas);
 
-    dm2->_globalDevInfo.product_id = cur_dev_addr;
+    dm2->_globalDevInfo.product.id = cur_dev_addr;
     //插入总数据
     if(info->prod.product_pwr_type==SmartPDU_Tree_AC_Tree ||
        info->prod.product_pwr_type==SmartPDU_Tree_AC_One ||
@@ -1572,9 +1551,9 @@ static void* cascade_thread(void *arg)
     cascade_handle_t *cas=(cascade_handle_t*)h->arg;
     ModbusInfo_t *info=&cas->mInfo;
     
-    LOGD("__ cascade %s\n", info->product_modbus_type?"slave":"master");
+    LOGD("__ cascade %s\n", (info->mode==MODBUS_MASTER)?"master":"slave");
     while(h->quit==0) {
-        if(info->product_modbus_type==0) {      //主模
+        if(info->mode==MODBUS_MASTER) {      //主模
             cascade_lock();
             r = master_query(cas);
             cascade_unlock();
@@ -1597,7 +1576,7 @@ static void* scan_thread(void *arg)
     ModbusInfo_t *info=&cas->mInfo;
     
     while(h->quit==0) {
-        if(info->product_modbus_type==0) {  //master
+        if(info->mode==MODBUS_MASTER) {  //master
             r = master_scan(cas);
         }
         sleep(1);
@@ -1657,7 +1636,7 @@ static void* cmd_thread(void *arg)
     else {
         sprintf(temp,"$关闭$|$所有$|$通道$");
     }
-    dev_insert_alarm_ctrl(dm->db, dm->_globalDevInfo.product_id,ALARM_TYPE_OPRATION,temp);
+    dev_insert_alarm_ctrl(dm->db, dm->_globalDevInfo.product.id,ALARM_TYPE_OPRATION,temp);
     free(pcmd);
 
     pthread_exit(NULL);
@@ -1698,7 +1677,7 @@ static void* cmd_NF_thread(void *arg)
     else {
         sprintf(temp, "$关闭$|$通道$|%d Naught wire!", pcmd->chId);
     }
-    dev_insert_alarm_ctrl(dm->db, dm->_globalDevInfo.product_id,ALARM_TYPE_OPRATION,temp);
+    dev_insert_alarm_ctrl(dm->db, dm->_globalDevInfo.product.id,ALARM_TYPE_OPRATION,temp);
     free(pcmd);
 
     pthread_exit(NULL);
@@ -1712,16 +1691,16 @@ static int set_modbus(cascade_handle_t *cas, ModbusInfo_t *info)
     }
     cas->inited = 0;
     cas->mInfo = *info;
-    //LOGD("master init modbus:  port: %s, type: %d, baud: %d\n", CASCADE_MODBUS_PORT, info->product_modbus_type, info->product_modbus_baud);
+    //LOGD("master init modbus:  port: %s, type: %d, baud: %d\n", CASCADE_MODBUS_PORT, info->mode, info->baudrate);
 
-    r = mb_init(cas, CASCADE_MODBUS_PORT, info->product_modbus_type,
-                  info->product_modbus_addr, info->product_modbus_baud);
+    r = mb_init(cas, CASCADE_MODBUS_PORT, info->mode,
+                  info->addr, info->baudrate);
     if(r!=0) {
         LOGE("cascade modbus init error.\n");
         return -1;
     }
     cas->inited = 1;
-    if (cas->mInfo.product_modbus_type)
+    if (cas->mInfo.mode==MODBUS_SLAVE)
     {
         for (size_t i = 1; i < CASCADE_MAX; i++)
         {
@@ -1786,7 +1765,7 @@ int cascade_deinit(void)
 int cascade_set_modbus(ModbusInfo_t *info)
 {
     cascade_handle_t *cas=&casHandle;
-    if(!info || info->product_modbus_addr>CASCADE_MAX) {
+    if(!info || info->addr>CASCADE_MAX) {
         return -1;
     }
 
@@ -1880,10 +1859,10 @@ int cascade_get_ch(_OverChnPwrAckInfo *ch)
     GlobalDeviceManager* dm2=get_dm2();
     list_for_each_entry(tmp, &dm2->_globalPowerManger.list, list)
     {
-        if (tmp->product_ch_type==TREE_AC_TYPE||dm2->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B){
+        if (tmp->product_ch_type==TREE_AC_TYPE||dm2->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B){
             int nStatus=-1;//-1则状态不变,0、1则是子状态
             //判断是否三相单输出情况下
-            if(tmp->product_ch_type==TREE_AC_TYPE||dm2->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B) {
+            if(tmp->product_ch_type==TREE_AC_TYPE||dm2->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B) {
                 list_for_each_entry(tmp3, &tmp->list_Tree_AC, list_Tree_AC) {
                     if (2 == tmp3->product_ph_outputType &&1==tmp3->product_ph_outputStatus)
                     {//单项并且状态为输出
@@ -1899,9 +1878,9 @@ int cascade_get_ch(_OverChnPwrAckInfo *ch)
                     LOGE("pch malloc err.\n");
                     return -1;
                 }
-                pch->product_name = dm2->_globalDevInfo.product_name;
-                pch->product_number = dm2->_globalDevInfo.product_number;
-                pch->product_id = dm2->_globalDevInfo.product_id;
+                pch->product_name = dm2->_globalDevInfo.product.name;
+                pch->product_number = dm2->_globalDevInfo.product.number;
+                pch->product_id = dm2->_globalDevInfo.product.id;
                 pch->productChName = tmp->product_ch_name;
                 pch->productChId = tmp->product_ch_id;
                 pch->status = tmp->_PowerInfo.status;
@@ -1921,7 +1900,7 @@ int cascade_get_ch(_OverChnPwrAckInfo *ch)
                 pch->ph_consumption = tmp3->_PowerInfo.consumption;
                 pch->ph_outputType   = tmp3->product_ph_outputType;
                 pch->ph_outputStatus = tmp3->product_ph_outputStatus;
-                if ((dm2->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One||dm2->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B) && 
+                if ((dm2->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One||dm2->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B) && 
                     tmp3->product_ph_outputType == 2 && tmp3->product_ph_outputStatus == 2) // 如果是单项输出并且则非输出通道数据为0
                 { 
                     // 3-1模式 单项状态,不输出则数据为空
@@ -1948,9 +1927,9 @@ int cascade_get_ch(_OverChnPwrAckInfo *ch)
                 return -1;
             }
             // 填数据
-            pch->product_name = dm2->_globalDevInfo.product_name;
-            pch->product_number = dm2->_globalDevInfo.product_number;
-            pch->product_id = dm2->_globalDevInfo.product_id;
+            pch->product_name = dm2->_globalDevInfo.product.name;
+            pch->product_number = dm2->_globalDevInfo.product.number;
+            pch->product_id = dm2->_globalDevInfo.product.id;
             pch->productChName = tmp->product_ch_name;
             pch->productChId = tmp->product_ch_id;
             pch->status = tmp->_PowerInfo.status;

+ 18 - 18
pro/src/cascade_slave.c

@@ -134,8 +134,8 @@ int cascade_slave_init(void)
     slave_handle_t *sh=&slHandle;
     GlobalDeviceManager* mgr=get_dm();
 
-    if(mgr->_globalDevInfo.product_pwr_type == SmartPDU_AC ||
-        mgr->_globalDevInfo.product_pwr_type == SmartPDU_DC)       // single AC
+    if(mgr->_globalDevInfo.product.pwr_type == SmartPDU_AC ||
+        mgr->_globalDevInfo.product.pwr_type == SmartPDU_DC)       // single AC
     {
         if(sh->map)
         {
@@ -188,8 +188,8 @@ static void slave_read(slave_handle_t *sh, uint32_t addr,int num,uint32_t reg_ty
 {
     GlobalDeviceManager* mgr=get_dm();
   
-    if(mgr->_globalDevInfo.product_pwr_type == SmartPDU_AC || 
-            mgr->_globalDevInfo.product_pwr_type == SmartPDU_DC){    
+    if(mgr->_globalDevInfo.product.pwr_type == SmartPDU_AC || 
+            mgr->_globalDevInfo.product.pwr_type == SmartPDU_DC){    
         if(addr >= DEV_CHN_REG && addr <= ALL_SET_SWITCH_REG)
         {
             if(type == TYPE_U16)
@@ -326,8 +326,8 @@ void cascade_slave_write(uint32_t addr, uint16_t val)
     GlobalDeviceManager* mgr=get_dm();
     uint16_t buff[128] = {0};
  
-    if(mgr->_globalDevInfo.product_pwr_type == SmartPDU_AC 
-            || mgr->_globalDevInfo.product_pwr_type == SmartPDU_DC)   
+    if(mgr->_globalDevInfo.product.pwr_type == SmartPDU_AC 
+            || mgr->_globalDevInfo.product.pwr_type == SmartPDU_DC)   
     {
         switch(addr)
         {
@@ -341,7 +341,7 @@ void cascade_slave_write(uint32_t addr, uint16_t val)
                             break;
                         if((start_chn+1) == _globalPowerMangerTemp->product_ch_id)
                         {
-                            if(mgr->_globalDevInfo.product_pwr_type == SmartPDU_AC){
+                            if(mgr->_globalDevInfo.product.pwr_type == SmartPDU_AC){
                                 _globalPowerMangerTemp->product_ch_start_delay=val;
                                 g_switch_set_ac_single_s_start_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_saddr,
                                                 _globalPowerMangerTemp->product_ch_addr,val);
@@ -372,7 +372,7 @@ void cascade_slave_write(uint32_t addr, uint16_t val)
                             break;
                         if((start_chn+1) == _globalPowerMangerTemp->product_ch_id)
                         {
-                            if(mgr->_globalDevInfo.product_pwr_type == SmartPDU_AC){
+                            if(mgr->_globalDevInfo.product.pwr_type == SmartPDU_AC){
                                   _globalPowerMangerTemp->product_ch_stop_delay=val;
                                 g_switch_set_ac_single_s_stop_time_delay(&__globalDeviceManage._globalRelaySampManger,_globalPowerMangerTemp->product_saddr,
                                                 _globalPowerMangerTemp->product_ch_addr,val);
@@ -453,9 +453,9 @@ void cascade_slave_write(uint32_t addr, uint16_t val)
                         int ret = 0;
 
                         _globalPowerMangerTemp->product_ch_start_delay = val;
-                        if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree
-                        ||__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One
-                        ||__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B
+                        if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree
+                        ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One
+                        ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B
                         )
                         {
                             printf("hwllo every one stop time !!!!\n");
@@ -493,9 +493,9 @@ void cascade_slave_write(uint32_t addr, uint16_t val)
                         int ret = 0;
 
                         _globalPowerMangerTemp->product_ch_stop_delay = val;
-                        if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree
-                        ||__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One
-                        ||__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B)
+                        if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree
+                        ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One
+                        ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)
                         {
                             ret = g_switch_set_t_ac_stop_time_delay(&__globalDeviceManage._globalRelaySampManger, 
                                                         _globalPowerMangerTemp->product_saddr, (_globalPowerMangerTemp->product_ch_addr - 1) * 3, val / 1000);
@@ -537,9 +537,9 @@ void cascade_slave_write(uint32_t addr, uint16_t val)
                         {
                             t_ac_CtrlType=_globalTACManager->product_ph_outputType;
                         }
-                        if (t_ac_CtrlType == 2&&(__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree
-                        ||__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One
-                        ||__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B))
+                        if (t_ac_CtrlType == 2&&(__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree
+                        ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One
+                        ||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B))
                         {
                             if(_globalPowerMangerTemp->product_ch_type == AC_SINGLE_S_TYPE || _globalPowerMangerTemp->product_ch_type == AC_SINGLE_B_TYPE)
                             {
@@ -606,7 +606,7 @@ void cascade_slave_write(uint32_t addr, uint16_t val)
                                 sts |= ENABLE_TAC_STIME;
                                 sts |= ENABLE_TAC_ETIME;
                             }*/
-                            if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
+                            if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One)
                             {
                                 g_switch_set_t_ac_phchn_ctrl(&__globalDeviceManage._globalRelaySampManger,
                                                                 _globalPowerMangerTemp->product_saddr,

+ 16 - 16
pro/src/common.c

@@ -26,20 +26,20 @@ MenuAuthority _GlobalMenuAuthority;
 void printf_global_device_info(GlobalDeviceInfo* _globalDeviceInfo)
 {
     log_d("******global device info********* ");
-    log_d("product_id:%d ", _globalDeviceInfo->product_id);
-    log_d("product_number:%s ", _globalDeviceInfo->product_number);
-    log_d("product_name:%s ", _globalDeviceInfo->product_name);
-    log_d("product_type:%d ", _globalDeviceInfo->product_type);
-    log_d("product_pwr_type:%d ", _globalDeviceInfo->product_pwr_type);
-    log_d("product_version:%s ", _globalDeviceInfo->product_version);
-    log_d("product_count:%d ", _globalDeviceInfo->product_count);
-    log_d("product_samp_time:%d ", _globalDeviceInfo->product_samp_time);
-    log_d("product_save_time:%d ", _globalDeviceInfo->product_save_time);   
-
-    log_d("product_modbus_type:%d ", _globalDeviceInfo->_gmodbus_info.product_modbus_type);
-    log_d("product_modbus_baud:%d ", _globalDeviceInfo->_gmodbus_info.product_modbus_baud);
-    log_d("product_modbus_addr:%d ", _globalDeviceInfo->_gmodbus_info.product_modbus_addr);
-    log_d("product_relay_port:%s ",  _globalDeviceInfo->_modbus_info.product_relay_ctrl_port);
+    log_d("product.id:%d ", _globalDeviceInfo->product.id);
+    log_d("product.number:%s ", _globalDeviceInfo->product.number);
+    log_d("product.name:%s ", _globalDeviceInfo->product.name);
+    log_d("product.ype:%d ", _globalDeviceInfo->product.type);
+    log_d("product.pwr_type:%d ", _globalDeviceInfo->product.pwr_type);
+    log_d("product.version:%s ", _globalDeviceInfo->product.version);
+    log_d("product.count:%d ", _globalDeviceInfo->product.count);
+    log_d("product.samp_time:%d ", _globalDeviceInfo->product.samp_time);
+    log_d("product.save_time:%d ", _globalDeviceInfo->product.save_time);   
+
+    log_d("cascade.mode:%d ", _globalDeviceInfo->cascade.mode);
+    log_d("cascade.addr:%d ", _globalDeviceInfo->cascade.addr);
+    log_d("cascade.baudrate:%d ", _globalDeviceInfo->cascade.baudrate);
+    log_d("relay.path:%s ",  _globalDeviceInfo->relay.path);
     log_d("******************************** ");
 }
 
@@ -58,7 +58,7 @@ void printf_global_power_manage_info(GlobalPowerManger* _globalPowerManger)
     printf("product_vol_upper_enable:%d ", _globalPowerManger->global_over_manager->product_vol_upper_enable);
     printf("product_vol_upper_threshold:%0.2f ", _globalPowerManger->global_over_manager->product_vol_upper_threshold);
     printf("product_vol_over_upper_threshold_ctrl:%d ", _globalPowerManger->global_over_manager->product_vol_over_upper_threshold_ctrl);
-     printf("product_vol_over_upper_threshold_para:%d ", _globalPowerManger->global_over_manager->product_vol_over_upper_threshold_ctrl_para);
+    printf("product_vol_over_upper_threshold_para:%d ", _globalPowerManger->global_over_manager->product_vol_over_upper_threshold_ctrl_para);
 
     printf("product_vol_lower_enable:%d ", _globalPowerManger->global_over_manager->product_vol_lower_enable);
     printf("product_vol_lower_threshold:%0.2f ", _globalPowerManger->global_over_manager->product_vol_lower_threshold);
@@ -68,7 +68,7 @@ void printf_global_power_manage_info(GlobalPowerManger* _globalPowerManger)
     printf("product_cur_upper_enable:%d ", _globalPowerManger->global_over_manager->product_cur_upper_enable);
     printf("product_cur_upper_threshold:%0.2f ", _globalPowerManger->global_over_manager->product_cur_upper_threshold);
     printf("product_cur_over_upper_threshold_ctrl:%d ", _globalPowerManger->global_over_manager->product_cur_over_upper_threshold_ctrl);
-        printf("product_cur_over_upper_threshold_ctrl_para:%d ", _globalPowerManger->global_over_manager->product_cur_over_upper_threshold_ctrl_para);
+    printf("product_cur_over_upper_threshold_ctrl_para:%d ", _globalPowerManger->global_over_manager->product_cur_over_upper_threshold_ctrl_para);
 
     printf("product_pwr_upper_enable:%d ", _globalPowerManger->global_over_manager->product_pwr_upper_enable);
     printf("product_pwr_upper_threshold:%0.2f ", _globalPowerManger->global_over_manager->product_pwr_upper_threshold);

+ 41 - 19
pro/src/common.h

@@ -214,6 +214,21 @@ enum ALARM_CTRL
 };
 
 
+enum {
+    MODBUS_MASTER=0,
+    MODBUS_SLAVE,
+};
+
+enum {
+    LANG_ID_ENGLISH,
+    LANG_ID_CHINESE,
+    LANG_ID_RUSSIA,
+
+    LANG_ID_MAX
+};
+
+
+
 ///////////////////////////////////////////////////////////////////////////////////
 typedef struct {
     int             id;
@@ -231,10 +246,10 @@ typedef struct {
 //modbus信息管理
 typedef struct
 {
-    bool            product_modbus_type ;       //modbus模式
-    unsigned int    product_modbus_baud ;       //波特率
-    unsigned char   product_modbus_addr         ;//从Modbus地址信息
-    char            product_relay_ctrl_port[32] ;//继电器modbus控制端口
+    bool            mode ;          //0: master   1slave
+    unsigned char   addr;
+    unsigned int    baudrate ;      //波特率
+    char            path[32] ;      //device path
 }ModbusInfo_t;
 
 typedef struct
@@ -257,23 +272,30 @@ typedef struct
     char user_token[64];
     struct list_head list;
 }_User_Log;
-//设备总体管理表
+
+typedef struct {
+    uint32_t    id;                     //产品ID 
+    char        number[16];             //产品编号    
+    char        name[32];               //产品名称
+    char        status[32];             //产品状态
+    uint8_t     type;                   //产品类型
+    uint8_t     pwr_type;               //电源类型
+    char        version[8];             //软件版本
+    uint8_t     language;               //多国语言
+    uint8_t     count;                  //级联设备数
+    uint32_t    samp_time;              //采集周期 单位ms
+    uint32_t    save_time;              //采集周期 单位ms
+
+    uint16_t    ph_group;               //三组相数
+    uint16_t    ch_delay;               //通道延时
+}ProductInfo_t;
+
 typedef struct
 {
-    int             product_id                  ;//产品ID 
-    char            product_number[16]          ;//产品编号    
-    char            product_name[32]            ;//产品名称
-    char            product_status[32]          ;//产品状态
-    unsigned char   product_type                ;//产品类型
-    unsigned char   product_pwr_type            ;//电源类型
-    char            product_version[8]          ;//软件版本
-    unsigned char   product_language            ;//多国语言
-    unsigned char   product_count               ;//级联设备数
-    unsigned short  product_samp_time           ;//采集周期 单位ms
-    unsigned short  product_save_time           ;//采集周期 单位ms
-    ModbusInfo_t    _modbus_info                ;//继电器控制端口
-    NetworkInfo_t   _network_info ;             ;//网络信息
-    ModbusInfo_t    _gmodbus_info               ;//级联端口      
+    ModbusInfo_t    relay;              //继电器控制端口
+    NetworkInfo_t   network;            //网络信息
+    ModbusInfo_t    cascade;            //级联端口  
+    ProductInfo_t   product;            //产品信息
 }GlobalDeviceInfo;
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////

+ 28 - 24
pro/src/dflt.c

@@ -1,30 +1,34 @@
-#include "paras.h"
+#include "common.h"
 #include "cfg.h"
 
 
 GlobalDeviceInfo DFLT_PARAS={
 
-
-        .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      = 0,                         //级联设备数
-        .product_samp_time  = SMPLE_TIME,                //采集周期 单位ms
-        .product_save_time  = SAVE_TIME,                 //保存周期 单位ms
+        .product = {
+            .id         = PROD_ID,
+            .number     = "Smart PDU",
+            .name       = "Smart PDU",
+            .status     = "",
+            .type       = PROD_TYPE,
+            .pwr_type   = PROD_POWER_TYPE,
+            .version    = VERSION,
+            .language   = LANGUAGE,                     //多国语言
+            .count      = 0,                            //级联设备数
+            .samp_time  = SMPLE_TIME,                   //采集周期 单位ms
+            .save_time  = SAVE_TIME,                    //保存周期 单位ms
+            
+            .ph_group   = PHASE_GROUP,
+            .ch_delay   = CHANNEL_DELAY,
+        },
         
-        ._modbus_info = {                                //继电器控制端口
-            .product_modbus_type = 1,                    //modbus模式,0: master     1: slave
-            .product_modbus_baud = 115200,
-            .product_modbus_addr = 1,
-            .product_relay_ctrl_port = "/dev/ttyAS2",    //继电器modbus控制端口路径
+        .relay = {                                      //继电器控制端口
+            .mode = 1,                                  //modbus模式,0: master     1: slave
+            .addr = 1,
+            .baudrate = 115200,
+            .path = "/dev/ttyAS2",                      //继电器modbus控制端口路径
         },
         
-        ._network_info = {
+        .network = {
             .mode = 1,                                   //0:dhcp   1:static
             .ip_address = "192.168.1.132",
             .mask = "255.255.255.0",
@@ -33,11 +37,11 @@ GlobalDeviceInfo DFLT_PARAS={
             .dns2 = "1.1.1.1",
         },
         
-        ._gmodbus_info = {
-            .product_modbus_type = 1,                   //modbus模式,0: master     1: slave
-            .product_modbus_baud = 115200,
-            .product_modbus_addr = 1,
-            .product_relay_ctrl_port = "/dev/ttyAS5",   //表头级联串口对应路径
+        .cascade = {
+            .mode = 1,                                  //modbus模式,0: master     1: slave
+            .addr = 1,
+            .baudrate = 115200,
+            .path = "/dev/ttyAS5",                      //表头级联串口对应路径
         },
 };
 

+ 108 - 109
pro/src/json_handle.c

@@ -222,7 +222,7 @@ char* user_info_to_json(void)
     cJSON_AddStringToObject(user_data_filed,"createTime","2024-01-23 22:15:10");
     cJSON_AddStringToObject(user_data_filed,"updateBy","");
     cJSON_AddStringToObject(user_data_filed,"updateTime","");    
-    cJSON_AddStringToObject(user_data_filed,"remark",language_root_name[__globalDeviceManage._globalDevInfo.product_language]);  
+    cJSON_AddStringToObject(user_data_filed,"remark",language_root_name[__globalDeviceManage._globalDevInfo.product.language]);  
     //添加参数信息
     cJSON* param_data_filed = cJSON_CreateObject();  
     cJSON_AddStringToObject(param_data_filed,"@type","java.util.HashMap");
@@ -253,7 +253,7 @@ char* user_info_to_json(void)
     cJSON_AddItemToObject(role_data_filed, "params", role_param_data_filed); 
     //添加信息
     cJSON_AddNumberToObject(role_data_filed,"roleId",_GlobalUserInfoNew.roleID);
-    cJSON_AddStringToObject(role_data_filed,"roleName",language_root_name[__globalDeviceManage._globalDevInfo.product_language]);
+    cJSON_AddStringToObject(role_data_filed,"roleName",language_root_name[__globalDeviceManage._globalDevInfo.product.language]);
     cJSON_AddStringToObject(role_data_filed,"roleKey","admin");   
     cJSON_AddNumberToObject(role_data_filed,"roleSort",1);
     cJSON_AddStringToObject(role_data_filed,"dataScope","1");   
@@ -307,7 +307,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(data1_filed,"alwaysShow",true);  
     //meta 
     cJSON* meta_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(meta_data1_filed,"title",language_power_monitor[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(meta_data1_filed,"title",language_power_monitor[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(meta_data1_filed,"icon","monitor");   
     cJSON_AddBoolToObject(meta_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(meta_data1_filed,"link","");     
@@ -320,7 +320,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children1_data1_filed,"hidden",false); 
     cJSON_AddStringToObject(children1_data1_filed,"component","power/monitorall/index");  
     cJSON* children1_meta1_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children1_meta1_data1_filed,"title",language_power_sts_monitor[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children1_meta1_data1_filed,"title",language_power_sts_monitor[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children1_meta1_data1_filed,"icon","monitor");   
     cJSON_AddBoolToObject(children1_meta1_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children1_meta1_data1_filed,"link","");    
@@ -332,7 +332,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children1_data2_filed,"hidden",false); 
     cJSON_AddStringToObject(children1_data2_filed,"component","power/channelstatus/index");  
     cJSON* children1_meta1_data2_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children1_meta1_data2_filed,"title",language_power_channel_sts_monitor[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children1_meta1_data2_filed,"title",language_power_channel_sts_monitor[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children1_meta1_data2_filed,"icon","server");   
     cJSON_AddBoolToObject(children1_meta1_data2_filed,"noCache",false); 
     cJSON_AddStringToObject(children1_meta1_data2_filed,"link","");    
@@ -345,7 +345,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children1_data2_1_filed,"hidden",false); 
     cJSON_AddStringToObject(children1_data2_1_filed,"component","power/switchtatus/index");  
     cJSON* children1_meta1_data2_1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children1_meta1_data2_1_filed,"title",language_power_switch_sts_monitor[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children1_meta1_data2_1_filed,"title",language_power_switch_sts_monitor[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children1_meta1_data2_1_filed,"icon","switch");   
     cJSON_AddBoolToObject(children1_meta1_data2_1_filed,"noCache",false); 
     cJSON_AddStringToObject(children1_meta1_data2_1_filed,"link","");    
@@ -358,7 +358,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children1_data3_filed,"hidden",false); 
     cJSON_AddStringToObject(children1_data3_filed,"component","power/monitorhistory/index");  
     cJSON* children1_meta1_data3_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children1_meta1_data3_filed,"title",language_power_history_search[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children1_meta1_data3_filed,"title",language_power_history_search[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children1_meta1_data3_filed,"icon","chart");   
     cJSON_AddBoolToObject(children1_meta1_data3_filed,"noCache",false); 
     cJSON_AddStringToObject(children1_meta1_data3_filed,"link","");    
@@ -376,7 +376,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddStringToObject(data2_filed,"component","Layout");
     cJSON_AddBoolToObject(data2_filed,"alwaysShow",true);  
     cJSON* meta_data2_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(meta_data2_filed,"title",language_sensor_monitoring[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(meta_data2_filed,"title",language_sensor_monitoring[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(meta_data2_filed,"icon","slider");   
     cJSON_AddBoolToObject(meta_data2_filed,"noCache",false); 
     cJSON_AddStringToObject(meta_data2_filed,"link","");     
@@ -389,7 +389,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children2_data1_filed,"hidden",false); 
     cJSON_AddStringToObject(children2_data1_filed,"component","sensor/sensorStatus/index");  
     cJSON* children2_meta1_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children2_meta1_data1_filed,"title",language_sensor_status_monitoring[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children2_meta1_data1_filed,"title",language_sensor_status_monitoring[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children2_meta1_data1_filed,"icon","monitor");   
     cJSON_AddBoolToObject(children2_meta1_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children2_meta1_data1_filed,"link","");    
@@ -401,7 +401,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children2_data2_filed,"hidden",false); 
     cJSON_AddStringToObject(children2_data2_filed,"component","sensor/sensorHistory/index");  
     cJSON* children2_meta2_data2_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children2_meta2_data2_filed,"title",language_sensor_history_search[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children2_meta2_data2_filed,"title",language_sensor_history_search[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children2_meta2_data2_filed,"icon","chart");   
     cJSON_AddBoolToObject(children2_meta2_data2_filed,"noCache",false); 
     cJSON_AddStringToObject(children2_meta2_data2_filed,"link","");    
@@ -419,7 +419,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddStringToObject(data3_filed,"component","Layout");
     cJSON_AddBoolToObject(data3_filed,"alwaysShow",true);  
     cJSON* meta_data3_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(meta_data3_filed,"title",language_Alarm_protection[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(meta_data3_filed,"title",language_Alarm_protection[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(meta_data3_filed,"icon","bug");   
     cJSON_AddBoolToObject(meta_data3_filed,"noCache",false); 
     cJSON_AddStringToObject(meta_data3_filed,"link","");     
@@ -432,7 +432,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children3_data1_filed,"hidden",false); 
     cJSON_AddStringToObject(children3_data1_filed,"component","jgbh/xtjg/index");  
     cJSON* children3_meta1_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children3_meta1_data1_filed,"title",language_Alarm_System[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children3_meta1_data1_filed,"title",language_Alarm_System[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children3_meta1_data1_filed,"icon","list");   
     cJSON_AddBoolToObject(children3_meta1_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children3_meta1_data1_filed,"link","");    
@@ -444,7 +444,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children3_data2_filed,"hidden",false); 
     cJSON_AddStringToObject(children3_data2_filed,"component","jgbh/fzsz/index");  
     cJSON* children3_meta2_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children3_meta2_data1_filed,"title",language_Alarm_Threshold_rule[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children3_meta2_data1_filed,"title",language_Alarm_Threshold_rule[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children3_meta2_data1_filed,"icon","build");   
     cJSON_AddBoolToObject(children3_meta2_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children3_meta2_data1_filed,"link","");    
@@ -463,7 +463,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddStringToObject(data4_filed,"component","Layout");
     cJSON_AddBoolToObject(data4_filed,"alwaysShow",true);  
     cJSON* meta_data4_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(meta_data4_filed,"title",language_log_information[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(meta_data4_filed,"title",language_log_information[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(meta_data4_filed,"icon","log");   
     cJSON_AddBoolToObject(meta_data4_filed,"noCache",false); 
     cJSON_AddStringToObject(meta_data4_filed,"link","");     
@@ -476,7 +476,7 @@ char* user_routers_info_to_json(void)
    // cJSON_AddBoolToObject(children4_data1_filed,"hidden",false); 
    // cJSON_AddStringToObject(children4_data1_filed,"component","rzxx/gjrz/index");  
    // cJSON* children4_meta1_data1_filed = cJSON_CreateObject(); 
-   // cJSON_AddStringToObject(children4_meta1_data1_filed,"title",language_log_Alarm[__globalDeviceManage._globalDevInfo.product_language]);   
+   // cJSON_AddStringToObject(children4_meta1_data1_filed,"title",language_log_Alarm[__globalDeviceManage._globalDevInfo.product.language]);   
    // cJSON_AddStringToObject(children4_meta1_data1_filed,"icon","#");   
    // cJSON_AddBoolToObject(children4_meta1_data1_filed,"noCache",false); 
    // cJSON_AddStringToObject(children4_meta1_data1_filed,"link","");    
@@ -488,7 +488,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children4_data2_filed,"hidden",false); 
     cJSON_AddStringToObject(children4_data2_filed,"component","rzxx/czrz/index");  
     cJSON* children4_meta2_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children4_meta2_data1_filed,"title",language_log_operation[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children4_meta2_data1_filed,"title",language_log_operation[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children4_meta2_data1_filed,"icon","chart");   
     cJSON_AddBoolToObject(children4_meta2_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children4_meta2_data1_filed,"link","");    
@@ -500,7 +500,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children4_data3_filed,"hidden",false); 
     cJSON_AddStringToObject(children4_data3_filed,"component","rzxx/yxrz/index");  
     cJSON* children4_meta3_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children4_meta3_data1_filed,"title",language_log_running[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children4_meta3_data1_filed,"title",language_log_running[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children4_meta3_data1_filed,"icon","documentation");   
     cJSON_AddBoolToObject(children4_meta3_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children4_meta3_data1_filed,"link","");    
@@ -519,7 +519,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(data_filed,"alwaysShow",true);    
     //meta
     cJSON* meta_data_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(meta_data_filed,"title",language_user_manage[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(meta_data_filed,"title",language_user_manage[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(meta_data_filed,"icon","system");   
     cJSON_AddBoolToObject(meta_data_filed,"noCache",false); 
     cJSON_AddStringToObject(meta_data_filed,"link","");     
@@ -532,7 +532,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children_data_filed,"hidden",false); 
     cJSON_AddStringToObject(children_data_filed,"component","system/user/index");  
     cJSON* children_meta_data_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children_meta_data_filed,"title",language_user_manage[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children_meta_data_filed,"title",language_user_manage[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children_meta_data_filed,"icon","user");   
     cJSON_AddBoolToObject(children_meta_data_filed,"noCache",false); 
     cJSON_AddStringToObject(children_meta_data_filed,"link","");    
@@ -544,7 +544,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children1_data_filed,"hidden",false); 
     cJSON_AddStringToObject(children1_data_filed,"component","system/role/index");  
     cJSON* children_meta1_data_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children_meta1_data_filed,"title",language_role_manage[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children_meta1_data_filed,"title",language_role_manage[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children_meta1_data_filed,"icon","peoples");   
     cJSON_AddBoolToObject(children_meta1_data_filed,"noCache",false); 
     cJSON_AddStringToObject(children_meta1_data_filed,"link","");    
@@ -556,7 +556,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children2_data_filed,"hidden",false); 
     cJSON_AddStringToObject(children2_data_filed,"component","system/menu/index");  
     cJSON* children_meta2_data_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children_meta2_data_filed,"title",language_menu_manage[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children_meta2_data_filed,"title",language_menu_manage[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children_meta2_data_filed,"icon","tree-table");   
     cJSON_AddBoolToObject(children_meta2_data_filed,"noCache",false); 
     cJSON_AddStringToObject(children_meta2_data_filed,"link","");    
@@ -574,7 +574,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddStringToObject(data5_filed,"component","Layout");
     cJSON_AddBoolToObject(data5_filed,"alwaysShow",true);  
     cJSON* meta_data5_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(meta_data5_filed,"title",language_communication_management[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(meta_data5_filed,"title",language_communication_management[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(meta_data5_filed,"icon","message");   
     cJSON_AddBoolToObject(meta_data5_filed,"noCache",false); 
     cJSON_AddStringToObject(meta_data5_filed,"link","");     
@@ -587,7 +587,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children5_data1_filed,"hidden",false); 
     cJSON_AddStringToObject(children5_data1_filed,"component","txgl/wksz/index");  
     cJSON* children5_meta1_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children5_meta1_data1_filed,"title",language_net_install[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children5_meta1_data1_filed,"title",language_net_install[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children5_meta1_data1_filed,"icon","input");   
     cJSON_AddBoolToObject(children5_meta1_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children5_meta1_data1_filed,"link","");    
@@ -599,7 +599,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children5_data2_filed,"hidden",false); 
     cJSON_AddStringToObject(children5_data2_filed,"component","txgl/rssz/index");  
     cJSON* children5_meta2_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children5_meta2_data1_filed,"title",language_RS485_install[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children5_meta2_data1_filed,"title",language_RS485_install[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children5_meta2_data1_filed,"icon","build");   
     cJSON_AddBoolToObject(children5_meta2_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children5_meta2_data1_filed,"link","");    
@@ -617,7 +617,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddStringToObject(data6_filed,"component","Layout");
     cJSON_AddBoolToObject(data6_filed,"alwaysShow",true);  
     cJSON* meta_data6_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(meta_data6_filed,"title",language_serve_manage[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(meta_data6_filed,"title",language_serve_manage[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(meta_data6_filed,"icon","server");   
     cJSON_AddBoolToObject(meta_data6_filed,"noCache",false); 
     cJSON_AddStringToObject(meta_data6_filed,"link","");     
@@ -630,7 +630,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children6_data1_filed,"hidden",false); 
     cJSON_AddStringToObject(children6_data1_filed,"component","fwgl/smtpsz/index");  
     cJSON* children6_meta1_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children6_meta1_data1_filed,"title",language_SMTP_install[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children6_meta1_data1_filed,"title",language_SMTP_install[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children6_meta1_data1_filed,"icon","edit");   
     cJSON_AddBoolToObject(children6_meta1_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children6_meta1_data1_filed,"link","");    
@@ -642,7 +642,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children6_data2_filed,"hidden",false); 
     cJSON_AddStringToObject(children6_data2_filed,"component","fwgl/snmpsz/index");  
     cJSON* children6_meta2_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children6_meta2_data1_filed,"title",language_SNMP_install[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children6_meta2_data1_filed,"title",language_SNMP_install[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children6_meta2_data1_filed,"icon","date-range");   
     cJSON_AddBoolToObject(children6_meta2_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children6_meta2_data1_filed,"link","");    
@@ -654,7 +654,7 @@ char* user_routers_info_to_json(void)
    // cJSON_AddBoolToObject(children6_data3_filed,"hidden",false); 
    // cJSON_AddStringToObject(children6_data3_filed,"component","fwgl/stsz/index");  
    // cJSON* children6_meta3_data1_filed = cJSON_CreateObject(); 
-   // cJSON_AddStringToObject(children6_meta3_data1_filed,"title",language_SNMP_TRAP_install[__globalDeviceManage._globalDevInfo.product_language]);   
+   // cJSON_AddStringToObject(children6_meta3_data1_filed,"title",language_SNMP_TRAP_install[__globalDeviceManage._globalDevInfo.product.language]);   
    // cJSON_AddStringToObject(children6_meta3_data1_filed,"icon","#");   
    // cJSON_AddBoolToObject(children6_meta3_data1_filed,"noCache",false); 
    // cJSON_AddStringToObject(children6_meta3_data1_filed,"link","");    
@@ -666,7 +666,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children6_data4_filed,"hidden",false); 
     cJSON_AddStringToObject(children6_data4_filed,"component","fwgl/mqsz/index");  
     cJSON* children6_meta4_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children6_meta4_data1_filed,"title",language_MQTT_iot_install[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children6_meta4_data1_filed,"title",language_MQTT_iot_install[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children6_meta4_data1_filed,"icon","dashboard");   
     cJSON_AddBoolToObject(children6_meta4_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children6_meta4_data1_filed,"link","");    
@@ -678,7 +678,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children6_data5_filed,"hidden",false); 
     cJSON_AddStringToObject(children6_data5_filed,"component","fwgl/ntpsz/index");  
     cJSON* children6_meta5_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children6_meta5_data1_filed,"title",language_NTP_install[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children6_meta5_data1_filed,"title",language_NTP_install[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children6_meta5_data1_filed,"icon","date-range");   
     cJSON_AddBoolToObject(children6_meta5_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children6_meta5_data1_filed,"link","");    
@@ -690,7 +690,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children6_data6_filed,"hidden",false); 
     cJSON_AddStringToObject(children6_data6_filed,"component","fwgl/dssz/index");  
     cJSON* children6_meta6_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children6_meta6_data1_filed,"title",language_Timing_install[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children6_meta6_data1_filed,"title",language_Timing_install[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children6_meta6_data1_filed,"icon","date");   
     cJSON_AddBoolToObject(children6_meta6_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children6_meta6_data1_filed,"link","");    
@@ -702,7 +702,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children6_data7_filed,"hidden",false); 
     cJSON_AddStringToObject(children6_data7_filed,"component","fwgl/sxsz/index");  
     cJSON* children6_meta7_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children6_meta7_data1_filed,"title",language_Sequential_setting[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children6_meta7_data1_filed,"title",language_Sequential_setting[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children6_meta7_data1_filed,"icon","drag");   
     cJSON_AddBoolToObject(children6_meta7_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children6_meta7_data1_filed,"link","");    
@@ -714,7 +714,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children6_data8_filed,"hidden",false); 
     cJSON_AddStringToObject(children6_data8_filed,"component","fwgl/fzsz/index");  
     cJSON* children6_meta8_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children6_meta8_data1_filed,"title",language_Group_setting[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children6_meta8_data1_filed,"title",language_Group_setting[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children6_meta8_data1_filed,"icon","education");   
     cJSON_AddBoolToObject(children6_meta8_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children6_meta8_data1_filed,"link","");    
@@ -735,7 +735,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddStringToObject(data7_filed,"component","Layout");
     cJSON_AddBoolToObject(data7_filed,"alwaysShow",true);  
     cJSON* meta_data7_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(meta_data7_filed,"title",language_maintenance_equipment[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(meta_data7_filed,"title",language_maintenance_equipment[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(meta_data7_filed,"icon","upload");   
     cJSON_AddBoolToObject(meta_data7_filed,"noCache",false); 
     cJSON_AddStringToObject(meta_data7_filed,"link","");     
@@ -748,7 +748,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children7_data1_filed,"hidden",false); 
     cJSON_AddStringToObject(children7_data1_filed,"component","sbwh/sbcq/index");  
     cJSON* children7_meta1_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children7_meta1_data1_filed,"title",language_Device_restart[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children7_meta1_data1_filed,"title",language_Device_restart[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children7_meta1_data1_filed,"icon","button");   
     cJSON_AddBoolToObject(children7_meta1_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children7_meta1_data1_filed,"link","");    
@@ -760,7 +760,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children7_data2_filed,"hidden",false); 
     cJSON_AddStringToObject(children7_data2_filed,"component","sbwh/gjsj/index");  
     cJSON* children7_meta2_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children7_meta2_data1_filed,"title",language_firmware_upgrade[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children7_meta2_data1_filed,"title",language_firmware_upgrade[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children7_meta2_data1_filed,"icon","redis-list");   
     cJSON_AddBoolToObject(children7_meta2_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children7_meta2_data1_filed,"link","");    
@@ -772,7 +772,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children7_data3_filed,"hidden",false); 
     cJSON_AddStringToObject(children7_data3_filed,"component","sbwh/hhccsz/index");  
     cJSON* children7_meta3_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children7_meta3_data1_filed,"title",language_back_factor_upgrade[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children7_meta3_data1_filed,"title",language_back_factor_upgrade[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children7_meta3_data1_filed,"icon","server");   
     cJSON_AddBoolToObject(children7_meta3_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children7_meta3_data1_filed,"link","");    
@@ -784,7 +784,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children7_data4_filed,"hidden",false); 
     cJSON_AddStringToObject(children7_data4_filed,"component","sbwh/pzdrdc/index");  
     cJSON* children7_meta4_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children7_meta4_data1_filed,"title",language_Configure_inport_export[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children7_meta4_data1_filed,"title",language_Configure_inport_export[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children7_meta4_data1_filed,"icon","upload");   
     cJSON_AddBoolToObject(children7_meta4_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children7_meta4_data1_filed,"link","");    
@@ -796,7 +796,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children7_data5_filed,"hidden",false); 
     cJSON_AddStringToObject(children7_data5_filed,"component","sbwh/shfw/index");  
     cJSON* children7_meta5_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children7_meta5_data1_filed,"title",language_after_sales_service[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children7_meta5_data1_filed,"title",language_after_sales_service[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children7_meta5_data1_filed,"icon","peoples");   
     cJSON_AddBoolToObject(children7_meta5_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children7_meta5_data1_filed,"link","");    
@@ -808,7 +808,7 @@ char* user_routers_info_to_json(void)
     cJSON_AddBoolToObject(children7_data6_filed,"hidden",false); 
     cJSON_AddStringToObject(children7_data6_filed,"component","sbwh/gysb/index");  
     cJSON* children7_meta6_data1_filed = cJSON_CreateObject(); 
-    cJSON_AddStringToObject(children7_meta6_data1_filed,"title",language_about_Equipment[__globalDeviceManage._globalDevInfo.product_language]);   
+    cJSON_AddStringToObject(children7_meta6_data1_filed,"title",language_about_Equipment[__globalDeviceManage._globalDevInfo.product.language]);   
     cJSON_AddStringToObject(children7_meta6_data1_filed,"icon","table");   
     cJSON_AddBoolToObject(children7_meta6_data1_filed,"noCache",false); 
     cJSON_AddStringToObject(children7_meta6_data1_filed,"link","");    
@@ -1148,7 +1148,7 @@ char* json_to_system_config_info(void)
     cJSON* data_field = cJSON_CreateObject();   
 
     // 添加基本键值对
-    int nLanguageID=__globalDeviceManage._globalDevInfo.product_language+1;
+    int nLanguageID=__globalDeviceManage._globalDevInfo.product.language+1;
     cJSON_AddNumberToObject(data_field, "systemLanguage", nLanguageID);
     
     //返回websockt
@@ -1187,18 +1187,18 @@ int json_to_switch_language(const char* str)
         log_d(cjson_language->valuestring);
         if(strcmp(cjson_language->valuestring,"zh-CN")==0)
         {
-            __globalDeviceManage._globalDevInfo.product_language = 0 ;
+            __globalDeviceManage._globalDevInfo.product.language = 0 ;
         }
        else  if(strcmp(cjson_language->valuestring,"en-US")==0)
         {
-            __globalDeviceManage._globalDevInfo.product_language = 1 ;
+            __globalDeviceManage._globalDevInfo.product.language = 1 ;
         }
         else  if(strcmp(cjson_language->valuestring,"ru-RU")==0)
         {
-            __globalDeviceManage._globalDevInfo.product_language = 2 ;
+            __globalDeviceManage._globalDevInfo.product.language = 2 ;
         }
         else
-            __globalDeviceManage._globalDevInfo.product_language = 0 ;
+            __globalDeviceManage._globalDevInfo.product.language = 0 ;
         
     }
     cJSON_Delete(cjson);
@@ -1419,12 +1419,12 @@ char* vendor_info_to_json(GlobalDeviceInfo *dev)
     if(root_array) {
         cJSON* data_field = cJSON_CreateObject();
         if(data_field) {
-            cJSON_AddStringToObject(data_field, "productName", dev->product_name);
+            cJSON_AddStringToObject(data_field, "productName", dev->product.name);
 
-            sprintf(temp, "%d", dev->product_id);
+            sprintf(temp, "%d", dev->product.id);
             cJSON_AddStringToObject(data_field,"productId", temp);
-            cJSON_AddStringToObject(data_field,"productNumber", dev->product_number); 
-            cJSON_AddStringToObject(data_field,"productVersion", dev->product_version); 
+            cJSON_AddStringToObject(data_field,"productNumber", dev->product.number); 
+            cJSON_AddStringToObject(data_field,"productVersion", dev->product.version); 
 
             get_base64(&logo, &qrcode);
             cJSON_AddStringToObject(data_field,"logo", logo.buf?logo.buf:"");              //base64
@@ -1628,9 +1628,9 @@ char* overall_power_history_to_json(GlobalPowerInfo* _globalPowerInfo,GlobalDevi
     {
         //添加第一条记录
         cJSON* data_filed = cJSON_CreateObject();
-        cJSON_AddStringToObject(data_filed,"productName",_globalDeviceInfo->product_name);
-        cJSON_AddStringToObject(data_filed,"productNumber",_globalDeviceInfo->product_number);
-        cJSON_AddNumberToObject(data_filed,"productId",_globalDeviceInfo->product_id);
+        cJSON_AddStringToObject(data_filed,"productName",_globalDeviceInfo->product.name);
+        cJSON_AddStringToObject(data_filed,"productNumber",_globalDeviceInfo->product.number);
+        cJSON_AddNumberToObject(data_filed,"productId",_globalDeviceInfo->product.id);
         sprintf(temp,"%0.3f", __globalPowerInfoTemp->_power_info.voltage);
         cJSON_AddStringToObject(data_filed,"productVoltage",temp);
         sprintf(temp,"%0.3f", __globalPowerInfoTemp->_power_info.current);
@@ -1678,9 +1678,9 @@ char* over_channel_power_history_to_json(GlobalPowerInfo* _globalPowerInfo,Globa
     {
         //添加第一条记录
         cJSON* data_filed = cJSON_CreateObject();
-        cJSON_AddStringToObject(data_filed,"productName",_globalDeviceInfo->product_name);
-        cJSON_AddStringToObject(data_filed,"productNumber",_globalDeviceInfo->product_number);
-        cJSON_AddNumberToObject(data_filed,"productId",_globalDeviceInfo->product_id);
+        cJSON_AddStringToObject(data_filed,"productName",_globalDeviceInfo->product.name);
+        cJSON_AddStringToObject(data_filed,"productNumber",_globalDeviceInfo->product.number);
+        cJSON_AddNumberToObject(data_filed,"productId",_globalDeviceInfo->product.id);
         cJSON_AddStringToObject(data_filed,"productChName",chn_name);
         sprintf(temp,"%d",__globalPowerInfoTemp->product_ch_id);
         cJSON_AddStringToObject(data_filed,"productChId",temp);        
@@ -1696,7 +1696,7 @@ char* over_channel_power_history_to_json(GlobalPowerInfo* _globalPowerInfo,Globa
         cJSON_AddStringToObject(data_filed,"productConsumption",temp);
         sprintf(temp,"%0.3f",__globalPowerInfoTemp->_power_info.factor);                 
         cJSON_AddStringToObject(data_filed,"productPowerFactor",temp);
-        cJSON_AddNumberToObject(data_filed,"productChStatus",_globalDeviceInfo->product_id);   
+        cJSON_AddNumberToObject(data_filed,"productChStatus",_globalDeviceInfo->product.id);   
         list_for_each_entry(iterator, &__globalDeviceManage._globalPowerManger.list, list)
         {
             if (iterator->product_id == __globalPowerInfoTemp->product_id && iterator->product_ch_id == __globalPowerInfoTemp->product_ch_id)
@@ -2184,7 +2184,7 @@ char *over_all_data_t_ac_to_json(_OverAllPwrAckInfo *_over_all_pwr_back_info,_Ov
     {
         date_Data_info[i] = cJSON_CreateObject();
         // 查询数据库总电源信息 传给所申请的参数结构体
-        if (dev_search_time_t_ac_power_info(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product_id, 0,i,total_type, &__globalPowerInfo,_over_all_sts_monitor->start_time,_over_all_sts_monitor->end_time) != 0)
+        if (dev_search_time_t_ac_power_info(__globalDeviceManage.db, __globalDeviceManage._globalDevInfo.product.id, 0,i,total_type, &__globalPowerInfo,_over_all_sts_monitor->start_time,_over_all_sts_monitor->end_time) != 0)
         {
             log_e("serach total voltage err.");
             continue;
@@ -2391,7 +2391,7 @@ char* over_chn_pwr_monitor_to_json(_OverChnPwrAckInfo* _over_chn_pwr_back_info)
         cJSON_AddStringToObject(data_filed,"firingInterval",temp);
         sprintf(temp,"%d",_chnPwrTemp->product_ch_stop_delay/1000);     
         cJSON_AddStringToObject(data_filed,"closeInterval",temp);
-        if (_chnPwrTemp->product_type==TREE_AC_TYPE||__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B)
+        if (_chnPwrTemp->product_type==TREE_AC_TYPE||__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)
         {
             if (_chnPwrTemp->product_phType>=0&&_chnPwrTemp->product_phType<3)
             {
@@ -2700,8 +2700,8 @@ char* over_all_sensor_info_to_json(_OverSensorBackInfo* _over_all_sensor_back_in
         cJSON_AddNumberToObject(data_filed,"sensorAddr",_temp->sensorAddr);
         cJSON_AddStringToObject(data_filed,"cgqtd",_temp->sensorvaluech);
         cJSON_AddNumberToObject(data_filed,"airPressureValue",_temp->airPressureValue);
-        cJSON_AddStringToObject(data_filed,"productName",__globalDeviceManage._globalDevInfo.product_name);
-        cJSON_AddNumberToObject(data_filed,"productId",__globalDeviceManage._globalDevInfo.product_id);
+        cJSON_AddStringToObject(data_filed,"productName",__globalDeviceManage._globalDevInfo.product.name);
+        cJSON_AddNumberToObject(data_filed,"productId",__globalDeviceManage._globalDevInfo.product.id);
         sprintf(temp,"%0.2f",_temp->airflowValue);
         cJSON_AddStringToObject(data_filed,"airflowValue",temp);
 
@@ -2724,19 +2724,19 @@ char* over_all_sensor_info_to_json(_OverSensorBackInfo* _over_all_sensor_back_in
         //switch (_temp->sensorType)
         //{
         //case SENSOR_TYPE_TEMPERATURE:
-        //    cJSON_AddStringToObject(data_filed,"sensorName",language_temperature[__globalDeviceManage._globalDevInfo.product_language]);//_temp->sensorName);
+        //    cJSON_AddStringToObject(data_filed,"sensorName",language_temperature[__globalDeviceManage._globalDevInfo.product.language]);//_temp->sensorName);
         //    break;
         //case SENSOR_TYPE_SMOKE:
-        //    cJSON_AddStringToObject(data_filed,"sensorName",language_temperature[__globalDeviceManage._globalDevInfo.product_language]);
+        //    cJSON_AddStringToObject(data_filed,"sensorName",language_temperature[__globalDeviceManage._globalDevInfo.product.language]);
         //    break;
         //case SENSOR_TYPE_WATER:
-        //    cJSON_AddStringToObject(data_filed,"sensorName",language_temperature[__globalDeviceManage._globalDevInfo.product_language]);
+        //    cJSON_AddStringToObject(data_filed,"sensorName",language_temperature[__globalDeviceManage._globalDevInfo.product.language]);
         //    break;
         //case SENSOR_TYPE_GAS:
-        //    cJSON_AddStringToObject(data_filed,"sensorName",language_temperature[__globalDeviceManage._globalDevInfo.product_language]);
+        //    cJSON_AddStringToObject(data_filed,"sensorName",language_temperature[__globalDeviceManage._globalDevInfo.product.language]);
         //    break;
         //case SENSOR_TYPE_AIR_PRESS:
-        //    cJSON_AddStringToObject(data_filed,"sensorName",language_temperature[__globalDeviceManage._globalDevInfo.product_language]);
+        //    cJSON_AddStringToObject(data_filed,"sensorName",language_temperature[__globalDeviceManage._globalDevInfo.product.language]);
         //    break;
         //default:
         //    break;
@@ -2801,11 +2801,11 @@ char *breaker_status_ack_to_json(GlobalDeviceManager *gm,int slave)
                 strcpy(info->product_ch_name,buff);
                 if(slave)
                 {
-                    sprintf(buff,"%s %d",__globalDeviceManage._globalDevInfo.product_name, slave);
+                    sprintf(buff,"%s %d",__globalDeviceManage._globalDevInfo.product.name, slave);
                     strcpy(info->productName,buff);
                 }else
-                    strcpy(info->productName,__globalDeviceManage._globalDevInfo.product_name);
-                strcpy(info->product_number,__globalDeviceManage._globalDevInfo.product_number);
+                    strcpy(info->productName,__globalDeviceManage._globalDevInfo.product.name);
+                strcpy(info->product_number,__globalDeviceManage._globalDevInfo.product.number);
                 strcpy(info->productChids,temp->breaker_chns_name);
                 info->switch_id = temp->breaker_id;
                 info->status = temp->breaker_status;
@@ -2860,8 +2860,7 @@ char *ws_sensor_status_ack_to_json(GlobalSensorManger *_globalSensorManger)
         memset(_overSensorBackInfoTemp, 0, sizeof(_OverSensorBackInfo));
         // 基本信息
         _overSensorBackInfoTemp->sensorId = _globalSensorManagerTemp->sensor_id;
-        strcpy(_overSensorBackInfoTemp->sensorName,language_sensor_name[__globalDeviceManage._globalDevInfo.product_language][(int)_globalSensorManagerTemp->sensor_type]);
-        
+        strcpy(_overSensorBackInfoTemp->sensorName,language_sensor_name[__globalDeviceManage._globalDevInfo.product.language][(int)_globalSensorManagerTemp->sensor_type]);
         _overSensorBackInfoTemp->sensorType = _globalSensorManagerTemp->sensor_type;
         memcpy(&_overSensorBackInfoTemp->comSlogan, &_globalSensorManagerTemp->sensor_port_name, sizeof(_overSensorBackInfoTemp->comSlogan));
         // strcpy(_overSensorBackInfoTemp->comSlogan,_globalSensorManagerTemp->sensor_port_name);
@@ -2977,7 +2976,7 @@ char* over_sensor_history_info_to_json(_OverSensorBackInfo* _over_all_sensor_bac
                 cJSON_AddNumberToObject(data,"sensorType",_temp->sensorType);
                 cJSON* type_data_array = cJSON_CreateArray();
                 cJSON* type_data_temp = cJSON_CreateObject();
-                cJSON_AddStringToObject(type_data_temp,"typeName",language_temperature[__globalDeviceManage._globalDevInfo.product_language]);
+                cJSON_AddStringToObject(type_data_temp,"typeName",language_temperature[__globalDeviceManage._globalDevInfo.product.language]);
                 cJSON* ydate_temp_array = cJSON_CreateFloatArray(_temp->temp_humi_sensor.ydata[0],TOTAL_COUNT);
                 cJSON_AddItemToObject(type_data_temp,"ydata",ydate_temp_array);
                 cJSON_AddStringToObject(type_data_temp,"type","0");
@@ -2985,11 +2984,11 @@ char* over_sensor_history_info_to_json(_OverSensorBackInfo* _over_all_sensor_bac
                 cJSON* type_data_humi = cJSON_CreateObject();
                 if (_temp->sensorType == SENSOR_TYPE_DoubleT)
                 {
-                    cJSON_AddStringToObject(type_data_humi, "typeName", language_temperature[__globalDeviceManage._globalDevInfo.product_language]);
+                    cJSON_AddStringToObject(type_data_humi, "typeName", language_temperature[__globalDeviceManage._globalDevInfo.product.language]);
                 }
                 else
                 {
-                    cJSON_AddStringToObject(type_data_humi, "typeName", language_humidity[__globalDeviceManage._globalDevInfo.product_language]);
+                    cJSON_AddStringToObject(type_data_humi, "typeName", language_humidity[__globalDeviceManage._globalDevInfo.product.language]);
                 }
                 cJSON* ydate_humi_array = cJSON_CreateFloatArray(_temp->temp_humi_sensor.ydata[1],TOTAL_COUNT);
                 cJSON_AddItemToObject(type_data_humi,"ydata",ydate_humi_array);
@@ -3009,7 +3008,7 @@ char* over_sensor_history_info_to_json(_OverSensorBackInfo* _over_all_sensor_bac
                 cJSON_AddNumberToObject(data,"sensorType",_temp->sensorType);
                 cJSON* type_data_array = cJSON_CreateArray();
                 cJSON* type_data_gas = cJSON_CreateObject();
-                cJSON_AddStringToObject(type_data_gas,"typeName",language_atmosphere_gas[__globalDeviceManage._globalDevInfo.product_language]);
+                cJSON_AddStringToObject(type_data_gas,"typeName",language_atmosphere_gas[__globalDeviceManage._globalDevInfo.product.language]);
                 cJSON* ydate_gas_array = cJSON_CreateFloatArray(_temp->gas_sensor.ydata,TOTAL_COUNT);
                 cJSON_AddItemToObject(type_data_gas,"ydata",ydate_gas_array);
                 cJSON_AddStringToObject(type_data_gas,"type","0");
@@ -3028,13 +3027,13 @@ char* over_sensor_history_info_to_json(_OverSensorBackInfo* _over_all_sensor_bac
                 cJSON_AddNumberToObject(data,"sensorType",_temp->sensorType);
                 cJSON* type_data_array = cJSON_CreateArray();
                 cJSON* type_data_air = cJSON_CreateObject();
-                cJSON_AddStringToObject(type_data_air,"typeName",language_atmosphere_airflow[__globalDeviceManage._globalDevInfo.product_language]);
+                cJSON_AddStringToObject(type_data_air,"typeName",language_atmosphere_airflow[__globalDeviceManage._globalDevInfo.product.language]);
                 cJSON* ydate_air_array = cJSON_CreateFloatArray(_temp->air_press_sensor.ydata[0],TOTAL_COUNT);
                 cJSON_AddItemToObject(type_data_air,"ydata",ydate_air_array);
                 cJSON_AddStringToObject(type_data_air,"type","0");
                 cJSON_AddItemToArray(type_data_array,type_data_air);
                 cJSON* type_data_press = cJSON_CreateObject();
-                cJSON_AddStringToObject(type_data_press,"typeName",language_atmosphere_pressure[__globalDeviceManage._globalDevInfo.product_language]);
+                cJSON_AddStringToObject(type_data_press,"typeName",language_atmosphere_pressure[__globalDeviceManage._globalDevInfo.product.language]);
                 cJSON* ydate_press_array = cJSON_CreateFloatArray(_temp->air_press_sensor.ydata[1],TOTAL_COUNT);
                 cJSON_AddItemToObject(type_data_press,"ydata",ydate_press_array);
                 cJSON_AddStringToObject(type_data_press,"type","1");
@@ -3064,8 +3063,8 @@ char* over_sensor_history_info_to_json(_OverSensorBackInfo* _over_all_sensor_bac
             cJSON* data_filed = cJSON_CreateObject();
             cJSON_AddNumberToObject(data_filed, "accessControlStatus",_temp->accessControlStatus);
             cJSON_AddNumberToObject(data_filed,"sensorAddr",_temp->sensorAddr);
-            cJSON_AddStringToObject(data_filed,"productName",__globalDeviceManage._globalDevInfo.product_name);
-            cJSON_AddStringToObject(data_filed,"productNumber",__globalDeviceManage._globalDevInfo.product_number);
+            cJSON_AddStringToObject(data_filed,"productName",__globalDeviceManage._globalDevInfo.product.name);
+            cJSON_AddStringToObject(data_filed,"productNumber",__globalDeviceManage._globalDevInfo.product.number);
             cJSON_AddNumberToObject(data_filed, "alarmStatus",_temp->alarmStatus);
             cJSON_AddNumberToObject(data_filed,"sensorBaud",_temp->sensorBaud);
             cJSON_AddStringToObject(data_filed,"comSlogan",_temp->comSlogan);
@@ -3114,15 +3113,15 @@ char* alarm_info_to_json(_AlarmAckInfo* _alarm_ack_info,int nAllNumber)
         cJSON_AddStringToObject(data_filed,"alarmDate",_temp->alarmDate);
         if (_temp->alarmType==0)
         {
-            cJSON_AddStringToObject(data_filed,"alarmType",language_alarm_Type_Power[__globalDeviceManage._globalDevInfo.product_language]);
+            cJSON_AddStringToObject(data_filed,"alarmType",language_alarm_Type_Power[__globalDeviceManage._globalDevInfo.product.language]);
         }
         else if (_temp->alarmType==1)
         {
-            cJSON_AddStringToObject(data_filed,"alarmType",language_alarm_Type_Sensor[__globalDeviceManage._globalDevInfo.product_language]);
+            cJSON_AddStringToObject(data_filed,"alarmType",language_alarm_Type_Sensor[__globalDeviceManage._globalDevInfo.product.language]);
         }
         else if (_temp->alarmType==2)
         {
-             cJSON_AddStringToObject(data_filed,"alarmType",language_alarm_Type_Network[__globalDeviceManage._globalDevInfo.product_language]);
+             cJSON_AddStringToObject(data_filed,"alarmType",language_alarm_Type_Network[__globalDeviceManage._globalDevInfo.product.language]);
         }
         else cJSON_AddStringToObject(data_filed,"alarmType","Unknown");
 
@@ -3170,9 +3169,9 @@ char* alarm_type_info_to_json(_AlarmAckInfo* _alarm_ack_info,int nAlarmNum)
         // cJSON_AddStringToObject(data_filed,"alarmType",temp);
         switch (_temp->alarmType)
         {
-            case 0:cJSON_AddStringToObject(data_filed,"alarmType",language_log_Power[__globalDeviceManage._globalDevInfo.product_language]);break;
-            case 3:cJSON_AddStringToObject(data_filed,"alarmType",language_opera_log_operation[__globalDeviceManage._globalDevInfo.product_language]);break;
-            case 4:cJSON_AddStringToObject(data_filed,"type",language_run_log_running[__globalDeviceManage._globalDevInfo.product_language]);break;
+            case 0:cJSON_AddStringToObject(data_filed,"alarmType",language_log_Power[__globalDeviceManage._globalDevInfo.product.language]);break;
+            case 3:cJSON_AddStringToObject(data_filed,"alarmType",language_opera_log_operation[__globalDeviceManage._globalDevInfo.product.language]);break;
+            case 4:cJSON_AddStringToObject(data_filed,"type",language_run_log_running[__globalDeviceManage._globalDevInfo.product.language]);break;
         }
         
         cJSON_AddStringToObject(data_filed,"deviceNumber",_temp->deviceNumber);
@@ -3229,9 +3228,9 @@ char* alarm_ctrl_type_info_to_json(_AlarmAckInfo* _alarm_ack_info,int nAlarmNum)
         // cJSON_AddStringToObject(data_filed,"alarmType",temp);
         //switch (_temp->alarmType)
         //{
-        //    case 0:cJSON_AddStringToObject(data_filed,"alarmType",language_log_Power[__globalDeviceManage._globalDevInfo.product_language]);break;
-        //    case 3:cJSON_AddStringToObject(data_filed,"alarmType",language_opera_log_operation[__globalDeviceManage._globalDevInfo.product_language]);break;
-        //    case 4:cJSON_AddStringToObject(data_filed,"alarmType",language_run_log_running[__globalDeviceManage._globalDevInfo.product_language]);break;
+        //    case 0:cJSON_AddStringToObject(data_filed,"alarmType",language_log_Power[__globalDeviceManage._globalDevInfo.product.language]);break;
+        //    case 3:cJSON_AddStringToObject(data_filed,"alarmType",language_opera_log_operation[__globalDeviceManage._globalDevInfo.product.language]);break;
+        //    case 4:cJSON_AddStringToObject(data_filed,"alarmType",language_run_log_running[__globalDeviceManage._globalDevInfo.product.language]);break;
         //}
         //cJSON_AddStringToObject(data_filed,"deviceNumber",_temp->deviceNumber);
         //cJSON_AddStringToObject(data_filed,"deviceName",_temp->deviceName);
@@ -3271,8 +3270,8 @@ char* alarm_power_threshold_to_json(GlobalPowerManger* _globalPowerManger)
     char Alarmtemp[32] = {0};
     sprintf(Closetemp, "%d", ALARM_CTRL_CLOSE_CH);
     sprintf(Alarmtemp, "%d", ALARM_CTRL_ALARM_ONLY);
-    // language_alarm_ctrl_Alarm[__globalDeviceManage._globalDevInfo.product_language]
-    // language_alarm_ctrl_CloseCH[__globalDeviceManage._globalDevInfo.product_language]
+    // language_alarm_ctrl_Alarm[__globalDeviceManage._globalDevInfo.product.language]
+    // language_alarm_ctrl_CloseCH[__globalDeviceManage._globalDevInfo.product.language]
 
     list_for_each_entry(_globalPowerMangerTemp, &_globalPowerManger->list, list)
     {
@@ -3421,8 +3420,8 @@ char* alarm_sensor_threshold_to_json(GlobalSensorManger* _globalSensorManger)
     char Alarmtemp[32] = {0};
     sprintf(Closetemp, "%d", ALARM_CTRL_CLOSE_CH);
     sprintf(Alarmtemp, "%d", ALARM_CTRL_ALARM_ONLY);
-    // language_alarm_ctrl_Alarm[__globalDeviceManage._globalDevInfo.product_language]
-    // language_alarm_ctrl_CloseCH[__globalDeviceManage._globalDevInfo.product_language]
+    // language_alarm_ctrl_Alarm[__globalDeviceManage._globalDevInfo.product.language]
+    // language_alarm_ctrl_CloseCH[__globalDeviceManage._globalDevInfo.product.language]
 
 
     //循环添加数据
@@ -3441,12 +3440,12 @@ char* alarm_sensor_threshold_to_json(GlobalSensorManger* _globalSensorManger)
             cJSON_AddNumberToObject(data_filed, "sensorType", _globalSensorMangerTemp->sensor_type);
             if (SENSOR_TYPE_DoubleT == _globalSensorMangerTemp->sensor_type)
             {
-                sprintf(temp, "%s%d", language_temperature[__globalDeviceManage._globalDevInfo.product_language], 1);
+                sprintf(temp, "%s%d", language_temperature[__globalDeviceManage._globalDevInfo.product.language], 1);
                 cJSON_AddStringToObject(data_filed, "thresholdType", temp);
             }
             else
             {
-                cJSON_AddStringToObject(data_filed, "thresholdType", language_temperature[__globalDeviceManage._globalDevInfo.product_language]);
+                cJSON_AddStringToObject(data_filed, "thresholdType", language_temperature[__globalDeviceManage._globalDevInfo.product.language]);
             }
             sprintf(temp, "%0.2f", _globalSensorMangerTemp->over_manager->sensor_val1_upper_threshold);
             cJSON_AddStringToObject(data_filed, "thresholdUpperValue", temp);
@@ -3544,12 +3543,12 @@ char* alarm_sensor_threshold_to_json(GlobalSensorManger* _globalSensorManger)
             cJSON_AddNumberToObject(data_filed, "sensorType", _globalSensorMangerTemp->sensor_type);
             if (SENSOR_TYPE_DoubleT == _globalSensorMangerTemp->sensor_type)
             {
-                sprintf(temp, "%s%d", language_temperature[__globalDeviceManage._globalDevInfo.product_language], 2);
+                sprintf(temp, "%s%d", language_temperature[__globalDeviceManage._globalDevInfo.product.language], 2);
                 cJSON_AddStringToObject(data_filed, "thresholdType", temp);
             }
             else
             {
-                cJSON_AddStringToObject(data_filed, "thresholdType", language_humidity[__globalDeviceManage._globalDevInfo.product_language]);
+                cJSON_AddStringToObject(data_filed, "thresholdType", language_humidity[__globalDeviceManage._globalDevInfo.product.language]);
             }
 
             sprintf(temp, "%0.2f", _globalSensorMangerTemp->over_manager->sensor_val2_upper_threshold);
@@ -3832,7 +3831,7 @@ char* ws_chn_status_ack_to_json(int type,_OverChnPwrAckInfo* _over_chn_pwr_back_
         cJSON_AddStringToObject(data_filed, "IPadress",_chnPwrTemp->ip_addr);
 #endif
         
-        if (_chnPwrTemp->product_type == TREE_AC_TYPE||gdm->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B)
+        if (_chnPwrTemp->product_type == TREE_AC_TYPE||gdm->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)
         {
             if (_chnPwrTemp->product_phType >= 0 && _chnPwrTemp->product_phType < 3)
             {
@@ -3926,22 +3925,22 @@ char* communication_rs_ack_to_json(ModbusInfo_t* _modbusInfo_t)
     //创建数据
     memset(temp, 0, sizeof(temp));
     cJSON* data_root_array = cJSON_CreateObject();  
-    if ( !_modbusInfo_t->product_modbus_type)
+    if ( !_modbusInfo_t->mode)
     {
-        sprintf(temp,language_alarm_RS485_master[__globalDeviceManage._globalDevInfo.product_language]);
+        sprintf(temp,language_alarm_RS485_master[__globalDeviceManage._globalDevInfo.product.language]);
     }
     else
     {
-        sprintf(temp,language_alarm_RS485_slave[__globalDeviceManage._globalDevInfo.product_language]);
+        sprintf(temp,language_alarm_RS485_slave[__globalDeviceManage._globalDevInfo.product.language]);
     }
     cJSON_AddStringToObject(data_root_array, "mode", temp);  
 
     memset(temp, 0, sizeof(temp));
-    sprintf(temp,"%d",_modbusInfo_t->product_modbus_addr);
+    sprintf(temp,"%d",_modbusInfo_t->addr);
     cJSON_AddStringToObject(data_root_array, "ipaddress", temp); 
 
     memset(temp, 0, sizeof(temp));
-    sprintf(temp,"%d",_modbusInfo_t->product_modbus_baud);
+    sprintf(temp,"%d",_modbusInfo_t->baudrate);
     cJSON_AddStringToObject(data_root_array, "sensorBaud", temp);  
  
     //添加汇总
@@ -4853,8 +4852,8 @@ char* service_sx_ack_to_json(int product_id, GlobalPowerManger * __PowerManage_t
         if (product_id == _powerSxManagerTemp->product_id && _powerSxManagerTemp->product_ch_id)
         {
             cJSON* data_filed = cJSON_CreateObject();   
-            cJSON_AddStringToObject(data_filed,"productName", __globalDeviceManage._globalDevInfo.product_name);
-            cJSON_AddNumberToObject(data_filed,"productId", __globalDeviceManage._globalDevInfo.product_id);
+            cJSON_AddStringToObject(data_filed,"productName", __globalDeviceManage._globalDevInfo.product.name);
+            cJSON_AddNumberToObject(data_filed,"productId", __globalDeviceManage._globalDevInfo.product.id);
             cJSON_AddStringToObject(data_filed,"productChName", _powerSxManagerTemp->product_ch_name);
             sprintf(temp, "%d", _powerSxManagerTemp->product_ch_id);
             cJSON_AddStringToObject(data_filed, "productChId", temp);
@@ -5232,15 +5231,15 @@ char* GetRoleNameByID(int _RoleID,RoleInfo* __RoleInfo_t)
            {
                if (_RoleID == 1)
                {
-                   strcpy(nname, language_Role_Super_Admin[__globalDeviceManage._globalDevInfo.product_language]);
+                   strcpy(nname, language_Role_Super_Admin[__globalDeviceManage._globalDevInfo.product.language]);
                }
                else if (_RoleID == 2)
                {
-                   strcpy(nname, language_Role_Admin[__globalDeviceManage._globalDevInfo.product_language]);
+                   strcpy(nname, language_Role_Admin[__globalDeviceManage._globalDevInfo.product.language]);
                }
                else if (_RoleID == 3)
                {
-                   strcpy(nname, language_Role_User[__globalDeviceManage._globalDevInfo.product_language]);
+                   strcpy(nname, language_Role_User[__globalDeviceManage._globalDevInfo.product.language]);
                }
            }
             break;
@@ -5404,15 +5403,15 @@ char* service_userRole_ack_to_json(char* _userName,UserInfo* __UserInfo_t,RoleIn
         cJSON_AddStringToObject(data_filed, "roleId", buffer);
         if (_RoleInfoTemp1->roleID==1)
         {
-             cJSON_AddStringToObject(data_filed,"roleName",language_Role_Super_Admin[__globalDeviceManage._globalDevInfo.product_language]);
+             cJSON_AddStringToObject(data_filed,"roleName",language_Role_Super_Admin[__globalDeviceManage._globalDevInfo.product.language]);
         }
         else if (_RoleInfoTemp1->roleID==2)
         {
-             cJSON_AddStringToObject(data_filed,"roleName",language_Role_Admin[__globalDeviceManage._globalDevInfo.product_language]);
+             cJSON_AddStringToObject(data_filed,"roleName",language_Role_Admin[__globalDeviceManage._globalDevInfo.product.language]);
         }
         else
         {
-            cJSON_AddStringToObject(data_filed,"roleName",language_Role_User[__globalDeviceManage._globalDevInfo.product_language]);
+            cJSON_AddStringToObject(data_filed,"roleName",language_Role_User[__globalDeviceManage._globalDevInfo.product.language]);
         }
         //cJSON_AddStringToObject(data_filed,"roleName",_RoleInfoTemp1->roleName);
 

+ 2 - 1
pro/src/language_common.c

@@ -684,4 +684,5 @@ const char* language_sensor_name[LANGUAGE_TYPE][8] =
         "",
         "",
     },
-};
+};
+

+ 1 - 1
pro/src/language_hashmap.c

@@ -111,7 +111,7 @@ void replace_sequences(char *str, HashTable *table) {
             HashEntry* pEnty= (HashEntry*)find_hash(table, key);
             if (pEnty)
             {
-               replacement=pEnty->value[__globalDeviceManage._globalDevInfo.product_language];  
+               replacement=pEnty->value[__globalDeviceManage._globalDevInfo.product.language];  
             }
             free(key); // 释放key占用的内存  
             if (replacement) {  

+ 10 - 8
pro/src/mqtt.c

@@ -37,18 +37,18 @@ char *topic_sub[MQTT_SUB_MAX]={
     "/pdu/%d/control/sensor/+",
     "/pdu/%d/control/device/restart",
     "/pdu/%d/control/device/reset",
-    "/PDU/%d/control/service",
+    "/pdu/%d/control/service",
 };
 char *topic_pub[MQTT_PUB_MAX]={
     "/pdu/%d/info/device",
-    "/PDU/%d/status/network",
+    "/pdu/%d/status/network",
     "/pdu/%d/status/power/all_channel",
     "/pdu/%d/status/power/%d",
     "/pdu/%d/status/sensor/%d",
     "/pdu/%d/alarm/network",
     "/pdu/%d/alarm/power",
     "/pdu/%d/alarm/sensor",
-    "/PDU/%d/status/service",
+    "/pdu/%d/status/service",
 };
 
 typedef struct mg_mgr mgr_t;
@@ -456,7 +456,7 @@ int mqtt_init(void)
     //mg_log_set(MG_LL_DEBUG);
     
     h->dm = &__globalDeviceManage;
-    h->prod_id = h->dm->_globalDevInfo.product_id;
+    h->prod_id = h->dm->_globalDevInfo.product.id;
     //sys_get_chip_id(&h->prod_id);
 
     h->mgr.dns4.url = "udp://114.114.114.114:53";
@@ -579,9 +579,9 @@ static int send_stat(mqtt_handle_t *h, int type)
                     cJSON_AddStringToObject(root,"wifi_ipv6_mask", "");
                 }
 
-                cJSON_AddStringToObject(root,"modbus_address", get_int_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_addr));
-                cJSON_AddStringToObject(root,"modbus_baud", get_int_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_baud));
-                cJSON_AddStringToObject(root,"modbus_mode", get_int_str(h->dm->_globalDevInfo._gmodbus_info.product_modbus_type));
+                cJSON_AddStringToObject(root,"modbus_address", get_int_str(h->dm->_globalDevInfo.cascade.addr));
+                cJSON_AddStringToObject(root,"modbus_baud", get_int_str(h->dm->_globalDevInfo.cascade.baudrate));
+                cJSON_AddStringToObject(root,"modbus_mode", get_int_str(h->dm->_globalDevInfo.cascade.mode));
                 cJSON_AddStringToObject(root,"vpn_enable", "0");
 
                 get_date_time(date, time);
@@ -1068,7 +1068,9 @@ static int my_recv(char *topic, char *data)
                     cmd = get_cmd(data);
                     LOGD("___ MQTT_SUB_CMD_RESET, %d\n", cmd);
                     if(cmd==1) {
-                        sys_set_factory();
+                        //sys_set_factory();
+                        char temp[200];
+                        sys_get_path(temp, "");
                     }
                 }
                 break;

+ 1 - 1
pro/src/netswitch.c

@@ -799,7 +799,7 @@ static sqlite3* get_db(void)
 }
 static int get_prod_id(void)
 {
-    return __globalDeviceManage._globalDevInfo.product_id;
+    return __globalDeviceManage._globalDevInfo.product.id;
 }
 static int sw_save(sqlite3 *db, netswitch_info_t *old, netswitch_info_t *new)
 {

+ 186 - 130
pro/src/paras.c

@@ -27,32 +27,15 @@ enum {
 extern GlobalDeviceInfo DFLT_PARAS;
 
 typedef struct {
-    dictionary *dic;
-    
+    dictionary          *dic;
+    GlobalDeviceInfo    *info;
+    char                path[200];
 }paras_handle_t;
 static paras_handle_t  paraHandle={0};
 
 
-#if 0
-static int do_check(void *para)
-{
-    return 0;
-}
 #if 1
 
-typedef struct {
-    uint32_t    id                  ;//产品ID 
-    uint8_t     number[16]          ;//产品编号    
-    uint8_t     name[32]            ;//产品名称
-    uint8_t     status[32]          ;//产品状态
-    uint8_t     type                ;//产品类型
-    uint8_t     pwr_type            ;//电源类型
-    uint8_t     version[8]          ;//软件版本
-    uint8_t     language            ;//多国语言
-    uint8_t     count               ;//级联设备数
-    uint8_t     samp_time           ;//采集周期 单位ms
-    uint8_t     save_time           ;//采集周期 单位ms
-}prod_info_t;
 
 static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
 {
@@ -61,16 +44,16 @@ static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
     char temp[100];
     char *token=NULL;
 
-    if(info->product_language>=4) {
-        LOGE("___ product_language %d is wrong\n", info->product_language);
+    if(info->product.language>=4) {
+        LOGE("___ product.language %d is wrong\n", info->product.language);
         ok = 0;
     }
-    if(info->product_type>=2) {
-        LOGE("___ product_type %d is wrong\n", info->product_type);
+    if(info->product.type>=2) {
+        LOGE("___ product.type %d is wrong\n", info->product.type);
         ok = 0;
     }
-    if(info->product_pwr_type>=SmartPDU_Tree_AC_One_B) {
-        LOGE("___ product_pwr_type %d is wrong\n", info->product_pwr_type);
+    if(info->product.pwr_type>SmartPDU_Tree_AC_One_B) {
+        LOGE("___ product.pwr_type %d is wrong\n", info->product.pwr_type);
         ok = 0;
     }
     if(!ok) {
@@ -84,10 +67,10 @@ static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
             LOGE("___ iniparser_getstring %s failed\n", token);
             return -1; 
         }
-        info->product_id = r;
+        info->product.id = r;
     }
     else {
-        sprintf(temp, "%d", info->product_id);
+        sprintf(temp, "%d", info->product.id);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -102,16 +85,16 @@ static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
             LOGE("___ iniparser_getstring %s failed\n", token);
             return -1; 
         }
-        strcpy(info->product_number, p);
+        strcpy(info->product.number, p);
     }
     else {
-        r = iniparser_set(dic, token, info->product_number);
+        r = iniparser_set(dic, token, info->product.number);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
             return -1;
         }
     }
-
+    
     token = "product:name";
     if(rw==INI_READ) {
         p = (char*)iniparser_getstring(dic, token, NULL);
@@ -119,10 +102,10 @@ static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
             LOGE("___ iniparser_getstring %s failed\n", token);
             return -1; 
         }
-        strcpy(info->product_name, p);
+        strcpy(info->product.name, p);
     }
     else {
-        r = iniparser_set(dic, token, info->product_name);
+        r = iniparser_set(dic, token, info->product.name);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
             return -1;
@@ -136,10 +119,10 @@ static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1; 
         }
-        info->product_type = r;
+        info->product.type = r;
     }
     else {
-        sprintf(temp, "%d", info->product_type);
+        sprintf(temp, "%d", info->product.type);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -147,17 +130,17 @@ static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
         }
     }
 
-    token = "product:powertype";
+    token = "product:pwrtype";
     if(rw==INI_READ) {
         r = iniparser_getint(dic, token, -1);
         if(r==-1) {
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1; 
         }
-        info->product_pwr_type = r;
+        info->product.pwr_type = r;
     }
     else {
-        sprintf(temp, "%d", info->product_pwr_type);
+        sprintf(temp, "%d", info->product.pwr_type);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -165,6 +148,7 @@ static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
         }
     }
 
+#if 0
     token = "product:version";
     if(rw==INI_READ) {
         p = (char*)iniparser_getstring(dic, token, NULL);
@@ -172,15 +156,16 @@ static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
             LOGE("___ iniparser_getstring %s failed\n", token);
             return -1; 
         }
-        strcpy(info->product_version, p);
+        strcpy(info->product.version, p);
     }
     else {
-        r = iniparser_set(dic, token, info->product_version);
+        r = iniparser_set(dic, token, info->product.version);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
             return -1;
         }
     }
+#endif
 
     token = "product:language";
     if(rw==INI_READ) {
@@ -189,10 +174,10 @@ static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
             LOGE("___ iniparser_getint %s failed\n", token);
             return -1; 
         }
-        info->product_language = r;
+        info->product.language = r;
     }
     else {
-        sprintf(temp, "%d", info->product_language);
+        sprintf(temp, "%d", info->product.language);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -207,10 +192,10 @@ static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
             LOGE("___ iniparser_getstring %s failed\n", token);
             return -1; 
         }
-        info->product_samp_time = atoi(p);
+        info->product.samp_time = atoi(p);
     }
     else {
-        sprintf(temp, "%d", info->product_samp_time);
+        sprintf(temp, "%d", info->product.samp_time);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -225,10 +210,10 @@ static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
             LOGE("___ iniparser_getstring %s failed\n", token);
             return -1; 
         }
-        info->product_save_time = atoi(p);
+        info->product.save_time = atoi(p);
     }
     else {
-        sprintf(temp, "%d", info->product_save_time);
+        sprintf(temp, "%d", info->product.save_time);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -236,9 +221,45 @@ static int ini_rw_dev(dictionary *dic, int rw, GlobalDeviceInfo *info)
         }
     }
 
+    token = "product:ph_group";
     if(rw==INI_READ) {
-        info->product_count = 0;
-        info->product_status[0] = 0;
+        p = (char*)iniparser_getstring(dic, token, NULL);
+        if(!p) {
+            LOGE("___ iniparser_getstring %s failed\n", token);
+            return -1; 
+        }
+        info->product.ph_group = atoi(p);
+    }
+    else {
+        sprintf(temp, "%d", info->product.ph_group);
+        r = iniparser_set(dic, token, temp);
+        if(r) {
+            LOGE("___ iniparser_set %s failed\n", token);
+            return -1;
+        }
+    }
+
+    token = "product:ch_delay";
+    if(rw==INI_READ) {
+        p = (char*)iniparser_getstring(dic, token, NULL);
+        if(!p) {
+            LOGE("___ iniparser_getstring %s failed\n", token);
+            return -1; 
+        }
+        info->product.ch_delay = atoi(p);
+    }
+    else {
+        sprintf(temp, "%d", info->product.ch_delay);
+        r = iniparser_set(dic, token, temp);
+        if(r) {
+            LOGE("___ iniparser_set %s failed\n", token);
+            return -1;
+        }
+    }
+
+    if(rw==INI_READ) {
+        info->product.count = 0;
+        info->product.status[0] = 0;
     }
     
     return 0;
@@ -248,16 +269,16 @@ static int ini_rw_modbus(dictionary *dic, int rw, GlobalDeviceInfo *info)
     int r=-1;
     char temp[100];
     char *token=NULL;
-    ModbusInfo_t *mb=&info->_modbus_info;
+    ModbusInfo_t *mb=&info->cascade;
 
     if(rw==INI_WRITE) {
-        if(mb->product_modbus_type!=0 || mb->product_modbus_type!=1) {
-            LOGE("___ set modbus, mode %d is invalid\n", mb->product_modbus_type);
+        if(mb->mode!=0 && mb->mode!=1) {
+            LOGE("___ set modbus, mode %d is invalid\n", mb->mode);
             return -1; 
         }
 
-        if(mb->product_modbus_type==1 && (mb->product_modbus_addr==0 || mb->product_modbus_addr>CASCADE_MAX)) {    //slave
-            LOGE("___ set modbus, slave addr %d is invalid\n", mb->product_modbus_addr);
+        if(mb->mode==1 && (mb->addr==0 || mb->addr>CASCADE_MAX)) {    //slave
+            LOGE("___ set modbus, slave addr %d is invalid\n", mb->addr);
         }
     }
 
@@ -268,10 +289,10 @@ static int ini_rw_modbus(dictionary *dic, int rw, GlobalDeviceInfo *info)
             LOGE("___ iniparser_getstring %s failed\n", token);
             return -1; 
         }
-        mb->product_modbus_type = r;
+        mb->mode = r;
     }
     else {
-        sprintf(temp, "%d", mb->product_modbus_type);
+        sprintf(temp, "%d", mb->mode);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -279,17 +300,17 @@ static int ini_rw_modbus(dictionary *dic, int rw, GlobalDeviceInfo *info)
         }
     }
 
-    token = "modbus:baudrate";
+    token = "modbus:address";
     if(rw==INI_READ) {
         r = iniparser_getint(dic, token, -1);
         if(r==-1) {
             LOGE("___ iniparser_getstring %s failed\n", token);
             return -1; 
         }
-        mb->product_modbus_baud = r;
+        mb->addr = r;
     }
     else {
-        sprintf(temp, "%d", mb->product_modbus_baud);
+        sprintf(temp, "%d", mb->addr);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -297,17 +318,17 @@ static int ini_rw_modbus(dictionary *dic, int rw, GlobalDeviceInfo *info)
         }
     }
 
-    token = "modbus:address";
+    token = "modbus:baudrate";
     if(rw==INI_READ) {
         r = iniparser_getint(dic, token, -1);
         if(r==-1) {
             LOGE("___ iniparser_getstring %s failed\n", token);
             return -1; 
         }
-        mb->product_modbus_addr = r;
+        mb->baudrate = r;
     }
     else {
-        sprintf(temp, "%d", mb->product_modbus_addr);
+        sprintf(temp, "%d", mb->baudrate);
         r = iniparser_set(dic, token, temp);
         if(r) {
             LOGE("___ iniparser_set %s failed\n", token);
@@ -317,97 +338,119 @@ static int ini_rw_modbus(dictionary *dic, int rw, GlobalDeviceInfo *info)
 
     return 0;
 }
+static dictionary* ini_load(char *path, GlobalDeviceInfo *info)
+{
+    int r=-1;
+    char temp[200];
+    
+    dictionary *dic=iniparser_load(path);
+    if(dic == NULL){
+        return NULL;
+    }
+    
+    r = ini_rw_dev(dic, INI_READ, info);
+    if(r) {
+        LOGE("___ini_r_dev failed\n");
+        iniparser_freedict(dic);
+        return NULL;
+    }
+
+    r = ini_rw_modbus(dic, INI_READ, info);
+    if(r) {
+        LOGE("___ini_r_modbus failed\n");
+        iniparser_freedict(dic);
+        return NULL;
+    }
+
+    return dic;
+}
+static int ini_check(char *path)
+{
+    GlobalDeviceInfo info=DFLT_PARAS;
+    dictionary *dic=ini_load(path, &info);
+
+    if(!dic) {
+        return -1;
+    }
+    iniparser_freedict(dic);
 
+    return 0;
+}
 static int ini_reset(paras_handle_t *h)
 {
     int r;
-    dictionary *dic=NULL;
-    char *ininame=INI_FILE_NAME;
     FILE *fp=NULL;
-
-    
     GlobalDeviceInfo *info=&DFLT_PARAS;
 
-    
-    fp = fopen(temp, "w");
+    fp = fopen(h->path, "w");
     if (fp==NULL) {
-        LOGE("ini_reset, create %s failed\n", ininame);
+        LOGE("ini_reset, fopen %s failed\n", h->path);
         return -1;
     }
 
     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, "powertype = %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, "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, "\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);
+
     fclose(fp);
 
     if(h->dic) {
         iniparser_freedict(h->dic);
     }
-    //h->dic = ini_load(h, info);
+    h->dic = ini_load(h->path, h->info);
 
     return 0;
 }
-static dictionary* ini_load(char *path, GlobalDeviceInfo *info)
+static int ini_free(paras_handle_t *h)
+{
+    iniparser_freedict(h->dic);
+    return 0;
+}
+static int ini_save(paras_handle_t *h)
 {
     int r=-1;
-    char temp[200];
     
-    dictionary *dic=iniparser_load(path);
-    if(dic == NULL){
-        
-        sys_get_path(temp, ininame);
-
-        ini_reset(h);
-        dic = iniparser_load(path);
-        if(dic == NULL) {
-            LOGE("___ iniparser_load failed\n");
-            //return -1;
-        }
-    }
-    
-    r = ini_rw_dev(dic, INI_READ, info);
+    r = ini_rw_dev(h->dic, INI_WRITE, h->info);
     if(r) {
-        LOGE("___ini_r_dev failed\n");
-        return NULL;
+        LOGE("___ini_w_dev failed\n");
+        return -1;
     }
 
-    return dic;
-}
-static int ini_save(paras_handle_t *h, GlobalDeviceInfo *info)
-{
-    int r=-1;
-    char *p=NULL;
-    char temp[200];
-    char *ininame=INI_FILE_NAME;
-    
-    //r = ini_rw_dev(h, INI_WRITE, info);
+    r = ini_rw_modbus(h->dic, INI_WRITE, h->info);
     if(r) {
-        LOGE("___ini_r_prod failed\n");
-        goto quit;
+        LOGE("___ini_w_modbus failed\n");
+        return -1;
     }
 
-    sys_get_path(temp, ininame);
-    FILE *fp=fopen(temp, "w");
+    FILE *fp=fopen(h->path, "w");
     if(!fp) {
-        LOGE("___%s open failed\n", ininame);
-        goto quit;
+        LOGE("___%s open failed\n", h->path);
+        return -1;
     }
     iniparser_dump_ini(h->dic, fp);
-    fclose(fp); r = 0;
+    fclose(fp);
 
-quit:
-    return r;
+    return 0;
 }
 #endif
 
-static GlobalDeviceInfo *get_dm(void)
+static GlobalDeviceInfo *get_info(void)
 {
     return &__globalDeviceManage._globalDevInfo;
 }
@@ -417,11 +460,16 @@ static GlobalDeviceInfo *get_dm(void)
 int paras_init(void)
 {
     int r=0;
-    GlobalDeviceInfo *info=get_dm();
     paras_handle_t  *h=&paraHandle;
     
     lock_s_hold(LOCK_ID_PARAS);
-    h->dic = ini_load(INI_FILE_NAME, info);
+    memset(&paraHandle, 0, sizeof(paraHandle));
+    h->info = get_info();
+    sys_get_path(h->path, INI_FILE_NAME);
+    h->dic = ini_load(h->path, h->info);
+    if(h->dic==NULL) {
+        r = ini_reset(h);
+    }
     lock_s_release(LOCK_ID_PARAS);
     
     return r;
@@ -430,25 +478,38 @@ int paras_init(void)
 
 int paras_deinit(void)
 {
-    int r;
+    int r=0;
     paras_handle_t *h=&paraHandle;
     
     lock_s_hold(LOCK_ID_PARAS);
-    memset(&paraHandle, 0, sizeof(paraHandle));
+    r = ini_free(h);
     lock_s_release(LOCK_ID_PARAS);
     
     return 0;
 }
 
 
-int paras_load(char *path)
+int paras_check(char *path)
 {
     int r=0;
-    GlobalDeviceInfo *info=get_dm();
+    
+    lock_s_hold(LOCK_ID_PARAS);
+    r = ini_check(path);
+    lock_s_release(LOCK_ID_PARAS);
+    
+    return r;
+}
+
+
+int paras_load(char *path)
+{
+    int r=-1;
     paras_handle_t *h=&paraHandle;
     
     lock_s_hold(LOCK_ID_PARAS);
-    //r = ini_load(path, info);
+    ini_free(h);
+    h->dic = ini_load(path, h->info);
+    if(h->dic) r = 0;
     lock_s_release(LOCK_ID_PARAS);
     
     return r;
@@ -458,11 +519,10 @@ int paras_load(char *path)
 int paras_reset(void)
 {
     int r=0;
-    GlobalDeviceInfo *info=get_dm();
     paras_handle_t *h=&paraHandle;
     
     lock_s_hold(LOCK_ID_PARAS);
-    //ini_reset(h);
+    ini_reset(h);
     lock_s_release(LOCK_ID_PARAS);
     
     return r;
@@ -472,18 +532,14 @@ int paras_reset(void)
 int paras_save(void)
 {
     int r=0;
-    GlobalDeviceInfo *info=get_dm();
     paras_handle_t *h=&paraHandle;
     
     lock_s_hold(LOCK_ID_PARAS);
-    r = ini_save(h, info);
+    r = ini_save(h);
     lock_s_release(LOCK_ID_PARAS);
     
     return r;
 }
 
 
-#endif
-
-
 

+ 1 - 12
pro/src/paras.h

@@ -1,13 +1,6 @@
 #ifndef __PARAS_Hx__
 #define __PARAS_Hx__
 
-#include "common.h"
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-
 enum {
     PARAS_TYPE_DEV,
     PARAS_TYPE_NTP,
@@ -24,18 +17,14 @@ enum {
     PARAS_TYPE_MAX,
 };
 
-
 int paras_init(void);
 int paras_deinit(void);
 
+int paras_check(char *path);
 int paras_load(char *path);
 int paras_reset(void);
 int paras_save(void);
 
 
-#ifdef __cplusplus
-}
-#endif
-
 #endif
 

+ 2 - 2
pro/src/pduMIB_form.c

@@ -541,7 +541,7 @@ pduChannelTable_handler(
                      //       _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_REACTIVE_TYPE][i] = __PowerTrendInfo._power_trend_info.ydata[POWER_REACTIVE_TYPE][i];
                      //       _over_all_pwr_back_info._Power_Trend_Info.ydata[POWER_APPARENT_TYPE][i] = __PowerTrendInfo._power_trend_info.ydata[POWER_APPARENT_TYPE][i];
                      // }
-                     //if(dev_search_latest_power_info(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product_id,iterator->product_ch_id,&powerInfo)!=0)
+                     //if(dev_search_latest_power_info(__globalDeviceManage.db,__globalDeviceManage._globalDevInfo.product.id,iterator->product_ch_id,&powerInfo)!=0)
                      //{
                      //   log_e("search total pwr err at pduChannelTable_handler from db.");
                      //}
@@ -876,7 +876,7 @@ pduGroupTable_handler(
                 char *pCHlist;
                 char *pCHListSave;
                 pCHlist = strtok_r(_GroupInfoTemp->GroupChList, ",", &pCHListSave);
-                if (__globalDeviceManage._globalDevInfo.product_pwr_type == 1)
+                if (__globalDeviceManage._globalDevInfo.product.pwr_type == 1)
                 {
                    unsigned short pAddrCtrl[50];
                    memset(pAddrCtrl, 0, sizeof(pAddrCtrl));

+ 8 - 8
pro/src/pduMIB_scalar.c

@@ -314,8 +314,8 @@ int handle_pduId(netsnmp_mib_handler *handler,
     {
 
     case MODE_GET:
-        snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,&__globalDeviceManage._globalDevInfo.product_id,sizeof(ASN_INTEGER));
-        //                          /* XXX: a pointer to the scalar's data */&__globalDeviceManage._globalDevInfo.product_id,
+        snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,&__globalDeviceManage._globalDevInfo.product.id,sizeof(ASN_INTEGER));
+        //                          /* XXX: a pointer to the scalar's data */&__globalDeviceManage._globalDevInfo.product.id,
         //                          /* XXX: the length of the data in bytes */sizeof(ASN_INTEGER));
         break;
 
@@ -344,12 +344,12 @@ int handle_pduName(netsnmp_mib_handler *handler,
     case MODE_GET:
 
         snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
-                                 __globalDeviceManage._globalDevInfo.product_name,                // 定义的变量名称buff
-                                 strlen(__globalDeviceManage._globalDevInfo.product_name) // buff的长度
+                                 __globalDeviceManage._globalDevInfo.product.name,                // 定义的变量名称buff
+                                 strlen(__globalDeviceManage._globalDevInfo.product.name) // buff的长度
         );
         // snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
-        //                          /* XXX: a pointer to the scalar's data */__globalDeviceManage._globalDevInfo.product_name,
-        //                          /* XXX: the length of the data in bytes */strlen(__globalDeviceManage._globalDevInfo.product_name));
+        //                          /* XXX: a pointer to the scalar's data */__globalDeviceManage._globalDevInfo.product.name,
+        //                          /* XXX: the length of the data in bytes */strlen(__globalDeviceManage._globalDevInfo.product.name));
         break;
 
     default:
@@ -376,7 +376,7 @@ int handle_pduType(netsnmp_mib_handler *handler,
 
     case MODE_GET:
         memset(buffer, 0, sizeof(buffer));
-        sprintf(buffer, "%d", __globalDeviceManage._globalDevInfo.product_pwr_type);
+        sprintf(buffer, "%d", __globalDeviceManage._globalDevInfo.product.pwr_type);
         snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
         break;
 
@@ -404,7 +404,7 @@ int handle_pduFirmware(netsnmp_mib_handler *handler,
 
     case MODE_GET:
         memset(buffer, 0, sizeof(buffer));
-        sprintf(buffer, "%s", __globalDeviceManage._globalDevInfo.product_version);
+        sprintf(buffer, "%s", __globalDeviceManage._globalDevInfo.product.version);
         snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
         break;
 

+ 2 - 2
pro/src/smtp.c

@@ -4233,8 +4233,8 @@ int smtp_post_alarm(int type, int subtype, int alarm_type, char *content)
     if(!h->inited) {
         return -1;
     }
-    int prod_id=h->dm->_globalDevInfo.product_id;
-    int langID=h->dm->_globalDevInfo.product_language;
+    int prod_id=h->dm->_globalDevInfo.product.id;
+    int langID=h->dm->_globalDevInfo.product.language;
 
     switch(type) {
         case ALARM_TYPE_POWER:

+ 59 - 59
pro/src/sqlite_handle.c

@@ -94,7 +94,7 @@ int sqlite_init(sqlite3** db,pthread_mutex_t* pDBMutex, const char* daba_name)
     ret = sqlite3_open(daba_name,db);
     if(ret != SQLITE_OK)
         return -1 ;
-    char SetData[]="PRAGMA cache_size = 0;";//"PRAGMA cache_size = 0; VACUUM;";
+    char SetData[]="PRAGMA cache_size = 0; VACUUM;";
     ret = sqlite3_exec(*db,SetData,NULL,NULL,&errorMsg);
     return 0;
 }
@@ -163,34 +163,34 @@ int dev_get_device_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo)
     }
 
     //获取ID
-    _globalDeviceInfo->product_id = atoi(pResult[rowIndex*ncolumn+0]); 
+    _globalDeviceInfo->product.id = atoi(pResult[rowIndex*ncolumn+0]); 
     //获取产品编号
-    strcpy(_globalDeviceInfo->product_number,pResult[rowIndex*ncolumn+1]);
+    strcpy(_globalDeviceInfo->product.number,pResult[rowIndex*ncolumn+1]);
     //获取产品名称
-    strcpy(_globalDeviceInfo->product_name,pResult[rowIndex*ncolumn+2]);
+    strcpy(_globalDeviceInfo->product.name,pResult[rowIndex*ncolumn+2]);
     //获取产品类型
-    _globalDeviceInfo->product_type = atoi(pResult[rowIndex*ncolumn+3]); 
+    _globalDeviceInfo->product.type = atoi(pResult[rowIndex*ncolumn+3]); 
     //获取电源类型
-    _globalDeviceInfo->product_pwr_type = atoi(pResult[rowIndex*ncolumn+4]); 
+    _globalDeviceInfo->product.pwr_type = atoi(pResult[rowIndex*ncolumn+4]); 
     //获取版本号
-    strcpy(_globalDeviceInfo->product_version,pResult[rowIndex*ncolumn+5]);
+    strcpy(_globalDeviceInfo->product.version,pResult[rowIndex*ncolumn+5]);
     //多国语言
-    _globalDeviceInfo->product_language = atoi(pResult[rowIndex*ncolumn+6]); 
+    _globalDeviceInfo->product.language = atoi(pResult[rowIndex*ncolumn+6]); 
     //获取级联设备数
-    _globalDeviceInfo->product_count = atoi(pResult[rowIndex*ncolumn+7]); 
+    _globalDeviceInfo->product.count = atoi(pResult[rowIndex*ncolumn+7]); 
     //获取采样间隔时间
-    _globalDeviceInfo->product_samp_time = atoi(pResult[rowIndex*ncolumn+8]); 
+    _globalDeviceInfo->product.samp_time = atoi(pResult[rowIndex*ncolumn+8]); 
     //获取采样存储时间
-    _globalDeviceInfo->product_save_time = atoi(pResult[rowIndex*ncolumn+9]); 
+    _globalDeviceInfo->product.save_time = atoi(pResult[rowIndex*ncolumn+9]); 
 
     //获取modbus主从模式
-    _globalDeviceInfo->_gmodbus_info.product_modbus_type = atoi(pResult[rowIndex*ncolumn+10]); 
+    _globalDeviceInfo->cascade.mode = atoi(pResult[rowIndex*ncolumn+10]); 
     //获取波特率
-    _globalDeviceInfo->_gmodbus_info.product_modbus_baud = atoi(pResult[rowIndex*ncolumn+11]);
+    _globalDeviceInfo->cascade.baudrate = atoi(pResult[rowIndex*ncolumn+11]);
     //获取从Modbus地址信息
-    _globalDeviceInfo->_gmodbus_info.product_modbus_addr = atoi(pResult[rowIndex*ncolumn+12]); 
+    _globalDeviceInfo->cascade.addr = atoi(pResult[rowIndex*ncolumn+12]); 
     //获取继电器控制端口号
-    strcpy(_globalDeviceInfo->_modbus_info.product_relay_ctrl_port,pResult[rowIndex*ncolumn+13]);
+    strcpy(_globalDeviceInfo->relay.path,pResult[rowIndex*ncolumn+13]);
 
     sqlite3_free_table(pResult);
 #endif
@@ -217,16 +217,16 @@ int dev_update_device_genera_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInf
     char** pResult = NULL;  //用来指向sql执行结果的指针
     char* err_msg=NULL;
     sprintf(select_sql,"UPDATE Table_DeviceInfo SET product_number='%s',product_name='%s',product_type=%d,product_pwr_type=%d,product_version='%s',product_language=%d,product_count=%d,product_samp_time=%d,product_save_time=%d WHERE product_id=%d;",
-                    _globalDeviceInfo->product_number,
-                    _globalDeviceInfo->product_name,
-                    _globalDeviceInfo->product_type,
-                    _globalDeviceInfo->product_pwr_type,
-                    _globalDeviceInfo->product_version,
-                    _globalDeviceInfo->product_language,
-                    _globalDeviceInfo->product_count,
-                    _globalDeviceInfo->product_samp_time,
-                    _globalDeviceInfo->product_save_time,
-                    _globalDeviceInfo->product_id);
+                    _globalDeviceInfo->product.number,
+                    _globalDeviceInfo->product.name,
+                    _globalDeviceInfo->product.type,
+                    _globalDeviceInfo->product.pwr_type,
+                    _globalDeviceInfo->product.version,
+                    _globalDeviceInfo->product.language,
+                    _globalDeviceInfo->product.count,
+                    _globalDeviceInfo->product.samp_time,
+                    _globalDeviceInfo->product.save_time,
+                    _globalDeviceInfo->product.id);
     res = sqlite_SQL_RUN(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK) {
         log_e("sqlite handle error: %s \n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
@@ -261,11 +261,11 @@ int dev_update_device_modus_info(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo
     char* err_msg=NULL;    
 
     sprintf(select_sql,"UPDATE Table_DeviceInfo SET product_modbus_type=%d,product_modbus_baud=%d,product_modbus_addr=%d WHERE product_id=%d;",
-        _globalDeviceInfo->_gmodbus_info.product_modbus_type,
-        _globalDeviceInfo->_gmodbus_info.product_modbus_baud,
-        _globalDeviceInfo->_gmodbus_info.product_modbus_addr,
-        //_globalDeviceInfo->_modbus_info.product_relay_ctrl_port,//只改级联的串口配置,继电器采集和传感器采集端口不变
-        _globalDeviceInfo->product_id);
+        _globalDeviceInfo->cascade.mode,
+        _globalDeviceInfo->cascade.baudrate,
+        _globalDeviceInfo->cascade.addr,
+        //_globalDeviceInfo->_modbus_info.path,//只改级联的串口配置,继电器采集和传感器采集端口不变
+        _globalDeviceInfo->product.id);
     res = sqlite_SQL_RUN(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK) {
         log_e("sqlite handle error: %s \n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
@@ -504,12 +504,12 @@ int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_Ov
             /* code */
         }
 
-        if (_globalPowerMangerTemp->product_ch_type==TREE_AC_TYPE||globalDeviceManger->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B)
+        if (_globalPowerMangerTemp->product_ch_type==TREE_AC_TYPE||globalDeviceManger->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)
         {
             GlobalTreeACManager* _TreeACTemp=NULL;
             int nStatus=-1;//-1则状态不变,0、1则是子状态
             //判断是否三相单输出情况下
-            if(_globalPowerMangerTemp->product_ch_type==TREE_AC_TYPE||globalDeviceManger->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B)
+            if(_globalPowerMangerTemp->product_ch_type==TREE_AC_TYPE||globalDeviceManger->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)
             {
                 list_for_each_entry(_TreeACTemp, &_globalPowerMangerTemp->list_Tree_AC, list_Tree_AC)
                 {
@@ -528,9 +528,9 @@ int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_Ov
                     return -1;
                 }
                 memset(_overChnPwrBackInfoTemp,0,sizeof(_OverChnPwrAckInfo));
-                _overChnPwrBackInfoTemp->product_name = globalDeviceManger->_globalDevInfo.product_name;
-                _overChnPwrBackInfoTemp->product_number = globalDeviceManger->_globalDevInfo.product_number;
-                _overChnPwrBackInfoTemp->product_id = globalDeviceManger->_globalDevInfo.product_id;
+                _overChnPwrBackInfoTemp->product_name = globalDeviceManger->_globalDevInfo.product.name;
+                _overChnPwrBackInfoTemp->product_number = globalDeviceManger->_globalDevInfo.product.number;
+                _overChnPwrBackInfoTemp->product_id = globalDeviceManger->_globalDevInfo.product.id;
                 _overChnPwrBackInfoTemp->productChName = _globalPowerMangerTemp->product_ch_name;
                 _overChnPwrBackInfoTemp->productChId = _globalPowerMangerTemp->product_ch_id;
                 _overChnPwrBackInfoTemp->status = _globalPowerMangerTemp->_PowerInfo.status;
@@ -551,7 +551,7 @@ int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_Ov
                 _overChnPwrBackInfoTemp->ph_consumption = _TreeACTemp->_PowerInfo.consumption;
                 _overChnPwrBackInfoTemp->ph_outputType   = _TreeACTemp->product_ph_outputType;
                 _overChnPwrBackInfoTemp->ph_outputStatus = _TreeACTemp->product_ph_outputStatus;
-                if ((globalDeviceManger->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One ||globalDeviceManger->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B) && 
+                if ((globalDeviceManger->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One ||globalDeviceManger->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B) && 
                     _TreeACTemp->product_ph_outputType == 2 && _TreeACTemp->product_ph_outputStatus == 2) // 如果是单项输出并且则非输出通道数据为0
                 { 
                      // 3-1模式 单项状态,不输出则数据为空
@@ -593,9 +593,9 @@ int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_Ov
             }
             memset(_overChnPwrBackInfoTemp,0,sizeof(_OverChnPwrAckInfo));
             // 填数据
-            _overChnPwrBackInfoTemp->product_name = globalDeviceManger->_globalDevInfo.product_name;
-            _overChnPwrBackInfoTemp->product_number = globalDeviceManger->_globalDevInfo.product_number;
-            _overChnPwrBackInfoTemp->product_id = globalDeviceManger->_globalDevInfo.product_id;
+            _overChnPwrBackInfoTemp->product_name = globalDeviceManger->_globalDevInfo.product.name;
+            _overChnPwrBackInfoTemp->product_number = globalDeviceManger->_globalDevInfo.product.number;
+            _overChnPwrBackInfoTemp->product_id = globalDeviceManger->_globalDevInfo.product.id;
             _overChnPwrBackInfoTemp->productChName = _globalPowerMangerTemp->product_ch_name;
             _overChnPwrBackInfoTemp->productChId = _globalPowerMangerTemp->product_ch_id;
             _overChnPwrBackInfoTemp->status = _globalPowerMangerTemp->_PowerInfo.status;
@@ -668,9 +668,9 @@ int dev_search_latest_power_statistic_info(GlobalDeviceManager* globalDeviceMang
     float fNowVoltage =0.0f,fNowFreq =0.0f,fNowFactor =0.0f;
 
     memset(all,0,sizeof(_OverAllPwrAckInfo));
-    all->product_name = globalDeviceManger->_globalDevInfo.product_name;
-    all->product_id = globalDeviceManger->_globalDevInfo.product_id;
-    all->product_number = globalDeviceManger->_globalDevInfo.product_number;
+    all->product_name = globalDeviceManger->_globalDevInfo.product.name;
+    all->product_id = globalDeviceManger->_globalDevInfo.product.id;
+    all->product_number = globalDeviceManger->_globalDevInfo.product.number;
     int nTempSum=0;
 
     if(list_empty(&globalDeviceManger->_globalPowerManger.list)) {
@@ -966,9 +966,9 @@ int dev_search_latest_t_ac_power_statistic_info(int nCh, int nType, _OverAllPwrA
         __overChnPwrAckInfo->consumption = _pTreeACPowerMangerTemp->_PowerInfo.consumption;
         __overChnPwrAckInfo->factor = _pTreeACPowerMangerTemp->_PowerInfo.factor;
 
-       __overChnPwrAckInfo->product_name = globalDeviceManger->_globalDevInfo.product_name;
-        __overChnPwrAckInfo->product_number = globalDeviceManger->_globalDevInfo.product_number;
-        __overChnPwrAckInfo->product_id = globalDeviceManger->_globalDevInfo.product_id;
+       __overChnPwrAckInfo->product_name = globalDeviceManger->_globalDevInfo.product.name;
+        __overChnPwrAckInfo->product_number = globalDeviceManger->_globalDevInfo.product.number;
+        __overChnPwrAckInfo->product_id = globalDeviceManger->_globalDevInfo.product.id;
         return 0;
         break;
     }
@@ -2721,8 +2721,8 @@ int dev_serarch_all_alarm(sqlite3* db,
         strcpy(_alarmTemp->alarmNumber,pResult[i*ncolumn+0]);
         strcpy(_alarmTemp->alarmDate,pResult[i*ncolumn+1]);
         _alarmTemp->alarmType = atoi(pResult[i*ncolumn+2]);
-        strcpy(_alarmTemp->deviceNumber,__globalDeviceManage._globalDevInfo.product_number);
-        strcpy(_alarmTemp->deviceName,__globalDeviceManage._globalDevInfo.product_name);
+        strcpy(_alarmTemp->deviceNumber,__globalDeviceManage._globalDevInfo.product.number);
+        strcpy(_alarmTemp->deviceName,__globalDeviceManage._globalDevInfo.product.name);
         strcpy(_alarmTemp->alarmContent,pResult[i*ncolumn+4]);
         //尾部插入
         list_add_tail(&_alarmTemp->list, &_alarm_ack_info->list);
@@ -2821,8 +2821,8 @@ int dev_search_alarm_info(sqlite3* db,
         strcpy(_alarmTemp->alarmNumber,pResult[i*ncolumn+0]);
         strcpy(_alarmTemp->alarmDate,pResult[i*ncolumn+1]);
         _alarmTemp->alarmType = atoi(pResult[i*ncolumn+2]);
-        strcpy(_alarmTemp->deviceNumber,__globalDeviceManage._globalDevInfo.product_number);
-        strcpy(_alarmTemp->deviceName,__globalDeviceManage._globalDevInfo.product_name);
+        strcpy(_alarmTemp->deviceNumber,__globalDeviceManage._globalDevInfo.product.number);
+        strcpy(_alarmTemp->deviceName,__globalDeviceManage._globalDevInfo.product.name);
         strcpy(_alarmTemp->alarmContent,pResult[i*ncolumn+4]);
         //尾部插入
         list_add_tail(&_alarmTemp->list, &_alarm_ack_info->list);
@@ -2869,7 +2869,7 @@ int dev_get_ntp_info(sqlite3 *db,NTPManager* _globalNTPInfo)
     char* err_msg=NULL;
     char select_sql[1024] = {0};
 
-    sprintf(select_sql, "SELECT* from Table_NTPManage WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product_id);
+    sprintf(select_sql, "SELECT* from Table_NTPManage WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product.id);
     res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK) {
         log_e("sqlite handle error: %s\n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
@@ -2964,7 +2964,7 @@ int dev_get_snmp_info(sqlite3 *db, SNMPManager* _globalSNMPInfo)
     char* err_msg=NULL;
     char select_sql[1024] = {0};
 
-    sprintf(select_sql, "SELECT* from Table_SNMPManage WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product_id);
+    sprintf(select_sql, "SELECT* from Table_SNMPManage WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product.id);
     res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK) {
         log_e("sqlite handle error: %s\n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
@@ -3118,7 +3118,7 @@ int dev_get_group_info(sqlite3 *db, GroupInfo* _globalgroupInfo)
     char* err_msg=NULL;
     char select_sql[1024] = {0};
 
-    sprintf(select_sql, "SELECT* from Table_GroupManage WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product_id);
+    sprintf(select_sql, "SELECT* from Table_GroupManage WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product.id);
     res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK) {
         log_e("sqlite handle error: %s\n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
@@ -3141,7 +3141,7 @@ int dev_get_group_info(sqlite3 *db, GroupInfo* _globalgroupInfo)
         {
             break;
         }
-        new_group->product_id = __globalDeviceManage._globalDevInfo.product_id;
+        new_group->product_id = __globalDeviceManage._globalDevInfo.product.id;
         new_group->GroupID =  atoi(pResult[i*ncolumn+1]);
         strcpy(new_group->GroupName,pResult[i*ncolumn+2]);
         strcpy(new_group->GroupChList,pResult[i*ncolumn+3]);
@@ -3168,7 +3168,7 @@ int dev_update_group_info(sqlite3 *db, GroupInfo* _globalgroupInfo)
     {
         return -1;
     }
-    sprintf(select_sql, "UPDATE Table_GroupManage SET groupName='%s' WHERE groupID=%d AND product_id=%d;",_globalgroupInfo->GroupName,_globalgroupInfo->GroupID, __globalDeviceManage._globalDevInfo.product_id);
+    sprintf(select_sql, "UPDATE Table_GroupManage SET groupName='%s' WHERE groupID=%d AND product_id=%d;",_globalgroupInfo->GroupName,_globalgroupInfo->GroupID, __globalDeviceManage._globalDevInfo.product.id);
     res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK) {
         log_e("sqlite handle error: %s\n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
@@ -3247,7 +3247,7 @@ int dev_get_user_info(sqlite3 *db, UserInfo* _globaluserInfo)
     char* err_msg=NULL;
     char select_sql[1024] = {0};
 
-    sprintf(select_sql, "SELECT* from Table_Userinfo WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product_id);
+    sprintf(select_sql, "SELECT * from Table_Userinfo WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product.id);
     res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK) {
         log_e("sqlite handle error: %s\n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
@@ -3270,7 +3270,7 @@ int dev_get_user_info(sqlite3 *db, UserInfo* _globaluserInfo)
         {
             break;
         }
-        new_user->product_id = __globalDeviceManage._globalDevInfo.product_id;
+        new_user->product_id = __globalDeviceManage._globalDevInfo.product.id;
         new_user->userID =  atoi(pResult[i*ncolumn+1]);
         new_user->userName = malloc(256);
         strcpy(new_user->userName,pResult[i*ncolumn+2]);
@@ -3384,7 +3384,7 @@ int dev_get_role_info(sqlite3 *db, RoleInfo* _globalRoleInfo)
     char* err_msg=NULL;
     char select_sql[1024] = {0};
 
-    sprintf(select_sql, "SELECT* from Table_RoleInfo WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product_id);
+    sprintf(select_sql, "SELECT* from Table_RoleInfo WHERE product_id = %d;", __globalDeviceManage._globalDevInfo.product.id);
     res = sqlite3_get_table(db, select_sql, &pResult, &nrow, &ncolumn, &err_msg);
     if(res != SQLITE_OK) {
         log_e("sqlite handle error: %s\n%s\n", err_msg,select_sql); sqlite3_free(err_msg);
@@ -3407,7 +3407,7 @@ int dev_get_role_info(sqlite3 *db, RoleInfo* _globalRoleInfo)
         {
             break;
         }
-        new_role->product_id = __globalDeviceManage._globalDevInfo.product_id;
+        new_role->product_id = __globalDeviceManage._globalDevInfo.product.id;
         new_role->roleID =  atoi(pResult[i*ncolumn+1]);
         new_role->roleName = malloc(256);
         strcpy(new_role->roleName,pResult[i*ncolumn+2]);
@@ -3443,7 +3443,7 @@ int dev_get_power_ds(sqlite3 *db,GlobalPowerManger* _powerAll,char* dateSelect)
 
     if (dateSelect)
     {
-        sprintf(select_sql, "SELECT* from Table_ChnTimerManage WHERE product_id = %d and date=date('%s');", __globalDeviceManage._globalDevInfo.product_id,dateSelect);
+        sprintf(select_sql, "SELECT* from Table_ChnTimerManage WHERE product_id = %d and date=date('%s');", __globalDeviceManage._globalDevInfo.product.id,dateSelect);
     }else{
         sprintf(select_sql, "SELECT* from Table_ChnTimerManage WHERE product_id = %d;", 1);
     }        

+ 41 - 39
pro/src/switch_ctrl.c

@@ -668,7 +668,7 @@ int g_switch_set_all_start_time_delay(void* manger,int ntype,int saddr,unsigned
     case TREE_AC_TYPE:
     {
         int ret = 0;
-        if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree)
+        if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree)
         {
             ret = g_switch_set_t_ac_start_time_delay(manger, saddr, (chn - 1) * 3, time / 1000);
             if (ret < 0)
@@ -746,7 +746,7 @@ int g_switch_set_all_stop_time_delay(void* manger,int ntype,int saddr,unsigned c
     case TREE_AC_TYPE:
     {
         int ret = 0;
-        if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree)
+        if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree)
         {
             ret = g_switch_set_t_ac_stop_time_delay(manger, saddr, (chn - 1) * 3, time / 1000);
             if (ret < 0)
@@ -855,7 +855,7 @@ int g_switch_set_all_chn_ctrl(void* manger,GlobalPowerManger* _globalPowerManger
         {
             t_ac_CtrlType=_globalTACManager->product_ph_outputType;
         }
-        if (t_ac_CtrlType == 2&&__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_Tree)
+        if (t_ac_CtrlType == 2&&__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_Tree)
         {
             unsigned short phsts=0;
             
@@ -912,7 +912,7 @@ int g_switch_set_all_chn_ctrl(void* manger,GlobalPowerManger* _globalPowerManger
                 sts |= ENABLE_TAC_STIME;
                 sts |= ENABLE_TAC_ETIME;
             }*/
-            if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
+            if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One)
             {
                 return g_switch_set_t_ac_phchn_ctrl(manger, saddr, (chn - 1), sts);
             }else{
@@ -1101,7 +1101,7 @@ int g_switch_set_all_single_threshold(void* manger,int ntype,int saddr,char chn,
                 sts |= ENABLE_TAC_W_UP;
             if (_globalPowerMangerTemp->global_over_manager->product_pwrcon_upper_enable == 1)
                 sts |= ENABLE_TAC_P_UP;
-            if (__globalDeviceManage._globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
+            if (__globalDeviceManage._globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One)
             {
                 return g_switch_set_t_ac_phchn_ctrl(manger, saddr, (chn - 1), sts);
             }else{
@@ -2414,9 +2414,11 @@ int ResetChmData(int nCtrlType)
     int chn = 1;
     int type = 0;
     int nTac_chn=3;
-    int nGroups=8;
     GlobalDeviceManager* _globalDeviceManager=&__globalDeviceManage;    
     __globalDeviceManage.useSlaveCount = 0;
+    ProductInfo_t *prod=&_globalDeviceManager->_globalDevInfo.product;
+    int nGroups=prod->ch_delay;
+
     power_clear(&_globalDeviceManager->_globalPowerManger);
     for (size_t i = 0; i < MAX_CHN_COUNT; i++)
     {
@@ -2426,7 +2428,7 @@ int ResetChmData(int nCtrlType)
                                 i,
                                 &type,
                                 &nMaxChn,
-                                __globalDeviceManage._globalDevInfo.product_pwr_type);
+                                __globalDeviceManage._globalDevInfo.product.pwr_type);
         log_d("ret:%d saddr:%d type:%d ch_num:%d.\n", ret, i, type, nMaxChn);
         // 有效地址记录
 
@@ -2460,14 +2462,14 @@ int ResetChmData(int nCtrlType)
                     memset(_globalPowerMangerTemp->global_over_manager, 0, sizeof(GlobalOverManager));
                     // 查询是否由通道信息
                     ret = dev_get_power_manage_info(_globalDeviceManager->db,
-                                                    _globalDeviceManager->_globalDevInfo.product_id,
+                                                    _globalDeviceManager->_globalDevInfo.product.id,
                                                     i,
                                                     j + 1, // 1*8+j
                                                     _globalPowerMangerTemp);
                     // 未查询到信息 则插入
                     if (ret == -1)
                     {
-                        _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                        _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product.id;
                         _globalPowerMangerTemp->product_saddr = i;
                         _globalPowerMangerTemp->product_ch_id = chn;
                         _globalPowerMangerTemp->product_ch_addr = j + 1;
@@ -2480,7 +2482,7 @@ int ResetChmData(int nCtrlType)
                         _globalPowerMangerTemp->product_ch_stop_delay = 1000 * (chn % nGroups != 0 ? chn % nGroups : nGroups);
 
                         if (dev_insert_power_manage_info(_globalDeviceManager->db,
-                                                         _globalDeviceManager->_globalDevInfo.product_id,
+                                                         _globalDeviceManager->_globalDevInfo.product.id,
                                                          _globalPowerMangerTemp->product_ch_id,
                                                          _globalPowerMangerTemp) != 0)
                         {
@@ -2495,7 +2497,7 @@ int ResetChmData(int nCtrlType)
                         */
                     }
                     INIT_LIST_HEAD(&_globalPowerMangerTemp->list_Tree_AC);
-                    if ( _globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One_B)
+                    if ( _globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One_B)
                     {
                         // 初始化三相子通道
                         GlobalTreeACManager *_globalTACManager = NULL;
@@ -2517,7 +2519,7 @@ int ResetChmData(int nCtrlType)
                                 return -1;
                             }
                             ret = dev_get_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                                 _globalDeviceManager->_globalDevInfo.product_id, i,
+                                                                 _globalDeviceManager->_globalDevInfo.product.id, i,
                                                                  j + 1, // 1*8+j
                                                                  indexT,
                                                                  _globalTACManager);
@@ -2525,14 +2527,14 @@ int ResetChmData(int nCtrlType)
                             // 未查询到信息 则插入
                             if (ret == -1)
                             {
-                                _globalTACManager->product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                                _globalTACManager->product_id = _globalDeviceManager->_globalDevInfo.product.id;
                                 _globalTACManager->product_saddr = i;
                                 _globalTACManager->product_ch_id = _globalPowerMangerTemp->product_ch_id;
                                 _globalTACManager->product_ch_addr = j + 1;
                                 _globalTACManager->product_ph_id = nTac_chn;
                                 _globalTACManager->product_ph_type = indexT;
                                 _globalTACManager->product_ph_outputType = 2; // 1三相2单相
-                                if (indexT == ((nTac_chn-3)/(PHASE_GROUP_CNT*3)+3)%3)
+                                if (indexT == ((nTac_chn-3)/(prod->ph_group*3)+3)%3)
                                 {
                                     _globalTACManager->product_ph_outputStatus = 1; // 1输出2不输出
                                 }
@@ -2542,7 +2544,7 @@ int ResetChmData(int nCtrlType)
                                 }
 
                                 if (dev_insert_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                                      _globalDeviceManager->_globalDevInfo.product_id,
+                                                                      _globalDeviceManager->_globalDevInfo.product.id,
                                                                       _globalTACManager->product_ch_id,
                                                                       _globalTACManager) != 0)
                                 {
@@ -2558,7 +2560,7 @@ int ResetChmData(int nCtrlType)
                                 _globalTACManager->product_ph_id = nTac_chn;
                                 _globalTACManager->product_saddr = i;
                                 _globalTACManager->product_ph_type = indexT;
-                                if (indexT == ((nTac_chn - 3) / (PHASE_GROUP_CNT * 3) + 3) % 3)
+                                if (indexT == ((nTac_chn - 3) / (prod->ph_group * 3) + 3) % 3)
                                 {
                                     _globalTACManager->product_ph_outputStatus = 1; // 1输出2不输出
                                 }
@@ -2582,7 +2584,7 @@ int ResetChmData(int nCtrlType)
                     {
                         _globalPowerMangerTemp->product_ch_id = chn;
                         sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
-                        if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
+                        if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product.id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
                         {
                             log_e("update pwr general data err.");
                         }
@@ -2620,13 +2622,13 @@ int ResetChmData(int nCtrlType)
                     memset(_globalPowerMangerTemp->global_over_manager, 0, sizeof(GlobalOverManager));
                     // 查询是否由通道信息
                     ret = dev_get_power_manage_info(_globalDeviceManager->db,
-                                                    _globalDeviceManager->_globalDevInfo.product_id, i,
+                                                    _globalDeviceManager->_globalDevInfo.product.id, i,
                                                     j + 1, // 1*8+j
                                                     _globalPowerMangerTemp);
                     // 未查询到信息 则插入
                     if (ret == -1)
                     {
-                        _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                        _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product.id;
                         _globalPowerMangerTemp->product_saddr = i;
                         _globalPowerMangerTemp->product_ch_id = chn;
                         _globalPowerMangerTemp->product_ch_addr = j + 1;
@@ -2637,7 +2639,7 @@ int ResetChmData(int nCtrlType)
                         _globalPowerMangerTemp->product_ch_start_delay = 1000;
                         _globalPowerMangerTemp->product_ch_stop_delay = 1000;
                         if (dev_insert_power_manage_info(_globalDeviceManager->db,
-                                                         _globalDeviceManager->_globalDevInfo.product_id,
+                                                         _globalDeviceManager->_globalDevInfo.product.id,
                                                          _globalPowerMangerTemp->product_ch_id,
                                                          _globalPowerMangerTemp) != 0)
                         {
@@ -2681,14 +2683,14 @@ int ResetChmData(int nCtrlType)
                     memset(_globalPowerMangerTemp->global_over_manager, 0, sizeof(GlobalOverManager));
                     // 查询是否由通道信息
                     ret = dev_get_power_manage_info(_globalDeviceManager->db,
-                                                    _globalDeviceManager->_globalDevInfo.product_id, i,
+                                                    _globalDeviceManager->_globalDevInfo.product.id, i,
                                                     j + 1, // 1*8+j
                                                     _globalPowerMangerTemp);
                     _globalPowerMangerTemp->product_ch_addr = j + 1;
                     // 未查询到信息 则插入
                     if (ret == -1)
                     {
-                        _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                        _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product.id;
                         _globalPowerMangerTemp->product_saddr = i;
                         _globalPowerMangerTemp->product_ch_id = chn;
                         _globalPowerMangerTemp->product_ch_addr = j + 1;
@@ -2701,7 +2703,7 @@ int ResetChmData(int nCtrlType)
                         _globalPowerMangerTemp->product_ch_stop_delay = 1000 * (chn % nGroups != 0 ? chn % nGroups : nGroups);
 
                         if (dev_insert_power_manage_info(_globalDeviceManager->db,
-                                                         _globalDeviceManager->_globalDevInfo.product_id,
+                                                         _globalDeviceManager->_globalDevInfo.product.id,
                                                          _globalPowerMangerTemp->product_ch_id,
                                                          _globalPowerMangerTemp) != 0)
                         {
@@ -2722,7 +2724,7 @@ int ResetChmData(int nCtrlType)
                     {
                         _globalPowerMangerTemp->product_ch_id = chn;
                         sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
-                        if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
+                        if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product.id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
                         {
                             log_e("update pwr general data err.");
                         }
@@ -2739,7 +2741,7 @@ int ResetChmData(int nCtrlType)
                 GlobalPowerManger *_globalPowerMangerTemp = NULL;
                 for (size_t j = 0; j < nMaxChn; j++)
                 {
-                    if (_globalDeviceManager->_globalDevInfo.product_pwr_type == SmartPDU_Tree_AC_One)
+                    if (_globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_Tree_AC_One)
                     {
                         log_i("TreeAC_TYPE_3-1!\n");
                         _globalPowerMangerTemp = (GlobalPowerManger *)malloc(sizeof(GlobalPowerManger));
@@ -2759,14 +2761,14 @@ int ResetChmData(int nCtrlType)
                         memset(_globalPowerMangerTemp->global_over_manager, 0, sizeof(GlobalOverManager));
                         // 查询是否由通道信息
                         ret = dev_get_power_manage_info(_globalDeviceManager->db,
-                                                        _globalDeviceManager->_globalDevInfo.product_id, i,
+                                                        _globalDeviceManager->_globalDevInfo.product.id, i,
                                                         j + 1, // 1*8+j
                                                         _globalPowerMangerTemp);
                         _globalPowerMangerTemp->product_ch_addr = j + 1;
                         // 未查询到信息 则插入
                         if (ret == -1)
                         {
-                            _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                            _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product.id;
                             _globalPowerMangerTemp->product_saddr = i;
                             _globalPowerMangerTemp->product_ch_id = chn;
                             _globalPowerMangerTemp->product_ch_addr = j + 1;
@@ -2779,7 +2781,7 @@ int ResetChmData(int nCtrlType)
                             _globalPowerMangerTemp->product_ch_stop_delay = 1000 * (chn % nGroups != 0 ? chn % nGroups : nGroups);
 
                             if (dev_insert_power_manage_info(_globalDeviceManager->db,
-                                                             _globalDeviceManager->_globalDevInfo.product_id,
+                                                             _globalDeviceManager->_globalDevInfo.product.id,
                                                              _globalPowerMangerTemp->product_ch_id,
                                                              _globalPowerMangerTemp) != 0)
                             {
@@ -2793,7 +2795,7 @@ int ResetChmData(int nCtrlType)
                         {
                             _globalPowerMangerTemp->product_ch_id = chn;
                             sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
-                            if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
+                            if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product.id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
                             {
                                 log_e("update pwr general data err.");
                             }
@@ -2820,7 +2822,7 @@ int ResetChmData(int nCtrlType)
                                 return -1;
                             }
                             ret = dev_get_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                                 _globalDeviceManager->_globalDevInfo.product_id, i,
+                                                                 _globalDeviceManager->_globalDevInfo.product.id, i,
                                                                  j + 1, // 1*8+j
                                                                  indexT,
                                                                  _globalTACManager);
@@ -2828,7 +2830,7 @@ int ResetChmData(int nCtrlType)
                             // 未查询到信息 则插入
                             if (ret == -1)
                             {
-                                _globalTACManager->product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                                _globalTACManager->product_id = _globalDeviceManager->_globalDevInfo.product.id;
                                 _globalTACManager->product_saddr = i;
                                 _globalTACManager->product_ch_id = _globalPowerMangerTemp->product_ch_id;
                                 _globalTACManager->product_ch_addr = j + 1;
@@ -2845,7 +2847,7 @@ int ResetChmData(int nCtrlType)
                                 }
 
                                 if (dev_insert_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                                      _globalDeviceManager->_globalDevInfo.product_id,
+                                                                      _globalDeviceManager->_globalDevInfo.product.id,
                                                                       _globalTACManager->product_ch_id,
                                                                       _globalTACManager) != 0)
                                 {
@@ -2895,14 +2897,14 @@ int ResetChmData(int nCtrlType)
                             memset(_globalPowerMangerTemp->global_over_manager, 0, sizeof(GlobalOverManager));
                             // 查询是否由通道信息
                             ret = dev_get_power_manage_info(_globalDeviceManager->db,
-                                                            _globalDeviceManager->_globalDevInfo.product_id, i,
+                                                            _globalDeviceManager->_globalDevInfo.product.id, i,
                                                             j / 3 + 1, // 1*8+j
                                                             _globalPowerMangerTemp);
                             _globalPowerMangerTemp->product_ch_addr = j / 3 + 1;
                             // 未查询到信息 则插入
                             if (ret == -1)
                             {
-                                _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                                _globalPowerMangerTemp->product_id = _globalDeviceManager->_globalDevInfo.product.id;
                                 _globalPowerMangerTemp->product_saddr = i;
                                 _globalPowerMangerTemp->product_ch_id = chn;
                                 _globalPowerMangerTemp->product_ch_addr = j / 3 + 1;
@@ -2915,7 +2917,7 @@ int ResetChmData(int nCtrlType)
                                 _globalPowerMangerTemp->product_ch_stop_delay = 1000 * (chn % nGroups != 0 ? chn % nGroups : nGroups);
 
                                 if (dev_insert_power_manage_info(_globalDeviceManager->db,
-                                                                 _globalDeviceManager->_globalDevInfo.product_id,
+                                                                 _globalDeviceManager->_globalDevInfo.product.id,
                                                                  _globalPowerMangerTemp->product_ch_id,
                                                                  _globalPowerMangerTemp) != 0)
                                 {
@@ -2929,7 +2931,7 @@ int ResetChmData(int nCtrlType)
                             {
                                 _globalPowerMangerTemp->product_ch_id = chn;
                                 sprintf(_globalPowerMangerTemp->product_ch_name, "CH%d", _globalPowerMangerTemp->product_ch_id);
-                                if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product_id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
+                                if (dev_update_power_manage_genera_info_addr(__globalDeviceManage.db, _globalDeviceManager->_globalDevInfo.product.id, _globalPowerMangerTemp->product_saddr, _globalPowerMangerTemp->product_ch_addr, _globalPowerMangerTemp) != 0)
                                 {
                                     log_e("update pwr general data err.");
                                 }
@@ -2955,7 +2957,7 @@ int ResetChmData(int nCtrlType)
                             return -1;
                         }
                         ret = dev_get_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                             _globalDeviceManager->_globalDevInfo.product_id, i,
+                                                             _globalDeviceManager->_globalDevInfo.product.id, i,
                                                              j + 1, // 1*8+j
                                                              (j + 3) % 3,
                                                              _globalTACManager);
@@ -2963,7 +2965,7 @@ int ResetChmData(int nCtrlType)
                         // 未查询到信息 则插入
                         if (ret == -1)
                         {
-                            _globalTACManager->product_id = _globalDeviceManager->_globalDevInfo.product_id;
+                            _globalTACManager->product_id = _globalDeviceManager->_globalDevInfo.product.id;
                             _globalTACManager->product_saddr = i;
                             _globalTACManager->product_ch_id = _globalPowerMangerTemp->product_ch_id;
                             _globalTACManager->product_ch_addr = j + 1;
@@ -2972,7 +2974,7 @@ int ResetChmData(int nCtrlType)
                             _globalTACManager->product_ph_outputType = 1;   // 1三相2单相
                             _globalTACManager->product_ph_outputStatus = 1; // 1输出
                             if (dev_insert_t_ac_power_manage_info(_globalDeviceManager->db,
-                                                                  _globalDeviceManager->_globalDevInfo.product_id,
+                                                                  _globalDeviceManager->_globalDevInfo.product.id,
                                                                   _globalTACManager->product_ch_id,
                                                                   _globalTACManager) != 0)
                             {

+ 7 - 9
pro/src/sys.c

@@ -123,10 +123,6 @@ int sys_reboot(void)
 int sys_set_factory(void)
 {
     int r=0;
-
-#ifdef KEY_PARAS_IN_FILE
-    r = paras_reset();
-#else
     char dir[100],src[200],dst[200];
 
     extern GlobalDeviceManager __globalDeviceManage;
@@ -138,6 +134,8 @@ int sys_set_factory(void)
     snprintf(src, sizeof(src), "%s/%s", dir, DATABASE_BAK_NAME);
     snprintf(dst, sizeof(dst), "%s/%s", dir, DATABASE_NAME);
 
+    paras_reset();
+
     LOGD("___ file_copy from %s to %s\n", src, dst);
     r = file_copy(dst, src);
     if(r==0) {
@@ -152,7 +150,6 @@ int sys_set_factory(void)
         LOGD("____ exit smartPDU now ...\n");
         exit(0);
     }
-#endif
 
     return r;
 }
@@ -204,10 +201,10 @@ void print_net(char*s, NetworkInfo_t *p)
 }
 void print_modbus(char*s, ModbusInfo_t *p)
 {
-    LOGD("__%s__mbus.mode:    %d\n", s, p->product_modbus_type);
-    LOGD("__%s__mbus.addr:    %d\n", s, p->product_modbus_baud);
-    LOGD("__%s__mbus.mask:    %d\n", s, p->product_modbus_addr);
-    LOGD("__%s__mbus.mask:    %s\n", s, p->product_relay_ctrl_port);
+    LOGD("__%s__mbus.mode:    %d\n", s, p->mode);
+    LOGD("__%s__mbus.addr:    %d\n", s, p->addr);
+    LOGD("__%s__mbus.baud:    %d\n", s, p->baudrate);
+    LOGD("__%s__mbus.path:    %s\n", s, p->path);
 }
 
 static int set_ipaddr(int family, const char* iface, const char* addr, const char* netmask)
@@ -1210,6 +1207,7 @@ int sys_init(void)
     //userShellInit();
     initLogger();
     lock_s_init();
+    paras_init();
     
     thread_start(THREAD_ID_POLLING, polling_thread, NULL, 4*MB, 0);
 

+ 3 - 3
pro/src/websocket_handle.c

@@ -110,9 +110,9 @@ static void web_update(ws_handle_t *wh)
     {
         //overall info
         pwrall_info_t *pall=&wh->pwrall;
-        if(gdm->_globalDevInfo.product_pwr_type==SmartPDU_Tree_AC_Tree ||
-            gdm->_globalDevInfo.product_pwr_type==SmartPDU_Tree_AC_One ||
-			gdm->_globalDevInfo.product_pwr_type==SmartPDU_Tree_AC_One_B)
+        if(gdm->_globalDevInfo.product.pwr_type==SmartPDU_Tree_AC_Tree ||
+            gdm->_globalDevInfo.product.pwr_type==SmartPDU_Tree_AC_One ||
+			gdm->_globalDevInfo.product.pwr_type==SmartPDU_Tree_AC_One_B)
 		{
             pall->ph3 = 1;
 

+ 13 - 13
pub

@@ -66,7 +66,7 @@ function do_copy()
     if [ "$1" = "PRJ_XIAN_AC_I1_O1_P4" ]; then
         name=ac_in1_out1_p4_xian
 
-        cp -f $custdir/db/ac_i1_o1_chinese_xian.db $curdir/output/t113i/root/run/app/pdu_dat.db
+        #cp -f $custdir/db/ac_i1_o1_chinese_xian.db $curdir/output/t113i/root/run/app/pdu_dat.db
         cp -f $custdir/logo/logo_neuter.png $curdir/output/t113i/root/run/app/image/logo.png
     elif [ "$1" = "PRJ_XIAN_AC_I1_O1_P8" ]; then
         name=ac_in1_out1_p8_xian
@@ -76,7 +76,7 @@ function do_copy()
     elif [ "$1" = "PRJ_ITK_AC_I1_O1" ]; then
         name=ac_in1_out1_russia_itk
 
-        cp -f $custdir/db/ac_i1_o1_russian.db $curdir/output/t113i/root/run/app/pdu_dat.db
+        #cp -f $custdir/db/ac_i1_o1_russian.db $curdir/output/t113i/root/run/app/pdu_dat.db
         cp -f $custdir/logo/logo_itk.png $curdir/output/t113i/root/run/app/image/logo.png
     elif [ "$1" = "PRJ_ITK_AC_I3_O1" ]; then
         name=ac_in3_out1_russia_itk
@@ -86,7 +86,7 @@ function do_copy()
     elif [ "$1" = "PRJ_RELEASE_DC_I_DC_O" ]; then
         name=dc_in_dc_out_release
         
-        cp -f $custdir/db/dc_i_dc_o_chinese.db $curdir/output/t113i/root/run/app/pdu_dat.db
+        #cp -f $custdir/db/dc_i_dc_o_chinese.db $curdir/output/t113i/root/run/app/pdu_dat.db
         cp -f $custdir/logo/logo_neuter.png $curdir/output/t113i/root/run/app/image/logo.png
     elif [ "$1" = "PRJ_RELEASE_AC_I1_O1" ]; then
         name=ac_in1_out1_release
@@ -101,34 +101,34 @@ function do_copy()
     elif [ "$1" = "PRJ_RELEASE_AC_I3_O3" ]; then
         name=ac_in3_out3_release
 
-        cp -f $custdir/db/ac_i3_o3_chinese.db $curdir/output/t113i/root/run/app/pdu_dat.db
+        #cp -f $custdir/db/ac_i3_o3_chinese.db $curdir/output/t113i/root/run/app/pdu_dat.db
         cp -f $custdir/logo/logo_neuter.png $curdir/output/t113i/root/run/app/image/logo.png
     elif [ "$PRJ" = "PRJ_LITECH_AC_I1_O1" ]; then
         name=ac_in1_out1_litech
 
-        cp -f $custdir/db/ac_i1_o1_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
+        #cp -f $custdir/db/ac_i1_o1_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
         cp -f $custdir/logo/logo_litech.png $curdir/output/t113i/root/run/app/image/logo.png
     elif [ "$1" = "PRJ_LITECH_AC_I3_O1" ]; then
         name=ac_in3_out1_litech
 
-        cp -f $custdir/db/ac_i3_o1_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
+        #cp -f $custdir/db/ac_i3_o1_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
         cp -f $custdir/logo/logo_litech.png $curdir/output/t113i/root/run/app/image/logo.png
     elif [ "$1" = "PRJ_ANDERSON_AC_I3_O3" ]; then
         name=ac_in3_out3_anderson
 
-        cp -f $custdir/db/ac_i3_o3_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
+        #cp -f $custdir/db/ac_i3_o3_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
         cp -f $custdir/logo/logo_neuter.png $curdir/output/t113i/root/run/app/image/logo.png
     elif [ "$1" = "PRJ_USASL_AC_I3_O1" ]; then
         name=ac_in3_out1_usa_sl
         
-        cp -f $custdir/db/ac_i3_o1_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
+        #cp -f $custdir/db/ac_i3_o1_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
         cp -f $custdir/logo/logo_neuter.png $curdir/output/t113i/root/run/app/image/logo.png
     elif [ "$PRJ" = "PRJ_USASL_AC_I3_O3" ]; then
         name=ac_in3_out3_usa_sl
         
-        cp -f $custdir/db/ac_i3_o3_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
+        #cp -f $custdir/db/ac_i3_o3_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
         cp -f $custdir/logo/logo_neuter.png $curdir/output/t113i/root/run/app/image/logo.png
-    elif [ "$1" = "PRJ_HYPERTEC" ]; then
+    elif [ "$1" = "PRJ_HYPERTEC_AC_I3_O1" ]; then
         name=ac_in3_out1_hypertec
         
         cp -f $custdir/db/ac_i3_o1_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
@@ -136,17 +136,17 @@ function do_copy()
     elif [ "$1" = "PRJ_INSPUR_DC_I_DC_O" ]; then
         name=dc_in1_out1_inspur
         
-        cp -f $custdir/db/dc_i_dc_o_chinese.db $curdir/output/t113i/root/run/app/pdu_dat.db
+        #cp -f $custdir/db/dc_i_dc_o_chinese.db $curdir/output/t113i/root/run/app/pdu_dat.db
         cp -f $custdir/logo/logo_neuter.png $curdir/output/t113i/root/run/app/image/logo.png
     elif [ "$1" = "PRJ_TEST" ]; then
         name=ac_in3_out1_test
         
-        cp -f $custdir/db/ac_i3_o1_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
+        #cp -f $custdir/db/ac_i3_o1_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
         cp -f $custdir/logo/logo_neuter.png $curdir/output/t113i/root/run/app/image/logo.png
     elif [ "$1" = "PRJ_STSC_I3_O3" ]; then
         name=ac_in3_out3_stsc
         
-        cp -f $custdir/db/ac_i3_o3_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
+        #cp -f $custdir/db/ac_i3_o3_english.db $curdir/output/t113i/root/run/app/pdu_dat.db
         cp -f $custdir/logo/logo_neuter.png $curdir/output/t113i/root/run/app/image/logo.png
     else
         echo error! $RPJ not define!!!