Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
TianYing_ty100
Project
Project
Details
Activity
Releases
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
baizhengyuan
TianYing_ty100
Commits
dedb811e
Commit
dedb811e
authored
May 24, 2024
by
李俭双
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
✨
feat:增加串口蓝牙协议及驱动,待调试
parent
140457a2
Changes
17
Expand all
Hide whitespace changes
Inline
Side-by-side
Showing
17 changed files
with
1320 additions
and
9 deletions
+1320
-9
Application.h
Firmware/Source/Application/Application.h
+4
-2
BlueTooth.c
Firmware/Source/Application/BLUETOOTH/BlueTooth.c
+27
-0
BlueTooth.h
Firmware/Source/Application/BLUETOOTH/BlueTooth.h
+57
-0
Protocol_CRC16.c
Firmware/Source/Application/BLUETOOTH/Protocol_CRC16.c
+47
-0
Protocol_CRC16.h
Firmware/Source/Application/BLUETOOTH/Protocol_CRC16.h
+10
-0
Protocol_Lib.c
Firmware/Source/Application/BLUETOOTH/Protocol_Lib.c
+271
-0
Protocol_Lib.h
Firmware/Source/Application/BLUETOOTH/Protocol_Lib.h
+67
-0
Protocol_User.c
Firmware/Source/Application/BLUETOOTH/Protocol_User.c
+231
-0
Protocol_User.h
Firmware/Source/Application/BLUETOOTH/Protocol_User.h
+13
-0
GUI_Display.c
Firmware/Source/Application/GUI_Display/GUI_Display.c
+1
-0
SEG_DISPLAY.c
Firmware/Source/Application/SEG_DISPLAY/SEG_DISPLAY.c
+570
-1
SEG_DISPLAY.h
Firmware/Source/Application/SEG_DISPLAY/SEG_DISPLAY.h
+11
-1
PowerManag_user.c
Firmware/Source/Component/PowerManagement/PowerManag_user.c
+3
-2
RTE.h
Firmware/Source/Device/Cmsemicon/BAT32A239/RTE/RTE.h
+1
-1
UART_DEMO.c
...re/Source/Device/Cmsemicon/BAT32A239/RTE/UART/UART_DEMO.c
+1
-1
UART_DEMO.h
...re/Source/Device/Cmsemicon/BAT32A239/RTE/UART/UART_DEMO.h
+1
-0
Sys_Task_List.c
Firmware/Source/System/Sys_Task_List.c
+5
-1
No files found.
Firmware/Source/Application/Application.h
View file @
dedb811e
...
...
@@ -18,6 +18,8 @@
#include "Data_TPMS/Data_TPMS.h"
#include "Data_Voltage/Data_Voltage.h"
#include "FaultCode/FaultCode.h"
#include "BLUETOOTH/BlueTooth.h"
#include "BLUETOOTH/Protocol_CRC16.h"
#include "BLUETOOTH/Protocol_Lib.h"
#include "BLUETOOTH/Protocol_User.h"
#endif
Firmware/Source/Application/BLUETOOTH/BlueTooth.c
0 → 100644
View file @
dedb811e
#include "BlueTooth.h"
BlueTooth_t
BlueTooth
;
uint8_t
UUIDData
[
32
]
=
{
"vivavivavivavivavivaviva01234567"
};
BlueTooth_KL30_KL15_Wakeup_Init
(
void
)
{
BlueTooth
.
BLE_St
=
BLUE_STATE_Starting
;
BlueTooth
.
Navigation_St
=
EM_ESP32_NAVI_ST_STANDBY
;
BlueTooth
.
Navigation_Code
=
0
;
BlueTooth
.
Navigation_Mileage
=
0
;
}
void
Send_UUID_To_Esp32
(
void
)
{
Protocol_Send
(
MCU_ESP32_0x03
,
Protocol_NULL
,
0
);
}
uint8_t
Get_Navigation_St_Dis
(
void
)
{
return
BlueTooth
.
Navigation_St
;
}
uint8_t
Get_Navigation_Code_Dis
(
void
)
{
return
BlueTooth
.
Navigation_Code
;
}
uint32_t
Get_Navigation_Mileage_Dis
(
void
)
{
return
BlueTooth
.
Navigation_Mileage
;
}
\ No newline at end of file
Firmware/Source/Application/BLUETOOTH/BlueTooth.h
0 → 100644
View file @
dedb811e
#ifndef __BLUE_TOOTH_H_
#define __BLUE_TOOTH_H_
#include "Protocol_Lib.h"
#include <stdio.h>
#include <stdint.h>
#include "Components.h"
#include "Application.h"
#define ESP32_MCU_0x10 0x10 //蓝牙模组启动发送ID
#define MCU_ESP32_0x20 0x20 //蓝牙模组启动后,MCU回复ID
#define ESP32_MCU_0x01 0x01 //ESP32发送蓝牙导航信息的ID
#define ESP32_MCU_0x12 0x12 //低功耗蓝牙启动状态及蓝牙名称
#define MCU_ESP32_0x03 0x03 //MCU发送UUID
enum
{
BLUE_STATE_Starting
,
//蓝牙模组启动中
BLUE_STATE_ON
,
//蓝牙模组启动完成
BLUE_STATE_OFF
,
};
typedef
struct
{
uint8_t
BlueTooth_St
;
/*蓝牙模组启动状态 0启动中 1启动完成*/
uint8_t
Navigation_St
;
/*导航状态 0x35 未导航或导航结束 0x33 正在导航*/
uint8_t
Navigation_Code
;
/*蓝牙导向编码*/
uint32_t
Navigation_Mileage
;
/*剩余里程*/
uint8_t
BLE_St
;
}
BlueTooth_t
;
typedef
enum
{
EM_ESP32_BT_STARTUP_ST_STANDBY
=
0
,
EM_ESP32_BT_STARTUP_ST_SUCCESS
,
}
EM_ESP32_BT_STARTUP_ST_T
;
typedef
enum
{
EM_ESP32_NAVI_ST_STANDBY
=
0
,
EM_ESP32_NAVI_ST_NAVIGATING
,
}
EM_ESP32_NAVI_ST_T
;
typedef
struct
{
EM_ESP32_BT_STARTUP_ST_T
Startup
;
EM_ESP32_NAVI_ST_T
NaviSt
;
uint8_t
NaviCode
;
uint8_t
BlueToothConnectSt
;
uint32_t
NaviMileage
;
uint8_t
BlueName
[
6
];
}
ESP32_COMM_INFO_T
;
extern
BlueTooth_t
BlueTooth
;
uint8_t
Get_Navigation_St_Dis
(
void
);
uint8_t
Get_Navigation_Code_Dis
(
void
);
uint32_t
Get_Navigation_Mileage_Dis
(
void
);
void
Send_UUID_To_Esp32
(
void
);
#endif
Firmware/Source/Application/BLUETOOTH/Protocol_CRC16.c
0 → 100644
View file @
dedb811e
/**
* @file Protocol_CRC16.c
* @brief CRC16计算
* @details CRC16计算
* @author myliu
* @date 2022.05.09
* @version V1.0
* @copyright myiu
*/
#include "Protocol_CRC16.h"
static
const
Protocol_uint8_t
CRC16_TAB_H
[
256
]
=
{
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x01u
,
0xC0u
,
0x80u
,
0x41u
,
0x00u
,
0xC1u
,
0x81u
,
0x40u
};
static
const
Protocol_uint8_t
CRC16_TAB_L
[
256
]
=
{
0x00u
,
0xC0u
,
0xC1u
,
0x01u
,
0xC3u
,
0x03u
,
0x02u
,
0xC2u
,
0xC6u
,
0x06u
,
0x07u
,
0xC7u
,
0x05u
,
0xC5u
,
0xC4u
,
0x04u
,
0xCCu
,
0x0Cu
,
0x0Du
,
0xCDu
,
0x0Fu
,
0xCFu
,
0xCEu
,
0x0Eu
,
0x0Au
,
0xCAu
,
0xCBu
,
0x0Bu
,
0xC9u
,
0x09u
,
0x08u
,
0xC8u
,
0xD8u
,
0x18u
,
0x19u
,
0xD9u
,
0x1Bu
,
0xDBu
,
0xDAu
,
0x1Au
,
0x1Eu
,
0xDEu
,
0xDFu
,
0x1Fu
,
0xDDu
,
0x1Du
,
0x1Cu
,
0xDCu
,
0x14u
,
0xD4u
,
0xD5u
,
0x15u
,
0xD7u
,
0x17u
,
0x16u
,
0xD6u
,
0xD2u
,
0x12u
,
0x13u
,
0xD3u
,
0x11u
,
0xD1u
,
0xD0u
,
0x10u
,
0xF0u
,
0x30u
,
0x31u
,
0xF1u
,
0x33u
,
0xF3u
,
0xF2u
,
0x32u
,
0x36u
,
0xF6u
,
0xF7u
,
0x37u
,
0xF5u
,
0x35u
,
0x34u
,
0xF4u
,
0x3Cu
,
0xFCu
,
0xFDu
,
0x3Du
,
0xFFu
,
0x3Fu
,
0x3Eu
,
0xFEu
,
0xFAu
,
0x3Au
,
0x3Bu
,
0xFBu
,
0x39u
,
0xF9u
,
0xF8u
,
0x38u
,
0x28u
,
0xE8u
,
0xE9u
,
0x29u
,
0xEBu
,
0x2Bu
,
0x2Au
,
0xEAu
,
0xEEu
,
0x2Eu
,
0x2Fu
,
0xEFu
,
0x2Du
,
0xEDu
,
0xECu
,
0x2Cu
,
0xE4u
,
0x24u
,
0x25u
,
0xE5u
,
0x27u
,
0xE7u
,
0xE6u
,
0x26u
,
0x22u
,
0xE2u
,
0xE3u
,
0x23u
,
0xE1u
,
0x21u
,
0x20u
,
0xE0u
,
0xA0u
,
0x60u
,
0x61u
,
0xA1u
,
0x63u
,
0xA3u
,
0xA2u
,
0x62u
,
0x66u
,
0xA6u
,
0xA7u
,
0x67u
,
0xA5u
,
0x65u
,
0x64u
,
0xA4u
,
0x6Cu
,
0xACu
,
0xADu
,
0x6Du
,
0xAFu
,
0x6Fu
,
0x6Eu
,
0xAEu
,
0xAAu
,
0x6Au
,
0x6Bu
,
0xABu
,
0x69u
,
0xA9u
,
0xA8u
,
0x68u
,
0x78u
,
0xB8u
,
0xB9u
,
0x79u
,
0xBBu
,
0x7Bu
,
0x7Au
,
0xBAu
,
0xBEu
,
0x7Eu
,
0x7Fu
,
0xBFu
,
0x7Du
,
0xBDu
,
0xBCu
,
0x7Cu
,
0xB4u
,
0x74u
,
0x75u
,
0xB5u
,
0x77u
,
0xB7u
,
0xB6u
,
0x76u
,
0x72u
,
0xB2u
,
0xB3u
,
0x73u
,
0xB1u
,
0x71u
,
0x70u
,
0xB0u
,
0x50u
,
0x90u
,
0x91u
,
0x51u
,
0x93u
,
0x53u
,
0x52u
,
0x92u
,
0x96u
,
0x56u
,
0x57u
,
0x97u
,
0x55u
,
0x95u
,
0x94u
,
0x54u
,
0x9Cu
,
0x5Cu
,
0x5Du
,
0x9Du
,
0x5Fu
,
0x9Fu
,
0x9Eu
,
0x5Eu
,
0x5Au
,
0x9Au
,
0x9Bu
,
0x5Bu
,
0x99u
,
0x59u
,
0x58u
,
0x98u
,
0x88u
,
0x48u
,
0x49u
,
0x89u
,
0x4Bu
,
0x8Bu
,
0x8Au
,
0x4Au
,
0x4Eu
,
0x8Eu
,
0x8Fu
,
0x4Fu
,
0x8Du
,
0x4Du
,
0x4Cu
,
0x8Cu
,
0x44u
,
0x84u
,
0x85u
,
0x45u
,
0x87u
,
0x47u
,
0x46u
,
0x86u
,
0x82u
,
0x42u
,
0x43u
,
0x83u
,
0x41u
,
0x81u
,
0x80u
,
0x40u
};
/**
* 获取CRC16校验和
*/
/**
* @brief 计算传入数据的CRC16
* @param[in] pData 计算的数据内容
* @param[in] len 计算的数据长度
*
* @return 校验和
*
* @since 1.0.0
*/
Protocol_uint16_t
getCheckSum
(
const
Protocol_uint8_t
*
pData
,
int
len
)
{
Protocol_uint8_t
u8_crc_h
=
0xFFu
;
Protocol_uint8_t
u8_crc_l
=
0xFFu
;
Protocol_uint8_t
u8_index
=
0u
;
Protocol_uint8_t
i
=
0u
;
Protocol_uint16_t
re_value
;
while
(
len
--
)
{
u8_index
=
u8_crc_h
^
(
pData
[
i
++
]);
u8_crc_h
=
u8_crc_l
^
CRC16_TAB_H
[
u8_index
];
u8_crc_l
=
CRC16_TAB_L
[
u8_index
];
}
re_value
=
(
Protocol_uint16_t
)
u8_crc_h
<<
8u
;
re_value
|=
u8_crc_l
;
return
re_value
;
}
Firmware/Source/Application/BLUETOOTH/Protocol_CRC16.h
0 → 100644
View file @
dedb811e
#ifndef PROTOCOL_CRC16_H
#define PROTOCOL_CRC16_H
//#include "Application.h"
#include "Protocol_Lib.h"
#include <stdio.h>
#include <stdint.h>
Protocol_uint16_t
getCheckSum
(
const
Protocol_uint8_t
*
pData
,
int
len
);
#endif
Firmware/Source/Application/BLUETOOTH/Protocol_Lib.c
0 → 100644
View file @
dedb811e
/**
* @file Protocol_Lib.c
* @brief 串口协议解析
* @details 串口协议解析
* @author myliu
* @date 2022.05.09
* @version V1.0
* @copyright myiu
*/
#include <stdio.h>
#include <string.h>
#include "Protocol_Lib.h"
static
UARTOpen
UARTOpen_Cbk
;
static
UARTSend
UARTSend_Cbk
;
static
UARTRead
UARTRead_Cbk
;
static
ProcParse
ProcParseCbk
;
static
UARTClose
UARTClose_Cbk
;
static
ProtocolSetData
ProtocolSetData_Cbk
;
static
Protocol_uint8_t
*
mDataBufPtr
=
Protocol_NULL
;
static
Protocol_uint16_t
mDataBufLen
=
0
;
static
Protocol_uint32_t
DataBufMaxLen
=
0
;
//#define DEBUG_PRO_DATA 0
/**
* @brief 初始化函数
* @param[in] pMemSpace 分配给协议库的内存空间,用来缓存串口数据
* @param[in] MemLen 分配的内存空间大小
* @param[in] pFunc 回调函数,包括串口打开、发送、读取、关闭,也包括解析后数据回传
* @param[in] ProcParseCbk 此回调函数,返回数据从FrameNo开始到CRC16之前,和ProtocolSetData_Cbk二选一
* @param[in] ProtocolSetData_Cbk 此回调函数,返回数据区分命令字、电源状态等,和ProcParseCbk二选一,详见结构体Protocol_Data_t
*
* @warning 此函数KL30和Wakeup都要调用,否则未分配内存,功能不好使,也有可能造成野指针复位
*
* @since 1.0.0
*/
void
Protocol_Init
(
Protocol_uint8_t
*
pMemSpace
,
Protocol_uint32_t
MemLen
,
Protocol_Func_t
*
pFunc
)
{
mDataBufPtr
=
pMemSpace
;
DataBufMaxLen
=
MemLen
;
UARTOpen_Cbk
=
pFunc
->
UARTOpen_Cbk
;
UARTSend_Cbk
=
pFunc
->
UARTSend_Cbk
;
UARTRead_Cbk
=
pFunc
->
UARTRead_Cbk
;
ProcParseCbk
=
pFunc
->
ProcParseCbk
;
UARTClose_Cbk
=
pFunc
->
UARTClose_Cbk
;
ProtocolSetData_Cbk
=
pFunc
->
ProtocolSetData_Cbk
;
if
(
UARTOpen_Cbk
!=
Protocol_NULL
)
{
UARTOpen_Cbk
(
);
}
return
;
}
/**
* @brief 串口协议服务函数,包括读取数据,解析数据,如在外部读取数据,可不调用此函数
*
* @warning 此函数可自定义周期调用,建议20ms周期调用,最大不可超过协议的最小发送周期
*
* @since 1.0.0
*/
void
Protocol_Service
(
void
)
{
int
len
;
Protocol_uint32_t
readNum
=
0
;
if
(
UARTRead_Cbk
!=
Protocol_NULL
)
{
readNum
=
UARTRead_Cbk
(
mDataBufPtr
+
mDataBufLen
,
256
-
mDataBufLen
);
if
(
readNum
>
0
)
{
mDataBufLen
+=
readNum
;
// 解析协议
len
=
Protocol_Parse
(
mDataBufPtr
,
mDataBufLen
);
if
(
(
len
>
0
)
&&
(
len
<
mDataBufLen
)
)
{
// 将未解析的数据移到头部
// Move unparsed data to the head
memcpy
(
mDataBufPtr
,
mDataBufPtr
+
len
,
mDataBufLen
-
len
);
}
mDataBufLen
-=
len
;
}
}
}
/**
* @brief 协议解析函数,如外部获取数据(例如中断),可直接调用此函数解析数据
* @param[in] pData 协议数据内容
* @param[in] len 需要处理的协议数据长度
*
* @return 剩余已处理的数据长度
*
* @since 1.0.0
*/
Protocol_uint32_t
Protocol_Parse
(
const
Protocol_uint8_t
*
pData
,
Protocol_uint32_t
len
)
{
Protocol_uint32_t
remainLen
=
len
;
// 剩余数据长度 Remaining data length
Protocol_uint32_t
dataLen
;
// 数据包长度 Packet length
Protocol_uint32_t
frameLen
;
// 帧长度 Frame length
Protocol_uint32_t
frameSum
;
Protocol_Data_t
ProcData
;
int
i
=
0
;
int
dataBuf
[
256
];
/**
* 以下部分需要根据协议格式进行相应的修改,解析出每一帧的数据
*/
while
(
remainLen
>=
DATA_PACKAGE_MIN_LEN
)
{
// 找到一帧数据的数据头
// Find the data header of a frame of data
while
(
(
remainLen
>=
2
)
&&
((
pData
[
0
]
!=
CMD_HEAD1
)
||
(
pData
[
1
]
!=
CMD_HEAD2
))
)
{
pData
++
;
remainLen
--
;
continue
;
}
if
(
remainLen
<
DATA_PACKAGE_MIN_LEN
)
{
#ifdef DEBUG_PRO_DATA
d_printf
(
"too short!!!!!!
\n
"
);
#endif
break
;
}
dataLen
=
pData
[
2
];
frameLen
=
dataLen
+
DATA_PACKAGE_FIXED_LEN
;
if
(
frameLen
>
remainLen
)
{
// 数据内容不全
#ifdef DEBUG_PRO_DATA
d_printf
(
"Incomplete data packet!!!!!!
\n
"
);
#endif
break
;
}
// 打印一帧数据,需要时在CommDef.h文件中打开DEBUG_PRO_DATA宏
#ifdef DEBUG_PRO_DATA
for
(
i
=
0
;
i
<
frameLen
;
++
i
)
{
d_printf
(
"%x "
,
pData
[
i
]);
}
d_printf
(
"
\n
"
);
#endif
// 检测校验码 Checksum
frameSum
=
(
pData
[
frameLen
-
2
]
<<
8
)
|
(
pData
[
frameLen
-
1
]);
if
(
frameLen
>
4
)
{
if
(
getCheckSum
(
pData
+
2
,
frameLen
-
4
)
==
frameSum
)
{
// 解析一帧数据
if
(
ProcParseCbk
!=
Protocol_NULL
)
{
ProcParseCbk
(
pData
+
3
,
dataLen
-
2
);
}
if
(
ProtocolSetData_Cbk
!=
Protocol_NULL
)
{
ProcData
.
FrameNo
=
pData
[
3
];
ProcData
.
PowerSts
=
(
pData
[
4
]
>>
6
)
&
0x03
;
ProcData
.
CmdID
=
pData
[
4
]
&
0x3F
;
if
(
ProcData
.
CmdID
==
0x10
)
{
#ifdef DEBUG_PRO_DATA
for
(
i
=
0
;
i
<
frameLen
;
++
i
)
{
d_printf
(
"%x "
,
pData
[
i
]);
}
d_printf
(
"
\n
"
);
#endif
}
if
(
ProcData
.
CmdID
==
0x12
)
{
#ifdef DEBUG_PRO_DATA
for
(
i
=
0
;
i
<
frameLen
;
++
i
)
{
d_printf
(
"%x "
,
pData
[
i
]);
}
d_printf
(
"
\n
"
);
#endif
}
ProcData
.
DataLen
=
dataLen
-
4
;
memcpy
(
ProcData
.
Data
,
pData
+
5
,
ProcData
.
DataLen
);
ProtocolSetData_Cbk
(
&
ProcData
);
}
}
else
{
for
(
i
=
0
;
i
<
frameLen
;
++
i
)
{
dataBuf
[
i
]
=
pData
[
i
];
}
i
=
0
;
#ifdef DEBUG_PRO_DATA
d_printf
(
"CheckSum error: new = %x, old = %x!!!!!!
\n
"
,
getCheckSum
(
pData
+
2
,
frameLen
-
4
),
frameSum
);
#endif
}
}
pData
+=
frameLen
;
remainLen
-=
frameLen
;
}
return
len
-
remainLen
;
}
/**
* 根据协议格式进行拼接
*/
/**
* @brief 串口协议数据拼接,如初始化发送函数,调用此函数后,数据已通过串口发送
* @param[in] cmdID 命令字
* @param[in] pData 协议数据内容(不包括协议头、长度、帧序号、命令字、校验和,从数据域算起)
* @param[in] len 数据域长度
*
* @return 已发送的数据长度
*
* @since 1.0.0
*/
Protocol_uint32_t
Protocol_Send
(
const
Protocol_uint16_t
cmdID
,
const
Protocol_uint8_t
*
pData
,
Protocol_uint8_t
len
)
{
int
i
=
0
;
Protocol_uint16_t
checksum
=
0
;
Protocol_uint8_t
dataBuf
[
256
];
Protocol_uint32_t
frameLen
;
if
(
len
+
DATA_PACKAGE_MIN_LEN
>
256
)
{
// printf("sendProtocol data is too len !!!\n");
return
0
;
}
dataBuf
[
0
]
=
CMD_HEAD1
;
dataBuf
[
1
]
=
CMD_HEAD2
;
// 同步帧头 Sync frame header
dataBuf
[
2
]
=
len
+
4
;
dataBuf
[
3
]
=
0
;
// 命令字节 Command byte
dataBuf
[
4
]
=
(
Protocol_uint8_t
)
cmdID
;
frameLen
=
5
;
// 数据 Data
for
(
i
=
0
;
i
<
len
;
++
i
)
{
dataBuf
[
frameLen
]
=
pData
[
i
];
frameLen
++
;
}
// 校验码 Checksum
checksum
=
getCheckSum
(
dataBuf
+
2
,
frameLen
-
2
);
dataBuf
[
frameLen
]
=
(
checksum
>>
8
)
&
0x00FF
;
frameLen
++
;
dataBuf
[
frameLen
]
=
checksum
&
0x00FF
;
frameLen
++
;
if
(
UARTSend_Cbk
!=
Protocol_NULL
)
{
return
UARTSend_Cbk
(
dataBuf
,
frameLen
);
}
else
{
return
0
;
}
}
Firmware/Source/Application/BLUETOOTH/Protocol_Lib.h
0 → 100644
View file @
dedb811e
#ifndef PROTOCOL_LIB_H
#define PROTOCOL_LIB_H
/*
Platform_32Bit
Platform_16Bit
*/
#ifdef Platform_16Bit
#define Protocol_uint8_t unsigned char
#define Protocol_uint16_t unsigned int
#define Protocol_uint32_t unsigned long
#else
#define Protocol_uint8_t unsigned char
#define Protocol_uint16_t unsigned short
#define Protocol_uint32_t unsigned int
#define Protocol_uint64_t unsigned long long
#endif
#ifndef Protocol_NULL
#define Protocol_NULL ( void * )0u
#endif
/* NULL */
/**<0xEB 0x90 长度 帧序号 命令字 DATA0-DATAN CRC16_1 CRC16_2*/
#define DATA_PACKAGE_MIN_LEN 7
/**< 0xEB 0x90 + 长度 + 数据包序号 + CMDID + CRC16_1 + CRC16_2 */
#define DATA_PACKAGE_FIXED_LEN 3
/**< 未计算在长度内的数据 0xEB 0x90 + 长度位 */
#define CMD_HEAD1 0xEB
#define CMD_HEAD2 0x90
/**@struct Protocol_Data_t
* @brief 解析后的协议数据
*/
typedef
struct
{
Protocol_uint8_t
FrameNo
;
/**< 帧序号 */
Protocol_uint8_t
PowerSts
;
/**< 电源状态 */
Protocol_uint8_t
CmdID
;
/**< 命令字 */
Protocol_uint8_t
DataLen
;
/**< 有效数据长度 DATA0-DATAN*/
Protocol_uint8_t
Data
[
256
];
/**< 有效数据内容 DATA0-DATAN*/
}
Protocol_Data_t
;
typedef
Protocol_uint8_t
(
*
UARTOpen
)(
void
);
typedef
Protocol_uint32_t
(
*
UARTSend
)(
const
Protocol_uint8_t
*
pData
,
Protocol_uint32_t
u32Len
);
typedef
Protocol_uint32_t
(
*
UARTRead
)(
Protocol_uint8_t
*
pData
,
Protocol_uint32_t
u32Len
);
typedef
void
(
*
ProtocolSetData
)(
const
Protocol_Data_t
*
pData
);
typedef
void
(
*
ProcParse
)(
const
Protocol_uint8_t
*
pData
,
Protocol_uint32_t
u32Len
);
typedef
void
(
*
UARTClose
)(
void
);
/**@struct Protocol_Func_t
* @brief 协议解析回调函数
*/
typedef
struct
{
UARTOpen
UARTOpen_Cbk
;
/**< 串口打开回调 */
UARTSend
UARTSend_Cbk
;
/**< 串口发送回调 */
UARTRead
UARTRead_Cbk
;
/**< 串口读取回调 */
UARTClose
UARTClose_Cbk
;
/**< 串口关闭回调 */
ProcParse
ProcParseCbk
;
/**< 解析后的数据, 处理了数据包序号,命令字和电源状态,和ProcParse二选一 */
ProtocolSetData
ProtocolSetData_Cbk
;
/**< 不包含 0xEB 0x90 + 长度 + CRC16_1 + CRC16_2,和ProtocolSetData二选一 */
}
Protocol_Func_t
;
void
Protocol_Init
(
Protocol_uint8_t
*
pMemSpace
,
Protocol_uint32_t
MemLen
,
Protocol_Func_t
*
pFunc
);
void
Protocol_Service
(
void
);
Protocol_uint32_t
Protocol_Parse
(
const
Protocol_uint8_t
*
pData
,
Protocol_uint32_t
len
);
Protocol_uint32_t
Protocol_Send
(
const
Protocol_uint16_t
cmdID
,
const
Protocol_uint8_t
*
pData
,
Protocol_uint8_t
len
);
#endif
Firmware/Source/Application/BLUETOOTH/Protocol_User.c
0 → 100644
View file @
dedb811e
#include "Protocol_User.h"
#include "RTE.h"
#define UART_TX_MAX_DEPTH 1024UL //(2 * 1024UL) // 4K
#define UART_RX_MAX_DEPTH (2 * 1024UL) // 4K
#define UART_DATA_BUF_LEN (2 * 1024UL) // 4K
typedef
struct
{
Protocol_uint32_t
read_pos
;
Protocol_uint32_t
write_pos
;
Protocol_uint8_t
Rx_Buffer
[
UART_RX_MAX_DEPTH
];
}
UARTRxBuf_t
;
typedef
struct
{
Protocol_uint32_t
read_pos
;
Protocol_uint32_t
write_pos
;
Protocol_uint8_t
Tx_Buffer
[
UART_TX_MAX_DEPTH
];
}
UARTTxBuf_t
;
static
UARTRxBuf_t
UARTRxBuf
;
static
UARTTxBuf_t
UARTTxBuf
;
static
Protocol_uint8_t
UsartDataBuf
[
256
];
static
Protocol_uint8_t
mDataBufPtr
[
UART_DATA_BUF_LEN
];
static
Protocol_uint8_t
Protocol_OpenUart
(
void
);
static
Protocol_uint32_t
Protocol_UartRead
(
Protocol_uint8_t
*
pData
,
Protocol_uint32_t
u32Len
);
static
Protocol_uint32_t
Protocol_UartSend
(
const
Protocol_uint8_t
*
pData
,
Protocol_uint32_t
u32Len
);
static
void
Protocol_UartHandle
(
const
Protocol_Data_t
*
pData
);
void
Protocol_KL30_Wakeup_Init
(
void
)
{
Protocol_Func_t
pFunc
;
pFunc
.
UARTOpen_Cbk
=
Protocol_OpenUart
;
pFunc
.
UARTSend_Cbk
=
Protocol_UartSend
;
pFunc
.
UARTRead_Cbk
=
Protocol_UartRead
;
pFunc
.
UARTClose_Cbk
=
Protocol_NULL
;
pFunc
.
ProcParseCbk
=
Protocol_NULL
;
pFunc
.
ProtocolSetData_Cbk
=
Protocol_UartHandle
;
UARTTxBuf
.
read_pos
=
0
;
UARTTxBuf
.
write_pos
=
0
;
UARTRxBuf
.
read_pos
=
0
;
UARTRxBuf
.
write_pos
=
0
;
Protocol_Init
(
mDataBufPtr
,
UART_DATA_BUF_LEN
,
&
pFunc
);
}
void
Protocol_Send_Service
(
void
)
{
Protocol_uint32_t
i
=
0u
;
Protocol_uint32_t
DataLen
=
0u
;
Protocol_uint32_t
SendLen
=
0u
;
//if ( UART_Ch1_Get_TX_Busy_Flag( ) == 0u )
{
if
(
UARTTxBuf
.
write_pos
==
UARTTxBuf
.
read_pos
)
{
return
;
}
if
(
UARTTxBuf
.
write_pos
>
UARTTxBuf
.
read_pos
)
{
DataLen
=
UARTTxBuf
.
write_pos
-
UARTTxBuf
.
read_pos
;
}
else
{
DataLen
=
UART_TX_MAX_DEPTH
-
(
UARTTxBuf
.
read_pos
-
UARTTxBuf
.
write_pos
);
}
if
(
DataLen
>
255
)
{
SendLen
=
255
;
}
else
{
SendLen
=
DataLen
;
}
for
(
i
=
0u
;
i
<
SendLen
;
i
++
)
{
UsartDataBuf
[
i
]
=
UARTTxBuf
.
Tx_Buffer
[
UARTTxBuf
.
read_pos
];
UARTTxBuf
.
read_pos
=
(
UARTTxBuf
.
read_pos
+
1
)
%
UART_TX_MAX_DEPTH
;
}
Uart0_IntSend
(
UsartDataBuf
,
SendLen
);
//UART_Ch1_Send_Multiple_Byte(UsartDataBuf, SendLen);
}
}
static
Protocol_uint8_t
Protocol_OpenUart
(
void
)
{
#if 0
UART_Channel_Config_st_t loc_config;
loc_config.u32UARTChEn = 1;
loc_config.u32UARTbps = 115200;
loc_config.pfnUARTConfirmCallBack = Protocol_NULL;
loc_config.pfnUARTReadMsgCallBack = UART_Put;
UART_Init(UART_RLIN31, &loc_config);
#endif
return
1
;
}
static
Protocol_uint32_t
Protocol_UartRead
(
Protocol_uint8_t
*
pData
,
Protocol_uint32_t
len
)
{
Protocol_uint32_t
i
=
0
;
Protocol_uint32_t
DataLen
=
0u
;
Protocol_uint32_t
ReadLen
=
0u
;
if
(
UARTRxBuf
.
write_pos
==
UARTRxBuf
.
read_pos
)
{
return
0
;
//队列空
}
if
(
UARTRxBuf
.
write_pos
>
UARTRxBuf
.
read_pos
)
{
DataLen
=
UARTRxBuf
.
write_pos
-
UARTRxBuf
.
read_pos
;
}
else
{
DataLen
=
UART_RX_MAX_DEPTH
-
(
UARTRxBuf
.
read_pos
-
UARTRxBuf
.
write_pos
);
}
if
(
len
>
DataLen
)
{
ReadLen
=
DataLen
;
}
else
{
ReadLen
=
len
;
}
for
(
i
=
0u
;
i
<
ReadLen
;
i
++
)
{
pData
[
i
]
=
UARTRxBuf
.
Rx_Buffer
[
UARTRxBuf
.
read_pos
];
UARTRxBuf
.
read_pos
=
(
UARTRxBuf
.
read_pos
+
1
)
%
UART_RX_MAX_DEPTH
;
}
return
ReadLen
;
}
static
Protocol_uint32_t
Protocol_UartSend
(
const
Protocol_uint8_t
*
pData
,
Protocol_uint32_t
u32Len
)
{
Protocol_uint32_t
i
=
0
;
Protocol_uint32_t
RemainLen
=
0u
;
if
(
UARTTxBuf
.
write_pos
>=
UARTTxBuf
.
read_pos
)
{
RemainLen
=
UART_TX_MAX_DEPTH
-
(
UARTTxBuf
.
write_pos
-
UARTTxBuf
.
read_pos
);
}
else
{
RemainLen
=
UARTTxBuf
.
read_pos
-
UARTTxBuf
.
write_pos
;
}
if
(
u32Len
>
RemainLen
)
{
return
1
;
//队列已满,无法插入队列
}
for
(
i
=
0
;
i
<
u32Len
;
i
++
)
{
UARTTxBuf
.
Tx_Buffer
[
UARTTxBuf
.
write_pos
]
=
pData
[
i
];
UARTTxBuf
.
write_pos
=
(
UARTTxBuf
.
write_pos
+
1
)
%
UART_TX_MAX_DEPTH
;
}
return
0
;
}
static
void
Protocol_UartHandle
(
const
Protocol_Data_t
*
pData
)
{
if
(
pData
->
CmdID
==
ESP32_MCU_0x10
)
{
BlueTooth
.
BlueTooth_St
=
pData
->
Data
[
0
];
if
(
BlueTooth
.
BlueTooth_St
==
BLUE_STATE_ON
)
{
Protocol_Send
(
MCU_ESP32_0x20
,
Protocol_NULL
,
0
);
}
}
else
if
(
pData
->
CmdID
==
ESP32_MCU_0x12
)
{
BlueTooth
.
BLE_St
=
pData
->
Data
[
0
];
}
else
if
(
pData
->
CmdID
==
ESP32_MCU_0x01
)
{
if
(
pData
->
Data
[
0
]
==
0x33
)
{
BlueTooth
.
Navigation_St
=
EM_ESP32_NAVI_ST_NAVIGATING
;
}
else
if
(
pData
->
Data
[
0
]
==
0x35
)
{
BlueTooth
.
Navigation_St
=
EM_ESP32_NAVI_ST_STANDBY
;
}
else
{
;
}
BlueTooth
.
Navigation_Code
=
pData
->
Data
[
1
];
BlueTooth
.
Navigation_Mileage
=
((
pData
->
Data
[
5
]
<<
24
)
|
(
pData
->
Data
[
4
]
<<
16
)
|
(
pData
->
Data
[
3
]
<<
8
)
|
pData
->
Data
[
2
]);
}
else
{
//非本协议数据,不处理
}
}
void
UART_Put
(
Protocol_uint16_t
Data
)
{
Protocol_uint32_t
nextPos
=
0u
;
nextPos
=
(
UARTRxBuf
.
write_pos
+
1
)
%
UART_RX_MAX_DEPTH
;
if
(
nextPos
==
UARTRxBuf
.
read_pos
)
{
//队列已满,无法插入队列
}
else
{
UARTRxBuf
.
Rx_Buffer
[
UARTRxBuf
.
write_pos
]
=
Data
;
UARTRxBuf
.
write_pos
=
(
UARTRxBuf
.
write_pos
+
1
)
%
UART_RX_MAX_DEPTH
;
}
return
;
}
Firmware/Source/Application/BLUETOOTH/Protocol_User.h
0 → 100644
View file @
dedb811e
#ifndef PROTOCOL_USER_H
#define PROTOCOL_USER_H
//#include "Application.h"
#include "Protocol_Lib.h"
#include <stdio.h>
#include <stdint.h>
void
Protocol_KL30_Wakeup_Init
(
void
);
void
Protocol_Send_Service
(
void
);
// 10ms任务调用
void
UART_Put
(
Protocol_uint16_t
Data
);
#endif
Firmware/Source/Application/GUI_Display/GUI_Display.c
View file @
dedb811e
...
...
@@ -129,6 +129,7 @@ void Gauge_Service(void)
SEG_SET_CoolantDial
(
1
,
GET_DataCoolantTempSegDisp
(),
GET_DataCoolantTempValueDisp
(),
GET_DataCollantTempSegValid
());
SEG_SET_Voltage_NUM
(
1
,
Get_Battery_Voltage
());
SEG_SET_TPMS_NUM
(
1
,
Get_Front_TPMS_Sig_Value
(),
Get_Rear_TPMS_Sig_Value
(),
Get_Dis_Tpms_Unit
(),
Get_Front_TPMS_Sig_Vaild
(),
Get_Rear_TPMS_Sig_Vaild
());
SEG_SET_Navigation_STS
(
Get_Navigation_St_Dis
(),
Get_Navigation_Code_Dis
(),
Get_Navigation_Mileage_Dis
());
}
else
{
...
...
Firmware/Source/Application/SEG_DISPLAY/SEG_DISPLAY.c
View file @
dedb811e
This diff is collapsed.
Click to expand it.
Firmware/Source/Application/SEG_DISPLAY/SEG_DISPLAY.h
View file @
dedb811e
...
...
@@ -28,6 +28,16 @@ typedef enum
SEG_LED_MAX
,
}
SEG_LED_Idx_t
;
#define NaviIconType_LEFT 0x02
#define NaviIconType_RIGHT 0x03
#define NaviIconType_LEFT_FRONT 0x04
#define NaviIconType_RIGHT_FRONT 0x05
#define NaviIconType_LEFT_BACK 0x06
#define NaviIconType_RIGHT_BACK 0x07
#define NaviIconType_STRAIGHT 0x08
#define NaviIconType_ARRIVED_SERVICE_AREA 0x0D
#define NaviIconType_ARRIVED_TOLLGATE 0x0E
#define NaviIconType_ARRIVED_TUNNEL 0x10
...
...
@@ -41,7 +51,7 @@ void SEG_SET_Voltage_NUM(uint8_t m_Flag, uint16_t m_NUM);
void
SEG_SET_TPMS_NUM
(
uint8_t
m_Flag
,
uint16_t
m_NUM1
,
uint16_t
m_NUM2
,
uint8_t
m_Unit
,
uint8_t
m_valid1
,
uint8_t
m_valid2
);
void
SEG_SET_ODO_TRIP_FAULTCODE_TCS_DIS
(
uint8_t
m_Uint
,
uint32_t
m_NUM_ODO
,
uint32_t
m_NUM_TRIP
);
void
SEG_SET_Clock
(
uint8_t
m_hour
,
uint8_t
m_minute
,
uint8_t
m_icon
,
uint8_t
m_Flag1
,
uint8_t
m_Flag2
);
void
SEG_SET_Navigation_STS
(
uint8_t
m_Flag
,
uint8_t
m_Code
,
uint32_t
m_Mileage
);
void
Check_SEG_Display
(
void
);
extern
uint8_t
check_SEG_step
;
...
...
Firmware/Source/Component/PowerManagement/PowerManag_user.c
View file @
dedb811e
...
...
@@ -52,8 +52,8 @@ static void Power_KL30_Init(void)
DFlash_init
();
Analog_Signal_Conv_Init
();
BU98R10_Init
();
//
Uart0_Init(115200);
Uart0_Init
(
115200
);
Protocol_KL30_Wakeup_Init
();
Sys_KL30_Init
();
Checkself_Init
();
Data_Vehicle_Speed_KL30_Init
();
...
...
@@ -111,6 +111,7 @@ static void Power_Wakeup_Init(void)
MenuData_TCS_Init
();
//Light_Sensor_Init_Example();//注意顺序1
LED_Driver_Init_Example
();
//注意顺序2
Protocol_KL30_Wakeup_Init
();
Fuel_KL30_Init
();
Data_Voltage_Init
();
TimerM_PWM_counter_Output_Init
(
TIMERM_COUNTER0
,
400
,
64000000
);
...
...
Firmware/Source/Device/Cmsemicon/BAT32A239/RTE/RTE.h
View file @
dedb811e
...
...
@@ -12,7 +12,7 @@
#include "DeepSleep\DeepSleep.h"
#include "CLOCK_Select\RTE_CLOCK_Select.h"
#include "UART\UART_DEMO.h"
...
...
Firmware/Source/Device/Cmsemicon/BAT32A239/RTE/UART/UART_DEMO.c
View file @
dedb811e
...
...
@@ -159,7 +159,7 @@ void uart0_interrupt_receive(void)
uart_callback_error
(
err_type
);
}
//
UART_Put((uint8_t)UART0_RX);
UART_Put
((
uint8_t
)
UART0_RX
);
...
...
Firmware/Source/Device/Cmsemicon/BAT32A239/RTE/UART/UART_DEMO.h
View file @
dedb811e
...
...
@@ -6,6 +6,7 @@
#include "uart.h"
#include "gpio.h"
#include "isr.h"
#include "Application.h"
#define UART_MAX_RECV_LEN 256
extern
unsigned
char
UART0_RX_BUF
[
UART_MAX_RECV_LEN
];
...
...
Firmware/Source/System/Sys_Task_List.c
View file @
dedb811e
...
...
@@ -48,6 +48,7 @@ void Sys_10ms_Tasks(void)
Fuel_R_Cal
(
10u
);
TYW_Check_Count
();
Data_TPMS_Processing_Service
();
Protocol_Send_Service
();
}
void
Sys_20ms_Tasks
(
void
)
...
...
@@ -57,6 +58,7 @@ void Sys_20ms_Tasks(void)
Data_Vehicle_Speed_Processing_Service
();
Data_Engine_Speed_Processing_Service
();
Data_Coolant_Temp_Processing_Service
();
Protocol_Service
();
}
...
...
@@ -70,6 +72,7 @@ void Sys_50ms_Tasks(void)
}
uint8_t
u8LEDDriverCheckCount
=
0U
;
uint16_t
ljs_voltage
=
0
;
void
Sys_100ms_Tasks
(
void
)
{
if
((
PageType
!=
Page_Time_Hour
)
&&
(
PageType
!=
Page_Time_Minute
))
...
...
@@ -84,7 +87,8 @@ void Sys_100ms_Tasks(void)
Data_Voltage_Processing_Service
();
S3_ServerCNTT
();
//ECU_FaultCode_Processing_Service();
Send_UUID_To_Esp32
();
ljs_voltage
=
ADC_Conv_Single_Channel
(
ADC_CH_KL15_VOLTAGE
);
if
(
u8LEDDriverCheckCount
>=
10U
)
{
u8LEDDriverCheckCount
=
0U
;
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment