Browse Source

Merge branch 'xcjk' of http://121.42.8.157:13000/software-l/server into xcjk

zhuyf 2 years ago
parent
commit
927e7e2e76
5 changed files with 135 additions and 7 deletions
  1. 116 0
      card_base.cpp
  2. 12 0
      card_base.h
  3. 4 4
      loc_message.h
  4. 2 2
      message.cpp
  5. 1 1
      message.h

+ 116 - 0
card_base.cpp

@@ -205,6 +205,122 @@ void card_location_base::on_location(const std::vector<point>&vp, const std::vec
 
 		log_info("[help-battery] card_id=%d, battery=%d, val=%d", m_id, m_battery_value, val);
 		do_status(val);
+
+		if (is_vehicle())
+		{
+			if (m_stat_last == ENUM_STATUS_BACK)
+			{
+				m_stat = ENUM_STATUS_BACK;
+			}
+			if (m_speed > 1 && m_stat_last != ENUM_STATUS_BACK)
+			{
+				m_stat = ENUM_STATUS_FORWARD;
+			}
+
+			if (m_stat_last == ENUM_STATUS_FORWARD ||
+				m_stat_last == ENUM_STATUS_SPEED_UP ||
+				m_stat_last == ENUM_STATUS_SPEED_DOWN
+				)
+			{
+				m_stat = ENUM_STATUS_FORWARD;
+			}
+			if (m_stat_last == ENUM_STATUS_LEFT ||
+				m_stat_last == ENUM_STATUS_RIGHT)
+			{
+				m_stat = m_statusBeforeTurning;
+			}
+			if ((lm[0].m_acc <= -0.009 && m_stat_last == ENUM_STATUS_STATIC) || m_stat_last == ENUM_STATUS_BACK)
+			{
+				m_stat = ENUM_STATUS_BACK;
+			}
+			if (lm[0].m_acc >= 0.009 &&
+				(m_stat_last == ENUM_STATUS_FORWARD ||
+					m_stat_last == ENUM_STATUS_SPEED_UP ||
+					m_stat_last == ENUM_STATUS_SPEED_DOWN ||
+					m_stat_last == ENUM_STATUS_STATIC))
+			{
+				m_stat = ENUM_STATUS_SPEED_UP;
+			}
+			if (lm[0].m_acc <= -0.009 &&
+				(m_stat_last == ENUM_STATUS_FORWARD ||
+					m_stat_last == ENUM_STATUS_SPEED_UP ||
+					m_stat_last == ENUM_STATUS_SPEED_DOWN ||
+					(m_speed_last - m_speed > 0.5)))
+			{
+				m_stat = ENUM_STATUS_SPEED_DOWN;
+			}
+
+			if (lm[0].m_rav > 0)
+			{
+				if (m_stat_last == ENUM_STATUS_LEFT)
+				{
+				}
+				else
+				{
+					m_statusBeforeTurning = m_stat_last;
+				}
+				m_stat = ENUM_STATUS_LEFT;
+			}
+			if (lm[0].m_rav < 0)
+			{
+				if (m_stat_last == ENUM_STATUS_RIGHT)
+				{
+				}
+				else
+				{
+					m_statusBeforeTurning = m_stat_last;
+				}
+				m_stat = ENUM_STATUS_RIGHT;
+			}
+
+			if (m_stat_last != ENUM_STATUS_BACK)
+			{
+				if (lm[0].m_acc == 0 && lm[0].m_rav == 0 && m_speed <= 1)
+				{
+					m_stat = ENUM_STATUS_STATIC;
+				}
+			}
+			else
+			{
+				if (lm[0].m_acc == 0 && lm[0].m_rav == 0 && m_speed <= 0.3)
+				{
+					m_stat = ENUM_STATUS_STATIC;
+				}
+			}
+
+			switch (m_stat)
+			{
+			case ENUM_STATUS_STATIC:
+				log_info("[car-motion] card_id=%d, val=%d 静止 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
+				break;
+			case ENUM_STATUS_MOVE:
+				log_info("[car-motion] card_id=%d, val=%d 移动 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
+				break;
+			case ENUM_STATUS_FORWARD:
+				log_info("[car-motion] card_id=%d, val=%d 前进 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
+				break;
+			case ENUM_STATUS_BACK:
+				log_info("[car-motion] card_id=%d, val=%d 后退 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
+				break;
+			case ENUM_STATUS_LEFT:
+				log_info("[car-motion] card_id=%d, val=%d 左转 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
+				break;
+			case ENUM_STATUS_RIGHT:
+				log_info("[car-motion] card_id=%d, val=%d 右转 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
+				break;
+			case ENUM_STATUS_SPEED_UP:
+				log_info("[car-motion] card_id=%d, val=%d 加速 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
+				break;
+			case ENUM_STATUS_SPEED_DOWN:
+				log_info("[car-motion] card_id=%d, val=%d 减速 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
+				break;
+			default:
+				log_info("[car-motion] card_id=%d, val=%d 未知 lm[0].m_acc=%.2f lm[0].m_rav=%d m_speed=%.2f", m_id, m_stat, lm[0].m_acc, lm[0].m_rav, m_speed);
+				break;
+			}
+			m_speed_last = m_speed;
+			m_stat_last = m_stat;
+		}
     }
 	else
 	{

+ 12 - 0
card_base.h

@@ -30,6 +30,15 @@ namespace sys{
     struct _CARD_POS_;
 }
 
+const uint32_t ENUM_STATUS_STATIC = 0;
+const uint32_t ENUM_STATUS_MOVE = 1;
+const uint32_t ENUM_STATUS_FORWARD = 2;
+const uint32_t ENUM_STATUS_BACK = 3;
+const uint32_t ENUM_STATUS_LEFT = 4;
+const uint32_t ENUM_STATUS_RIGHT = 5;
+const uint32_t ENUM_STATUS_SPEED_UP = 6;
+const uint32_t ENUM_STATUS_SPEED_DOWN = 7;
+
 struct card:point
 {
 	card(uint32_t id,uint16_t dis,uint64_t type,int32_t deptid,int32_t level_id,uint32_t cid)
@@ -60,6 +69,8 @@ struct card:point
 	int32_t  m_deptid;			//部门编号
 	int32_t  m_level_id;		//职务级别
 	int		 m_stat;			//运动静止状态
+	int		 m_stat_last = 0;
+	int		 m_statusBeforeTurning = 0;
 	int		 m_biz_stat;
 	int	     m_pwr_stat;		//电量状态
 	int      m_battery_value = 10;   //电量值
@@ -70,6 +81,7 @@ struct card:point
     ///人卡(加速度状态),其值就是0和1,掘进机和采煤机,其值就是0~255,车辆,其值就需要乘以0.01,用于表示加速度值
     double   m_acc;
 	double   m_speed;			//速度
+	double	 m_speed_last = 0;
 	point	m_v_point;			//车辆定位系统的定位结果
 	bool m_isVehicleMap = false;
 };

+ 4 - 4
loc_message.h

@@ -12,7 +12,7 @@ struct loc_message
     int8_t   m_card_type;
     int8_t   m_ant_id;
     int16_t  m_rav;
-    int16_t  m_acc;
+	float    m_acc;
     uint16_t m_sync_ct;
     uint16_t m_rssi;
 	uint16_t m_batstatus;
@@ -38,7 +38,7 @@ struct loc_message
 
     loc_message(std::shared_ptr<site> s,uint64_t num_ticks,uint64_t timestamp,
                 uint32_t cardid,int32_t ct,int8_t type,int8_t antid,
-                int16_t rav,int16_t acc,uint16_t sync_ct,uint16_t rssi,uint16_t batstatus)
+                int16_t rav,float acc,uint16_t sync_ct,uint16_t rssi,uint16_t batstatus)
         :m_sit(s)
         ,m_num_ticks(num_ticks)
         ,m_loc_time(timestamp)
@@ -62,7 +62,7 @@ struct loc_message
     // tdoa定位数据,16
     loc_message(std::shared_ptr<site> s, uint64_t num_ticks, uint64_t timestamp,
                 uint32_t cardid,int32_t ct,int8_t type,int8_t antid,
-                int16_t rav,int16_t acc,uint16_t sync_ct,uint16_t rssi,uint16_t batstatus,
+                int16_t rav,float acc,uint16_t sync_ct,uint16_t rssi,uint16_t batstatus,
                 uint64_t _interpolation, uint8_t _loc_type, uint8_t _dim, uint8_t _freq)
         :m_sit(s)
         ,m_num_ticks(num_ticks)
@@ -87,7 +87,7 @@ struct loc_message
     // pdoa定位数据,17
     loc_message(std::shared_ptr<site> s,uint64_t num_ticks,uint64_t timestamp,
                 uint32_t cardid,int32_t ct,int8_t type,int8_t antid,
-                int16_t rav,int16_t acc,uint16_t sync_ct,uint16_t rssi,uint16_t batstatus
+                int16_t rav,float acc,uint16_t sync_ct,uint16_t rssi,uint16_t batstatus
                 ,uint8_t _loc_type, uint8_t _dim, double _poa0, double _poa1, double _poa2)
         :m_sit(s)
         ,m_num_ticks(num_ticks)

+ 2 - 2
message.cpp

@@ -100,7 +100,7 @@ void message_locinfo::load(zistream&is,bool tdoa)
 	uint16_t sp1=0,sp2=0;
 	is>>sp1>>sp2;
 	m_rssi=10*log10(1.*sp1*(1<<17)/pow(sp2-64.,2))-121.74;
-	log_info("timestamp=%llu,type=%d,card=%d,site=%d,ct=%d,bat=%#X,acc=%d,tof=%llu,ant_id=%d,spq=%d",
+	log_info("timestamp=%llu,type=%d,card=%d,site=%d,ct=%d,bat=%#X,acc=%.2f,tof=%llu,ant_id=%d,spq=%d",
 			m_time_stamp,m_card_type,m_card_id,m_site_id,m_card_ct,m_batty_status,m_acc,m_tof,m_ant_id,m_rssi);
 }
 
@@ -393,6 +393,6 @@ void message_pdoa_locinfo::load(zistream& is)
     }
 
 	if(tof > 0){
-		logn_info(3,"[pdoa] card_type=%d, card_id=%d, ct=%d, status=%d, call_type=%d, rav=%d, acc=%d, tof=%llu, ant_id=%d, rssi=%d, poa1=%.2f, poa2=%.2f, poa3=%.2f", m_card_type, m_card_id, m_card_ct, m_batty_status, m_callinfo, m_rav, m_acc, m_tof, m_ant_id, m_rssi, m_poa[0], m_poa[1], m_poa[2]);
+		logn_info(3,"[pdoa] card_type=%d, card_id=%d, ct=%d, status=%d, call_type=%d, rav=%d, acc=.2f, tof=%llu, ant_id=%d, rssi=%d, poa1=%.2f, poa2=%.2f, poa3=%.2f", m_card_type, m_card_id, m_card_ct, m_batty_status, m_callinfo, m_rav, m_acc, m_tof, m_ant_id, m_rssi, m_poa[0], m_poa[1], m_poa[2]);
 	}
 }

+ 1 - 1
message.h

@@ -40,7 +40,7 @@ struct message_tdoa_card{
 	uint8_t  m_battery_status;      //  电池状态
 	uint8_t  m_call_info;           // 0x80-呼救,0x01-一般呼叫,0x02-紧急呼叫
 	int8_t  m_rav;                 // 角速度
-	uint8_t  m_acc;                 // 加速度
+	float   m_acc;                 // 加速度
     uint64_t m_loc_stamp;           // 定位时间戳
 	uint8_t  m_ant_id;              // 天线号
 	uint16_t m_sync_num;            // 同步序列号