|
|
@@ -41,7 +41,6 @@ typedef struct {
|
|
|
|
|
|
ModbusInfo_t mInfo;
|
|
|
modbus_mapping_t *map;
|
|
|
- modbus_mapping_t *map2;
|
|
|
|
|
|
cmd_data_t cmd;
|
|
|
int scanAddr;
|
|
|
@@ -509,7 +508,7 @@ static int mb_receive(cascade_handle_t *cas)
|
|
|
switch(h.reg) {
|
|
|
case CASCADE_REG_SCAN:
|
|
|
{
|
|
|
- r = _mb_reply(cas, buff, rc, cas->map2);
|
|
|
+ r = _mb_reply(cas, buff, rc, cas->map);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -546,7 +545,7 @@ static int mb_receive(cascade_handle_t *cas)
|
|
|
break;
|
|
|
}
|
|
|
|
|
|
- r = _mb_reply(cas, buff, rc, cas->map2);
|
|
|
+ r = _mb_reply(cas, buff, rc, cas->map);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -561,7 +560,7 @@ static int mb_receive(cascade_handle_t *cas)
|
|
|
{
|
|
|
LOGD("_____ slave CASCADE_CMD_GET_INFO\n");
|
|
|
slave_get_info(cas);
|
|
|
- memcpy(cas->map2->tab_registers+(h.reg-CASCADE_REG_OFFSET), (char*)&cas->sInfo+sendlen, h.regcnt*2);
|
|
|
+ memcpy(cas->map->tab_registers+(h.reg-CASCADE_REG_OFFSET), (char*)&cas->sInfo+sendlen, h.regcnt*2);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -570,7 +569,7 @@ static int mb_receive(cascade_handle_t *cas)
|
|
|
LOGD("___ slave CASCADE_CMD_QUERY_CH\n");
|
|
|
|
|
|
slave_get_info(cas);
|
|
|
- memcpy(cas->map2->tab_registers+(h.reg-CASCADE_REG_OFFSET), ((char*)&cas->sInfo)+sendlen, h.regcnt*2);
|
|
|
+ memcpy(cas->map->tab_registers+(h.reg-CASCADE_REG_OFFSET), ((char*)&cas->sInfo)+sendlen, h.regcnt*2);
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -583,7 +582,7 @@ static int mb_receive(cascade_handle_t *cas)
|
|
|
case CASCADE_CMD_QUERY_TOTAL_PWR:break;
|
|
|
}
|
|
|
|
|
|
- r = _mb_reply(cas, buff, rc, cas->map2);
|
|
|
+ r = _mb_reply(cas, buff, rc, cas->map);
|
|
|
if(r>0) {
|
|
|
sendlen += h.regcnt*2;
|
|
|
//LOGD("____ slave sendlen: %d, h.dlen: %d, r: %d\n", sendlen, h.dlen, r);
|
|
|
@@ -636,7 +635,9 @@ static int master_scan(cascade_handle_t *cas)
|
|
|
return 0;
|
|
|
}
|
|
|
///////////////////////////////////////////////////////////////////////////////////////
|
|
|
-static int power_init(void)
|
|
|
+static int power_clear(cascade_handle_t *cas);
|
|
|
+
|
|
|
+static int power_init(cascade_handle_t *cas)
|
|
|
{
|
|
|
GlobalDeviceManager *dm=get_dm();
|
|
|
GlobalDeviceManager *dm2=get_dm2();
|
|
|
@@ -658,6 +659,17 @@ static int power_init(void)
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+static int power_deinit(cascade_handle_t *cas)
|
|
|
+{
|
|
|
+ GlobalDeviceManager *dm2=get_dm2();
|
|
|
+
|
|
|
+ power_clear(cas);
|
|
|
+ if(dm2->_global_device_info) {
|
|
|
+ free(dm2->_global_device_info);
|
|
|
+ }
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
static int power_clear(cascade_handle_t *cas)
|
|
|
{
|
|
|
GlobalPowerManger *tmp,*pos;
|
|
|
@@ -1270,7 +1282,7 @@ int cascade_init(void)
|
|
|
|
|
|
memset(cas, 0, sizeof(casHandle));
|
|
|
|
|
|
- power_init();
|
|
|
+ power_init(cas);
|
|
|
slave_init(cas);
|
|
|
|
|
|
r = pthread_mutex_init(&cas->mutex, NULL);
|
|
|
@@ -1283,7 +1295,7 @@ int cascade_init(void)
|
|
|
}
|
|
|
|
|
|
cas->scanAddr = 1;
|
|
|
- cas->map2 = modbus_mapping_new_start_address(0,0,0,0,
|
|
|
+ cas->map = modbus_mapping_new_start_address(0,0,0,0,
|
|
|
CASCADE_REG_READ, MAX_READ_REGS2,
|
|
|
CASCADE_REG_WRITE, MAX_WRITE_REGS2);
|
|
|
|
|
|
@@ -1297,6 +1309,23 @@ int cascade_init(void)
|
|
|
}
|
|
|
|
|
|
|
|
|
+int cascade_deinit(void)
|
|
|
+{
|
|
|
+ cascade_handle_t *cas=&casHandle;
|
|
|
+
|
|
|
+ thread_stop(THREAD_ID_CASCADE);
|
|
|
+ thread_stop(THREAD_ID_SCAN);
|
|
|
+
|
|
|
+ pthread_mutex_destroy(&cas->mutex);
|
|
|
+ pthread_mutex_destroy(&cas->lock);
|
|
|
+ modbus_mapping_free(cas->map);
|
|
|
+
|
|
|
+ mb_deinit(cas);
|
|
|
+ power_deinit(cas);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
int cascade_set_modbus(ModbusInfo_t *info)
|
|
|
{
|
|
|
cascade_handle_t *cas=&casHandle;
|