JZsdk_Hal.h 4.4 KB
/**
 ********************************************************************
 * @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);


T_JZsdkReturnCode JZsdk_Hal_config_use_uart1(int num);

#ifdef __cplusplus
}
#endif

#endif