JZsdk_Hal.h
4.4 KB
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
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
/**
********************************************************************
* @file JZsdk_Hal.h
* JZsdk_Hal.c 的头文件
* @version V0.1.0
* @date
* @brief This is the JZsdk_Hal.h file
*
* @attention
*
*
*********************************************************************
/* Define to prevent recursive inclusion 避免重定义 -------------------------------------*/
#ifndef JZSDK_HAL_H
#define JZSDK_HAL_H
/* Includes ------------------------------------------------------------------*/
#ifdef __cplusplus
extern "C" {
#endif
/* Exported constants --------------------------------------------------------*/
/* 常亮定义*/
#define JZ_MAX_SUB_ID_NUM 10
#define JZ_MAX_PORT_NUM 64
#define JZ_MAX_UART_NUM 8
#define JZ_MAX_USB_NUM 4
#define JZ_MAX_NET_NUM 4
#define JZ_MAX_DIRECT_NUM 1
typedef enum E_HAL_PORT_TYPE
{
PORT_TYPE_PSDK = 0,
PORT_TYPE_UART = 1,
PORT_TYPE_USB = 2,
PORT_TYPE_NET = 3,
PORT_TYPE_TRANS_DATA = 4,
}E_HAL_PORT_TYPE;
typedef enum E_HAL_CONNECT_TYPE
{
PORT_CONNECT_TYPE_AS_SUB = 0, //作为副设备
PORT_CONNECT_TYPE_AS_MAIN = 1, //作为主设备
}E_HAL_CONNECT_TYPE;
/******************
*
* 端口使用状态
*
* ********/
typedef struct T_JZsdk_HalStatus
{
int PortType; // hal的端口类型
int ConnectType; // 主副设备类型
// 作为主设备专有
int SubId[JZ_MAX_SUB_ID_NUM]; // 副设备ID
int SubNum; // 副设备数量
// 作为副设备专有
int HeartBeatStatusSend; // 对主设备发送心跳帧的发送开关
int ConnectStatus; // 连接状态,接收过连接帧后打开
}T_JZsdk_HalStatus;
typedef struct {
T_JZsdk_HalStatus HalStatus;
int PortId;
}T_JZsdk_PortBase;
typedef struct T_JZsdk_UartInfo
{
T_JZsdk_PortBase Base;
// 独有参数
char DevicePath[64]; // 设备路径
int Baudrate; // 波特率
int UartId; // uart编号
}T_JZsdk_UartInfo;
typedef struct T_JZsdk_UsbInfo
{
T_JZsdk_PortBase Base;
// 独有参数
char DevicePath[64]; // 设备路径
}T_JZsdk_UsbInfo;
typedef struct T_JZsdk_NetInfo
{
T_JZsdk_PortBase Base;
// 独有参数
char DevicePath[64]; // 设备路径
} T_JZsdk_NetInfo;
typedef struct T_JZsdk_DirectDataInfo
{
T_JZsdk_PortBase Base;
}T_JZsdk_DirectDataInfo;
typedef struct T_JZsdk_HalInfo
{
// uart信息
T_JZsdk_UartInfo UartInfo[JZ_MAX_UART_NUM];
int UartNum;
// usb信息
T_JZsdk_UsbInfo UsbInfo[JZ_MAX_USB_NUM];
int UsbNum;
// 网口信息
T_JZsdk_NetInfo NetInfo[JZ_MAX_NET_NUM];
int NetNum;
// 直通数据类型接口
T_JZsdk_DirectDataInfo DirectDataInfo[JZ_MAX_DIRECT_NUM];
int DirectNum;
int HaveUsePortId[JZ_MAX_PORT_NUM]; // 记录已经使用的端口ID
//T_JZsdk_PortBase* PortPtrs[JZ_MAX_PORT_NUM]; // 与 HaveUsePortId 一一对应,存储端口基类指针
//ps : 基类指针的方法如果后期效率不够了再该用,前期遍历可能更安全一点
int HaveUsePortNum; // 记录已经使用的端口数量
} T_JZsdk_HalInfo;
//前向声明
typedef struct T_JZsdkHalHandle T_JZsdkHalHandle;
typedef struct T_JZsdkHalHandle
{
void* lockCtx; // 锁上下文(指向具体的锁对象)
T_JZsdkReturnCode(*lock)(T_JZsdkHalHandle* handle);
T_JZsdkReturnCode(*unlock)(T_JZsdkHalHandle* handle);
int (*PortIsUsed)(int PortId);
T_JZsdkReturnCode(*GetHalInfo)(T_JZsdk_HalInfo* HalInfo);
}T_JZsdkHalHandle;
/* Exported types ------------------------------------------------------------*/
/* Exported functions --------------------------------------------------------*/
T_JZsdkReturnCode JZsdk_HalInit(void);
T_JZsdkReturnCode JZsdk_HalDeinit(void);
T_JZsdkHalHandle* JZsdk_Platform_GetHalHandle(void);
T_JZsdk_PortBase* JZsdk_FindPortBase(int PortId);
//后期优化进 handle
T_JZsdkReturnCode JZsdk_HalUartInit(T_JZsdk_UartInfo* pUartInfo);
T_JZsdkReturnCode JZsdk_HalUartReInit(int PortId, int NewBitRate);
T_JZsdkReturnCode JZsdk_HalDirectDataInit(T_JZsdk_DirectDataInfo* pDirectDataInfo);
int JZsdk_HalPort_UseFlag(int PortName);
#ifdef __cplusplus
}
#endif
#endif