新版天线库

本文详细解析了天线通信中的处理流程,包括连接天线、数据监听、包解析等步骤。针对不同类型的帧(b0、b1、b2、b3、b4),采取不同的响应策略,例如发送特定指令、记录OBUID和OBU状态,以及对黑名单和IC卡信息的处理。整个流程涉及交易管理、卡片类型判断和交易金额计算等多个环节。
摘要由CSDN通过智能技术生成

首先看libgbdsrc/src中的dbdsrc.c文件

 

_gbdsrc_thread_func 开头函数 完成了用函数_connect_rsu连接天线,并且使用select 监听套接字 ,当接受到包时,使用trans_obj.c的函数gbdsrc_recv接收,然后调用protocol.c 中的gbdsrc_protocol_process 开始对接受到的包进行分析。

 

 pkg_size = _package_decode(buf + 2, &pkg_p, buf_len - 4);  去掉包头的STX和包尾的BCC和ETX

 

 

 然后流程如下:

1.先看如果是b2  b3 b4 指令,如果pkg[6]errorcode == 0x08 发送c2停止交易的指令

2.如果是b0(设备状态信息帧) 忽略

3如果是b1  (地感状态信息帧) 则会送c1指令

4 如果是b2 (vst)  

 

memcpy(&v, pkg + 2, 4);

    if (v == 0) {

        _gbdsrc_send_c2_package(svc, pkg[0]);

break;

    }

 

 

如果如法获取OBUID号,则发送c2指令

 

 

   if ((pkg[32] >> 7) != 0) {

      _gbdsrc_send_c2_package(svc, pkg[0]);

      gbdsrc_on_trans_failed(svc, ERR_NO_ICCARD, ERR_NO_ICCARD_STR);

      break;

    }

如果通过判断OBUID发现无IC卡存在,发送c2指令

 

 

当pkg[6] errorcode ==0 时,记录 obuID 和obu状态 然后发送c1指令

 

5 如果是B3 (OBU信息帧)

判断svc->obu_id中存储的OBUID和B3信息帧中存储的ID是否相同,如果不同则发送C2指令

如果相同的话则首先查询黑名单,如果此OBUID在黑名单中,则终止交易,发送C1指令

如果此OBU正常则发送c1指令,并记录OBU记载的车牌号到svc->veh_num中

记录OBU存储的车辆类型到svc->veh_type 中

 

6 如果是B4 IC卡信息帧

先验证errorcode

 

然后是一个数据结构 

 

 

  typedef struct {

    lane_type_t lane_type;

    trans_type_t trans_type;

 

    /* 交易开始和终止时间 */

    struct timeval trans_begin;

    struct timeval trans_end;

 

    time_t last_trans_time;

    unsigned char psam[6]; /* PSAM卡号 */

    unsigned int obu_id; /* OBU序列号 */

    char veh_num[12]; /* 车牌号码 */

    char card_veh_num[12]; /* 卡内车牌号码 */

    unsigned int veh_type; /* 车型 */

    unsigned int card_balance; /* 交易后余额 */

    

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值