Bladeren bron

IP表程序,修改snmp 修改北向对齐,修改ntp内存泄漏

liyi 1 jaar geleden
bovenliggende
commit
d4235b4949

+ 8 - 8
ip/CMakeLists.txt

@@ -11,8 +11,8 @@ set(CMAKE_SYSTEM_PROCESSOR arm)
 project (pdu_ctrl_app)
 project (pdu_ctrl_app)
 
 
 add_definitions(-DSHELL_CFG_USER="shell_cfg_user.h")
 add_definitions(-DSHELL_CFG_USER="shell_cfg_user.h")
-#set(STAGING_DIR "/home/liyi/tina/out/t113-bingpi_m2/staging_dir")
-#set(COMPILING_DIR "/home/liyi/tina/out/t113-bingpi_m2/compile_dir")
+set(STAGING_DIR "/home/liyi/tina/out/t113-bingpi_m2/staging_dir")
+set(COMPILING_DIR "/home/liyi/tina/out/t113-bingpi_m2/compile_dir")
 
 
 
 
 include_directories (${PROJECT_SOURCE_DIR}/modbus/inc 
 include_directories (${PROJECT_SOURCE_DIR}/modbus/inc 
@@ -22,7 +22,7 @@ include_directories (${PROJECT_SOURCE_DIR}/modbus/inc
 include_directories (${PROJECT_SOURCE_DIR}/easylogger/os/inc)
 include_directories (${PROJECT_SOURCE_DIR}/easylogger/os/inc)
 include_directories (${PROJECT_SOURCE_DIR}/easylogger/inc)
 include_directories (${PROJECT_SOURCE_DIR}/easylogger/inc)
 include_directories (${PROJECT_SOURCE_DIR}/easylogger/plugins/file)
 include_directories (${PROJECT_SOURCE_DIR}/easylogger/plugins/file)
-include_directories ($ENV{STAGING_DIR}/target/usr/include)
+include_directories (${STAGING_DIR}/target/usr/include)
 
 
 include_directories (${PROJECT_SOURCE_DIR}/letter/src)
 include_directories (${PROJECT_SOURCE_DIR}/letter/src)
 include_directories (${PROJECT_SOURCE_DIR}/letter/os)
 include_directories (${PROJECT_SOURCE_DIR}/letter/os)
@@ -39,11 +39,11 @@ link_directories(${PROJECT_SOURCE_DIR}/appweb/lib)
 link_directories(${PROJECT_SOURCE_DIR}/snmp/lib)
 link_directories(${PROJECT_SOURCE_DIR}/snmp/lib)
 #link_directories(${PROJECT_SOURCE_DIR}/sqlite/lib)
 #link_directories(${PROJECT_SOURCE_DIR}/sqlite/lib)
 link_directories(${PROJECT_SOURCE_DIR}/modbus/lib)
 link_directories(${PROJECT_SOURCE_DIR}/modbus/lib)
-link_directories($ENV{STAGING_DIR}/target/usr/lib)
-link_directories($ENV{STAGING_DIR}/target/lib)
-link_directories($ENV{COMPILING_DIR}/target/lib)
-link_directories($ENV{COMPILING_DIR}/target/usr/lib)
-link_directories($ENV{COMPILING_DIR}/target/usr/lib/arm-qt/lib)
+link_directories(${STAGING_DIR}/target/usr/lib)
+link_directories(${STAGING_DIR}/target/lib)
+link_directories(${COMPILING_DIR}/target/lib)
+link_directories(${COMPILING_DIR}/target/usr/lib)
+link_directories(${COMPILING_DIR}/target/usr/lib/arm-qt/lib)
 add_definitions("-Wall -g")
 add_definitions("-Wall -g")
 
 
 set(PDU_SRC_LIST
 set(PDU_SRC_LIST

+ 1 - 0
ip/modbus/modbus-tcp.c

@@ -341,6 +341,7 @@ static int _modbus_tcp_connect(modbus_t *ctx)
     addr.sin_family = AF_INET;
     addr.sin_family = AF_INET;
     addr.sin_port = htons(ctx_tcp->port);
     addr.sin_port = htons(ctx_tcp->port);
     addr.sin_addr.s_addr = inet_addr(ctx_tcp->ip);
     addr.sin_addr.s_addr = inet_addr(ctx_tcp->ip);
+    // addr.sin_addr.s_addr = INADDR_ANY;
     rc = _connect(ctx->s, (struct sockaddr *)&addr, sizeof(addr), &ctx->response_timeout);
     rc = _connect(ctx->s, (struct sockaddr *)&addr, sizeof(addr), &ctx->response_timeout);
     if (rc == -1) {
     if (rc == -1) {
         close(ctx->s);
         close(ctx->s);

+ 108 - 26
ip/src/app.c

@@ -161,10 +161,11 @@ void* power_thread(void* arg)
         _globalDeviceManager->mmp->data[0].saddr = 0;
         _globalDeviceManager->mmp->data[0].saddr = 0;
         _globalDeviceManager->mmp->data[0].temprature = _globalDeviceManager->g_modebus_read.temprature *100;
         _globalDeviceManager->mmp->data[0].temprature = _globalDeviceManager->g_modebus_read.temprature *100;
         _globalDeviceManager->mmp->data[0].humidity = _globalDeviceManager->g_modebus_read.humidity *100;
         _globalDeviceManager->mmp->data[0].humidity = _globalDeviceManager->g_modebus_read.humidity *100;
-
-        dev_list_t dl;
-        cascade_get_dlist(&dl);
-
+        _globalDeviceManager->mmp->data[0].saddr = _globalDeviceManager->_globalDevInfo._gmodbus_info.product_modbus_addr;
+        //dev_list_t dl;
+       // cascade_get_dlist(&dl);
+       dev_list_t_n dl={0};
+       cascade_get_n_dlist(&dl);
         int flag = 0;
         int flag = 0;
 
 
 
 
@@ -207,23 +208,30 @@ void* power_thread(void* arg)
                 GlobalSensorManger* sensor_temp = NULL;
                 GlobalSensorManger* sensor_temp = NULL;
                 //malloc
                 //malloc
                 Temp = (GlobalPowerManger *)malloc(sizeof(GlobalPowerManger));
                 Temp = (GlobalPowerManger *)malloc(sizeof(GlobalPowerManger));
+                log_d("malloc Temp=%lx\n",Temp);
                 if(Temp)
                 if(Temp)
                 {
                 {
                     memset(Temp, 0, sizeof(GlobalPowerManger));
                     memset(Temp, 0, sizeof(GlobalPowerManger));
                     Temp->global_over_manager = (GlobalOverManager *)malloc(sizeof(GlobalOverManager));
                     Temp->global_over_manager = (GlobalOverManager *)malloc(sizeof(GlobalOverManager));
+                    log_d("malloc temp->global_over_manager=%lx\n", Temp->global_over_manager);
                     if(Temp->global_over_manager)
                     if(Temp->global_over_manager)
                     {
                     {
                         memset(Temp->global_over_manager, 0, sizeof(GlobalOverManager));
                         memset(Temp->global_over_manager, 0, sizeof(GlobalOverManager));
                         sensor_temp = (GlobalSensorManger *)malloc(sizeof(GlobalSensorManger));
                         sensor_temp = (GlobalSensorManger *)malloc(sizeof(GlobalSensorManger));
+                        log_d("malloc sensor_temp=%lx\n",sensor_temp);
                         if(sensor_temp)
                         if(sensor_temp)
                         {
                         {
                             sensor_temp->over_manager = (GlobalSensorOverManage*)malloc(sizeof(GlobalSensorOverManage));
                             sensor_temp->over_manager = (GlobalSensorOverManage*)malloc(sizeof(GlobalSensorOverManage));
+                            log_d("malloc sensor_temp->over_manager = %lx\n",sensor_temp->over_manager );
                             memset(sensor_temp->over_manager,0,sizeof(GlobalSensorOverManage));
                             memset(sensor_temp->over_manager,0,sizeof(GlobalSensorOverManage));
                             if(sensor_temp->over_manager)
                             if(sensor_temp->over_manager)
                             {
                             {
                                 create_temp_flag = 1;
                                 create_temp_flag = 1;
                             }else
                             }else
                             {
                             {
+                                log_d("free sensor_temp Temp1=%lx\n",sensor_temp);
+                                log_d("free temp->global_over_manager Temp1=%lx\n",Temp->global_over_manager);
+                                log_d("free Temp =%lx\n",Temp);
                                 free(sensor_temp);
                                 free(sensor_temp);
                                 sensor_temp = NULL;
                                 sensor_temp = NULL;
                                 free(Temp->global_over_manager);
                                 free(Temp->global_over_manager);
@@ -234,6 +242,8 @@ void* power_thread(void* arg)
 
 
                         }else
                         }else
                         {
                         {
+                            log_d("free Temp->global_over_manager=%lx\n",Temp->global_over_manager);
+                            log_d("free Temp2=%lx\n",Temp);
                             free(Temp->global_over_manager);
                             free(Temp->global_over_manager);
                             free(Temp);
                             free(Temp);
                             Temp = NULL;
                             Temp = NULL;
@@ -242,6 +252,7 @@ void* power_thread(void* arg)
                     }else
                     }else
                     {
                     {
                         free(Temp);
                         free(Temp);
+                        log_d("free Temp=%lx\n",Temp);
                     }
                     }
                 }
                 }
                 
                 
@@ -318,7 +329,12 @@ void* power_thread(void* arg)
                         channel[k] = 1;
                         channel[k] = 1;
                     }else
                     }else
                     {
                     {
+                        log_d("free sensor_temp->over_manager =%lx\n",sensor_temp->over_manager);
+                        log_d("free sensor_temp Temp1=%lx\n",sensor_temp);
+                        log_d("free Temp->global_over_manager =%lx\n",Temp->global_over_manager);
+                        log_d("free Temp =%lx\n",Temp);
                         free(sensor_temp->over_manager);
                         free(sensor_temp->over_manager);
+                        
                         free(sensor_temp);
                         free(sensor_temp);
                         sensor_temp = NULL;
                         sensor_temp = NULL;
                         free(Temp->global_over_manager);
                         free(Temp->global_over_manager);
@@ -435,6 +451,7 @@ void* power_thread(void* arg)
             if(!flag)
             if(!flag)
             {
             {
                     //delete sensor
                     //delete sensor
+                uint8_t saddr = 0;
                 pthread_mutex_lock(&__globalDeviceManage._sensor_update);
                 pthread_mutex_lock(&__globalDeviceManage._sensor_update);
                 GlobalSensorManger *sensor_temp,*sensor_pos;
                 GlobalSensorManger *sensor_temp,*sensor_pos;
                 list_for_each_entry_safe(sensor_temp,sensor_pos,&_globalDeviceManager->_globalSensorManger.list,list)
                 list_for_each_entry_safe(sensor_temp,sensor_pos,&_globalDeviceManager->_globalSensorManger.list,list)
@@ -443,6 +460,8 @@ void* power_thread(void* arg)
                         continue;
                         continue;
                     if(sensor_temp->product_id == tmp->product_saddr && sensor_temp->sensor_id == tmp->product_saddr)
                     if(sensor_temp->product_id == tmp->product_saddr && sensor_temp->sensor_id == tmp->product_saddr)
                     {
                     {
+                        log_d("free sensor_temp->over_manager = %lx\n",sensor_temp->over_manager);
+                        log_d("free sensor_temp = %lx\n",sensor_temp);
                         free(sensor_temp->over_manager);
                         free(sensor_temp->over_manager);
                         list_del(&sensor_temp->list);
                         list_del(&sensor_temp->list);
                         free(sensor_temp);
                         free(sensor_temp);
@@ -451,11 +470,15 @@ void* power_thread(void* arg)
                     }
                     }
                 }
                 }
                 pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
                 pthread_mutex_unlock(&__globalDeviceManage._sensor_update);
+                saddr = tmp->product_saddr ;
                 //delete power_thead
                 //delete power_thead
+                log_d("free tmp->global_over_manager = %lx\n",tmp->global_over_manager);
+                log_d("free tmp = %lx\n",tmp);
                 free(tmp->global_over_manager);
                 free(tmp->global_over_manager);
                 list_del(&tmp->list);
                 list_del(&tmp->list);
                 //cnt --;
                 //cnt --;
                 free(tmp);
                 free(tmp);
+                memset(&_globalDeviceManager->mmp->data[saddr],0,sizeof(case_ip_485_data_t));
             }
             }
         }
         }
 
 
@@ -466,28 +489,28 @@ void* power_thread(void* arg)
         for(int i = 1;i < dl.cnt;i++)
         for(int i = 1;i < dl.cnt;i++)
         {
         {
             cascade_request_saddr(&cmd,dl.slave[i].addr,i);
             cascade_request_saddr(&cmd,dl.slave[i].addr,i);
-            usleep(10000);
+            usleep(100000);
         }
         }
         _globalDeviceManager->mmp->dev_chn = dl.cnt;
         _globalDeviceManager->mmp->dev_chn = dl.cnt;
-        cmd.cmd = CASCADE_CMD_QUERY_CH;
-        cascade_free_dlist(&dl);
+        //cmd.cmd = CASCADE_CMD_QUERY_CH;
+        //cascade_free_dlist(&dl);
 
 
-        for(int i = 1; i < _globalDeviceManager->mmp->dev_chn;i++)
+        for(int i = 1;i < dl.cnt;i++)
         {
         {
-            int board = _globalDeviceManager->mmp->data[i].saddr;   
+            int board = dl.slave[i].addr;   
             _globalDeviceManager->_all_ctrl_board[board].product_type = 0;
             _globalDeviceManager->_all_ctrl_board[board].product_type = 0;
             _globalDeviceManager->_all_ctrl_board[board].product_saddr = _globalDeviceManager->mmp->data[i].saddr;
             _globalDeviceManager->_all_ctrl_board[board].product_saddr = _globalDeviceManager->mmp->data[i].saddr;
             _globalDeviceManager->_all_ctrl_board[board].product_number = 1;
             _globalDeviceManager->_all_ctrl_board[board].product_number = 1;
-            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->consumption = _globalDeviceManager->mmp->data[i].consumer/1000.0;
-            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->current     = _globalDeviceManager->mmp->data[i].current/1000.0;
-            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->factor      = _globalDeviceManager->mmp->data[i].factor/1000.0;
-            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->freq        = _globalDeviceManager->mmp->data[i].freq/1000.0;
-            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->voltage     = _globalDeviceManager->mmp->data[i].voltage/1000.0;
-            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->power       = _globalDeviceManager->mmp->data[i].power/1000.0;
-            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->status      = _globalDeviceManager->mmp->data[i].status;
-            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->tempratue   = _globalDeviceManager->mmp->data[i].temprature / 100.0;
-            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->humidity    = _globalDeviceManager->mmp->data[i].humidity /100.0;
-            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->NF_status   = _globalDeviceManager->mmp->data[i].temprature_status;    //todo
+            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->consumption = _globalDeviceManager->mmp->data[board].consumer/1000.0;
+            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->current     = _globalDeviceManager->mmp->data[board].current/1000.0;
+            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->factor      = _globalDeviceManager->mmp->data[board].factor/1000.0;
+            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->freq        = _globalDeviceManager->mmp->data[board].freq/1000.0;
+            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->voltage     = _globalDeviceManager->mmp->data[board].voltage/1000.0;
+            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->power       = _globalDeviceManager->mmp->data[board].power/1000.0;
+            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->status      = _globalDeviceManager->mmp->data[board].status;
+            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->tempratue   = _globalDeviceManager->mmp->data[board].temprature / 100.0;
+            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->humidity    = _globalDeviceManager->mmp->data[board].humidity /100.0;
+            _globalDeviceManager->_all_ctrl_board[board]._PowerInfo->NF_status   = _globalDeviceManager->mmp->data[board].temprature_status;    //todo
         }
         }
 
 
         struct tm *t;
         struct tm *t;
@@ -608,7 +631,16 @@ void* power_thread(void* arg)
                     _globalPowerMangerTemp->global_over_manager->product_vol_upper_threshold)
                     _globalPowerMangerTemp->global_over_manager->product_vol_upper_threshold)
                 {
                 {
                     _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_voltage_up = 1;
                     _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_voltage_up = 1;
+                    _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_up_v = 1;
+                }else
+                {
+                    _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_voltage_up = 0;
+                    _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_up_v = 0;
                 }
                 }
+            }else
+            {
+                _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_voltage_up = 0;
+                _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_up_v = 0;
             }
             }
             if (_globalPowerMangerTemp->global_over_manager->product_vol_lower_enable)
             if (_globalPowerMangerTemp->global_over_manager->product_vol_lower_enable)
             {
             {
@@ -616,7 +648,16 @@ void* power_thread(void* arg)
                     _globalPowerMangerTemp->global_over_manager->product_vol_lower_threshold)
                     _globalPowerMangerTemp->global_over_manager->product_vol_lower_threshold)
                 {
                 {
                     _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_voltage_down = 1;
                     _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_voltage_down = 1;
+                    _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_low_v = 1;
+                }else
+                {
+                    _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_voltage_down = 0;
+                    _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_low_v = 0;
                 }
                 }
+            }else
+            {
+                _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_voltage_down = 0;
+                _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_low_v = 0;
             }
             }
             // current
             // current
             if (_globalPowerMangerTemp->global_over_manager->product_cur_upper_enable)
             if (_globalPowerMangerTemp->global_over_manager->product_cur_upper_enable)
@@ -625,7 +666,16 @@ void* power_thread(void* arg)
                     _globalPowerMangerTemp->global_over_manager->product_cur_upper_threshold)
                     _globalPowerMangerTemp->global_over_manager->product_cur_upper_threshold)
                 {
                 {
                     _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_current = 1;
                     _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_current = 1;
+                    _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_up_i = 1;
+                }else
+                {
+                    _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_current = 0;
+                    _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_up_i = 0;
                 }
                 }
+            }else
+            {
+                _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_current = 0;
+                _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_up_i = 0;
             }
             }
             // power
             // power
             if (_globalPowerMangerTemp->global_over_manager->product_pwr_upper_enable)
             if (_globalPowerMangerTemp->global_over_manager->product_pwr_upper_enable)
@@ -634,7 +684,17 @@ void* power_thread(void* arg)
                     _globalPowerMangerTemp->global_over_manager->product_pwr_upper_threshold)
                     _globalPowerMangerTemp->global_over_manager->product_pwr_upper_threshold)
                 {
                 {
                     _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_power = 1;
                     _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_power = 1;
+                    _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_up_p = 1;
+                }else
+                {
+                    _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_power = 0;
+                    _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_up_p = 0;
                 }
                 }
+            }else
+            {
+
+                _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_power = 0;
+                _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_up_p = 0;
             }
             }
             // constmer
             // constmer
             if (_globalPowerMangerTemp->global_over_manager->product_pwrcon_upper_enable)
             if (_globalPowerMangerTemp->global_over_manager->product_pwrcon_upper_enable)
@@ -643,7 +703,16 @@ void* power_thread(void* arg)
                     _globalPowerMangerTemp->global_over_manager->product_pwrcon_upper_threshold)
                     _globalPowerMangerTemp->global_over_manager->product_pwrcon_upper_threshold)
                 {
                 {
                     _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_consumption = 1;
                     _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_consumption = 1;
+                    _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_up_c = 1;
+                }else
+                {
+                    _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_consumption = 0;
+                    _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_up_c = 0;
                 }
                 }
+            }else
+            {
+                _globalDeviceManager->_all_ctrl_board[(int)_globalPowerMangerTemp->product_saddr]._PowerWarninginfo[0].w_consumption = 0;
+                _globalDeviceManager->mmp->waning[(int)_globalPowerMangerTemp->product_saddr].waning_up_c = 0;
             }
             }
 
 
             memcpy(&_globalPowerWarningInfo,
             memcpy(&_globalPowerWarningInfo,
@@ -1276,12 +1345,23 @@ static void* ntp_thread(void *arg)
                     if (getCurrentTimeFromNTP(pc, &utc_time) == 0)
                     if (getCurrentTimeFromNTP(pc, &utc_time) == 0)
                     {
                     {
                         time_t host_time = time(NULL);
                         time_t host_time = time(NULL);
-                        log_d("host_time: %ld, ntp_time: %ld", host_time, utc_time);
-                        //if(host_time != utc_time) {
+                        //struct tm * _tm = localtime(&utc_time);
+                        //printf("%s",asctime(_tm));
+                        
+                        log_d("host_time: %ld, ntp_time: %ld\n", host_time, utc_time);
+
+                        // printf("%d-%d-%d %d:%d:%d\n",(_tm->tm_year+1900),_tm->tm_mon,_tm->tm_mday,
+                        // _tm->tm_hour,_tm->tm_min,_tm->tm_sec);
+                        // _tm->tm_year += 1900;
+                        // _tm->tm_mon +=1;
+                        if(abs(host_time - utc_time) > 30) {
                             set_utctime(utc_time);
                             set_utctime(utc_time);
+                            //set_time(_tm,pntp->tzone);
+                            //set_time_zone(_tm,pntp->tzone);
                             //set_utctime_zone(utc_time, pntp->tzone);
                             //set_utctime_zone(utc_time, pntp->tzone);
                             log_i("setCurrentTimeFromNTP success!");
                             log_i("setCurrentTimeFromNTP success!");
-                       // }
+                        }
+                       //sync();
                     }
                     }
                     else
                     else
                     {
                     {
@@ -1437,6 +1517,7 @@ static void get_mac(cascade_ip_mmap_t *mmp)
     mmp->mac[3]=ifreq.ifr_hwaddr.sa_data[3];
     mmp->mac[3]=ifreq.ifr_hwaddr.sa_data[3];
     mmp->mac[4]=ifreq.ifr_hwaddr.sa_data[4];
     mmp->mac[4]=ifreq.ifr_hwaddr.sa_data[4];
     mmp->mac[5]=ifreq.ifr_hwaddr.sa_data[5];
     mmp->mac[5]=ifreq.ifr_hwaddr.sa_data[5];
+    log_d("%x %x %x %x %x %x\n", mmp->mac[0], mmp->mac[1], mmp->mac[2], mmp->mac[3], mmp->mac[4], mmp->mac[5]);
 }
 }
 
 
 /// @brief 全局结构体初始化
 /// @brief 全局结构体初始化
@@ -1535,6 +1616,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
         log_e("mmp malloc error!!!!!\n");
         log_e("mmp malloc error!!!!!\n");
         return 0;        
         return 0;        
     }
     }
+    memset(_globalDeviceManager->mmp,0,sizeof(cascade_ip_mmap_t));
     get_mac(_globalDeviceManager->mmp);
     get_mac(_globalDeviceManager->mmp);
 
 
     _globalDeviceManager->_RS485LowConfData = hlw8110_init();
     _globalDeviceManager->_RS485LowConfData = hlw8110_init();
@@ -1601,7 +1683,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     
     
 
 
 
 
-    INIT_LIST_HEAD(&_globalDeviceManager->_globalSensorManger.list);
+    //INIT_LIST_HEAD(&_globalDeviceManager->_globalSensorManger.list);
     // ret = dev_get_sensor_manage_info(_globalDeviceManager->db,
     // ret = dev_get_sensor_manage_info(_globalDeviceManager->db,
     //                                 _globalDeviceManager->_globalDevInfo.product_id,
     //                                 _globalDeviceManager->_globalDevInfo.product_id,
     //                                 &_globalDeviceManager->_globalSensorManger);
     //                                 &_globalDeviceManager->_globalSensorManger);
@@ -1618,7 +1700,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],"sensor");
     dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],"sensor");
 
 
 
 
-    thread_start(THREAD_ID_POWER, power_thread, _globalDeviceManager, 10*MB, 0);
+    thread_start(THREAD_ID_POWER,power_thread, _globalDeviceManager, 10*MB, 0);
     //thread_start(THREAD_ID_SENSOR, ip_cascade_thread, _globalDeviceManager, 5*MB, 0);
     //thread_start(THREAD_ID_SENSOR, ip_cascade_thread, _globalDeviceManager, 5*MB, 0);
     thread_start(THREAD_ID_SHMW, shm_thread, _globalDeviceManager, 5*MB, 0);
     thread_start(THREAD_ID_SHMW, shm_thread, _globalDeviceManager, 5*MB, 0);
 
 
@@ -1630,7 +1712,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     //创建传感器采集控制线程
     //创建传感器采集控制线程
 
 
 
 
-     ntp_init();
+    ntp_init();
     dev_Alarm_Run_message(_globalDeviceManager, language_alarm_Init_Success[0], "NTP");
     dev_Alarm_Run_message(_globalDeviceManager, language_alarm_Init_Success[0], "NTP");
 
 
 #ifndef USE_NETSWITCH
 #ifndef USE_NETSWITCH
@@ -1654,7 +1736,7 @@ int _global_device_manage_init(GlobalDeviceManager* _globalDeviceManager)
     smtp_init();
     smtp_init();
 
 
     //通知smartUPG,app已经运行起来
     //通知smartUPG,app已经运行起来
-    upg_init();
+    //upg_init();
     
     
     while(1)
     while(1)
     {
     {

+ 130 - 36
ip/src/appweb_handle.c

@@ -2694,7 +2694,7 @@ static void alarmProtect(void *conn)
     //查询json参数
     //查询json参数
     if(strcmp(_alarm_request_info.type,"listAllQuery")==0) //告警信息查询
     if(strcmp(_alarm_request_info.type,"listAllQuery")==0) //告警信息查询
     {
     {
-#if IS_IP
+#if 0
     
     
         GlobalPowerManger *_globalPowerMangerTemp = NULL;
         GlobalPowerManger *_globalPowerMangerTemp = NULL;
         //int ret = -1;
         //int ret = -1;
@@ -2730,7 +2730,7 @@ static void alarmProtect(void *conn)
         int i = 0 ;
         int i = 0 ;
         //初始化表
         //初始化表
         INIT_LIST_HEAD(&_alarm_ack_info.list);
         INIT_LIST_HEAD(&_alarm_ack_info.list);
-        //查询数据库,最近的10个报警信息
+        // //查询数据库,最近的10个报警信息
         ret = dev_serarch_all_alarm(__globalDeviceManage.db,
         ret = dev_serarch_all_alarm(__globalDeviceManage.db,
             __globalDeviceManage._globalDevInfo.product_id,
             __globalDeviceManage._globalDevInfo.product_id,
            ALARM_TYPE_POWER ,1,10,
            ALARM_TYPE_POWER ,1,10,
@@ -2739,26 +2739,72 @@ static void alarmProtect(void *conn)
 
 
         if(ret!=0) {
         if(ret!=0) {
             log_e("get power alarm error.");
             log_e("get power alarm error.");
+            if(nAlarmNumber > 0)
+           {
+                
+                ack_str = mem_info_to_json();
+           }
         }
         }
         else {
         else {
             ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
             ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
 
 
             //释放资源
             //释放资源
-            _AlarmAckInfo* node;
-            _AlarmAckInfo* next;
-            list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
-            {
-                list_del(&node->list);
-                free(node);
-            }
         }
         }
+        _AlarmAckInfo* node;
+        _AlarmAckInfo* next;
+        list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
+        {
+            list_del(&node->list);
+            free(node);
+        }
+        // char start_time[32] = {0};
+        // char stop_time[32] = {0};
+        // if (_alarm_request_info.startTime == NULL || _alarm_request_info.endTime == NULL)
+        // {
+        //     struct tm *t;
+        //     struct timeval tv;
+
+        //     gettimeofday(&tv, NULL);
+        //     t = localtime(&tv.tv_sec);
+        //     sprintf(stop_time, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, 23, 59, 59);
+        //     log_d(stop_time);
+
+        //     sprintf(start_time, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, 0, 0, 0);
+        //     log_d(start_time);
+
+        //     _alarm_request_info.startTime = start_time;
+        //     _alarm_request_info.endTime = stop_time;
+        // }
+        // ret = dev_search_alarm_info(__globalDeviceManage.db,
+        //     __globalDeviceManage._globalDevInfo.product.id,
+        //    -1,_alarm_request_info.startTime,_alarm_request_info.endTime,
+        //    1,10,
+        //     &_alarm_ack_info,&nAlarmNumber);
+        // if(ret != 0)
+        // {
+        //     log_e("get power alarm error.");
+        // }else
+        // {
+        //     ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
+        // }
+        //     //释放资源
+        // _AlarmAckInfo* node;
+        // _AlarmAckInfo* next;
+        // list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
+        // {
+        //    if(node)
+        //    {
+        //         list_del(&node->list);
+        //         free(node);
+        //    }
+        // }        
 #endif
 #endif
 
 
     }
     }
     else if(strcmp(_alarm_request_info.type,"powerAlarmList")==0) //电源告警信息查询
     else if(strcmp(_alarm_request_info.type,"powerAlarmList")==0) //电源告警信息查询
     {
     {
         //初始化表
         //初始化表
-#if IS_IP
+#if 0
         GlobalPowerManger *_globalPowerMangerTemp = NULL;
         GlobalPowerManger *_globalPowerMangerTemp = NULL;
         INIT_LIST_HEAD(&_alarm_ack_info.list);
         INIT_LIST_HEAD(&_alarm_ack_info.list);
         int number = 0;
         int number = 0;
@@ -2795,18 +2841,23 @@ static void alarmProtect(void *conn)
             &_alarm_ack_info,&nAlarmNumber);
             &_alarm_ack_info,&nAlarmNumber);
         if(ret!=0) {
         if(ret!=0) {
             log_e("get power alarm error.");
             log_e("get power alarm error.");
+            if(nAlarmNumber > 0)
+            {
+                
+                ack_str = mem_info_to_json();
+            }
         }
         }
         else {
         else {
             ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
             ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
 
 
             //释放资源
             //释放资源
-            _AlarmAckInfo* node;
-            _AlarmAckInfo* next;
-            list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
-            {
-                list_del(&node->list);
-                free(node);
-            }
+        }
+        _AlarmAckInfo* node;
+        _AlarmAckInfo* next;
+        list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
+        {
+            list_del(&node->list);
+            free(node);
         }
         }
 #endif
 #endif
     }
     }
@@ -2815,7 +2866,7 @@ static void alarmProtect(void *conn)
         //初始化表
         //初始化表
         INIT_LIST_HEAD(&_alarm_ack_info.list);
         INIT_LIST_HEAD(&_alarm_ack_info.list);
         //查询数据库
         //查询数据库
-#if IS_IP
+#if 0
     GlobalSensorManger *temp = NULL;
     GlobalSensorManger *temp = NULL;
     int number = 0;
     int number = 0;
 
 
@@ -2855,13 +2906,13 @@ static void alarmProtect(void *conn)
             ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
             ack_str = alarm_info_to_json(&_alarm_ack_info,nAlarmNumber);
 
 
             //释放资源
             //释放资源
-            _AlarmAckInfo* node;
-            _AlarmAckInfo* next;
-            list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
-            {
-                list_del(&node->list);
-                free(node);
-            }
+        }
+        _AlarmAckInfo* node;
+        _AlarmAckInfo* next;
+        list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
+        {
+            list_del(&node->list);
+            free(node);
         }
         }
 #endif
 #endif
     }
     }
@@ -2876,6 +2927,10 @@ static void alarmProtect(void *conn)
             &_alarm_ack_info,&nAlarmNumber);
             &_alarm_ack_info,&nAlarmNumber);
         if(ret!=0) {
         if(ret!=0) {
             log_e("get net alarm error.");
             log_e("get net alarm error.");
+            if(nAlarmNumber > 0)
+            {
+                ack_str = mem_info_to_json();
+            }
         }
         }
         else {
         else {
             //转换参数
             //转换参数
@@ -3532,13 +3587,15 @@ static void serviceManagement(void *conn)
     else if(strcmp(_serviceManageRequestInfo.type,"SmtpSave")==0)
     else if(strcmp(_serviceManageRequestInfo.type,"SmtpSave")==0)
     {
     {
         //_SMTP_ServerRequestInfo
         //_SMTP_ServerRequestInfo
+        smtp_info_t mailInfo=gdm->smtpInfo;
         smtp_send_t *send=&gdm->smtpInfo.send;
         smtp_send_t *send=&gdm->smtpInfo.send;
         smtp_recv_t *recv=gdm->smtpInfo.recv;
         smtp_recv_t *recv=gdm->smtpInfo.recv;
         _SMTP_ServerRequestInfo *info=&_serviceManageRequestInfo._smtp_info;
         _SMTP_ServerRequestInfo *info=&_serviceManageRequestInfo._smtp_info;
 
 
         if(info->mode) {
         if(info->mode) {
             int save_flag=0;
             int save_flag=0;
-            send->mode = atoi(info->mode);
+            int mode = atoi(info->mode);
+            send->mode = mode;
             if(send->mode) {
             if(send->mode) {
                 if(info->account && info->password && info->server && info->port && info->auth)  {
                 if(info->account && info->password && info->server && info->port && info->auth)  {
                     if(strcmp(send->account, info->account)) {
                     if(strcmp(send->account, info->account)) {
@@ -3563,22 +3620,59 @@ static void serviceManagement(void *conn)
                 }
                 }
             }
             }
             else {
             else {
-                memset(send, 0, sizeof(smtp_send_t));  save_flag = 1;
+                //memset(send, 0, sizeof(smtp_send_t));  save_flag = 1;
             }
             }
-            
-            if(save_flag) {
+            if(memcmp(&mailInfo.send,&gdm->smtpInfo.send,sizeof(smtp_send_t)))
+            {
                 dev_smtp_update_send(gdm->db, send);
                 dev_smtp_update_send(gdm->db, send);
+                gdm->smtpInfo.send = mailInfo.send;
             }
             }
-        }
-
-        for(int i=0; i<SMTP_RECV_MAX; i++) {
-            if(info->recvAccount[i]) {
+            for (int i = 0; i < MAIL_RECV_MAX; i++)
+            {
                 recv[i].idx = i;
                 recv[i].idx = i;
-                recv[i].use = 1;
-                strcpy(recv[i].account, info->recvAccount[i]);
-                dev_smtp_update_recv(gdm->db, &recv[i]);
+                if (info->recvAccount[i])
+                {
+                    recv[i].use = 1;
+                    strcpy(recv[i].account, info->recvAccount[i]);
+                }
+                else
+                {
+                    recv[i].use = 0;
+                    if (mode)
+                    {
+                        strcpy(recv[i].account, "");
+                    }
+                }
             }
             }
         }
         }
+        if (memcmp(mailInfo.recv, gdm->smtpInfo.recv, sizeof(smtp_recv_t) * MAIL_RECV_MAX))
+        {
+            dev_mail_update_recv(gdm->db, recv);
+            //memcpy(gdm->smtpInfo.recv, mailInfo.recv, sizeof(smtp_recv_t) * MAIL_RECV_MAX);
+        }
+        // if(memcmp(mailInfo.recv, gdm->smtpInfo.recv, sizeof(smtp_recv_t) * MAIL_RECV_MAX))
+        // {
+        
+        //     for(int i=0; i<SMTP_RECV_MAX; i++) {
+        //         if(info->recvAccount[i]) {
+        //             recv[i].idx = i;
+        //             recv[i].use = 1;
+        //             strcpy(recv[i].account, info->recvAccount[i]);
+        //             dev_smtp_update_recv(gdm->db, &recv[i]);
+        //         }
+        //     }
+        //     //dev_smtp_update_recv(gdm->db, recv);
+        //     //memcpy(gdm->mailInfo.recv, mailInfo.recv, sizeof(smtp_recv_t) * MAIL_RECV_MAX);                        
+        // }
+
+        // for(int i=0; i<SMTP_RECV_MAX; i++) {
+        //     if(info->recvAccount[i]) {
+        //         recv[i].idx = i;
+        //         recv[i].use = 1;
+        //         strcpy(recv[i].account, info->recvAccount[i]);
+        //         dev_smtp_update_recv(gdm->db, &recv[i]);
+        //     }
+        // }
     }   
     }   
     //查询snmp信息
     //查询snmp信息
     else if(strcmp(_serviceManageRequestInfo.type,"listSnmpQuery")==0)
     else if(strcmp(_serviceManageRequestInfo.type,"listSnmpQuery")==0)

+ 42 - 13
ip/src/cascade.c

@@ -1499,25 +1499,37 @@ static int master_cmd_addr(cascade_handle_t *cas, cmd_data_t *cmd,int saddr,int
                 //LOGD("______cas->info.cnt2: %d\n", cas->sInfo.cnt);
                 //LOGD("______cas->info.cnt2: %d\n", cas->sInfo.cnt);
                 // if(r==0) {
                 // if(r==0) {
                 //     power_add(cas);
                 //     power_add(cas);
-                // }
+                // 
                 for(int i = 0; i < cas->sInfo.cnt;i++)
                 for(int i = 0; i < cas->sInfo.cnt;i++)
                 { 
                 { 
-                    dm->mmp->data[index].current =  cas->sInfo.ch[i].chinfo.current * 1000;
-                    dm->mmp->data[index].consumer = cas->sInfo.ch[i].chinfo.consumption * 1000;
-                    dm->mmp->data[index].power = cas->sInfo.ch[i].chinfo.power* 1000;
-                    dm->mmp->data[index].voltage = cas->sInfo.ch[i].chinfo.voltage* 1000;
-                    dm->mmp->data[index].status = cas->sInfo.ch[i].chinfo.status;
-                    dm->mmp->data[index].factor = cas->sInfo.ch[i].chinfo.factor* 1000;
-                    dm->mmp->data[index].freq = cas->sInfo.ch[i].chinfo.freq* 1000;
-                    dm->mmp->data[index].temprature = cas->sInfo.ch[i].chinfo.tempratue * 100;
-                    dm->mmp->data[index].humidity = cas->sInfo.ch[i].chinfo.humidity * 100;        
-                    dm->mmp->data[index].saddr = saddr;
-                    dm->mmp->data[index].temprature_status = cas->sInfo.ch[i].product_ch_status;
+                    dm->mmp->data[saddr].current =  cas->sInfo.ch[i].chinfo.current * 1000;
+                    dm->mmp->data[saddr].consumer = cas->sInfo.ch[i].chinfo.consumption * 1000;
+                    dm->mmp->data[saddr].power = cas->sInfo.ch[i].chinfo.power* 1000;
+                    dm->mmp->data[saddr].voltage = cas->sInfo.ch[i].chinfo.voltage* 1000;
+                    dm->mmp->data[saddr].status = cas->sInfo.ch[i].chinfo.status;
+                    dm->mmp->data[saddr].factor = cas->sInfo.ch[i].chinfo.factor* 1000;
+                    dm->mmp->data[saddr].freq = cas->sInfo.ch[i].chinfo.freq* 1000;
+                    dm->mmp->data[saddr].temprature = cas->sInfo.ch[i].chinfo.tempratue * 100;
+                    dm->mmp->data[saddr].humidity = cas->sInfo.ch[i].chinfo.humidity * 100;        
+                    dm->mmp->data[saddr].saddr = saddr;
+                    dm->mmp->data[saddr].temprature_status = cas->sInfo.ch[i].product_ch_status;
                 }
                 }
             }
             }
 
 
             else {
             else {
                 LOGE("_____ master CASCADE_CMD_GET_INFO failed\n");
                 LOGE("_____ master CASCADE_CMD_GET_INFO failed\n");
+                // memset(&cas->sInfo.ch[0],0,sizeof(channel_info_t)*32);
+                // dm->mmp->data[saddr].current =  cas->sInfo.ch[0].chinfo.current * 1000;
+                // dm->mmp->data[saddr].consumer = cas->sInfo.ch[0].chinfo.consumption * 1000;
+                // dm->mmp->data[saddr].power = cas->sInfo.ch[0].chinfo.power* 1000;
+                // dm->mmp->data[saddr].voltage = cas->sInfo.ch[0].chinfo.voltage* 1000;
+                // dm->mmp->data[saddr].status = cas->sInfo.ch[0].chinfo.status;
+                // dm->mmp->data[saddr].factor = cas->sInfo.ch[0].chinfo.factor* 1000;
+                // dm->mmp->data[saddr].freq = cas->sInfo.ch[0].chinfo.freq* 1000;
+                // dm->mmp->data[saddr].temprature = cas->sInfo.ch[0].chinfo.tempratue * 100;
+                // dm->mmp->data[saddr].humidity = cas->sInfo.ch[0].chinfo.humidity * 100;        
+                // dm->mmp->data[saddr].saddr = saddr;
+                // dm->mmp->data[saddr].temprature_status = cas->sInfo.ch[0].product_ch_status;
             }
             }
 #endif
 #endif
         }
         }
@@ -1796,7 +1808,8 @@ static void* scan_thread(void *arg)
         //if(info->product_modbus_type==0) {  //master
         //if(info->product_modbus_type==0) {  //master
             cascade_lock();
             cascade_lock();
             //r = new_master_scaner(cas);
             //r = new_master_scaner(cas);
-            master_scan(cas);
+            if(cas->scanner_flag == 0)
+                master_scan(cas);
             cascade_unlock();
             cascade_unlock();
         //}
         //}
         sleep(1);
         sleep(1);
@@ -2064,6 +2077,22 @@ int cascade_set_modbus(ModbusInfo_t *info)
 }
 }
 
 
 
 
+int cascade_get_n_dlist(dev_list_t_n *dl)
+{
+    if(!dl)
+        return -1;
+    int i,cnt=0;
+    cascade_handle_t *cas=&casHandle;
+    for(i=0; i<=CASCADE_MAX; i++) {
+        if(cas->slaves[i].addr>=0) {
+            dl->slave[cnt++] = cas->slaves[i];
+        }       
+    }
+    dl->cnt = cnt;
+    return 0;
+}
+
+
 int cascade_get_dlist(dev_list_t *dl)
 int cascade_get_dlist(dev_list_t *dl)
 {
 {
     int i,cnt=0;
     int i,cnt=0;

+ 12 - 0
ip/src/cascade.h

@@ -82,6 +82,12 @@ typedef struct {
     int       cnt;
     int       cnt;
 }dev_list_t;
 }dev_list_t;
 
 
+
+typedef struct {
+    slave_t slave[32];
+    int     cnt;
+}dev_list_t_n;
+
 typedef struct {
 typedef struct {
     uint16_t deveice_type;          //设备类型
     uint16_t deveice_type;          //设备类型
     uint16_t slave_addr;            //设备地址
     uint16_t slave_addr;            //设备地址
@@ -270,6 +276,12 @@ int cascade_get_ch(_OverChnPwrAckInfo *ch);
 
 
 int cascade_get_dlist(dev_list_t *dl);
 int cascade_get_dlist(dev_list_t *dl);
 int cascade_free_dlist(dev_list_t *dl);
 int cascade_free_dlist(dev_list_t *dl);
+
+int cascade_get_n_dlist(dev_list_t_n *dl);
+
+
+
+
 int cascade_set_modbus(ModbusInfo_t *info);
 int cascade_set_modbus(ModbusInfo_t *info);
 
 
 int cascade_lock(void);
 int cascade_lock(void);

+ 6 - 3
ip/src/cascade_slave.c

@@ -156,6 +156,7 @@ static mmap_modbus_t ip[] ={
     [DS_IP_DEV_CHN         ]{.offset = DEV_CHN_REG              },
     [DS_IP_DEV_CHN         ]{.offset = DEV_CHN_REG              },
     [DS_IP_MAC             ]{.offset = DEV_IP_MAC               },
     [DS_IP_MAC             ]{.offset = DEV_IP_MAC               },
     [DS_POWER_INFO_REG     ]{.offset = POWER_INFO_REG           },
     [DS_POWER_INFO_REG     ]{.offset = POWER_INFO_REG           },
+    [DS_WANNING_REG        ]{.offset = WARNING_485_IP           },
 };
 };
 
 
 
 
@@ -705,6 +706,7 @@ int cascade_slave_init(void)
     ip[DS_IP_DEV_CHN          ].addr = &mgr->mmp->dev_chn;
     ip[DS_IP_DEV_CHN          ].addr = &mgr->mmp->dev_chn;
     ip[DS_IP_MAC              ].addr = &mgr->mmp->mac[0];
     ip[DS_IP_MAC              ].addr = &mgr->mmp->mac[0];
     ip[DS_POWER_INFO_REG      ].addr = &mgr->mmp->data[0];
     ip[DS_POWER_INFO_REG      ].addr = &mgr->mmp->data[0];
+    ip[DS_WANNING_REG         ].addr = &mgr->mmp->waning[0];
     return 0;
     return 0;
 }
 }
 
 
@@ -751,9 +753,9 @@ void cascade_slave_read(uint32_t addr,uint32_t lenth)
         break;
         break;
         case WARNING_485_IP ... (WARNING_485_IP+W_LENTH):
         case WARNING_485_IP ... (WARNING_485_IP+W_LENTH):
         {
         {
-            uint16_t *base_addr = (uint16_t *)ip[DS_POWER_INFO_REG].addr;
+            uint16_t *base_addr = (uint16_t *)ip[DS_WANNING_REG].addr;
             uint32_t step = addr - sh->map->start_registers;
             uint32_t step = addr - sh->map->start_registers;
-            base_addr = base_addr + (addr - ip[DS_POWER_INFO_REG].offset);
+            base_addr = base_addr + (addr - ip[DS_WANNING_REG].offset);
             uint16_t *map_addr = (uint16_t *)&(sh->map->tab_registers[step]);
             uint16_t *map_addr = (uint16_t *)&(sh->map->tab_registers[step]);
             if(lenth < 126)
             if(lenth < 126)
             {
             {
@@ -971,7 +973,7 @@ static void *pthread_handle_tcp(void *arg)
     while(1)
     while(1)
     {
     {
         rc = modbus_receive(mb->ctx,query);
         rc = modbus_receive(mb->ctx,query);
-        log_d("recive modbus rc=%d\n",rc);
+        //log_d("recive modbus rc=%d\n",rc);
         if(rc > 0)
         if(rc > 0)
         {
         {
             _mb_hdr(&query[6],rc,&h);
             _mb_hdr(&query[6],rc,&h);
@@ -988,6 +990,7 @@ static void *pthread_handle_tcp(void *arg)
                 continue;
                 continue;
             }
             }
     }
     }
+    close(fd);
     modbus_close(mb->ctx);
     modbus_close(mb->ctx);
     modbus_free(mb->ctx);
     modbus_free(mb->ctx);
     mb->ctx = 0;
     mb->ctx = 0;

+ 44 - 4
ip/src/common.c

@@ -283,14 +283,19 @@ static int set_rtc(time_t t)
     int r=0,fd;
     int r=0,fd;
     struct rtc_time *rtc;
     struct rtc_time *rtc;
 
 
-    struct tm *tm = gmtime(&t);
+    //struct tm *tm = gmtime(&t);
+    struct tm out = {0};
+    struct tm out1 = {0};
+    struct tm *tm = gmtime_r(&t,&out);
+    //print_utc("set rtc value",)
+    log_d("___yyk___ write_rtc:%d-%d-%d %d:%d:%d\n",out.tm_year+1900,out.tm_mon+1,out.tm_mday,out.tm_hour,out.tm_min,out.tm_sec);
     fd = open("/dev/rtc0", O_RDONLY);
     fd = open("/dev/rtc0", O_RDONLY);
     if (fd < 0) {
     if (fd < 0) {
         perror("open rtc failed\n");
         perror("open rtc failed\n");
         return -1;
         return -1;
     }
     }
  
  
-    rtc = (struct rtc_time*)tm;
+    rtc = (struct rtc_time*)(&out);
     if (ioctl(fd, RTC_SET_TIME, rtc) < 0) {
     if (ioctl(fd, RTC_SET_TIME, rtc) < 0) {
         perror("ioctl RTC_SET_TIME failed\n");
         perror("ioctl RTC_SET_TIME failed\n");
         r = -1;
         r = -1;
@@ -299,7 +304,27 @@ static int set_rtc(time_t t)
         printf("set rtc ok!\n");
         printf("set rtc ok!\n");
     }
     }
     close(fd);
     close(fd);
-    
+    sync();
+    sleep(1);
+    fd = open("/dev/rtc0", O_RDONLY);
+    if (fd == -1) {
+        perror("open /dev/rtc error");
+		exit(errno);
+    }
+
+    /* Read the RTC time/date */
+    int retval = ioctl(fd, RTC_RD_TIME, &out1);
+    if (retval == -1) {
+        perror("ioctl RTC_RD_TIME error");
+        exit(errno);
+    }
+    close(fd);
+    log_d("___yyk___ read_rtc:%d-%d-%d %d:%d:%d\n",out1.tm_year+1900,out1.tm_mon+1,out1.tm_mday,out1.tm_hour,out1.tm_min,out1.tm_sec);
+    if(out.tm_year != out1.tm_year || out.tm_mon != out1.tm_mon || out.tm_mday != out1.tm_mday || out.tm_hour !=out1.tm_hour)
+    {
+        log_d("___yyk___ write_rtc:  %d-%d-%d %d:%d:%d\n",out.tm_year+1900,out.tm_mon+1,out.tm_mday,out.tm_hour,out.tm_min,out.tm_sec);
+        log_d("___yyk___  read_rtc:  %d-%d-%d %d:%d:%d\n",out1.tm_year+1900,out1.tm_mon+1,out1.tm_mday,out1.tm_hour,out1.tm_min,out1.tm_sec);
+    }
     return r;
     return r;
     
     
     //system("hwclock -w -f /dev/rtc0");
     //system("hwclock -w -f /dev/rtc0");
@@ -345,6 +370,13 @@ time_t mktime2(struct tm *t, int zone)
 
 
     return res;
     return res;
 }
 }
+time_t mktime_rtc(time_t time,int zone)
+{
+    time_t res;
+    res = time - zone*3600;
+    return res;
+}
+
 time_t mktime0(void)
 time_t mktime0(void)
 {
 {
     struct tm t;
     struct tm t;
@@ -368,6 +400,8 @@ int set_time(struct tm *t, int zone)
     t->tm_mon -= 1;
     t->tm_mon -= 1;
     time_t utc = mktime2(t, zone);
     time_t utc = mktime2(t, zone);
     stime(&utc);
     stime(&utc);
+    //time_t da = mktime2(utc, zone);
+    //time_t da = mktime_rtc(utc,zone);
     set_rtc(utc);
     set_rtc(utc);
     return 0;
     return 0;
 }
 }
@@ -376,6 +410,7 @@ int set_time(struct tm *t, int zone)
 int set_utctime(time_t t)
 int set_utctime(time_t t)
 {
 {
     stime(&t);
     stime(&t);
+    print_utc("kkkkk",t);
     set_rtc(t);
     set_rtc(t);
     sleep(1);
     sleep(1);
     //system("hwclock -w -f /dev/rtc0");
     //system("hwclock -w -f /dev/rtc0");
@@ -475,7 +510,12 @@ int set_zone(int zone)
 #endif
 #endif
 
 
     log_i("set_zone: %s", buf);
     log_i("set_zone: %s", buf);
-    return system(buf);
+    system(buf);
+    tzset();
+    // char buff[123] = {0};
+    // sprintf(buff,"export TZ='GMT%s%d'",(zone<0)?"+":"-", abs(zone));
+    // system(buff);
+    return 0;
 }
 }
 
 
 
 

+ 9 - 9
ip/src/common.h

@@ -66,6 +66,8 @@
 #define LOGO_FILE           "logo.png"
 #define LOGO_FILE           "logo.png"
 #define QRCODE_FILE         "qrcode.png"
 #define QRCODE_FILE         "qrcode.png"
 
 
+#define MAIL_RECV_MAX  10
+
 
 
 #define AC_SINGLE_S_CUR_CHN_NUM 8
 #define AC_SINGLE_S_CUR_CHN_NUM 8
 #define AC_SINGLE_B_CUR_CHN_NUM 4
 #define AC_SINGLE_B_CUR_CHN_NUM 4
@@ -264,13 +266,6 @@ typedef struct
     char          dns2[64];    					//dns2
     char          dns2[64];    					//dns2
 }NetworkInfo_t;
 }NetworkInfo_t;
 
 
-typedef struct {
-    int         watchdog;
-    int         flip_time;
-    int         led;
-    int         beep;
-    int         rotate;
-}MiscInfo_t;
 
 
 /// @brief 用户登录
 /// @brief 用户登录
 typedef struct
 typedef struct
@@ -299,7 +294,6 @@ typedef struct
     NetworkInfo_t   _network_info ;             ;//网络信息
     NetworkInfo_t   _network_info ;             ;//网络信息
     ModbusInfo_t    _gmodbus_info               ;//级联端口    
     ModbusInfo_t    _gmodbus_info               ;//级联端口    
     float           consumer                    ;  
     float           consumer                    ;  
-    MiscInfo_t      misc;
 }GlobalDeviceInfo;
 }GlobalDeviceInfo;
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
 ///////////////////////////////////////////////////////////////////////////////////
@@ -937,7 +931,12 @@ typedef struct
 }Modbus_Manger_Tcp;
 }Modbus_Manger_Tcp;
 
 
 typedef struct {
 typedef struct {
-    uint16_t waning;
+    uint16_t   waning_up_v      :    1;         //
+    uint16_t   waning_low_v     :    1;         //
+    uint16_t   waning_up_i      :    1;         //
+    uint16_t   waning_up_p      :    1;         //
+    uint16_t   waning_up_c      :    1;         //
+    uint16_t                    :   11;
 }case_ip_wanning_t;
 }case_ip_wanning_t;
 
 
 typedef struct cascade_ip_mmap{
 typedef struct cascade_ip_mmap{
@@ -1099,6 +1098,7 @@ int set_utctime_zone(time_t t, int zone);
 
 
 time_t mktime0(void);
 time_t mktime0(void);
 time_t mktime2(struct tm *t, int zone);
 time_t mktime2(struct tm *t, int zone);
+time_t mktime_rtc(time_t time,int zone);
 int get_time_str(char *s, int len, time_t t);
 int get_time_str(char *s, int len, time_t t);
 int get_time_str2(char *s, int len, time_t t);
 int get_time_str2(char *s, int len, time_t t);
 int get_bldtime(char *buf, int len);
 int get_bldtime(char *buf, int len);

+ 19 - 0
ip/src/json_handle.c

@@ -3106,6 +3106,25 @@ char* over_sensor_history_info_to_json(_OverSensorBackInfo* _over_all_sensor_bac
     return str;
     return str;
 }
 }
 
 
+
+char* mem_info_to_json()
+{
+    char* str = NULL;
+    // 创建 JSON 对象
+    cJSON* root = cJSON_CreateObject();   
+    // 添加基本键值对
+    cJSON_AddNumberToObject(root, "code", 201); 
+    //添加结果
+    cJSON_AddStringToObject(root, "msg", "Memmery is not enough and clean the wanning!!!");
+    //转换
+    str = cJSON_Print(root); 
+    //释放资源
+    cJSON_Delete(root);   
+    return str;
+}
+
+
+
 /// @brief 返回告警日志
 /// @brief 返回告警日志
 /// @param _alarm_ack_info 
 /// @param _alarm_ack_info 
 /// @return 
 /// @return 

+ 1 - 0
ip/src/json_handle.h

@@ -622,6 +622,7 @@ char* ws_chn_status_ack_to_json(int type,_OverChnPwrAckInfo* _over_chn_pwr_back_
 int json_to_switch_language(const char* str);
 int json_to_switch_language(const char* str);
 
 
 int InitHashTable(GlobalDeviceManager *gdm);
 int InitHashTable(GlobalDeviceManager *gdm);
+char* mem_info_to_json();
 
 
 
 
 int GetRoleIDByUserName(char* _userName,UserInfo* __UserInfo_t);
 int GetRoleIDByUserName(char* _userName,UserInfo* __UserInfo_t);

+ 3 - 2
ip/src/ntpclient.c

@@ -126,6 +126,7 @@ NTPClient* createNTPClient(const char* ntp_server, int port, int timeout_sec) {
     client->res = NULL;
     client->res = NULL;
     client->flag = 0;
     client->flag = 0;
     pthread_create(&tid, NULL, tmp_thread, client);
     pthread_create(&tid, NULL, tmp_thread, client);
+    pthread_detach(tid);
     for(int i=0; i<timeout_sec; i++) {
     for(int i=0; i<timeout_sec; i++) {
         if(client->flag) {
         if(client->flag) {
             break;
             break;
@@ -135,8 +136,8 @@ NTPClient* createNTPClient(const char* ntp_server, int port, int timeout_sec) {
     if(client->flag!=1) {
     if(client->flag!=1) {
         if(client->flag==0) {
         if(client->flag==0) {
             printf("___getaddrinfo timeout, cancel thread %lu\n", (unsigned long)tid);
             printf("___getaddrinfo timeout, cancel thread %lu\n", (unsigned long)tid);
-            pthread_cancel(tid);//SIGTERM
-            pthread_join(tid, NULL);
+            // pthread_cancel(tid);//SIGTERM
+            // pthread_join(tid, NULL);
             printf("___cancel ok!\n");
             printf("___cancel ok!\n");
         }
         }
         if(client->res) freeaddrinfo(client->res);
         if(client->res) freeaddrinfo(client->res);

+ 506 - 10
ip/src/pduMIB_form.c

@@ -152,9 +152,9 @@ initialize_table_pduSensorTable(void)
                                             NULL, 0,
                                             NULL, 0,
                                             COLUMN_PDUSENSORVALUENUM, ASN_INTEGER, 0,
                                             COLUMN_PDUSENSORVALUENUM, ASN_INTEGER, 0,
                                             NULL, 0,
                                             NULL, 0,
-                                            COLUMN_PDUSENSORVALUE1, ASN_INTEGER, 0,
+                                            COLUMN_PDUSENSORVALUE1, ASN_OCTET_STR, 0,
                                             NULL, 0,
                                             NULL, 0,
-                                            COLUMN_PDUSENSORVALUE2, ASN_INTEGER, 0,
+                                            COLUMN_PDUSENSORVALUE2, ASN_OCTET_STR, 0,
                                             NULL, 0,
                                             NULL, 0,
                               0);
                               0);
     
     
@@ -462,18 +462,22 @@ initialize_table_pduSensorLimitTable(void)
                            0);
                            0);
 
 
     DEBUGMSGTL(("initialize_table_pduSensorLimitTable",
     DEBUGMSGTL(("initialize_table_pduSensorLimitTable",
-                "adding column types to table pduSensorLimitTable\n"));		 
+                "adding column types to table pduSensorLimitTable\n"));
     netsnmp_table_set_multi_add_default_row(table_set,
     netsnmp_table_set_multi_add_default_row(table_set,
                                             COLUMN_PDUSENSORLIMITID, ASN_INTEGER, 1,
                                             COLUMN_PDUSENSORLIMITID, ASN_INTEGER, 1,
                                             NULL, 0,
                                             NULL, 0,
                                             COLUMN_PDUSENSORLIMITNAME, ASN_OCTET_STR, 1,
                                             COLUMN_PDUSENSORLIMITNAME, ASN_OCTET_STR, 1,
                                             NULL, 0,
                                             NULL, 0,
-                                            COLUMN_PDUSENSORLIMITVALUE1, ASN_INTEGER, 1,
+                                            COLUMN_PDUSENSORLIMITVALUE1UP, ASN_INTEGER, 1,
                                             NULL, 0,
                                             NULL, 0,
-                                            COLUMN_PDUSENSORLIMITVALUE2, ASN_INTEGER, 1,
+                                            COLUMN_PDUSENSORLIMITVALUE2UP, ASN_INTEGER, 1,
                                             NULL, 0,
                                             NULL, 0,
-                              0);
-    
+                                            COLUMN_PDUSENSORLIMITVALUE1DOWN, ASN_INTEGER, 1,
+                                            NULL, 0,
+                                            COLUMN_PDUSENSORLIMITVALUE2DOWN, ASN_INTEGER, 1,
+                                            NULL, 0,
+                                            0);
+
     /* registering the table with the master agent */
     /* registering the table with the master agent */
     /* note: if you don't need a subhandler to deal with any aspects
     /* note: if you don't need a subhandler to deal with any aspects
        of the request, change pduSensorLimitTable_handler to "NULL" */
        of the request, change pduSensorLimitTable_handler to "NULL" */
@@ -518,12 +522,35 @@ pduChannelTable_handler(
       GlobalPowerManger* iterator;
       GlobalPowerManger* iterator;
       //GlobalPowerInfo powerInfo;
       //GlobalPowerInfo powerInfo;
       char buffer[16];
       char buffer[16];
+      oid begin_next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 3, 9, 1, 1, 1};
+      int max_clonum=11;
       switch(reqinfo->mode)
       switch(reqinfo->mode)
       {
       {
          case MODE_GET:
          case MODE_GET:
+         case MODE_GETNEXT:
                for (request = requests; request; request = request->next)
                for (request = requests; request; request = request->next)
                {
                {
                   table_info = netsnmp_extract_table_info(request);
                   table_info = netsnmp_extract_table_info(request);
+                   if (reqinfo->mode==MODE_GETNEXT)
+                   {
+                      if (table_info->index_oid[0] == 0)
+                      {
+                         table_info->index_oid[0] = 1;
+                         table_info->colnum = 1;
+                         snmp_set_var_objid(requests->requestvb, begin_next_oid, OID_LENGTH(begin_next_oid));
+                      }
+                      else
+                      {
+                        if (table_info->colnum > max_clonum)
+                        {
+                            table_info->index_oid[0] += 1;
+                            table_info->colnum =1;
+                        }
+                        oid next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 3, 9, 1, table_info->colnum, table_info->index_oid[0]};
+                         snmp_set_var_objid(requests->requestvb, next_oid, OID_LENGTH(next_oid));
+                      }
+                   }
+
                   int nIndex=1;
                   int nIndex=1;
                   list_for_each_entry(iterator, &__globalDeviceManage._globalPowerManger.list, list)
                   list_for_each_entry(iterator, &__globalDeviceManage._globalPowerManger.list, list)
                   {
                   {
@@ -541,7 +568,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_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];
                      //       _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.");
                      //   log_e("search total pwr err at pduChannelTable_handler from db.");
                      //}
                      //}
@@ -758,12 +785,34 @@ pduGroupTable_handler(
     }
     }
 
 
     char buffer[16];
     char buffer[16];
+    oid begin_next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 3, 10, 1, 1, 1};
+    int max_clonum = 4;
     switch (reqinfo->mode)
     switch (reqinfo->mode)
     {
     {
     case MODE_GET:
     case MODE_GET:
+    case MODE_GETNEXT:
        for (request = requests; request; request = request->next)
        for (request = requests; request; request = request->next)
        {
        {
           table_info = netsnmp_extract_table_info(request);
           table_info = netsnmp_extract_table_info(request);
+          if (reqinfo->mode == MODE_GETNEXT)
+          {
+             if (table_info->index_oid[0] == 0)
+             {
+                table_info->index_oid[0] = 1;
+                table_info->colnum = 1;
+                snmp_set_var_objid(requests->requestvb, begin_next_oid, OID_LENGTH(begin_next_oid));
+             }
+             else
+             {
+                if (table_info->colnum > max_clonum)
+                {
+                   table_info->index_oid[0] += 1;
+                   table_info->colnum = 1;
+                }
+                oid next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 3, 10, 1, table_info->colnum, table_info->index_oid[0]};
+                snmp_set_var_objid(requests->requestvb, next_oid, OID_LENGTH(next_oid));
+             }
+          }
           int nIndex = 1;
           int nIndex = 1;
           list_for_each_entry(_GroupInfoTemp, &group_list.list, list)
           list_for_each_entry(_GroupInfoTemp, &group_list.list, list)
           {
           {
@@ -949,8 +998,7 @@ pduGroupTable_handler(
        /* we should never get here, so this is a really bad error */
        /* we should never get here, so this is a really bad error */
        snmp_log(LOG_ERR, "unknown mode (%d) in handle_pduType\n", reqinfo->mode);
        snmp_log(LOG_ERR, "unknown mode (%d) in handle_pduType\n", reqinfo->mode);
        return SNMP_ERR_GENERR;
        return SNMP_ERR_GENERR;
-      }
-
+    }
 
 
     return SNMP_ERR_NOERROR;
     return SNMP_ERR_NOERROR;
 }
 }
@@ -966,6 +1014,113 @@ pduSensorTable_handler(
        already been processed by the master table_dataset handler, but
        already been processed by the master table_dataset handler, but
        this gives you chance to act on the request in some other way
        this gives you chance to act on the request in some other way
        if need be. */
        if need be. */
+    netsnmp_request_info *request;
+    netsnmp_table_request_info *table_info;
+    GlobalSensorManger *iterator = NULL;
+    //
+    char buffer[16];
+    oid begin_next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 4, 1, 1, 1, 1};
+    int max_clonum = 10;
+    switch (reqinfo->mode)
+    {
+    case MODE_GET:
+    case MODE_GETNEXT:
+       for (request = requests; request; request = request->next)
+       {
+          table_info = netsnmp_extract_table_info(request);
+
+          if (reqinfo->mode == MODE_GETNEXT)
+          {
+             if (table_info->index_oid[0] == 0)
+             {
+                table_info->index_oid[0] = 1;
+                table_info->colnum = 1;
+                snmp_set_var_objid(requests->requestvb, begin_next_oid, OID_LENGTH(begin_next_oid));
+             }
+             else
+             {
+                if (table_info->colnum > max_clonum)
+                {
+                   table_info->index_oid[0] += 1;
+                   table_info->colnum = 1;
+                }
+                oid next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 4, 1, 1, table_info->colnum, table_info->index_oid[0]};
+                snmp_set_var_objid(requests->requestvb, next_oid, OID_LENGTH(next_oid));
+             }
+          }
+
+          int nIndex = table_info->index_oid[0];
+          bool findinstance = false;
+
+          list_for_each_entry(iterator, &__globalDeviceManage._globalSensorManger.list, list)
+          {
+             if (!iterator || nIndex != iterator->sensor_id)
+             {
+                continue;
+             }
+             memset(buffer, 0, sizeof(buffer));
+             switch (table_info->colnum)
+             {
+             case COLUMN_PDUSENSORID:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_id);
+                break;
+             case COLUMN_PDUSENSORNAME:
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, iterator->sensor_name, strlen(iterator->sensor_name));
+                break;
+             case COLUMN_PDUSENSORTYPE:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_type);
+                break;
+             case COLUMN_PDUSENSORDATACHENNEL:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_interface_type);
+                break;
+             case COLUMN_PDUSENSORMODBUSADDRESS:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_addr);
+                break;
+             case 6:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_node_number);
+                break;
+             case COLUMN_PDUSENSORSTATUS:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_status);
+                break;
+             case COLUMN_PDUSENSORVALUENUM:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_val_count);
+                break;
+             case COLUMN_PDUSENSORVALUE1:
+                sprintf(buffer, "%0.3f", iterator->Cur_sensor_info.val1);
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
+                break;
+             case COLUMN_PDUSENSORVALUE2:
+                sprintf(buffer, "%0.3f", iterator->Cur_sensor_info.val2);
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
+                break;
+             default:
+                netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+                break;
+             }
+             //}
+             break;
+          }
+
+       }
+       break;
+    case MODE_SET_RESERVE1:
+       break;
+    case MODE_SET_RESERVE2:
+       break;
+    case MODE_SET_FREE:
+       break;
+    case MODE_SET_ACTION:
+       break;
+    case MODE_SET_UNDO:
+       break;
+    case MODE_SET_COMMIT:
+       break;
+    default:
+       /* we should never get here, so this is a really bad error */
+       snmp_log(LOG_ERR, "unknown mode (%d) in handle_pduType\n", reqinfo->mode);
+       return SNMP_ERR_GENERR;
+    }
+
     return SNMP_ERR_NOERROR;
     return SNMP_ERR_NOERROR;
 }
 }
 
 
@@ -1036,6 +1191,150 @@ pduAlarmHistoryTable_handler(
        already been processed by the master table_dataset handler, but
        already been processed by the master table_dataset handler, but
        this gives you chance to act on the request in some other way
        this gives you chance to act on the request in some other way
        if need be. */
        if need be. */
+
+    netsnmp_request_info *request;
+    netsnmp_table_request_info *table_info;
+
+    //
+    char buffer[16];
+    oid begin_next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 6, 1, 1, 1, 1};
+    int max_clonum = 7;
+    switch (reqinfo->mode)
+    {
+    case MODE_GET:
+    case MODE_GETNEXT:
+    {
+       // 初始化表
+       int nAlarmNumber = 0;
+       _AlarmAckInfo _alarm_ack_info; // 填充数据
+       INIT_LIST_HEAD(&_alarm_ack_info.list);
+       // 查询数据库,最近的10个报警信息
+       char start_time[32] = {0};
+       char stop_time[32] = {0};
+
+       struct tm *t;
+       struct timeval tv;
+
+       gettimeofday(&tv, NULL);
+       t = localtime(&tv.tv_sec);
+       sprintf(stop_time, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, 23, 59, 59);
+       sprintf(start_time, "%04d-%02d-%02d %02d:%02d:%02d", t->tm_year + 1900, t->tm_mon + 1, t->tm_mday, 0, 0, 0);
+
+       int ret = dev_search_alarm_info(__globalDeviceManage.db,
+                                       __globalDeviceManage._globalDevInfo.product_id,
+                                       -1, start_time, stop_time,
+                                       1, 10,
+                                       &_alarm_ack_info, &nAlarmNumber);
+       if (ret != 0)
+       {
+          log_e("get power alarm error.");
+          return SNMP_ERR_GENERR;
+       }
+    
+
+       for (request = requests; request; request = request->next)
+       {
+          table_info = netsnmp_extract_table_info(request);
+
+          if (reqinfo->mode == MODE_GETNEXT)
+          {
+             if (table_info->index_oid[0] == 0)
+             {
+                table_info->index_oid[0] = 1;
+                table_info->colnum = 1;
+                snmp_set_var_objid(requests->requestvb, begin_next_oid, OID_LENGTH(begin_next_oid));
+             }
+             else
+             {
+                if (table_info->colnum > max_clonum)
+                {
+                   table_info->index_oid[0] += 1;
+                   table_info->colnum = 1;
+                }
+                oid next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 6, 1, 1, table_info->colnum, table_info->index_oid[0]};
+                snmp_set_var_objid(requests->requestvb, next_oid, OID_LENGTH(next_oid));
+             }
+          }
+
+          int nIndex = 1;
+          _AlarmAckInfo *_temp;
+          list_for_each_entry(_temp, &_alarm_ack_info.list, list)
+          {
+             if (nIndex < table_info->index_oid[0])
+             {
+                nIndex++;
+                continue;
+             }
+
+             if (!_temp)
+             {
+                break;
+             }
+
+             memset(buffer, 0, sizeof(buffer));
+             switch (table_info->colnum)
+             {
+             case COLUMN_PDUALARMID:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, nIndex);
+                break;
+             case COLUMN_PDUALARMTYPE:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, _temp->alarmType);
+                break;
+             case COLUMN_PDUALARMCONTEXT:
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, _temp->alarmContent, strlen(_temp->alarmContent));
+                break;
+             case COLUMN_PDUALARMACTION:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, -1);
+                break;
+             case COLUMN_PDUALARMACTIONPARA:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, -1);
+                break;
+             case COLUMN_PDUALARMDATE:
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, _temp->alarmDate, strlen(_temp->alarmDate));
+                break;
+             case COLUMN_PDUALARMTIME:
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, _temp->alarmDate, strlen(_temp->alarmDate));
+                break;
+             default:
+                netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+                break;
+             }
+             //}
+             break;
+          }
+       }
+
+       // 释放资源
+       if (0 == ret)
+       {
+          _AlarmAckInfo *node;
+          _AlarmAckInfo *next;
+          list_for_each_entry_safe(node, next, &_alarm_ack_info.list, list)
+          {
+             list_del(&node->list);
+             free(node);
+          }
+       }
+    }
+    break;
+    case MODE_SET_RESERVE1:
+       break;
+    case MODE_SET_RESERVE2:
+       break;
+    case MODE_SET_FREE:
+       break;
+    case MODE_SET_ACTION:
+       break;
+    case MODE_SET_UNDO:
+       break;
+    case MODE_SET_COMMIT:
+       break;
+    default:
+       /* we should never get here, so this is a really bad error */
+       snmp_log(LOG_ERR, "unknown mode (%d) in handle_pduType\n", reqinfo->mode);
+       return SNMP_ERR_GENERR;
+    }
+
     return SNMP_ERR_NOERROR;
     return SNMP_ERR_NOERROR;
 }
 }
 
 
@@ -1050,6 +1349,110 @@ pduChannelLimitTable_handler(
        already been processed by the master table_dataset handler, but
        already been processed by the master table_dataset handler, but
        this gives you chance to act on the request in some other way
        this gives you chance to act on the request in some other way
        if need be. */
        if need be. */
+
+    netsnmp_request_info *request;
+    netsnmp_table_request_info *table_info;
+    GlobalPowerManger *iterator = NULL;
+    //
+    char buffer[16];
+    oid begin_next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 7, 2, 6, 1, 1, 1};
+    int max_clonum = 7;
+    switch (reqinfo->mode)
+    {
+    case MODE_GET:
+   case MODE_GETNEXT:
+       for (request = requests; request; request = request->next)
+       {
+          table_info = netsnmp_extract_table_info(request);
+          if (reqinfo->mode == MODE_GETNEXT)
+          {
+             if (table_info->index_oid[0] == 0)
+             {
+                table_info->index_oid[0] = 1;
+                table_info->colnum = 1;
+                snmp_set_var_objid(requests->requestvb, begin_next_oid, OID_LENGTH(begin_next_oid));
+             }
+             else
+             {
+                if (table_info->colnum > max_clonum)
+                {
+                   table_info->index_oid[0] += 1;
+                   table_info->colnum = 1;
+                }
+                oid next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 7, 2, 6, 1,table_info->colnum, table_info->index_oid[0]};
+                snmp_set_var_objid(requests->requestvb, next_oid, OID_LENGTH(next_oid));
+             }
+          }
+          int nIndex = 1;
+
+          list_for_each_entry(iterator, &__globalDeviceManage._globalPowerManger.list, list)
+          {
+             if (nIndex < table_info->index_oid[0])
+             {
+                nIndex++;
+                continue;
+             }
+             if (!iterator)
+             {
+                break;
+             }
+
+             memset(buffer, 0, sizeof(buffer));
+             switch (table_info->colnum)
+             {
+             case COLUMN_PDUCHANNELLIMITID:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->product_ch_id);
+                break;
+             case COLUMN_PDUCHANNELLIMITNAME:
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, iterator->product_ch_name, strlen(iterator->product_ch_name));
+                break;
+             case COLUMN_PDUCHANNELCURRENTLIMITUP:
+                sprintf(buffer, "%0.2f", iterator->global_over_manager->product_cur_upper_threshold);
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
+                break;
+             case COLUMN_PDUCHANNELVOLTAGELIMITUP:
+                sprintf(buffer, "%0.2f", iterator->global_over_manager->product_vol_upper_threshold);
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
+                break;
+             case COLUMN_PDUCHANNELVOLTAGELIMITDOWN:
+                sprintf(buffer, "%0.2f", iterator->global_over_manager->product_vol_lower_threshold);
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
+                break;
+             case COLUMN_PDUCHANNELPOWERLIMITUP:
+                sprintf(buffer, "%0.2f", iterator->global_over_manager->product_pwr_upper_threshold);
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
+                break;
+             case COLUMN_PDUCHANNELCONSUMPTIONLIMITUP:
+                sprintf(buffer, "%0.2f", iterator->global_over_manager->product_pwrcon_upper_threshold);
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
+                break;
+             default:
+                netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+                break;
+             }
+             //}
+             break;
+          }
+       }
+       break;
+    case MODE_SET_RESERVE1:
+       break;
+    case MODE_SET_RESERVE2:
+       break;
+    case MODE_SET_FREE:
+       break;
+    case MODE_SET_ACTION:
+       break;
+    case MODE_SET_UNDO:
+       break;
+    case MODE_SET_COMMIT:
+       break;
+    default:
+       /* we should never get here, so this is a really bad error */
+       snmp_log(LOG_ERR, "unknown mode (%d) in handle_pduType\n", reqinfo->mode);
+       return SNMP_ERR_GENERR;
+    }
+
     return SNMP_ERR_NOERROR;
     return SNMP_ERR_NOERROR;
 }
 }
 
 
@@ -1064,5 +1467,98 @@ pduSensorLimitTable_handler(
        already been processed by the master table_dataset handler, but
        already been processed by the master table_dataset handler, but
        this gives you chance to act on the request in some other way
        this gives you chance to act on the request in some other way
        if need be. */
        if need be. */
+    netsnmp_request_info *request;
+    netsnmp_table_request_info *table_info;
+    GlobalSensorManger *iterator = NULL;
+    //
+    char buffer[16];
+    oid begin_next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 7, 3, 1, 1, 1, 1};
+    int max_clonum = 6;
+    switch (reqinfo->mode)
+    {
+    case MODE_GET:
+    case MODE_GETNEXT:
+       for (request = requests; request; request = request->next)
+       {
+          table_info = netsnmp_extract_table_info(request);
+
+          if (reqinfo->mode == MODE_GETNEXT)
+          {
+             if (table_info->index_oid[0] == 0)
+             {
+                table_info->index_oid[0] = 1;
+                table_info->colnum = 1;
+                snmp_set_var_objid(requests->requestvb, begin_next_oid, OID_LENGTH(begin_next_oid));
+             }
+             else
+             {
+                if (table_info->colnum > max_clonum)
+                {
+                   table_info->index_oid[0] += 1;
+                   table_info->colnum = 1;
+                }
+                oid next_oid[] = {1, 3, 6, 1, 4, 1, 2024, 1, 7, 3, 1, 1, table_info->colnum, table_info->index_oid[0]};
+                snmp_set_var_objid(requests->requestvb, next_oid, OID_LENGTH(next_oid));
+             }
+          }
+
+          int nIndex = table_info->index_oid[0];
+
+          list_for_each_entry(iterator, &__globalDeviceManage._globalSensorManger.list, list)
+          {
+             if (!iterator || nIndex != iterator->sensor_id)
+             {
+                continue;
+             }
+
+             memset(buffer, 0, sizeof(buffer));
+             switch (table_info->colnum)
+             {
+             case COLUMN_PDUSENSORLIMITID:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->sensor_id);
+                break;
+             case COLUMN_PDUSENSORLIMITNAME:
+                snmp_set_var_typed_value(request->requestvb, ASN_OCTET_STR, iterator->sensor_name, strlen(iterator->sensor_name));
+                break;
+             case COLUMN_PDUSENSORLIMITVALUE1UP:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->over_manager->sensor_val1_upper_threshold);
+                break;
+             case COLUMN_PDUSENSORLIMITVALUE2UP:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->over_manager->sensor_val2_upper_threshold);
+                break;
+             case COLUMN_PDUSENSORLIMITVALUE1DOWN:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->over_manager->sensor_val1_lower_threshold);
+                break;
+             case COLUMN_PDUSENSORLIMITVALUE2DOWN:
+                snmp_set_var_typed_integer(request->requestvb, ASN_INTEGER, iterator->over_manager->sensor_val2_lower_threshold);
+                break;
+             default:
+                netsnmp_set_request_error(reqinfo, request, SNMP_NOSUCHOBJECT);
+                break;
+             }
+             //}
+             break;
+          }
+
+       }
+       break;
+    case MODE_SET_RESERVE1:
+       break;
+    case MODE_SET_RESERVE2:
+       break;
+    case MODE_SET_FREE:
+       break;
+    case MODE_SET_ACTION:
+       break;
+    case MODE_SET_UNDO:
+       break;
+    case MODE_SET_COMMIT:
+       break;
+    default:
+       /* we should never get here, so this is a really bad error */
+       snmp_log(LOG_ERR, "unknown mode (%d) in handle_pduType\n", reqinfo->mode);
+       return SNMP_ERR_GENERR;
+    }
+
     return SNMP_ERR_NOERROR;
     return SNMP_ERR_NOERROR;
 }
 }

+ 4 - 2
ip/src/pduMIB_form.h

@@ -101,6 +101,8 @@ Netsnmp_Node_Handler pduSensorLimitTable_handler;
 /* column number definitions for table pduSensorLimitTable */
 /* column number definitions for table pduSensorLimitTable */
        #define COLUMN_PDUSENSORLIMITID		1
        #define COLUMN_PDUSENSORLIMITID		1
        #define COLUMN_PDUSENSORLIMITNAME		2
        #define COLUMN_PDUSENSORLIMITNAME		2
-       #define COLUMN_PDUSENSORLIMITVALUE1		3
-       #define COLUMN_PDUSENSORLIMITVALUE2		4
+       #define COLUMN_PDUSENSORLIMITVALUE1UP		3
+       #define COLUMN_PDUSENSORLIMITVALUE2UP		4
+       #define COLUMN_PDUSENSORLIMITVALUE1DOWN		5
+       #define COLUMN_PDUSENSORLIMITVALUE2DOWN		6
 #endif /* PDUMIB_FORM_H */
 #endif /* PDUMIB_FORM_H */

+ 31 - 10
ip/src/pduMIB_scalar.c

@@ -315,7 +315,7 @@ int handle_pduId(netsnmp_mib_handler *handler,
 
 
     case MODE_GET:
     case MODE_GET:
         snmp_set_var_typed_value(requests->requestvb, ASN_INTEGER,&__globalDeviceManage._globalDevInfo.product_id,sizeof(ASN_INTEGER));
         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: a pointer to the scalar's data */&__globalDeviceManage._globalDevInfo.product.id,
         //                          /* XXX: the length of the data in bytes */sizeof(ASN_INTEGER));
         //                          /* XXX: the length of the data in bytes */sizeof(ASN_INTEGER));
         break;
         break;
 
 
@@ -348,8 +348,8 @@ int handle_pduName(netsnmp_mib_handler *handler,
                                  strlen(__globalDeviceManage._globalDevInfo.product_name) // buff的长度
                                  strlen(__globalDeviceManage._globalDevInfo.product_name) // buff的长度
         );
         );
         // snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
         // 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;
         break;
 
 
     default:
     default:
@@ -3508,14 +3508,17 @@ int handle_pduCurrentLimitUp(netsnmp_mib_handler *handler,
 
 
     /* a instance handler also only hands us one request at a time, so
     /* a instance handler also only hands us one request at a time, so
        we don't need to loop over a list of requests; we'll only get one. */
        we don't need to loop over a list of requests; we'll only get one. */
-
+    char buffer[64];
     switch (reqinfo->mode)
     switch (reqinfo->mode)
     {
     {
-
     case MODE_GET:
     case MODE_GET:
         // snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
         // snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
         //                          /* XXX: a pointer to the scalar's data */,
         //                          /* XXX: a pointer to the scalar's data */,
         //                          /* XXX: the length of the data in bytes */);
         //                          /* XXX: the length of the data in bytes */);
+
+        memset(buffer, 0, sizeof(buffer));
+        sprintf(buffer, "%0.2f", __globalDeviceManage._globalPowerManger.global_over_manager->product_cur_upper_threshold);
+        snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
         break;
         break;
 
 
     /*
     /*
@@ -3588,7 +3591,7 @@ int handle_pduVoltageLimitUp(netsnmp_mib_handler *handler,
 
 
     /* a instance handler also only hands us one request at a time, so
     /* a instance handler also only hands us one request at a time, so
        we don't need to loop over a list of requests; we'll only get one. */
        we don't need to loop over a list of requests; we'll only get one. */
-
+    char buffer[64];
     switch (reqinfo->mode)
     switch (reqinfo->mode)
     {
     {
 
 
@@ -3596,6 +3599,9 @@ int handle_pduVoltageLimitUp(netsnmp_mib_handler *handler,
         // snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
         // snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
         //                          /* XXX: a pointer to the scalar's data */,
         //                          /* XXX: a pointer to the scalar's data */,
         //                          /* XXX: the length of the data in bytes */);
         //                          /* XXX: the length of the data in bytes */);
+        memset(buffer, 0, sizeof(buffer));
+        sprintf(buffer, "%0.2f", __globalDeviceManage._globalPowerManger.global_over_manager->product_vol_upper_threshold);
+        snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
         break;
         break;
 
 
     /*
     /*
@@ -3668,7 +3674,7 @@ int handle_pduVoltageLimitDown(netsnmp_mib_handler *handler,
 
 
     /* a instance handler also only hands us one request at a time, so
     /* a instance handler also only hands us one request at a time, so
        we don't need to loop over a list of requests; we'll only get one. */
        we don't need to loop over a list of requests; we'll only get one. */
-
+    char buffer[64];
     switch (reqinfo->mode)
     switch (reqinfo->mode)
     {
     {
 
 
@@ -3676,6 +3682,9 @@ int handle_pduVoltageLimitDown(netsnmp_mib_handler *handler,
         // snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
         // snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
         //                          /* XXX: a pointer to the scalar's data */,
         //                          /* XXX: a pointer to the scalar's data */,
         //                          /* XXX: the length of the data in bytes */);
         //                          /* XXX: the length of the data in bytes */);
+        memset(buffer, 0, sizeof(buffer));
+        sprintf(buffer, "%0.2f", __globalDeviceManage._globalPowerManger.global_over_manager->product_vol_lower_threshold);
+        snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
         break;
         break;
 
 
     /*
     /*
@@ -3748,7 +3757,7 @@ int handle_pduPowerLimitUp(netsnmp_mib_handler *handler,
 
 
     /* a instance handler also only hands us one request at a time, so
     /* a instance handler also only hands us one request at a time, so
        we don't need to loop over a list of requests; we'll only get one. */
        we don't need to loop over a list of requests; we'll only get one. */
-
+    char buffer[64];
     switch (reqinfo->mode)
     switch (reqinfo->mode)
     {
     {
 
 
@@ -3756,6 +3765,9 @@ int handle_pduPowerLimitUp(netsnmp_mib_handler *handler,
         // snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
         // snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
         //                          /* XXX: a pointer to the scalar's data */,
         //                          /* XXX: a pointer to the scalar's data */,
         //                          /* XXX: the length of the data in bytes */);
         //                          /* XXX: the length of the data in bytes */);
+        memset(buffer, 0, sizeof(buffer));
+        sprintf(buffer, "%0.2f", __globalDeviceManage._globalPowerManger.global_over_manager->product_pwr_upper_threshold);
+        snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
         break;
         break;
 
 
     /*
     /*
@@ -3828,7 +3840,7 @@ int handle_pduConsumptionLimitUp(netsnmp_mib_handler *handler,
 
 
     /* a instance handler also only hands us one request at a time, so
     /* a instance handler also only hands us one request at a time, so
        we don't need to loop over a list of requests; we'll only get one. */
        we don't need to loop over a list of requests; we'll only get one. */
-
+    char buffer[64];
     switch (reqinfo->mode)
     switch (reqinfo->mode)
     {
     {
 
 
@@ -3836,6 +3848,9 @@ int handle_pduConsumptionLimitUp(netsnmp_mib_handler *handler,
         // snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
         // snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR,
         //                          /* XXX: a pointer to the scalar's data */,
         //                          /* XXX: a pointer to the scalar's data */,
         //                          /* XXX: the length of the data in bytes */);
         //                          /* XXX: the length of the data in bytes */);
+        memset(buffer, 0, sizeof(buffer));
+        sprintf(buffer, "%0.2f", __globalDeviceManage._globalPowerManger.global_over_manager->product_pwrcon_upper_threshold);
+        snmp_set_var_typed_value(requests->requestvb, ASN_OCTET_STR, buffer, strlen(buffer));
         break;
         break;
 
 
     /*
     /*
@@ -3908,7 +3923,7 @@ int handle_pduRestart(netsnmp_mib_handler *handler,
 
 
     /* a instance handler also only hands us one request at a time, so
     /* a instance handler also only hands us one request at a time, so
        we don't need to loop over a list of requests; we'll only get one. */
        we don't need to loop over a list of requests; we'll only get one. */
-
+    int nStatus =-1;
     switch (reqinfo->mode)
     switch (reqinfo->mode)
     {
     {
 
 
@@ -3959,6 +3974,12 @@ int handle_pduRestart(netsnmp_mib_handler *handler,
         //     /* try _really_really_ hard to never get to this point */
         //     /* try _really_really_ hard to never get to this point */
         //     netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_COMMITFAILED);
         //     netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_COMMITFAILED);
         // }
         // }
+        nStatus = *requests->requestvb->val.integer;
+        if (nStatus == 1)
+        {
+           system("reboot");
+        }
+        else netsnmp_set_request_error(reqinfo, requests, SNMP_ERR_COMMITFAILED);
         break;
         break;
 
 
     case MODE_SET_UNDO:
     case MODE_SET_UNDO:

+ 64 - 5
ip/src/sqlite_handle.c

@@ -2910,14 +2910,12 @@ int dev_serarch_all_alarm(sqlite3* db,
 
 
     if (alarm_type<0)//小于0加载所有的
     if (alarm_type<0)//小于0加载所有的
     {   
     {   
-        sprintf(select_sql,"SELECT* FROM Table_AlarmManage WHERE (product_id=%d) order by alarmType desc LIMIT %d OFFSET %d ",
-                        product_id,
+        sprintf(select_sql,"SELECT* FROM Table_AlarmManage order by alarmType desc LIMIT %d OFFSET %d ",
                         page_size,
                         page_size,
                         page_num>0?(page_num-1)*page_size:0);
                         page_num>0?(page_num-1)*page_size:0);
     }else
     }else
     {
     {
-        sprintf(select_sql,"SELECT* FROM Table_AlarmManage WHERE (product_id=%d) AND (alarmType=%d) LIMIT %d OFFSET %d",
-                        product_id,
+        sprintf(select_sql,"SELECT* FROM Table_AlarmManage WHERE (alarmType=%d) LIMIT %d OFFSET %d",
                         alarm_type,
                         alarm_type,
                         page_size,
                         page_size,
                         page_num>0?(page_num-1)*page_size:0);
                         page_num>0?(page_num-1)*page_size:0);
@@ -3046,12 +3044,16 @@ int dev_search_alarm_info(sqlite3* db,
         sqlite3_free_table(pResult);
         sqlite3_free_table(pResult);
         return -1 ;
         return -1 ;
     }
     }
-
+    if(nrow > 100)
+        nrow = 100;
     for (size_t i = 1; i <= nrow; i++)
     for (size_t i = 1; i <= nrow; i++)
     {
     {
         _AlarmAckInfo* _alarmTemp = (_AlarmAckInfo*)malloc(sizeof( _AlarmAckInfo));
         _AlarmAckInfo* _alarmTemp = (_AlarmAckInfo*)malloc(sizeof( _AlarmAckInfo));
         if(_alarmTemp==NULL)
         if(_alarmTemp==NULL)
+        {
             log_e("alarm malloc failed");
             log_e("alarm malloc failed");
+            break;
+        }
         strcpy(_alarmTemp->alarmNumber,pResult[i*ncolumn+0]);
         strcpy(_alarmTemp->alarmNumber,pResult[i*ncolumn+0]);
         strcpy(_alarmTemp->alarmDate,pResult[i*ncolumn+1]);
         strcpy(_alarmTemp->alarmDate,pResult[i*ncolumn+1]);
         _alarmTemp->alarmType = atoi(pResult[i*ncolumn+2]);
         _alarmTemp->alarmType = atoi(pResult[i*ncolumn+2]);
@@ -4554,6 +4556,63 @@ quit:
 }
 }
 
 
 
 
+int dev_mail_update_recv(sqlite3 *db, smtp_recv_t *recv)
+{
+    int i,r=-1,exist=0,cnt=0;
+
+
+    char temp[1024];
+    sqlite3_stmt *stmt;
+    char *err_msg=NULL;
+    smtp_recv_t *rcv=NULL;
+    char *table=SMTP_RECVEIVE_TABLE;
+    
+    if(!db || !recv) {
+        return -1;
+    }
+
+    cnt = get_count(db, table);
+    for(i=0; i<MAIL_RECV_MAX; i++) {
+        rcv = &recv[i];
+        if(cnt>0) {
+            sprintf(temp, "UPDATE %s SET idx=%d, use=%d, account='%s' WHERE idx=%d;", 
+                    table, rcv->idx, rcv->use, rcv->account, rcv->idx);
+            r = sqlite3_exec(db, temp, NULL, 0, &err_msg);
+            if(r != SQLITE_OK) {
+                log_e("___dev_mail_update_recv failed, %s, %s\n", temp, err_msg);
+                sqlite3_free(err_msg);
+                return -1;
+            }
+            else {
+                exist = sqlite3_changes(db);
+            }
+        }
+
+        if(exist==0) {
+            sprintf(temp, "INSERT INTO %s (idx,use,account) VALUES (?,?,?);", table);
+            r = sqlite3_prepare_v2(db, temp, -1, &stmt, 0);
+            if (r != SQLITE_OK) {
+                log_e("___dev_mail_update_recv, sqlite3_prepare_v2 failed, %s\n", sqlite3_errmsg(db));
+                return -1;
+            }
+
+            sqlite3_bind_int(stmt,  1, rcv->idx);
+            sqlite3_bind_int(stmt,  2, rcv->use);
+            sqlite3_bind_text(stmt, 3, rcv->account,  -1, NULL);
+
+            r = sqlite3_step(stmt);
+            sqlite3_finalize(stmt);
+
+            if (r != SQLITE_DONE) {
+                log_e("___dev_mail_update_recv, sqlite3_step failed\n");
+                r = -1;
+            }
+        }
+    }
+
+    return r;
+}
+
 ////////////////mqtt/////////////////////////////////////////////
 ////////////////mqtt/////////////////////////////////////////////
 #define MQTT_MANAGER_TABLE   "Table_MQTTManage"
 #define MQTT_MANAGER_TABLE   "Table_MQTTManage"
 int dev_mqtt_init(sqlite3 *db, mqtt_server_t *ser)
 int dev_mqtt_init(sqlite3 *db, mqtt_server_t *ser)

+ 1 - 0
ip/src/sqlite_handle.h

@@ -161,4 +161,5 @@ int dev_search_latest_power_all_info_ip(GlobalDeviceManager* globalDeviceManger,
 int dev_get_sensor_info (sqlite3 *db,int product_id,int sensor_id, GlobalSensorManger* sensor_temp);
 int dev_get_sensor_info (sqlite3 *db,int product_id,int sensor_id, GlobalSensorManger* sensor_temp);
 int dev_get_sensor_info_new(sqlite3 *db,int product_id,int sensor_id, GlobalSensorManger* sensor_temp);
 int dev_get_sensor_info_new(sqlite3 *db,int product_id,int sensor_id, GlobalSensorManger* sensor_temp);
 int dev_update_consumer(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo);
 int dev_update_consumer(sqlite3 *db,GlobalDeviceInfo* _globalDeviceInfo);
+int dev_mail_update_recv(sqlite3 *db, smtp_recv_t *recv);
 #endif
 #endif

+ 0 - 79
ip/src/sys.c

@@ -1126,83 +1126,6 @@ static void mem_check(void)
     }
     }
 }
 }
 
 
-//https://blog.csdn.net/weixin_47604497/article/details/136913868
-#include <linux/watchdog.h>
-static int wdog_fd=-1;
-static int wdog_is_en(void)
-{
-    GlobalDeviceManager *dm=&__globalDeviceManage;
-    MiscInfo_t *misc=&dm->_globalDevInfo.misc;
-
-    return misc->watchdog;
-}
-static int wdog_init(void)
-{
-    int r=0;
-
-    //if(wdog_is_en() == 0) {
-        char *path="/dev/watchdog";
-        
-        if(wdog_fd<0) {
-            wdog_fd = open(path, O_RDWR);   //O_WRONLY
-            log_d("wdog_fd = %d\n",wdog_fd);
-            if(wdog_fd<0) {
-                printf("___ %s open failed\n", path);
-                return -1;
-            }
-        }
-
-#if (CHIP_TYPE == CHIP_T113s)
-        int i,option,timeout;
-        struct watchdog_info info;
-        
-        option = WDIOS_DISABLECARD;
-        r = ioctl(wdog_fd, WDIOC_SETOPTIONS, &option);
-
-        r = ioctl(wdog_fd, WDIOC_GETSUPPORT, &info);
-        if(r<0) {
-            printf("___ %s getsupport failed\n", path);
-            return -1;
-        }
-        printf("___ watchdog options: 0x%x\n", info.options&WDIOC_SETTIMEOUT);
-
-        timeout = 40;
-        r = ioctl(wdog_fd, WDIOC_SETTIMEOUT, &timeout);
-        if(r) {
-            printf("______set__________ wdog set timeout: %d failed, errno: %d\n", timeout, errno);
-        }
-
-        option = WDIOS_ENABLECARD;
-        r = ioctl(wdog_fd, WDIOC_SETOPTIONS, &option);
-#endif
-//    }
-
-    return r;
-}
-
-
-
-static int wdog_feed(void)
-{
-    int r=0;
-
-    //if(wdog_is_en()) {
-        r = ioctl(wdog_fd, WDIOC_KEEPALIVE, 0);
-
-        //int t1=200,t2=0;
-        //r = ioctl(wdog_fd, WDIOC_SETTIMEOUT, &t1);
-        //printf("______set__________ wdog timeout: %d, errno: %d\n", r, errno);
-        
-        //r = ioctl(wdog_fd, WDIOC_GETTIMEOUT, &t2);
-        //printf("________________ wdog timeout: %d\n", t2);
-    //}
-
-    return r;
-}
-
-
-
-
 
 
 
 
 static void* polling_thread(void *arg)
 static void* polling_thread(void *arg)
@@ -1211,7 +1134,6 @@ static void* polling_thread(void *arg)
 
 
     while(h->quit==0) {
     while(h->quit==0) {
         mem_check();
         mem_check();
-        wdog_feed();
         sleep(1);
         sleep(1);
     }
     }
     pthread_exit(NULL);
     pthread_exit(NULL);
@@ -1221,7 +1143,6 @@ static void* polling_thread(void *arg)
 int sys_init(void)
 int sys_init(void)
 {
 {
     //userShellInit();
     //userShellInit();
-    wdog_init();
     initLogger();
     initLogger();
     lock_s_init();
     lock_s_init();