|
@@ -242,3 +242,43 @@ void person::get_card(bool f)
|
|
|
return ;
|
|
|
mine_business::inst()->fetch_add(m_display);
|
|
|
}
|
|
|
+#define CHARGE_MASK 0X03
|
|
|
+#define DISCHARGE_MASK 0X0C
|
|
|
+#define POWER_MASK 0X10
|
|
|
+void person::handle_message(uint16_t ct,uint8_t &value)
|
|
|
+{
|
|
|
+ if(m_card_generation==0){
|
|
|
+ uint8_t remainder=ct%5;
|
|
|
+ if(remainder==4){
|
|
|
+ uint8_t v=value>>4;
|
|
|
+ if(v>0)m_card_generation=2;
|
|
|
+ else m_card_generation=1;
|
|
|
+ }
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ if(m_card_generation==1){
|
|
|
+ value=value&0x03;
|
|
|
+ return;
|
|
|
+ }
|
|
|
+ uint16_t cttmp = ct/5;
|
|
|
+ if(m_ctflag != cttmp){
|
|
|
+ if((m_index&CHARGE_MASK) == CHARGE_MASK)
|
|
|
+ m_charge_value=(m_value[0]<<8)|m_value[1];
|
|
|
+ if((m_index&DISCHARGE_MASK) == DISCHARGE_MASK)
|
|
|
+ m_discharge_value=(m_value[2]<<8)|m_value[3];
|
|
|
+ if((m_index&POWER_MASK) == POWER_MASK)
|
|
|
+ m_power=m_value[4]>>4;
|
|
|
+ logn_info(1,"card_id:%d,充电时间:%u,放电时间:%u,电量%d%",m_id,m_charge_value,m_discharge_value,m_power*10);
|
|
|
+ m_index=0;m_ctflag=cttmp;memset(&m_value,0,sizeof(m_value));
|
|
|
+ }
|
|
|
+ uint8_t remainder=ct%5;
|
|
|
+ m_value[remainder]=value;
|
|
|
+ m_index|=(1<<remainder);
|
|
|
+ logn_info(1,"card_id:%d,ctflag:%u,index:%d,value:%d,,,,%d",m_id,m_ctflag,remainder,value,m_index);
|
|
|
+ if(remainder==4){
|
|
|
+ value>>=4;
|
|
|
+ if(value>=5)value=0;
|
|
|
+ else if(value >2 && value<5) value=1;
|
|
|
+ else value=2;
|
|
|
+ }
|
|
|
+}
|