|
|
@@ -15,6 +15,7 @@
|
|
|
#include "mongoose.h"
|
|
|
#include "language_common.h"
|
|
|
#include "websocket_handle.h"
|
|
|
+#include "breaker_detection.h"
|
|
|
|
|
|
#define TOTAL_COUNT 60
|
|
|
#define FN_MAX 30
|
|
|
@@ -5374,51 +5375,138 @@ static void equipmentMintenance(void *conn)
|
|
|
strcpy(breakerManager->breaker_switch_name,buff);
|
|
|
breakerManager->breaker_id = i;
|
|
|
uint32_t jdh = atoi(_Over_equipment_mintenance.jdh);
|
|
|
- if(jdh <= MAX_BREAKER_CHN)
|
|
|
+ if(breakerManager->breaker_gather_addr >= BREADER_485_ADDR &&
|
|
|
+ breakerManager->breaker_gather_addr <= (BREADER_485_ADDR + BREAKER_BOARD_MAX))
|
|
|
{
|
|
|
- char jdh_flag = 0;
|
|
|
- char chn[MAX_BREAKER_CHN] = {0};
|
|
|
-
|
|
|
- lock_s_hold(LOCK_ID_BREAKER);
|
|
|
- list_for_each_entry(temp, &__globalDeviceManage.g_new_global_breaker.list, list)
|
|
|
+ if(jdh <= MAX_BREAKER_CHN && jdh >0)
|
|
|
{
|
|
|
- if(temp->breaker_gather_addr == breakerManager->breaker_gather_addr)
|
|
|
+ char jdh_flag = 0;
|
|
|
+ char chn[MAX_BREAKER_CHN] = {0};
|
|
|
+
|
|
|
+ lock_s_hold(LOCK_ID_BREAKER);
|
|
|
+ list_for_each_entry(temp, &__globalDeviceManage.g_new_global_breaker.list, list)
|
|
|
{
|
|
|
- chn[temp->breaker_chn-1] = 1;
|
|
|
+ if(temp->breaker_gather_addr == breakerManager->breaker_gather_addr)
|
|
|
+ {
|
|
|
+ chn[temp->breaker_chn-1] = 1;
|
|
|
+ }
|
|
|
}
|
|
|
- }
|
|
|
- lock_s_release(LOCK_ID_BREAKER);
|
|
|
+ lock_s_release(LOCK_ID_BREAKER);
|
|
|
|
|
|
- if(chn[jdh-1] != 1)
|
|
|
+ if(chn[jdh-1] != 1)
|
|
|
+ {
|
|
|
+ breakerManager->breaker_chn = jdh;
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ jdh_flag = 1;
|
|
|
+ }
|
|
|
+
|
|
|
+ if(jdh_flag == 1)
|
|
|
+ {
|
|
|
+ free(breakerManager);
|
|
|
+ breakerManager = NULL;
|
|
|
+ ack_str = ctrl_breaker_err_ack_to_json("channel or id is existing!!!!");
|
|
|
+
|
|
|
+ }else{
|
|
|
+ dev_insert_breaker_genera_manage(__globalDeviceManage.db,breakerManager);
|
|
|
+
|
|
|
+ lock_s_hold(LOCK_ID_BREAKER);
|
|
|
+ list_add_tail(&breakerManager->list,&__globalDeviceManage.g_new_global_breaker.list);
|
|
|
+ lock_s_release(LOCK_ID_BREAKER);
|
|
|
+
|
|
|
+ ack_str=ctrl_sts_ack_to_json();
|
|
|
+ }
|
|
|
+ }else {
|
|
|
+ free(breakerManager);
|
|
|
+ breakerManager = NULL;
|
|
|
+ ack_str = ctrl_breaker_err_ack_to_json("jdh error!!!!");
|
|
|
+ }
|
|
|
+ }else if(breakerManager->breaker_gather_addr >= 1 && breakerManager->breaker_gather_addr <=30) //controller
|
|
|
+ {
|
|
|
+ if(jdh <= 2 && jdh > 0)
|
|
|
{
|
|
|
- breakerManager->breaker_chn = jdh;
|
|
|
+ char jdh_flag = 0;
|
|
|
+ char chn[2] = {0};
|
|
|
+ lock_s_hold(LOCK_ID_BREAKER);
|
|
|
+ list_for_each_entry(temp, &__globalDeviceManage.g_new_global_breaker.list, list)
|
|
|
+ {
|
|
|
+ if(temp->breaker_gather_addr == breakerManager->breaker_gather_addr)
|
|
|
+ {
|
|
|
+ chn[temp->breaker_chn-1] = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ lock_s_release(LOCK_ID_BREAKER);
|
|
|
+ if(chn[jdh-1] != 1)
|
|
|
+ {
|
|
|
+ breakerManager->breaker_chn = jdh;
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ jdh_flag = 1;
|
|
|
+ }
|
|
|
+ if(jdh_flag == 1)
|
|
|
+ {
|
|
|
+ free(breakerManager);
|
|
|
+ breakerManager = NULL;
|
|
|
+ ack_str = ctrl_breaker_err_ack_to_json("channel or id is existing!!!!");
|
|
|
+
|
|
|
+ }else{
|
|
|
+ dev_insert_breaker_genera_manage(__globalDeviceManage.db,breakerManager);
|
|
|
+
|
|
|
+ lock_s_hold(LOCK_ID_BREAKER);
|
|
|
+ list_add_tail(&breakerManager->list,&__globalDeviceManage.g_new_global_breaker.list);
|
|
|
+ lock_s_release(LOCK_ID_BREAKER);
|
|
|
+
|
|
|
+ ack_str=ctrl_sts_ack_to_json();
|
|
|
+ }
|
|
|
+
|
|
|
}else
|
|
|
- {
|
|
|
- jdh_flag = 1;
|
|
|
- }
|
|
|
-
|
|
|
- if(jdh_flag == 1)
|
|
|
{
|
|
|
free(breakerManager);
|
|
|
breakerManager = NULL;
|
|
|
- ack_str = ctrl_breaker_err_ack_to_json("channel or id is existing!!!!");
|
|
|
-
|
|
|
- }else{
|
|
|
- dev_insert_breaker_genera_manage(__globalDeviceManage.db,breakerManager);
|
|
|
-
|
|
|
+ ack_str = ctrl_breaker_err_ack_to_json("jdh error!!!!");
|
|
|
+ }
|
|
|
+ }else if(breakerManager->breaker_gather_addr == 0) //current support one breaker
|
|
|
+ {
|
|
|
+ if(jdh == 1)
|
|
|
+ {
|
|
|
+ char jdh_flag = 0;
|
|
|
lock_s_hold(LOCK_ID_BREAKER);
|
|
|
- list_add_tail(&breakerManager->list,&__globalDeviceManage.g_new_global_breaker.list);
|
|
|
+ list_for_each_entry(temp, &__globalDeviceManage.g_new_global_breaker.list, list)
|
|
|
+ {
|
|
|
+ if(temp->breaker_gather_addr == breakerManager->breaker_gather_addr)
|
|
|
+ {
|
|
|
+ jdh_flag = 1;
|
|
|
+ }
|
|
|
+ }
|
|
|
lock_s_release(LOCK_ID_BREAKER);
|
|
|
-
|
|
|
- ack_str=ctrl_sts_ack_to_json();
|
|
|
- }
|
|
|
- }else {
|
|
|
+ if(jdh_flag == 1)
|
|
|
+ {
|
|
|
+ free(breakerManager);
|
|
|
+ breakerManager = NULL;
|
|
|
+ ack_str = ctrl_breaker_err_ack_to_json("channel or id is existing!!!!");
|
|
|
+
|
|
|
+ }else{
|
|
|
+ breakerManager->breaker_chn = jdh;
|
|
|
+ dev_insert_breaker_genera_manage(__globalDeviceManage.db,breakerManager);
|
|
|
+
|
|
|
+ lock_s_hold(LOCK_ID_BREAKER);
|
|
|
+ list_add_tail(&breakerManager->list,&__globalDeviceManage.g_new_global_breaker.list);
|
|
|
+ lock_s_release(LOCK_ID_BREAKER);
|
|
|
+
|
|
|
+ ack_str=ctrl_sts_ack_to_json();
|
|
|
+ }
|
|
|
+ }else
|
|
|
+ {
|
|
|
free(breakerManager);
|
|
|
breakerManager = NULL;
|
|
|
ack_str = ctrl_breaker_err_ack_to_json("jdh error!!!!");
|
|
|
- }
|
|
|
-
|
|
|
-
|
|
|
+ }
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ free(breakerManager);
|
|
|
+ breakerManager = NULL;
|
|
|
+ ack_str = ctrl_breaker_err_ack_to_json("not surpport base addr !!");
|
|
|
+ }
|
|
|
}else
|
|
|
{
|
|
|
ack_str = ctrl_breaker_err_ack_to_json("ID More 48 !!!!");
|