|
|
@@ -29,7 +29,7 @@
|
|
|
typedef struct {
|
|
|
|
|
|
int inited;
|
|
|
- pthread_mutex_t mutex;
|
|
|
+ pthread_mutex_t mutex; //used for list lock
|
|
|
|
|
|
Modbus_Manger m;
|
|
|
int addr;
|
|
|
@@ -63,17 +63,21 @@ static inline GlobalDeviceManager* get_dm2(void)
|
|
|
static inline ModbusInfo_t *get_mb(void)
|
|
|
{
|
|
|
static ModbusInfo_t mbinfo={
|
|
|
-#if (MB_MASTER==1)
|
|
|
+
|
|
|
+#ifdef MB_DEBUG
|
|
|
+ #if (MB_MASTER==1)
|
|
|
.product_modbus_type=0,
|
|
|
-#else
|
|
|
+ #else
|
|
|
.product_modbus_type=1,
|
|
|
-#endif
|
|
|
+ #endif
|
|
|
.product_modbus_addr=1,
|
|
|
.product_modbus_baud=115200,
|
|
|
};
|
|
|
|
|
|
return &mbinfo;
|
|
|
- //return &get_dm()->_global_device_info->_gmodbus_info;
|
|
|
+#else
|
|
|
+ return &get_dm()->_global_device_info->_gmodbus_info;
|
|
|
+#endif
|
|
|
}
|
|
|
static int slave_init(cascade_handle_t *cas)
|
|
|
{
|
|
|
@@ -218,7 +222,7 @@ static int mb_init(cascade_handle_t *cas, char *path, int type, int addr, uint32
|
|
|
slave_get_info(cas);
|
|
|
}
|
|
|
else {
|
|
|
- cas->addr = -1;
|
|
|
+ cas->addr = 0;
|
|
|
}
|
|
|
cas->inited = 1;
|
|
|
}
|
|
|
@@ -487,6 +491,7 @@ static int mb_receive(cascade_handle_t *cas)
|
|
|
case CASCADE_CMD_GET_INFO:
|
|
|
{
|
|
|
LOGD("_____ slave CASCADE_CMD_GET_INFO\n");
|
|
|
+ //slave_get_info(cas); //this function will cost long time, marked it
|
|
|
memcpy(cas->map2->tab_registers+(h.reg-CASCADE_REG_OFFSET), (char*)&cas->info, h.regcnt*2);
|
|
|
}
|
|
|
break;
|
|
|
@@ -603,9 +608,11 @@ static int power_add(cascade_handle_t *cas)
|
|
|
GlobalPowerManger* pm=NULL;
|
|
|
board_info_t *info=&cas->info;
|
|
|
|
|
|
- power_clear(cas);
|
|
|
+ cascade_lock();
|
|
|
|
|
|
+ power_clear(cas);
|
|
|
LOGD("_____ master add channel to the list, cnt: %d\n", info->cnt);
|
|
|
+
|
|
|
for(i=0; i<info->cnt; i++) {
|
|
|
for (j=0; j<info->board[i].maxChn; j++) {
|
|
|
pm = (GlobalPowerManger*)calloc(1, sizeof(GlobalPowerManger));
|
|
|
@@ -628,6 +635,7 @@ static int power_add(cascade_handle_t *cas)
|
|
|
chn++;
|
|
|
}
|
|
|
}
|
|
|
+ cascade_unlock();
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
@@ -1036,6 +1044,7 @@ int cascade_init(void)
|
|
|
|
|
|
power_init();
|
|
|
slave_init(cas);
|
|
|
+ pthread_mutex_init(&cas->mutex, NULL);
|
|
|
|
|
|
cas->scanAddr = 1;
|
|
|
cas->pwrInfo.info = malloc(128*sizeof(PowerInfo));
|
|
|
@@ -1046,7 +1055,7 @@ int cascade_init(void)
|
|
|
|
|
|
set_modbus(cas, get_mb());
|
|
|
slave_add(cas, 0);
|
|
|
-
|
|
|
+
|
|
|
sys_start_thread(THREAD_ID_CASCADE, cascade_thread, cas);
|
|
|
sys_start_thread(THREAD_ID_SCAN, scan_thread, cas);
|
|
|
|
|
|
@@ -1133,3 +1142,19 @@ int cascade_is_offline(int addr)
|
|
|
}
|
|
|
|
|
|
|
|
|
+int cascade_lock(void)
|
|
|
+{
|
|
|
+ cascade_handle_t *cas=&casHandle;
|
|
|
+
|
|
|
+ return pthread_mutex_lock(&cas->mutex);
|
|
|
+}
|
|
|
+
|
|
|
+
|
|
|
+int cascade_unlock(void)
|
|
|
+{
|
|
|
+ cascade_handle_t *cas=&casHandle;
|
|
|
+
|
|
|
+ return pthread_mutex_unlock(&cas->mutex);
|
|
|
+}
|
|
|
+
|
|
|
+
|