|
|
@@ -5,6 +5,11 @@
|
|
|
#include <unistd.h>
|
|
|
#include "breaker_detection.h"
|
|
|
#include "modbus_handle.h"
|
|
|
+#include "common.h"
|
|
|
+#include "thread.h"
|
|
|
+#include "string.h"
|
|
|
+
|
|
|
+static breaker_scanner_t breaker_scanner;
|
|
|
|
|
|
|
|
|
|
|
|
@@ -132,10 +137,8 @@ int breaker_485_get_all_chn_status(void* manger,int saddr,unsigned short *status
|
|
|
{
|
|
|
int ret = 0 ;
|
|
|
unsigned short data_temp[6] = {0};
|
|
|
- if(ret <= 0)
|
|
|
- return -1 ;
|
|
|
ret = g_modbus_read_x_reg(manger,saddr,BREADER_485_ADDR_CHN_REG+1,BREAKER_485_CHN_MAX,data_temp);
|
|
|
- for(int i =0;i < 6;i++)
|
|
|
+ for(int i =0;i < BREAKER_485_CHN_MAX;i++)
|
|
|
{
|
|
|
if(data_temp[i])
|
|
|
{
|
|
|
@@ -158,4 +161,93 @@ int breaker_485_get_chns(void* manger,int saddr,unsigned short* cnt)
|
|
|
|
|
|
*cnt = data_temp & 0x00ff;
|
|
|
return 0;
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+void* breaker_scanner_thread(void* argv)
|
|
|
+{
|
|
|
+
|
|
|
+ //GlobalDeviceManager* gm= (GlobalDeviceManager*)(argv);
|
|
|
+ thread_handle_t *h=(thread_handle_t*)(argv);
|
|
|
+ GlobalDeviceManager* gm= (GlobalDeviceManager*)(h->arg);
|
|
|
+ memset(&breaker_scanner,0,sizeof(breaker_scanner));
|
|
|
+ int ret = 0;
|
|
|
+ uint16_t value =0;
|
|
|
+ uint16_t status[BREAKER_485_CHN_MAX] = {0};
|
|
|
+ //scanner all boadr
|
|
|
+ for(int i = 0; i < BREAKER_BOARD_MAX; i++)
|
|
|
+ {
|
|
|
+ ret = breaker_485_get_chn_status((void*)&gm->_globalRelaySampManger,
|
|
|
+ BREADER_485_ADDR+i,BREADER_485_ADDR_CHN_REG,&value);
|
|
|
+ if(ret == 0)
|
|
|
+ {
|
|
|
+ breaker_scanner.breaker_flag[i] = 1;
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ breaker_scanner.breaker_flag[i] = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ int count = 0;
|
|
|
+
|
|
|
+ while(h->quit==0)
|
|
|
+ {
|
|
|
+ if((count % 10) == 1)
|
|
|
+ {
|
|
|
+ for(int i = 0; i < BREAKER_BOARD_MAX; i++)
|
|
|
+ {
|
|
|
+ ret = breaker_485_get_chn_status((void*)&gm->_globalRelaySampManger,
|
|
|
+ BREADER_485_ADDR+i,BREADER_485_ADDR_CHN_REG,&value);
|
|
|
+ if(ret == 0)
|
|
|
+ {
|
|
|
+ breaker_scanner.breaker_flag[i] = 1;
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ breaker_scanner.breaker_flag[i] = 0;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ for(int i = 0; i < BREAKER_BOARD_MAX; i++)
|
|
|
+ {
|
|
|
+ if(breaker_scanner.breaker_flag[i])
|
|
|
+ {
|
|
|
+
|
|
|
+ breaker_485_get_all_chn_status((void*)&gm->_globalRelaySampManger,BREADER_485_ADDR+i,status);
|
|
|
+ pthread_mutex_lock(&gm->_breaker_mutex);
|
|
|
+ memcpy(breaker_scanner.board[i].ch_status,status,sizeof(status));
|
|
|
+ pthread_mutex_unlock(&gm->_breaker_mutex);
|
|
|
+ // ret = breaker_485_get_chn_status((void*)&gm->_globalRelaySampManger,
|
|
|
+ // BREADER_485_ADDR+i,BREADER_485_ADDR_CHN_REG,&value);
|
|
|
+ // //pthread_mutex_lock(&gm->_breaker_mutex);
|
|
|
+ // if(ret == 0)
|
|
|
+ // {
|
|
|
+ // breaker_scanner.breaker_flag[i] = 1; // board is online
|
|
|
+ // //breaker_485_get_all_chn_status((void*)&gm->_globalRelaySampManger,BREADER_485_ADDR+i,status);
|
|
|
+ // //memcmp(breaker_scanner.board[i].scanner_info.ch_status,status,sizeof(status));
|
|
|
+ // }else
|
|
|
+ // {
|
|
|
+ // breaker_scanner.breaker_flag[i] = 0; //board is offline
|
|
|
+ // }
|
|
|
+
|
|
|
+
|
|
|
+ // // pthread_mutex_unlock(&gm->_breaker_mutex);
|
|
|
+ memset(status,0,sizeof(status));
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ memset(status,0,sizeof(status));
|
|
|
+ pthread_mutex_lock(&gm->_breaker_mutex);
|
|
|
+ memcpy(breaker_scanner.board[i].ch_status,status,sizeof(status));
|
|
|
+ pthread_mutex_unlock(&gm->_breaker_mutex);
|
|
|
+ }
|
|
|
+ }
|
|
|
+ count ++;
|
|
|
+ sleep(1);
|
|
|
+ }
|
|
|
+
|
|
|
+ return NULL;
|
|
|
+}
|
|
|
+
|
|
|
+breaker_scanner_t *get_breaker_scanner(void)
|
|
|
+{
|
|
|
+ return &breaker_scanner;
|
|
|
}
|