|
|
@@ -32,6 +32,7 @@
|
|
|
#include "Cellular.h"
|
|
|
#include "wifi.h"
|
|
|
#include <sys/msg.h>
|
|
|
+#include "stdlib.h"
|
|
|
|
|
|
|
|
|
|
|
|
@@ -1582,6 +1583,24 @@ static void* breaker_thread(void *arg)
|
|
|
if (chn>=1&& chn<=BREAKER_485_CHN_MAX)
|
|
|
{
|
|
|
temp->breaker_status = breaker_scann->board[temp->breaker_gather_addr-BREADER_485_ADDR].ch_status[chn-1];
|
|
|
+ if(_globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_AC
|
|
|
+ || _globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_DC)
|
|
|
+ {
|
|
|
+ if(temp->breaker_status){
|
|
|
+ _globalDeviceManager->single_mmap->breaker_value |= (1 << (temp->breaker_id-1));
|
|
|
+ }
|
|
|
+ else{
|
|
|
+
|
|
|
+ _globalDeviceManager->single_mmap->breaker_value &= (~(1 << (temp->breaker_id-1)));
|
|
|
+ }
|
|
|
+
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ if(temp->breaker_status)
|
|
|
+ _globalDeviceManager->triphasic_mmap->breaker_value |= (1 << (temp->breaker_id-1));
|
|
|
+ else
|
|
|
+ _globalDeviceManager->triphasic_mmap->breaker_value &= (~(1 << (temp->breaker_id-1)));
|
|
|
+ }
|
|
|
#if USE_SMART_DETECTION_CTRL
|
|
|
if( temp->breaker_status == 0 && chn >=2 && chn <= 5) //close
|
|
|
{
|
|
|
@@ -1646,6 +1665,23 @@ static void* breaker_thread(void *arg)
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
+ if(_globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_AC
|
|
|
+ || _globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_DC )
|
|
|
+ {
|
|
|
+ if(temp->breaker_status)
|
|
|
+ _globalDeviceManager->single_mmap->breaker_value |= (1 << (temp->breaker_id-1));
|
|
|
+ else
|
|
|
+ _globalDeviceManager->single_mmap->breaker_value &= (~(1 << (temp->breaker_id-1)));
|
|
|
+
|
|
|
+ }else
|
|
|
+ {
|
|
|
+ if(temp->breaker_status)
|
|
|
+ _globalDeviceManager->triphasic_mmap->breaker_value |= (1 << (temp->breaker_id-1));
|
|
|
+ else
|
|
|
+ _globalDeviceManager->triphasic_mmap->breaker_value &= (~(1 << (temp->breaker_id-1)));
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
if(temp->breaker_gather_addr == 0)
|
|
|
{
|
|
|
@@ -1661,26 +1697,26 @@ static void* breaker_thread(void *arg)
|
|
|
|
|
|
static void set_sensor_val_modbus(GlobalDeviceManager *_globalDeviceManager,GlobalSensorInfo *info,int saddr)
|
|
|
{
|
|
|
- if(saddr>4 || saddr<0)
|
|
|
+ if(saddr>=4 || saddr<0)
|
|
|
return;
|
|
|
if(_globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_AC ||
|
|
|
_globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_DC)
|
|
|
{
|
|
|
if(_globalDeviceManager->single_mmap) {
|
|
|
- _globalDeviceManager->single_mmap->cas_sensor[saddr-1].s_1 = info->val1 * 1000;
|
|
|
+ _globalDeviceManager->single_mmap->cas_sensor[saddr].s_1 = info->val1 * 1000;
|
|
|
if(info->val2 == -1)
|
|
|
- _globalDeviceManager->single_mmap->cas_sensor[saddr-1].s_2 = 0xFFFFFFFF;
|
|
|
+ _globalDeviceManager->single_mmap->cas_sensor[saddr].s_2 = 0xFFFFFFFF;
|
|
|
else
|
|
|
- _globalDeviceManager->single_mmap->cas_sensor[saddr-1].s_2 = info->val2 * 1000;
|
|
|
+ _globalDeviceManager->single_mmap->cas_sensor[saddr].s_2 = info->val2 * 1000;
|
|
|
}
|
|
|
}else{
|
|
|
if (_globalDeviceManager->triphasic_mmap)
|
|
|
{
|
|
|
- _globalDeviceManager->triphasic_mmap->cas_sensor[saddr-1].s_1 = info->val1 * 1000;
|
|
|
+ _globalDeviceManager->triphasic_mmap->cas_sensor[saddr].s_1 = info->val1 * 1000;
|
|
|
if(info->val2 == -1)
|
|
|
- _globalDeviceManager->triphasic_mmap->cas_sensor[saddr-1].s_2 = 0xFFFFFFFF;
|
|
|
+ _globalDeviceManager->triphasic_mmap->cas_sensor[saddr].s_2 = 0xFFFFFFFF;
|
|
|
else
|
|
|
- _globalDeviceManager->triphasic_mmap->cas_sensor[saddr-1].s_2 = info->val2 * 1000;
|
|
|
+ _globalDeviceManager->triphasic_mmap->cas_sensor[saddr].s_2 = info->val2 * 1000;
|
|
|
}
|
|
|
}
|
|
|
}
|
|
|
@@ -1702,6 +1738,16 @@ static void set_dry_val_modbus(GlobalDeviceManager *_globalDeviceManager,int val
|
|
|
}
|
|
|
}
|
|
|
|
|
|
+static int compare_uint8_s(const void *a,const void *b)
|
|
|
+{
|
|
|
+ uint8_t arg1 = *(const uint8_t *)a;
|
|
|
+ uint8_t arg2 = *(const uint8_t *)b;
|
|
|
+
|
|
|
+ if (arg1 < arg2) return -1;
|
|
|
+ if (arg1 > arg2) return 1;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
|
|
|
/// @brief 传感器采集线程
|
|
|
/// @param arg
|
|
|
@@ -1733,6 +1779,13 @@ static void* sensor_thread(void* arg)
|
|
|
// printf("asdasdasdasdasd %d\n",nSaveIndex);
|
|
|
int nMaxIndex = 2000000000;
|
|
|
int nDeleteNumber = 1000 / 120000 * 3600 * 24 * 30 * 10; // 1/60s;
|
|
|
+ struct sensor_addr {
|
|
|
+ int count;
|
|
|
+ uint8_t serser_addr[255];
|
|
|
+ }sen={
|
|
|
+ .count = 0,
|
|
|
+ .serser_addr = {0},
|
|
|
+ };
|
|
|
// printf("senseor !!!!!\n");
|
|
|
|
|
|
//初始化GPIO
|
|
|
@@ -1760,7 +1813,18 @@ static void* sensor_thread(void* arg)
|
|
|
{
|
|
|
dev_change_last_Index(_globalDeviceManager->db, &nSaveIndex, nDeleteNumber, strTable);
|
|
|
}
|
|
|
-
|
|
|
+ //int val = 0;
|
|
|
+ sen.count = 0;
|
|
|
+ list_for_each_entry(_globalSensorMangerTemp, &_globalDeviceManager->_globalSensorManger.list, list)
|
|
|
+ {
|
|
|
+ if(_globalSensorMangerTemp->sensor_interface_type == 1) //485 类型传感器
|
|
|
+ {
|
|
|
+ sen.serser_addr[sen.count] = _globalSensorMangerTemp->sensor_addr;
|
|
|
+ sen.count ++;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ if(sen.count > 0)
|
|
|
+ qsort(sen.serser_addr,sen.count,sizeof(uint8_t),compare_uint8_s);
|
|
|
lock_s_hold(LOCK_ID_SENSOR);
|
|
|
list_for_each_entry(_globalSensorMangerTemp, &_globalDeviceManager->_globalSensorManger.list, list)
|
|
|
{
|
|
|
@@ -1776,6 +1840,7 @@ static void* sensor_thread(void* arg)
|
|
|
_globalSensorInfo.product_log_time=_globalSensorMangerTemp->Cur_sensor_info.product_log_time;
|
|
|
switch (_globalSensorMangerTemp->sensor_type)
|
|
|
{
|
|
|
+
|
|
|
case SENSOR_TYPE_TEMP_HUMI: // 温湿度
|
|
|
{
|
|
|
// printf("get \n");
|
|
|
@@ -1823,9 +1888,18 @@ static void* sensor_thread(void* arg)
|
|
|
_globalSensorMangerTemp->Cur_sensor_info=_globalSensorInfo;
|
|
|
_globalDeviceManager->g_modebus_read.temprature=temperature*100;
|
|
|
_globalDeviceManager->g_modebus_read.humidity=humidity*100;
|
|
|
- set_sensor_val_modbus(_globalDeviceManager,&_globalSensorInfo,_globalSensorMangerTemp->sensor_addr);
|
|
|
+ for(int i =0 ; i < NOARTH_MAX_SENSOR;i++) //最多4个
|
|
|
+ {
|
|
|
+ if(_globalSensorMangerTemp->sensor_addr == sen.serser_addr[i])
|
|
|
+ {
|
|
|
+ set_sensor_val_modbus(_globalDeviceManager,&_globalSensorInfo,i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
break;
|
|
|
+
|
|
|
#if (CHIP_TYPE != CHIP_T113s)
|
|
|
case SENSOR_TYPE_SMOKE: // 烟雾
|
|
|
case SENSOR_TYPE_WATER: // 水浸
|
|
|
@@ -1851,6 +1925,7 @@ static void* sensor_thread(void* arg)
|
|
|
}
|
|
|
break;
|
|
|
#endif
|
|
|
+
|
|
|
case SENSOR_TYPE_GAS: // 气体
|
|
|
{
|
|
|
float CO2 = 0.0;
|
|
|
@@ -1868,9 +1943,18 @@ static void* sensor_thread(void* arg)
|
|
|
_globalSensorInfo.val2 = 0;
|
|
|
}
|
|
|
_globalSensorMangerTemp->Cur_sensor_info = _globalSensorInfo;
|
|
|
- set_sensor_val_modbus(_globalDeviceManager,&_globalSensorInfo,_globalSensorMangerTemp->sensor_addr);
|
|
|
+ for(int i = 0 ; i < NOARTH_MAX_SENSOR;i++) //最多4个
|
|
|
+ {
|
|
|
+ if(_globalSensorMangerTemp->sensor_addr == sen.serser_addr[i])
|
|
|
+ {
|
|
|
+ set_sensor_val_modbus(_globalDeviceManager,&_globalSensorInfo,i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
}
|
|
|
break;
|
|
|
+
|
|
|
+
|
|
|
case SENSOR_TYPE_AIR_PRESS: // 气流
|
|
|
{
|
|
|
_globalSensorInfo.val1=0;
|
|
|
@@ -1904,6 +1988,7 @@ static void* sensor_thread(void* arg)
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
+
|
|
|
case SENSOR_TYPE_LEAK://泄漏传感器
|
|
|
{
|
|
|
sensor_dat_t sdat;
|
|
|
@@ -1918,19 +2003,28 @@ static void* sensor_thread(void* arg)
|
|
|
_globalSensorInfo.val2 = 0.0f;
|
|
|
}
|
|
|
_globalSensorMangerTemp->Cur_sensor_info=_globalSensorInfo;
|
|
|
+ for(int i = 0 ; i < NOARTH_MAX_SENSOR;i++) //最多4个
|
|
|
+ {
|
|
|
+ if(_globalSensorMangerTemp->sensor_addr == sen.serser_addr[i])
|
|
|
+ {
|
|
|
+ set_sensor_val_modbus(_globalDeviceManager,&_globalSensorInfo,i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
//set_sensor_val_modbus(_globalDeviceManager,&_globalSensorInfo,_globalSensorMangerTemp->sensor_addr);
|
|
|
|
|
|
//printf("_______SENSOR_TYPE_LEAK: addr:%d, %d, %d, ____%f\n", _globalSensorMangerTemp->sensor_addr, ret, sdat.flag, sensor_info.val1);
|
|
|
- if(_globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_AC ||
|
|
|
- _globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_DC)
|
|
|
- {
|
|
|
- _globalDeviceManager->single_mmap->cas_sensor[_globalSensorMangerTemp->sensor_addr-1].s_1 = _globalSensorInfo.val1;
|
|
|
- _globalDeviceManager->single_mmap->cas_sensor[_globalSensorMangerTemp->sensor_addr-1].s_2 = 0xFFFFFFFF;
|
|
|
- }else
|
|
|
- {
|
|
|
- _globalDeviceManager->triphasic_mmap->cas_sensor[_globalSensorMangerTemp->sensor_addr-1].s_1 = _globalSensorInfo.val1;
|
|
|
- _globalDeviceManager->triphasic_mmap->cas_sensor[_globalSensorMangerTemp->sensor_addr-1].s_2 = 0xFFFFFFFF;
|
|
|
- }
|
|
|
+ // if(_globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_AC ||
|
|
|
+ // _globalDeviceManager->_globalDevInfo.product.pwr_type == SmartPDU_DC)
|
|
|
+ // {
|
|
|
+ // log_w("_globalSensorMangerTemp->sensor_addr = %d\n",_globalSensorMangerTemp->sensor_addr);
|
|
|
+ // // _globalDeviceManager->single_mmap->cas_sensor[_globalSensorMangerTemp->sensor_addr-1].s_1 = _globalSensorInfo.val1;
|
|
|
+ // // _globalDeviceManager->single_mmap->cas_sensor[_globalSensorMangerTemp->sensor_addr-1].s_2 = 0xFFFFFFFF;
|
|
|
+ // }else
|
|
|
+ // {
|
|
|
+ // // _globalDeviceManager->triphasic_mmap->cas_sensor[_globalSensorMangerTemp->sensor_addr-1].s_1 = _globalSensorInfo.val1;
|
|
|
+ // // _globalDeviceManager->triphasic_mmap->cas_sensor[_globalSensorMangerTemp->sensor_addr-1].s_2 = 0xFFFFFFFF;
|
|
|
+ // }
|
|
|
}
|
|
|
break;
|
|
|
|
|
|
@@ -1959,7 +2053,15 @@ static void* sensor_thread(void* arg)
|
|
|
_globalSensorMangerTemp->Cur_sensor_info=_globalSensorInfo;
|
|
|
_globalDeviceManager->g_modebus_read.temprature=temperature*100;
|
|
|
_globalDeviceManager->g_modebus_read.temprature2=temperature2*100;
|
|
|
- set_sensor_val_modbus(_globalDeviceManager,&_globalSensorInfo,_globalSensorMangerTemp->sensor_addr);
|
|
|
+ for(int i = 0 ; i < NOARTH_MAX_SENSOR;i++) //最多4个
|
|
|
+ {
|
|
|
+ if(_globalSensorMangerTemp->sensor_addr == sen.serser_addr[i])
|
|
|
+ {
|
|
|
+ set_sensor_val_modbus(_globalDeviceManager,&_globalSensorInfo,i);
|
|
|
+ break;
|
|
|
+ }
|
|
|
+ }
|
|
|
+ //set_sensor_val_modbus(_globalDeviceManager,&_globalSensorInfo,_globalSensorMangerTemp->sensor_addr);
|
|
|
}
|
|
|
break;
|
|
|
}
|
|
|
@@ -3002,8 +3104,9 @@ int app_init(void)
|
|
|
appweb_init();
|
|
|
|
|
|
cellular_init();
|
|
|
+#if (CHIP_TYPE != CHIP_T113s)
|
|
|
wifi_init();
|
|
|
-
|
|
|
+#endif
|
|
|
upg_init();
|
|
|
dev_Alarm_Run_message(_globalDeviceManager,language_alarm_Init_Success[0],"Server Thread");
|
|
|
|