jt808、obd采集源码

JT808协议实现及obd数据采集源码


使用jt808-2011协议进行实现
1:linux嵌入式版本
代码是与JT808终端侧部分,
开发语言:C语言
运行平台:linux、NDK环境、PC模拟环境

2:单片机版本
通过OBD实现车内系统的数据采集,采用808协议进行数据上传;
通过TCP socket与平台建立连接,将OBD的数据、GPS数据、G-senor数据以交通部布标808协议格式发送到平台,信号不好情况,自己缓存数据到flash,支持OTA远程升级功能

808头文件定义
#define UP_UNIRESPONSE 0x0001 //终端通用应答//
#define UP_HEARTBEAT 0x0002 //终端心跳//
#define UP_REGISTER 0x0100 //终端注册//
#define UP_LOGOUT 0x0101 //终端注销//
#define UP_AUTHENTICATION 0x0102 //终端鉴权//
#define UP_POSITIONREPORT 0x0200

#define MSGBODY_NOPACKAGE_POS 13
#define MSGBODY_PACKAGE_POS 17
#define PROTOCOL_SIGN 0x7E //标识位//
#define PROTOCOL_ESCAPE 0x7D //转义标识//
#define PROTOCOL_ESCAPE_SIGN 0x02 //0x7e<–>0x7d后紧跟一个0x02//
#define PROTOCOL_ESCAPE_ESCAPE 0x01 //0x7d<–>0x7d后紧跟一个0x01//

#define DOWN_UNIRESPONSE 0x8001 //平台通用应答//
#define DOWN_REGISTERRSPONSE 0x8100 //终端注册应答//
#define OBDBUFFER_SIZE 20
#define MAX_PROFRAMEBUF_LEN 512

#define BigLittleSwap16(A) ((((unsigned short)(A) & 0xff00) >> 8) |
(((unsigned short)(A) & 0x00ff) << 8))

#define BigLittleSwap32(A) ((((unsigned long)(A) & 0xff000000) >> 24) |
(((unsigned long)(A) & 0x00ff0000) >> 8) |
(((unsigned long)(A) & 0x0000ff00) << 8) |
(((unsigned long)(A) & 0x000000ff) << 24))

#define LOOP_BUFFER_SIZE 5

#pragma pack(1)

typedef struct
{
u8 u8Para1; //参数一//
u8 u8Para2; //参数二//
u16 u16Para3; //参数三//
u16 u16Para4; //参数四//
u32 u32Para5; //参数五//
u32 u32Para6; //参数六//
u8* buf;
}sProPara;

typedef struct
{
u8 flag;
unsigned short len;
unsigned char buffer[400];

}_SendBuffer;
typedef struct
{
unsigned head;
unsigned char tail;
_SendBuffer SendBuf[LOOP_BUFFER_SIZE];

}_SendDataLoop;

typedef union
{
struct bit
{
u16 msglen:10; //消息体长度//
u16 encrypt:3; //数据加密方式// //当此三位都为0,表示消息体不加密// 当第10位为1,表示消息体经过RSA算法加密
u16 package:1; //分包标记//
u16 res1:2; //保留//
}bit;
u16 val;
}sMsgattribute; //消息体属性格式结构//

typedef struct
{
u16 id; //消息ID//
sMsgattribute attribute; //消息体属性//
u8 phone[6]; //终端手机号//
u16 serialnum; //消息流水号//
u16 totalpackage; //消息总包数// // 该消息分包后的总包数//
u16 packetseq; //包序号// //从1开始//
}sMessagehead; //消息头内容//

typedef union
{
struct bita
{
u32 sos:1; //紧急报瞥触动报警开关后触发//
u32 overspeed:1; //超速报警//
u32 fatigue:1; //疲劳驾驶//
u32 earlywarning:1; //预警//
u32 gnssfault:1; //GNSS模块发生故障//
u32 gnssantennacut:1; //GNSS天线未接或被剪断//
u32 gnssantennashortcircuit:1; //GNSS天线短路//
u32 powerlow:1; //终端主电源欠压//

	u32 powercut:1;					//终端主电源掉电//
	u32 lcdfault:1;					//终端LCD或显示器故障//
	u32 ttsfault:1;						//TTS模块故障//
	u32 camerafault:1;					//摄像头故障//
	u32 obddtc:1;						//OBD故障码//
	u32 res1:5;						//保留//

	u32 daydriveovertime:1;			//当天累计驾驶超时//
	u32 stopdrivingovertime:1;			//超时停车//
	u32 inoutarea:1;					//进出区域//
	u32 inoutroad:1;					//进出路线//
	u32 roaddrivetime:1;				//路段行驶时间不足/过长//
	u32 roaddeviate:1;				//路线偏离报警//
	u32 vssfault:1;					//车辆VSS故障//
	u32 oilfault:1;						//车辆油量异常//
	u32 caralarm:1;					//车辆被盗(通过车辆防盗器)//
	u32 caraccalarm:1;				//车辆非法点火//
	u32 carmove:1;					//车辆非法位移//
	u32 collision:1;					//碰撞侧翻报警//
	u32 res2:2;						//保留//
}bita;
u32 val;

}sbitalarm;

typedef union
{
struct bits
{
u32 acc:1; //ACC 0: ACC关;1:ACC开//
u32 location:1; //定位 0:未定位;1:定位//
u32 snlatitude:1; //0:北纬:1:南纬//
u32 ewlongitude:1; //0:东经;1:西经//
u32 operation:1; //0:运营状态:1:停运状态//
u32 gpsencrypt:1; //0:经纬度未经保密插件加密;l:经纬度已经保密插件加密//
u32 trip_stat:2; //00:等待新行程01:行程开始10:正在行驶11:行程结束,(有附带数据0x07)//
u32 Alarm_en:1; //防盗功能打开关闭//
u32 ResetState:1; //上电状态上报//

	u32 oilcut:1;						//0:车辆油路正常:1:车辆油路断开//
	u32 circuitcut:1;					//0:车辆电路正常:1:车辆电路断开//
	u32 doorlock:1;					//0:车门解锁;1:车门加锁//
	u32 gpsen:1;						// 1:无GPS数据,但字段占用 0:有GPS数据//
	u32 res2:18;						//保留//
}bits;
u32 val;

}sbitstate;

typedef struct
{
sbitalarm alarm;
sbitstate state;
u32 latitude; //纬度(以度为单位的纬度值乘以10的6次方,精确到百万分之一度)//
u32 longitude; //经度(以度为单位的纬度值乘以10的6次方,精确到百万分之一度)//
u16 atitude; //海拔高度,单位为米(m)//
u16 speed; //速度 1/10km/h//
u16 direction; //方向 0-359,正北为0,顺时针//
u8 time[6]; //时间 BCD[6] YY-MM-DD-hh-mm-ss(GMT+8时间,本标准之后涉及的时间均采用此时区)//
}sPositionbasicinfo;

typedef struct
{

u8 Sim808Step;
u8 AnsWerFalg;
u8 AuthenFlag;
u16 AutionLen;
u8 AutionBuf[16];

}SIM808DEAL;

#pragma pack()

extern u8 ProTBuf[512];
extern u8 ProTempBuf[512];
extern sProPara ProPara;
u16 ProFrame_Pack(u8 dec,u16 Cmd,sProPara Para,u8* Tempbuf);
u8 SVR808_FameDeal(void);
u8 Up_Register(void);
u8 UP_Authentication(void);
void ProFrameRec(u8 data);
void ProFramePrase(u8* FrameData,u16 Framelen,u16* ResId);

Email:braveban@163.com

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值