1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
/*******************************************************************************
 * File Name         : bluetooth.h
 * Description       : Bluetooth Communication Protocol (New V2)
 * Created on        : 2025-12-04
 * Author            : HIDO
 *******************************************************************************/
 
#ifndef FML_BLUETOOTH_H_
#define FML_BLUETOOTH_H_
 
/*******************************************************************************
 *                              Include Files                                  *
 *******************************************************************************/
#include "HIDO_TypeDef.h"
#include "stm32h7xx_hal.h"
 
/*******************************************************************************
 *                                  Macro                                      *
 *******************************************************************************/
#define BT_UART_RX_BUF_SIZE                    1024
#define UART6_DMA_RX_BUF_SIZE                  BT_UART_RX_BUF_SIZE
#define BT_UART_TX_BUF_SIZE                    1024
#define BT_UART_TX_QUEUE_MEMBER_CNT            16
 
// Protocol Constants
#define BT_FRAME_HEADER1                       0xAA
#define BT_FRAME_HEADER2                       0x55
#define BT_FRAME_TAIL                          0x0D
 
// Command Types
#define BT_CMD_PATH_COORDS                     0x01
#define BT_CMD_REF_POINT                       0x02
#define BT_CMD_CONTROL                         0x03
 
/*******************************************************************************
 *                             Type Definition                                 *
 *******************************************************************************/
 
#pragma pack(push, 1)
 
typedef struct
{
    HIDO_UINT8  m_u8Header1;
    HIDO_UINT8  m_u8Header2;
    HIDO_UINT8  m_u8CmdType;
    HIDO_UINT16 m_u16DataLen;
    HIDO_UINT16 m_u16SeqNum;
} ST_BT_FrameHeader;
 
typedef struct
{
    HIDO_DOUBLE m_dX;
    HIDO_DOUBLE m_dY;
} ST_BT_PathPoint;
 
typedef struct
{
    HIDO_DOUBLE m_dLat;
    HIDO_DOUBLE m_dLon;
    HIDO_CHAR   m_cLatDir;
    HIDO_CHAR   m_cLonDir;
    HIDO_UINT8  m_au8Reserved[14];
} ST_BT_RefPointData;
 
typedef struct
{
    HIDO_INT8   m_i8SteerSpeed;  // -100 to 100 (Negative Left)
    HIDO_INT8   m_i8TravelSpeed; // -100 to 100 (Negative Reverse)
    HIDO_UINT8  m_au8Reserved[2];
} ST_BT_ControlData;
 
#pragma pack(pop)
 
/*******************************************************************************
 *                             Global Function                                 *
 *******************************************************************************/
 
HIDO_VOID BT_Init(void);
HIDO_VOID BT_Poll(void);
HIDO_VOID UART6_StartReceive(void);
 
// Exposed for ISR
extern HIDO_UINT8 uart6_dma_rxbuf[BT_UART_RX_BUF_SIZE];
extern HIDO_UINT8 uart6_dma_recv_end_flag;
extern HIDO_UINT16 uart6_dma_recv_len;
extern volatile HIDO_UINT32 g_u32BtIdleIntCount;
 
#endif /* FML_BLUETOOTH_H_ */