Quellcode durchsuchen

1、暂时解决报警信息引起的崩溃,hash计算还未添加防重及超界处理
2、网口ip及mac地址可在web上显示

guohui vor 2 Jahren
Ursprung
Commit
74211464ba
6 geänderte Dateien mit 86 neuen und 48 gelöschten Zeilen
  1. 4 4
      pro/config/cfg.h
  2. 7 7
      pro/src/app.c
  3. 3 1
      pro/src/language_hashmap.c
  4. 27 16
      pro/src/netswitch.c
  5. 41 16
      pro/src/sqlite_handle.c
  6. 4 4
      pro/src/sqlite_handle.h

+ 4 - 4
pro/config/cfg.h

@@ -22,8 +22,8 @@
 
 /////////////customer demannd//////////////////////
 //#define CUST_GOM037
-#define CUST_USASL
-//#define CUST_ANDERSON
+//#define CUST_USASL
+#define CUST_ANDERSON
 
 
 #ifdef CUST_GOM037
@@ -49,10 +49,10 @@
     #define USE_NETSWITCH
 
     //port index, start from 0
-    #define INTER_USE_PORT              0
+    #define SW_INTER_PORT              23
 
     #undef MAX_CHN_COUNT
-    #define MAX_CHN_COUNT               24
+    #define MAX_CHN_COUNT               4//24
 #endif
 
 

+ 7 - 7
pro/src/app.c

@@ -59,7 +59,7 @@ void* power_thread(void* arg)
     _PowerDSManage_t* _powerDsManageTemp = NULL ;
     dev_search_last_Index(_globalDeviceManager->db, &nSaveIndex, strPower);       // 查询日志最大点
     dev_search_last_Index(_globalDeviceManager->db, &nSaveTacIndex, strTacPower); // 查询日志最大点
-    _globalDeviceManager->_global_alarmLanguage=create_hash_table(28);
+    _globalDeviceManager->_global_alarmLanguage=create_hash_table(500);
     InitHashTable(_globalDeviceManager->_global_alarmLanguage);
     unsigned int samp_time = _globalDeviceManager->_global_device_info->product_samp_time;
     unsigned int usleepTime = samp_time*1000;
@@ -1630,7 +1630,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
 
     int nGroups=CHANNEL_DELAY_SEC;
     char strLog[200]={"MODBUS"};
-    dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[_globalDeviceManager->_global_device_info->product_language],strLog);
+    dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],strLog);
     log_d("GCPDU init begin!");
     memset(&_globalDeviceManager->_all_ctrl_board, 0, sizeof(_globalDeviceManager->_all_ctrl_board));
     for (size_t i = 1; i < MAX_CHN_COUNT; i++)
@@ -2203,7 +2203,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
         }
     }
     
-    sprintf(strLog,"%s$|$通道",language_alarm_Init_Success[_globalDeviceManager->_global_device_info->product_language]);
+    sprintf(strLog,"%s$|$通道",language_alarm_Init_Success[0]);
     char number[10];
     sprintf(number,"%d",chn-1);
     dev_Alarm_Run_message(_globalDeviceManager,strLog,number);
@@ -2227,7 +2227,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     else
         log_d("get sensor info ok.");
 
-    dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[_globalDeviceManager->_global_device_info->product_language],"sensor");
+    dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],"sensor");
     ret =dev_get_breaker_manage_info(_globalDeviceManager->db,_globalDeviceManager->_global_device_info->product_id,
                 &_globalDeviceManager->g_new_global_breaker);
 
@@ -2244,7 +2244,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     thread_start(THREAD_ID_SENSOR, sensor_thread, _globalDeviceManager, 10*MB, 0);
     thread_start(THREAD_ID_SHMW, shm_thread, _globalDeviceManager, 10*MB, 0);
 	thread_start(THREAD_ID_BREAKER, breaker_thread, _globalDeviceManager, 5*MB, 0);
-        dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[_globalDeviceManager->_global_device_info->product_language],"Server Thread");
+        dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],"Server Thread");
     
    #endif
     //创建传感器采集控制线程
@@ -2281,9 +2281,9 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     }
 
     thread_start(THREAD_ID_NTP, ntp_thread, NULL, 10 * MB, 0);
-    dev_Alarm_Run_message(_globalDeviceManager, language_alarm_Init_Success[_globalDeviceManager->_global_device_info->product_language], "NTP");
+    dev_Alarm_Run_message(_globalDeviceManager, language_alarm_Init_Success[0], "NTP");
     thread_start(THREAD_ID_SNMP, snmp_thread, _globalDeviceManager, 10 * MB, 0);
-    dev_Alarm_Run_message(_globalDeviceManager, language_alarm_Init_Success[_globalDeviceManager->_global_device_info->product_language], "SNMP");
+    dev_Alarm_Run_message(_globalDeviceManager, language_alarm_Init_Success[0], "SNMP");
     // 初始化webapp
     websocket_init();
     appweb_init();

+ 3 - 1
pro/src/language_hashmap.c

@@ -32,7 +32,9 @@ void insert_Newhash(HashTable *table, const char *key, const char value[][64],in
     }   
     entry->valueLength=valuelens;
     entry->next = table->ptable[index];  
-    table->ptable[index] = entry;  
+    table->ptable[index] = entry;
+    
+    //printf("___%s, index: %d\n", key, index);
 }  
   
 // 在哈希表中查找键对应的值  

+ 27 - 16
pro/src/netswitch.c

@@ -56,7 +56,7 @@ static netsnmp_variable_list* snmp_getx(int version, char *community, char *ip,
     
     oid *poid = snmp_parse_oid(oid_str, name, &namelen);
     if(poid==NULL) {
-        LOGE("___snmp_parse_oid failed\n");
+        LOGE("___snmp_parse_oid %s failed\n", oid_str);
         goto quit;
     }
 
@@ -269,9 +269,6 @@ static void sw_sync_mac_by_id(netswitch_info_t *dst, netswitch_info_t *src)
         if(src->port[i].id != -1) {
             strcpy(dst->port[id].mac, src->port[i].mac);
         }
-        else {
-            dst->port[id].mac[0] = 0;
-        }
     }
 }
 static int get_id_by_mac(netswitch_info_t *sw, port_info_t *pt)
@@ -371,27 +368,39 @@ static void sw_print(char *s, netswitch_info_t *sw)
 */
 static int get_port_start(void)
 {
-    int port=-1;
+    int port=-1,val;
     netsnmp_variable_list *var,*pvar;
 
-    char *ifEntry="1.3.6.1.2.1.2.2.1.8";
-    var = snmp_get(SNMP_VERSION_2c, "public", SW_HOST_IP, ifEntry);
+    char *ifEntry="1.3.6.1.2.1.2.2";
+    var = snmp_getbulk(SNMP_VERSION_2c, "public", SW_HOST_IP, ifEntry);
     if(var) {
         int id;
-        char *p,*tok="ifOperStatus.";
+        char *p,*tok="ifIndex.";
 
         for (pvar=var; pvar; pvar=pvar->next_variable) {
             char *pstr = get_string(pvar);
             if(pstr) {
+                //LOGD("____5___%s\n", pstr);
                 p = strstr(pstr, tok);
                 if(p) {
-                    port = atoi(p+strlen(tok));
+                    val = atoi(p+strlen(tok));
+                    if(val>2) {
+                        port = val;
+                    }
                 }
                 free(pstr);
+
+                if(port>2) {
+                    LOGD("_____start port: %d\n", port);
+                    break;
+                }
             }
         }
         snmp_free_varbind(var);
     }
+    else {
+        LOGE("___get_port_start, snmp_getnext %s failed\n", ifEntry);
+    }
 
     return port;
 }
@@ -559,7 +568,7 @@ static int sw_chk(netswitch_info_t *sw1, netswitch_info_t *sw2, netswitch_evts_t
             }
             flag = 1;
         }
-
+        
         if(strlen(sw2->port[i].mac) && strcmp(sw1->port[i].mac, sw2->port[i].mac)) {
             LOGD("____ port %d mac changed from: %s, to: %s\n", i+1, sw1->port[i].mac, sw2->port[i].mac);
             evts->evt[i].dev = EVT_MAC_CHG;
@@ -613,7 +622,7 @@ static int sw_alarm(netswitch_evts_t *evts, netswitch_info_t *old, netswitch_inf
     
     alarm_str[0] = 0;
     for(i=0; i<SW_PORT_MAX; i++) {
-        if(i==INTER_USE_PORT) {
+        if(i==SW_INTER_PORT) {
             continue;
         }
         
@@ -637,7 +646,7 @@ static int sw_alarm(netswitch_evts_t *evts, netswitch_info_t *old, netswitch_inf
     }
 
     if(flag) {
-        r = dev_insert_alarm_info(get_db(), get_prod_id(), 9, time_str, alarm_str);
+        r = dev_insert_alarm_info(get_db(), get_prod_id(), 1, time_str, alarm_str);
     }
 
     return r;
@@ -655,12 +664,12 @@ static void* sw_thread(void *arg)
 
     SOCK_STARTUP;
     while(h->quit==0) {
-        r = sw_get(&nh->sw);
+        r = sw_get(&nh->sw2);
         if(r==0 && sw_chk(&nh->sw, &nh->sw2, &evts)) {
             sw_alarm(&evts, &nh->sw, &nh->sw2);
             sw_cpy(&nh->sw, &nh->sw2);
         }
-        usleep(1000);
+        sleep(1);
     }
     SOCK_CLEANUP;
 
@@ -671,7 +680,10 @@ static void* sw_thread(void *arg)
 int netswitch_init(void)
 {
 #ifdef USE_NETSWITCH
-    thread_start(THREAD_ID_SWITCH, sw_thread, NULL, 10*MB, 0);
+     ns_handle_t *h=&nsHandle;
+
+     h->port_start = -1; //SW_PORT_START
+    thread_start(THREAD_ID_SWITCH, sw_thread, h, 10*MB, 0);
 #endif
 
     return 0;
@@ -683,7 +695,6 @@ int netswitch_deinit(void)
 #ifdef USE_NETSWITCH
     ns_handle_t *h=&nsHandle;
     
-    h->port_start = -1; //SW_PORT_START
     thread_stop(THREAD_ID_SWITCH);
 #endif
 

+ 41 - 16
pro/src/sqlite_handle.c

@@ -400,11 +400,14 @@ int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_Ov
 {
     GlobalPowerManger* _globalPowerMangerTemp = NULL ;
     char* upgrade_msg = NULL ;
+    netswitch_info_t swInfo;
+    int idx=0;
 
     if(list_empty(&globalDeviceManger->_globalPowerManger.list)) {
         return -1;
     }
 
+    netswitch_get(&swInfo);
     list_for_each_entry(_globalPowerMangerTemp, &globalDeviceManger->_globalPowerManger.list, list)
     {
         if (!_globalPowerMangerTemp)
@@ -413,6 +416,7 @@ int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_Ov
             /* code */
         }
         
+
         if (_globalPowerMangerTemp->product_ch_type==TREE_AC_TYPE||globalDeviceManger->_global_device_info->product_pwr_type == SmartPDU_Tree_AC_One_B)
         {
             GlobalTreeACManager* _TreeACTemp=NULL;
@@ -475,6 +479,20 @@ int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_Ov
                 }else{
                     _overChnPwrBackInfoTemp->status = _globalPowerMangerTemp->_PowerInfo.status;
                 }
+
+            #ifdef USE_NETSWITCH
+                idx = _overChnPwrBackInfoTemp->productChId-1;
+                port_info_t *info=&swInfo.port[idx];
+                if(info->up) {
+                    _overChnPwrBackInfoTemp->mac_addr = swInfo.port[idx].mac;
+                    _overChnPwrBackInfoTemp->ip_addr = swInfo.port[idx].ip;
+                }
+                else {
+                    _overChnPwrBackInfoTemp->mac_addr = "";
+                    _overChnPwrBackInfoTemp->ip_addr = "";
+                }
+            #endif
+
                 list_add_tail(&_overChnPwrBackInfoTemp->list, &__overChnPwrAckInfo->list);
             }
         }
@@ -501,6 +519,13 @@ int dev_search_latest_power_All_info(GlobalDeviceManager* globalDeviceManger,_Ov
             _overChnPwrBackInfoTemp->factor = _globalPowerMangerTemp->_PowerInfo.factor;
             _overChnPwrBackInfoTemp->product_ch_start_delay = _globalPowerMangerTemp->product_ch_start_delay;
             _overChnPwrBackInfoTemp->product_ch_stop_delay = _globalPowerMangerTemp->product_ch_stop_delay;
+
+        #ifdef USE_NETSWITCH
+            idx = _overChnPwrBackInfoTemp->productChId-1;
+            _overChnPwrBackInfoTemp->mac_addr = swInfo.port[idx].mac;
+            _overChnPwrBackInfoTemp->ip_addr = swInfo.port[idx].ip;
+        #endif
+
             list_add_tail(&_overChnPwrBackInfoTemp->list, &__overChnPwrAckInfo->list);
         }
     }
@@ -3162,13 +3187,13 @@ void get_message_CtrlType(int nCtrlType,char* message)
  *
  * 根据指定的告警类型,构建告警信息并发送。
  *
- * @param __globalDeviceManger 全局设备管理器指针
+ * @param globalDeviceManger 全局设备管理器指针
  * @param __globalPowerTemp 全局电源管理器指针
  * @param _AlarmType 告警类型
  *
  * @return 返回值为0表示发送成功,非0表示发送失败
  */
-int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPowerManger* __globalPowerTemp,int _AlarmType)
+int dev_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalPowerManger* __globalPowerTemp,int _AlarmType)
 {
     char AlarmText[256];
     int languagesID = 0;
@@ -3217,7 +3242,7 @@ int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPower
 
     char buffer[80];
     strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);    
-    dev_insert_alarm_info(__globalDeviceManage.db,__globalPowerTemp->product_id,0,buffer,AlarmText);
+    dev_insert_alarm_info(globalDeviceManger->db,__globalPowerTemp->product_id,0,buffer,AlarmText);
 
     // 超限动作
     
@@ -3231,7 +3256,7 @@ int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPower
         {
             if (__globalPowerTemp->global_over_manager->product_vol_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
             {
-                ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, __globalPowerTemp,
+                ret = g_switch_set_all_chn_ctrl(&globalDeviceManger->_globalRelaySampManger, __globalPowerTemp,
                                                 __globalPowerTemp->product_saddr,
                                                 __globalPowerTemp->product_ch_addr, // 多版端口余8
                                                 0, false);
@@ -3242,7 +3267,7 @@ int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPower
         {
             if (__globalPowerTemp->global_over_manager->product_vol_over_lower_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
             {
-                ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, __globalPowerTemp,
+                ret = g_switch_set_all_chn_ctrl(&globalDeviceManger->_globalRelaySampManger, __globalPowerTemp,
                                                 __globalPowerTemp->product_saddr,
                                                 __globalPowerTemp->product_ch_addr, // 多版端口余8
                                                 0, false);
@@ -3253,7 +3278,7 @@ int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPower
         {
             if (__globalPowerTemp->global_over_manager->product_cur_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
             {
-                ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, __globalPowerTemp,
+                ret = g_switch_set_all_chn_ctrl(&globalDeviceManger->_globalRelaySampManger, __globalPowerTemp,
                                                 __globalPowerTemp->product_saddr,
                                                 __globalPowerTemp->product_ch_addr, // 多版端口余8
                                                 0, false);
@@ -3264,7 +3289,7 @@ int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPower
         {
             if (__globalPowerTemp->global_over_manager->product_pwr_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
             {
-                ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, __globalPowerTemp,
+                ret = g_switch_set_all_chn_ctrl(&globalDeviceManger->_globalRelaySampManger, __globalPowerTemp,
                                                 __globalPowerTemp->product_saddr,
                                                 __globalPowerTemp->product_ch_addr, // 多版端口余8
                                                 0, false);
@@ -3275,7 +3300,7 @@ int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPower
         {
             if (__globalPowerTemp->global_over_manager->product_pwrcon_over_upper_threshold_ctrl == ALARM_CTRL_CLOSE_CH)
             {
-                ret = g_switch_set_all_chn_ctrl(&__globalDeviceManage._globalRelaySampManger, __globalPowerTemp,
+                ret = g_switch_set_all_chn_ctrl(&globalDeviceManger->_globalRelaySampManger, __globalPowerTemp,
                                                 __globalPowerTemp->product_saddr,
                                                 __globalPowerTemp->product_ch_addr, // 多版端口余8
                                                 0, false);
@@ -3294,13 +3319,13 @@ int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPower
  *
  * 根据给定的告警类型,生成对应的告警文本,并将其插入到告警信息数据库中。
  *
- * @param __globalDeviceManger 全局设备管理器指针
+ * @param globalDeviceManger 全局设备管理器指针
  * @param __globalPowerTemp 全局 AC 管理器指针
  * @param _AlarmType 告警类型
  *
  * @return 返回值为 0 表示成功,其他值表示失败
  */
-int dev_Alarm_T_AC_message(GlobalDeviceManager* __globalDeviceManger,GlobalTreeACManager* __globalPowerTemp,int _AlarmType)
+int dev_Alarm_T_AC_message(GlobalDeviceManager* globalDeviceManger, GlobalTreeACManager* __globalPowerTemp,int _AlarmType)
 {
         char AlarmText[256];
     int languagesID=0;
@@ -3351,7 +3376,7 @@ int dev_Alarm_T_AC_message(GlobalDeviceManager* __globalDeviceManger,GlobalTreeA
 
     char buffer[80];
     strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);    
-    dev_insert_alarm_info(__globalDeviceManage.db,__globalPowerTemp->product_id,0,buffer,AlarmText);
+    dev_insert_alarm_info(globalDeviceManger->db,__globalPowerTemp->product_id,0,buffer,AlarmText);
     return 0;
 }
 /**
@@ -3359,13 +3384,13 @@ int dev_Alarm_T_AC_message(GlobalDeviceManager* __globalDeviceManger,GlobalTreeA
  *
  * 根据给定的全局设备管理器、全局传感器管理器和告警类型,发送传感器告警信息。
  *
- * @param __globalDeviceManger 全局设备管理器指针
+ * @param globalDeviceManger 全局设备管理器指针
  * @param __globalPowerTemp 全局传感器管理器指针
  * @param _AlarmType 告警类型
  *
  * @return 成功返回0,失败返回-1
  */
-int dev_sensor_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalSensorManger* __globalPowerTemp,int _AlarmType)
+int dev_sensor_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalSensorManger* __globalPowerTemp,int _AlarmType)
 {
     char AlarmText[256];
     int languagesID=0;
@@ -3410,10 +3435,10 @@ int dev_sensor_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,Glob
 
     char buffer[80];
     strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);    
-    dev_insert_alarm_info(__globalDeviceManage.db,__globalPowerTemp->product_id,1,buffer,AlarmText);
+    dev_insert_alarm_info(globalDeviceManger->db,__globalPowerTemp->product_id,1,buffer,AlarmText);
     return 0;
 }
-int dev_Alarm_Run_message(GlobalDeviceManager* __globalDeviceManger,const char* strRunMSG, const char *strOther)
+int dev_Alarm_Run_message(GlobalDeviceManager* globalDeviceManger, const char* strRunMSG, const char *strOther)
 {
     char AlarmText[256];
     int languagesID=0;
@@ -3424,7 +3449,7 @@ int dev_Alarm_Run_message(GlobalDeviceManager* __globalDeviceManger,const char*
     t = localtime(&now);
     char buffer[80];
     strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", t);    
-    dev_insert_alarm_info(__globalDeviceManage.db,0,4,buffer,AlarmText);
+    dev_insert_alarm_info(globalDeviceManger->db,0,4,buffer,AlarmText);
     return 0;
 }
 

+ 4 - 4
pro/src/sqlite_handle.h

@@ -127,11 +127,11 @@ int dev_insert_power_ds(sqlite3 *db,int product_id,int nChn,_PowerDSManage_t* _p
 int dev_delete_power_ds(sqlite3 *db,int product_id,int nChn,_PowerDSManage_t* _powerDS);
 
 //报警信息处理
-int dev_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalPowerManger* __globalPowerTemp,int _AlarmType);
-int dev_Alarm_T_AC_message(GlobalDeviceManager* __globalDeviceManger,GlobalTreeACManager* __globalPowerTemp,int _AlarmType);
-int dev_sensor_Alarm_send_message(GlobalDeviceManager* __globalDeviceManger,GlobalSensorManger* __globalPowerTemp,int _AlarmType);
+int dev_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalPowerManger* __globalPowerTemp,int _AlarmType);
+int dev_Alarm_T_AC_message(GlobalDeviceManager* globalDeviceManger,GlobalTreeACManager* __globalPowerTemp,int _AlarmType);
+int dev_sensor_Alarm_send_message(GlobalDeviceManager* globalDeviceManger,GlobalSensorManger* __globalPowerTemp,int _AlarmType);
 
-int dev_Alarm_Run_message(GlobalDeviceManager* __globalDeviceManger,const char* strRunMSG, const char *strOther);
+int dev_Alarm_Run_message(GlobalDeviceManager* globalDeviceManger,const char* strRunMSG, const char *strOther);
 
 int dev_get_breaker_manage_info(sqlite3 *db,int product_id,GlobalBreakerManager* _globalBreakerManager);
 int dev_insert_breaker_genera_manage(sqlite3 *db,GlobalBreakerManager* _globalBreakerManager);