|
|
@@ -17,7 +17,7 @@
|
|
|
#define LOGW printf
|
|
|
#endif
|
|
|
|
|
|
-#define CASCADE_MAX 32
|
|
|
+#define CASCADE_MAX 10//32
|
|
|
#define MB_MAX_LEN 250
|
|
|
|
|
|
|
|
|
@@ -34,10 +34,13 @@ typedef struct {
|
|
|
slave_t slaves[CASCADE_MAX+1];
|
|
|
|
|
|
modbus_mapping_t *map;
|
|
|
+ modbus_mapping_t *map2;
|
|
|
|
|
|
cmd_data_t cmd;
|
|
|
int scanAddr;
|
|
|
uint16_t scanReg;
|
|
|
+
|
|
|
+ board_info_t info;
|
|
|
}cascade_handle_t;
|
|
|
|
|
|
int cur_dev_addr=1;
|
|
|
@@ -105,7 +108,7 @@ static int slave_find(cascade_handle_t *cas, int addr)
|
|
|
return 0;
|
|
|
}
|
|
|
|
|
|
-static int get_info(int addr, board_info_t *info)
|
|
|
+static int slave_get_info(board_info_t *info)
|
|
|
{
|
|
|
int i,r;
|
|
|
uint8_t type,maxChn;
|
|
|
@@ -113,7 +116,7 @@ static int get_info(int addr, board_info_t *info)
|
|
|
|
|
|
memset(info, 0, sizeof(board_info_t));
|
|
|
for(i=1; i<MAX_CHN_COUNT; i++) {
|
|
|
- r = g_switch_get_type(&dm->_globalRelaySampManger, addr, &type, &maxChn,
|
|
|
+ r = g_switch_get_type(&dm->_globalRelaySampManger, i, &type, &maxChn,
|
|
|
dm->_global_device_info->product_pwr_type);
|
|
|
if(r==0) {
|
|
|
info->board[info->cnt].addr = i;
|
|
|
@@ -133,6 +136,8 @@ static int mb_init(cascade_handle_t *cas, char *path, int type, int addr, uint32
|
|
|
if(r==0 && addr>0) {
|
|
|
g_modbus_set_slave(&cas->m, addr);
|
|
|
cas->inited = 1;
|
|
|
+
|
|
|
+ slave_get_info(&cas->info);
|
|
|
}
|
|
|
else {
|
|
|
LOGE("___ mb init failed, %s\n", modbus_strerror(errno));
|
|
|
@@ -338,33 +343,40 @@ static int mb_receive(cascade_handle_t *cas)
|
|
|
|
|
|
switch(cas->cmd.cmd) {
|
|
|
case CASCADE_CMD_OPEN:
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
case CASCADE_CMD_CLOSE:
|
|
|
{
|
|
|
+ int i,t=0;
|
|
|
+ char buff[80];
|
|
|
+ board_info_t *info=&cas->info;
|
|
|
+ for(i=0; i<info->cnt; i++) {
|
|
|
+ if(info->board[i].addr>0) {
|
|
|
+ t = g_switch_set_all_ctrl(&get_dm()->_globalRelaySampManger, info->board[i].type, info->board[i].addr, (cas->cmd.cmd==CASCADE_CMD_OPEN)?1:0);
|
|
|
+ if(t) {
|
|
|
+ LOGE("___ %d %s failed\n", info->board[i].addr, (cas->cmd.cmd==CASCADE_CMD_OPEN)?"open":"close");
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
+ if(cas->cmd.cmd==CASCADE_CMD_OPEN) {
|
|
|
+ sprintf(buff,"$开启$|$所有$|$通道$");
|
|
|
+ }
|
|
|
+ else {
|
|
|
+ sprintf(buff,"$关闭$|$所有$|$通道$");
|
|
|
+ }
|
|
|
+ dev_insert_alarm_ctrl(get_dm()->db,get_dm()->_global_device_info->product_id,3,buff);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
case CASCADE_CMD_SAVE:
|
|
|
- {
|
|
|
-
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
case CASCADE_CMD_SAVE3:
|
|
|
{
|
|
|
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
- case CASCADE_CMD_INFO:
|
|
|
+ case CASCADE_CMD_GET_INFO:
|
|
|
{
|
|
|
- get_info(cur_dev_addr, &info);
|
|
|
- memcpy(cas->map->tab_registers+h.reg, ((char*)&info)+sendlen, h.regcnt*2);
|
|
|
+ memcpy(cas->map->tab_registers+h.reg, ((char*)&cas->info)+sendlen, h.regcnt*2);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
@@ -503,7 +515,7 @@ static void power_init(void)
|
|
|
|
|
|
INIT_LIST_HEAD(&dm2->_globalPowerManger.list);
|
|
|
}
|
|
|
-static int power_list_add(int addr, int chId)
|
|
|
+static int power_add(int addr, int chId)
|
|
|
{
|
|
|
int nGroups=18;
|
|
|
GlobalDeviceManager *dm2=get_dm2();
|
|
|
@@ -631,37 +643,30 @@ static int master_request(cascade_handle_t *cas)
|
|
|
GlobalDeviceInfo *dev=&dm2->_global_device_info;
|
|
|
cmd_data_t *cmd=&cas->cmd;
|
|
|
data_t rdata,wdata;
|
|
|
-
|
|
|
|
|
|
if(cur_dev_addr==0) {
|
|
|
return -1;
|
|
|
}
|
|
|
|
|
|
-
|
|
|
switch(cmd->cmd) {
|
|
|
case CASCADE_CMD_OPEN:
|
|
|
case CASCADE_CMD_CLOSE:
|
|
|
- {
|
|
|
- for(i=0; i<cmd->info.cnt; i++) {
|
|
|
- if(cmd->info.board[i].addr>0) {
|
|
|
- g_switch_set_all_ctrl(&cas->m, cmd->info.board[i].type, cmd->info.board[i].addr, (cmd->cmd==CASCADE_CMD_OPEN)?1:0);
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
- break;
|
|
|
-
|
|
|
case CASCADE_CMD_SAVE:
|
|
|
case CASCADE_CMD_SAVE3:
|
|
|
{
|
|
|
- //mb_write(&cas->m, cur_dev_addr, cmd->reg, NULL, 0);
|
|
|
+ wdata.dlen = sizeof(*cmd);
|
|
|
+ wdata.data = (uint8_t*)cmd;
|
|
|
+ r = mb_write(&cas->m, cur_dev_addr, &wdata);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
- case CASCADE_CMD_INFO:
|
|
|
+ case CASCADE_CMD_GET_INFO:
|
|
|
{
|
|
|
wdata.dlen = sizeof(*cmd);
|
|
|
wdata.data = (uint8_t*)cmd;
|
|
|
|
|
|
+ rdata.dlen = sizeof(cas->info);
|
|
|
+ rdata.data = (uint8_t*)&cas->info;
|
|
|
r = mb_write_read(cas, cur_dev_addr, &wdata, &rdata);
|
|
|
}
|
|
|
break;
|
|
|
@@ -924,7 +929,7 @@ int cascade_init(void)
|
|
|
slave_add(cas, 0);
|
|
|
|
|
|
sys_start_thread(THREAD_ID_CASCADE, cascade_thread, cas);
|
|
|
- //sys_start_thread(THREAD_ID_SCAN, scan_thread, cas);
|
|
|
+ sys_start_thread(THREAD_ID_SCAN, scan_thread, cas);
|
|
|
|
|
|
return 0;
|
|
|
}
|