|
|
@@ -117,14 +117,21 @@ static mmap_modbus_t modbus_three[] = {
|
|
|
[TREE_W_ALL_CHN_STA ]{.offset = TREE_ALL_SET_SWITCH_REG }
|
|
|
};
|
|
|
|
|
|
-int cascade_slave_map_init(cascade_handle_t *cas)
|
|
|
+typedef struct {
|
|
|
+ modbus_mapping_t *map;
|
|
|
+}slave_handle_t;
|
|
|
+
|
|
|
+static slave_handle_t slHandle;
|
|
|
+
|
|
|
+int cascade_slave_init(void)
|
|
|
{
|
|
|
- GlobalDeviceManager* mgr = get_dm();
|
|
|
+ slave_handle_t *sh=&slHandle;
|
|
|
+ GlobalDeviceManager* mgr=get_dm();
|
|
|
|
|
|
if(mgr->_global_device_info->product_pwr_type == SmartPDU_AC ||
|
|
|
mgr->_global_device_info->product_pwr_type == SmartPDU_DC) // single AC
|
|
|
{
|
|
|
- cas->map = modbus_mapping_new_start_address(0,0,0,0,DEV_CHN_REG,5000,0,0); //3000 ge
|
|
|
+ sh->map = modbus_mapping_new_start_address(0,0,0,0,DEV_CHN_REG,5000,0,0); //3000 ge
|
|
|
modbus_single[DS_R_DEV_CHN ].addr = &mgr->single_mmap->dev_chn;
|
|
|
modbus_single[DS_R_OUT_INFO ].addr = &mgr->single_mmap->all_ch;
|
|
|
modbus_single[DS_R_IN_TOTAL ].addr = &mgr->single_mmap->total_valtage;
|
|
|
@@ -139,8 +146,7 @@ int cascade_slave_map_init(cascade_handle_t *cas)
|
|
|
printf("single dc address init 4000\n");
|
|
|
}else
|
|
|
{
|
|
|
-
|
|
|
- cas->map = modbus_mapping_new_start_address(0,0,0,0,TREE_R_DEV_CHN,7000,0,0);
|
|
|
+ sh->map = modbus_mapping_new_start_address(0,0,0,0,TREE_R_DEV_CHN,7000,0,0);
|
|
|
modbus_three[TREE_R_DEV_CHN ].addr = &mgr->triphasic_mmap->dev_chn;
|
|
|
modbus_three[TREE_R_INPUT_ALL_A ].addr = &mgr->triphasic_mmap->i_total.pw_i_total[0];
|
|
|
modbus_three[TREE_R_INPUT_ALL_B ].addr = &mgr->triphasic_mmap->i_total.pw_i_total[1];
|
|
|
@@ -162,12 +168,10 @@ int cascade_slave_map_init(cascade_handle_t *cas)
|
|
|
}
|
|
|
|
|
|
|
|
|
+static void slave_read(slave_handle_t *sh, uint32_t addr,int num,uint32_t reg_type,uint32_t type)
|
|
|
+{
|
|
|
+ GlobalDeviceManager* mgr=get_dm();
|
|
|
|
|
|
-
|
|
|
-
|
|
|
-static void slave_read(cascade_handle_t *cas,uint32_t addr,int num,uint32_t reg_type,uint32_t type)
|
|
|
-{
|
|
|
- GlobalDeviceManager* mgr = get_dm();
|
|
|
if(mgr->_global_device_info->product_pwr_type == SmartPDU_AC ||
|
|
|
mgr->_global_device_info->product_pwr_type == SmartPDU_DC){
|
|
|
if(addr >= DEV_CHN_REG && addr <= ALL_SET_SWITCH_REG)
|
|
|
@@ -175,26 +179,22 @@ static void slave_read(cascade_handle_t *cas,uint32_t addr,int num,uint32_t reg_
|
|
|
if(type == TYPE_U16)
|
|
|
{
|
|
|
uint16_t *base_addr = (uint16_t *)modbus_single[reg_type].addr;
|
|
|
- uint32_t step = addr - cas->map->start_registers;
|
|
|
+ uint32_t step = addr - sh->map->start_registers;
|
|
|
base_addr = base_addr + (addr - modbus_single[reg_type].offset);
|
|
|
- uint16_t *map_addr = (uint16_t *)&(cas->map->tab_registers[step]);
|
|
|
+ uint16_t *map_addr = (uint16_t *)&(sh->map->tab_registers[step]);
|
|
|
if(num < 126)
|
|
|
{
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
memcpy(map_addr, base_addr,2*num);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
}
|
|
|
}else
|
|
|
{
|
|
|
uint32_t *base_addr = (uint32_t *)modbus_single[reg_type].addr;
|
|
|
- uint32_t step = addr - cas->map->start_registers;
|
|
|
+ uint32_t step = addr - sh->map->start_registers;
|
|
|
base_addr = base_addr + (addr - modbus_single[reg_type].offset);
|
|
|
- uint32_t *map_addr = (uint32_t *)&(cas->map->tab_registers[step]);
|
|
|
+ uint32_t *map_addr = (uint32_t *)&(sh->map->tab_registers[step]);
|
|
|
if(num < 126)
|
|
|
{
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
memcpy(map_addr, base_addr,2*num);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -204,112 +204,112 @@ static void slave_read(cascade_handle_t *cas,uint32_t addr,int num,uint32_t reg_
|
|
|
if(type == TYPE_U16)
|
|
|
{
|
|
|
uint16_t *base_addr = (uint16_t *)modbus_three[reg_type].addr;
|
|
|
- uint32_t step = addr - cas->map->start_registers;
|
|
|
+ uint32_t step = addr - sh->map->start_registers;
|
|
|
base_addr = base_addr + (addr - modbus_three[reg_type].offset);
|
|
|
- uint16_t *map_addr = (uint16_t *)&(cas->map->tab_registers[step]);
|
|
|
+ uint16_t *map_addr = (uint16_t *)&(sh->map->tab_registers[step]);
|
|
|
if(num < 126)
|
|
|
{
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
memcpy(map_addr, base_addr,2*num);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
}
|
|
|
}else
|
|
|
{
|
|
|
uint32_t *base_addr = (uint32_t *)modbus_three[reg_type].addr;
|
|
|
- uint32_t step = addr - cas->map->start_registers;
|
|
|
+ uint32_t step = addr - sh->map->start_registers;
|
|
|
base_addr = base_addr + (addr - modbus_three[reg_type].offset);
|
|
|
- uint32_t *map_addr = (uint32_t *)&(cas->map->tab_registers[step]);
|
|
|
+ uint32_t *map_addr = (uint32_t *)&(sh->map->tab_registers[step]);
|
|
|
if(num < 126)
|
|
|
{
|
|
|
- pthread_mutex_lock(&cas->mutex);
|
|
|
memcpy(map_addr, base_addr,2*num);
|
|
|
- pthread_mutex_unlock(&cas->mutex);
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
|
|
|
-void cascade_slave_read(cascade_handle_t *cas,uint32_t addr,uint32_t lenth)
|
|
|
+
|
|
|
+void cascade_slave_read(uint32_t addr,uint32_t lenth)
|
|
|
{
|
|
|
+ slave_handle_t *sh=&slHandle;
|
|
|
|
|
|
- switch (addr)
|
|
|
- {
|
|
|
- case 4000:
|
|
|
- slave_read(cas,addr,lenth,DS_R_DEV_CHN,TYPE_U16);
|
|
|
- break;
|
|
|
- case 4001 ... 4768:
|
|
|
- slave_read(cas,addr,lenth,DS_R_OUT_INFO,TYPE_U32);
|
|
|
- break;
|
|
|
- case 4769 ... 4776:
|
|
|
- slave_read(cas,addr,lenth,DS_R_IN_TOTAL,TYPE_U32);
|
|
|
- break;
|
|
|
- case 4777 ... 4778:
|
|
|
- slave_read(cas,addr,lenth,DS_R_TEMP_HUM,TYPE_U32);
|
|
|
- case 4779 ... 4842:
|
|
|
- slave_read(cas,addr,lenth,DS_R_SWITCH_STA,TYPE_U16);
|
|
|
- break;
|
|
|
- case 4843 ... 4906:
|
|
|
- slave_read(cas,addr,lenth,DS_R_OPEN_DELAY,TYPE_U16);
|
|
|
- break;
|
|
|
- case 4907 ... 4970:
|
|
|
- slave_read(cas,addr,lenth,DS_R_CLOSE_DELAY,TYPE_U16);
|
|
|
- break;
|
|
|
- case 5000 ... 5063:
|
|
|
- slave_read(cas,addr,lenth,DS_W_OPEN_DELAY,TYPE_U16);
|
|
|
- break;
|
|
|
- case 5064 ... 5127:
|
|
|
- slave_read(cas,addr,lenth,DS_W_OPEN_DELAY,TYPE_U16);
|
|
|
- break;
|
|
|
- case 5128 ... 5191:
|
|
|
- slave_read(cas,addr,lenth,DS_W_CHN_SWITCH_STA,TYPE_U16);
|
|
|
- break;
|
|
|
- case 5192 :
|
|
|
- slave_read(cas,addr,lenth,DS_W_ALL_CHN_STA,TYPE_U16);
|
|
|
- break;
|
|
|
+ switch (addr)
|
|
|
+ {
|
|
|
+ case 4000:
|
|
|
+ slave_read(sh,addr,lenth,DS_R_DEV_CHN,TYPE_U16);
|
|
|
+ break;
|
|
|
+ case 4001 ... 4768:
|
|
|
+ slave_read(sh,addr,lenth,DS_R_OUT_INFO,TYPE_U32);
|
|
|
+ break;
|
|
|
+ case 4769 ... 4776:
|
|
|
+ slave_read(sh,addr,lenth,DS_R_IN_TOTAL,TYPE_U32);
|
|
|
+ break;
|
|
|
+ case 4777 ... 4778:
|
|
|
+ slave_read(sh,addr,lenth,DS_R_TEMP_HUM,TYPE_U32);
|
|
|
+ case 4779 ... 4842:
|
|
|
+ slave_read(sh,addr,lenth,DS_R_SWITCH_STA,TYPE_U16);
|
|
|
+ break;
|
|
|
+ case 4843 ... 4906:
|
|
|
+ slave_read(sh,addr,lenth,DS_R_OPEN_DELAY,TYPE_U16);
|
|
|
+ break;
|
|
|
+ case 4907 ... 4970:
|
|
|
+ slave_read(sh,addr,lenth,DS_R_CLOSE_DELAY,TYPE_U16);
|
|
|
+ break;
|
|
|
+ case 5000 ... 5063:
|
|
|
+ slave_read(sh,addr,lenth,DS_W_OPEN_DELAY,TYPE_U16);
|
|
|
+ break;
|
|
|
+ case 5064 ... 5127:
|
|
|
+ slave_read(sh,addr,lenth,DS_W_OPEN_DELAY,TYPE_U16);
|
|
|
+ break;
|
|
|
+ case 5128 ... 5191:
|
|
|
+ slave_read(sh,addr,lenth,DS_W_CHN_SWITCH_STA,TYPE_U16);
|
|
|
+ break;
|
|
|
+ case 5192 :
|
|
|
+ slave_read(sh,addr,lenth,DS_W_ALL_CHN_STA,TYPE_U16);
|
|
|
+ break;
|
|
|
+
|
|
|
+ // triple
|
|
|
+ case 6000:
|
|
|
+ slave_read(sh,addr,lenth,TREE_R_DEV_CHN,TYPE_U16);
|
|
|
+ break;
|
|
|
+ case 6001 ... 6008:
|
|
|
+ slave_read(sh,addr,lenth,TREE_R_INPUT_ALL_A,TYPE_U32);
|
|
|
+ break;
|
|
|
+ case 6009 ... 6016:
|
|
|
+ slave_read(sh,addr,lenth,TREE_R_INPUT_ALL_B,TYPE_U32);
|
|
|
+ break;
|
|
|
+ case 6017 ... 6024:
|
|
|
+ slave_read(sh,addr,lenth,TREE_R_INPUT_ALL_C,TYPE_U32);
|
|
|
+ break;
|
|
|
+ case 6025 ... 6664:
|
|
|
+ slave_read(sh,addr,lenth,TREE_R_CHN_TOTAL,TYPE_U32);
|
|
|
+ break;
|
|
|
+ case 6665 ... 8584:
|
|
|
+ slave_read(sh,addr,lenth,TREE_R_CHN_PH_INFO,TYPE_U32);
|
|
|
+ break;
|
|
|
+ case 8585 ... 8586:
|
|
|
+ slave_read(sh,addr,lenth,TREE_R_TEMP_HUM,TYPE_U16);
|
|
|
+ break;
|
|
|
+ case 8587 ... 8650:
|
|
|
+ slave_read(sh,addr,lenth,TREE_R_SWITCH_STA,TYPE_U16);
|
|
|
+ break;
|
|
|
+ case 8651 ... 8714:
|
|
|
+ slave_read(sh,addr,lenth,TREE_R_OPEN_DELAY,TYPE_U16);
|
|
|
+ break;
|
|
|
+ case 8715 ... 8778:
|
|
|
+ slave_read(sh,addr,lenth,TREE_R_CLOSE_DELAY,TYPE_U16);
|
|
|
+ break;
|
|
|
|
|
|
- // triple
|
|
|
- case 6000:
|
|
|
- slave_read(cas,addr,lenth,TREE_R_DEV_CHN,TYPE_U16);
|
|
|
- break;
|
|
|
- case 6001 ... 6008:
|
|
|
- slave_read(cas,addr,lenth,TREE_R_INPUT_ALL_A,TYPE_U32);
|
|
|
- break;
|
|
|
- case 6009 ... 6016:
|
|
|
- slave_read(cas,addr,lenth,TREE_R_INPUT_ALL_B,TYPE_U32);
|
|
|
- break;
|
|
|
- case 6017 ... 6024:
|
|
|
- slave_read(cas,addr,lenth,TREE_R_INPUT_ALL_C,TYPE_U32);
|
|
|
- break;
|
|
|
- case 6025 ... 6664:
|
|
|
- slave_read(cas,addr,lenth,TREE_R_CHN_TOTAL,TYPE_U32);
|
|
|
- break;
|
|
|
- case 6665 ... 8584:
|
|
|
- slave_read(cas,addr,lenth,TREE_R_CHN_PH_INFO,TYPE_U32);
|
|
|
- break;
|
|
|
- case 8585 ... 8586:
|
|
|
- slave_read(cas,addr,lenth,TREE_R_TEMP_HUM,TYPE_U16);
|
|
|
- break;
|
|
|
- case 8587 ... 8650:
|
|
|
- slave_read(cas,addr,lenth,TREE_R_SWITCH_STA,TYPE_U16);
|
|
|
- break;
|
|
|
- case 8651 ... 8714:
|
|
|
- slave_read(cas,addr,lenth,TREE_R_OPEN_DELAY,TYPE_U16);
|
|
|
- break;
|
|
|
- case 8715 ... 8778:
|
|
|
- slave_read(cas,addr,lenth,TREE_R_CLOSE_DELAY,TYPE_U16);
|
|
|
- break;
|
|
|
default:
|
|
|
- break;
|
|
|
- }
|
|
|
+ break;
|
|
|
+ }
|
|
|
}
|
|
|
|
|
|
|
|
|
-
|
|
|
-void cascade_slave_write(cascade_handle_t *cas, uint32_t addr, uint16_t val)
|
|
|
-{
|
|
|
- GlobalDeviceManager* mgr = get_dm();
|
|
|
+void cascade_slave_write(uint32_t addr, uint16_t val)
|
|
|
+{
|
|
|
+ slave_handle_t *sh=&slHandle;
|
|
|
+ GlobalDeviceManager* mgr=get_dm();
|
|
|
uint16_t buff[128] = {0};
|
|
|
+
|
|
|
if(mgr->_global_device_info->product_pwr_type == SmartPDU_AC
|
|
|
|| mgr->_global_device_info->product_pwr_type == SmartPDU_DC)
|
|
|
{
|