平台移植

2023-06-02
暂无评分

跨平台相关功能的头文件为dji_platform.h,本文档描述了dji_platform.h 文件中结构体和函数原型的关键信息和使用方法。

目录

宏定义

  • uart操作的平台句柄。
typedef void *T_DjiUartHandle;
  • 使usb批量操作的平台句柄。
typedef void *T_DjiUsbBulkHandle;
  • 网络操作的平台句柄。
typedef void *T_DjiNetworkHandle;
  • 线程任务操作的平台句柄。
typedef void *T_DjiTaskHandle;
  • 互斥操作的平台句柄。
typedef void *T_DjiMutexHandle;
  • 信号量操作的平台句柄。
typedef void *T_DjiSemaHandle;
  • 文件操作的平台句柄。
typedef void *T_DjiFileHandle;
  • dir 操作的平台句柄。
typedef void *T_DjiDirHandle;
  • socket 操作的平台句柄。
typedef void *T_DjiSocketHandle;

枚举

typedef enum E_DjiHalUartNum

typedef enum {
    DJI_HAL_UART_NUM_0,
    DJI_HAL_UART_NUM_1,
} E_DjiHalUartNum;

typedef enum E_DjiSocketMode

typedef enum {
    DJI_SOCKET_MODE_UDP,
    DJI_SOCKET_MODE_TCP,
} E_DjiSocketMode;

结构体

typedef struct T_DjiUartStatus

typedef struct {
    bool isConnect;
} T_DjiUartStatus;

typedef struct T_DjiTime

typedef struct {
    uint16_t year;
    uint8_t month;
    uint8_t day;
    uint8_t hour;
    uint8_t minute;
    uint8_t second;
} T_DjiTime;

typedef struct T_DjiFileInfo

typedef struct {
    uint32_t size;
    T_DjiTime createTime;
    T_DjiTime modifyTime;
    char path[DJI_FILE_PATH_SIZE_MAX];
    bool isDir;
} T_DjiFileInfo;

typedef struct T_DjiHalUartHandler

typedef struct {
    T_DjiReturnCode (*UartInit)(E_DjiHalUartNum uartNum, uint32_t baudRate, T_DjiUartHandle *uartHandle);

    T_DjiReturnCode (*UartDeInit)(T_DjiUartHandle uartHandle);

    T_DjiReturnCode (*UartWriteData)(T_DjiUartHandle uartHandle, const uint8_t *buf, uint32_t len, uint32_t *realLen);

    T_DjiReturnCode (*UartReadData)(T_DjiUartHandle uartHandle, uint8_t *buf, uint32_t len, uint32_t *realLen);

    T_DjiReturnCode (*UartGetStatus)(E_DjiHalUartNum uartNum, T_DjiUartStatus *status);
} T_DjiHalUartHandler;

typedef struct T_DjiHalUsbBulkChannelInfo

typedef struct {
    uint16_t interfaceNum;
    uint16_t endPointIn;
    uint16_t endPointOut;
} T_DjiHalUsbBulkChannelInfo;

typedef struct T_DjiHalUsbBulkInfo

typedef struct {
    bool isUsbHost;
    // attention: if 'isUsbHost' equals false, the following parameters is not valid.
    uint16_t pid;
    uint16_t vid;
    T_DjiHalUsbBulkChannelInfo channelInfo;
} T_DjiHalUsbBulkInfo;

typedef struct T_DjiHalUsbBulkDeviceInfo

typedef struct {
    uint16_t pid;
    uint16_t vid;
    uint8_t bulkChannelNum;
    T_DjiHalUsbBulkChannelInfo *channelInfo;
} T_DjiHalUsbBulkDeviceInfo;

typedef struct T_DjiHalUsbBulkHandler

typedef struct {
    T_DjiReturnCode (*UsbBulkInit)(T_DjiHalUsbBulkInfo usbBulkInfo, T_DjiUsbBulkHandle *usbBulkHandle);

    T_DjiReturnCode (*UsbBulkDeInit)(T_DjiUsbBulkHandle usbBulkHandle);

    T_DjiReturnCode (*UsbBulkWriteData)(T_DjiUsbBulkHandle usbBulkHandle, const uint8_t *buf,
                                        uint32_t len, uint32_t *realLen);

    T_DjiReturnCode (*UsbBulkReadData)(T_DjiUsbBulkHandle usbBulkHandle, uint8_t *buf,
                                       uint32_t len, uint32_t *realLen);

    T_DjiReturnCode (*UsbBulkGetDeviceInfo)(T_DjiHalUsbBulkDeviceInfo *deviceInfo);
} T_DjiHalUsbBulkHandler;

typedef struct T_DjiHalNetworkHandler

typedef struct {
    T_DjiReturnCode (*NetworkInit)(const char *ipAddr, const char *netMask, T_DjiNetworkHandle *networkHandle);

    T_DjiReturnCode (*NetworkDeInit)(T_DjiNetworkHandle networkHandle);
} T_DjiHalNetworkHandler;

typedef struct T_DjiOsalHandler

typedef struct {
    T_DjiReturnCode (*TaskCreate)(const char *name, void *(*taskFunc)(void *),
                                  uint32_t stackSize, void *arg, T_DjiTaskHandle *task);

    T_DjiReturnCode (*TaskDestroy)(T_DjiTaskHandle task);

    T_DjiReturnCode (*TaskSleepMs)(uint32_t timeMs);

    T_DjiReturnCode (*MutexCreate)(T_DjiMutexHandle *mutex);

    T_DjiReturnCode (*MutexDestroy)(T_DjiMutexHandle mutex);

    T_DjiReturnCode (*MutexLock)(T_DjiMutexHandle mutex);

    T_DjiReturnCode (*MutexUnlock)(T_DjiMutexHandle mutex);

    T_DjiReturnCode (*SemaphoreCreate)(uint32_t initValue, T_DjiSemaHandle *semaphore);

    T_DjiReturnCode (*SemaphoreDestroy)(T_DjiSemaHandle semaphore);

    T_DjiReturnCode (*SemaphoreWait)(T_DjiSemaHandle semaphore);

    T_DjiReturnCode (*SemaphoreTimedWait)(T_DjiSemaHandle semaphore, uint32_t waitTimeMs);

    T_DjiReturnCode (*SemaphorePost)(T_DjiSemaHandle semaphore);

    T_DjiReturnCode (*GetTimeMs)(uint32_t *ms);

    T_DjiReturnCode (*GetTimeUs)(uint64_t *us);

    void *(*Malloc)(uint32_t size);

    void (*Free)(void *ptr);
} T_DjiOsalHandler;

typedef struct T_DjiFileSystemHandler

typedef struct {
    T_DjiReturnCode (*FileOpen)(const char *fileName, const char *fileMode, T_DjiFileHandle *fileObj);

    T_DjiReturnCode (*FileClose)(T_DjiFileHandle fileObj);

    T_DjiReturnCode (*FileWrite)(T_DjiFileHandle fileObj, const uint8_t *buf, uint32_t len, uint32_t *realLen);

    T_DjiReturnCode (*FileRead)(T_DjiFileHandle fileObj, uint8_t *buf, uint32_t len, uint32_t *realLen);

    T_DjiReturnCode (*FileSeek)(T_DjiFileHandle fileObj, uint32_t offset);

    T_DjiReturnCode (*FileSync)(T_DjiFileHandle fileObj);

    T_DjiReturnCode (*DirOpen)(const char *filePath, T_DjiDirHandle *dirObj);

    T_DjiReturnCode (*DirClose)(T_DjiDirHandle dirObj);

    T_DjiReturnCode (*DirRead)(T_DjiDirHandle dirObj, T_DjiFileInfo *fileInfo);

    T_DjiReturnCode (*Mkdir)(const char *filePath);

    T_DjiReturnCode (*Unlink)(const char *filePath);

    T_DjiReturnCode (*Rename)(const char *oldFilePath, const char *newFilePath);

    T_DjiReturnCode (*Stat)(const char *filePath, T_DjiFileInfo *fileInfo);
} T_DjiFileSystemHandler;

typedef struct T_DjiSocketHandler

typedef struct {
    T_DjiReturnCode (*Socket)(E_DjiSocketMode mode, T_DjiSocketHandle *socketHandle);

    T_DjiReturnCode (*Close)(T_DjiSocketHandle socketHandle);

    T_DjiReturnCode (*Bind)(T_DjiSocketHandle socketHandle, const char *ipAddr, uint32_t port);

    T_DjiReturnCode (*UdpSendData)(T_DjiSocketHandle socketHandle, const char *ipAddr, uint32_t port,
                                   const uint8_t *buf, uint32_t len, uint32_t *realLen);

    T_DjiReturnCode (*UdpRecvData)(T_DjiSocketHandle socketHandle, char *ipAddr, uint32_t *port,
                                   uint8_t *buf, uint32_t len, uint32_t *realLen);

    T_DjiReturnCode (*TcpListen)(T_DjiSocketHandle socketHandle);

    T_DjiReturnCode (*TcpAccept)(T_DjiSocketHandle socketHandle, char *ipAddr, uint32_t *port,
                                 T_DjiSocketHandle *outSocketHandle);

    T_DjiReturnCode (*TcpConnect)(T_DjiSocketHandle socketHandle, const char *ipAddr, uint32_t port);

    T_DjiReturnCode (*TcpSendData)(T_DjiSocketHandle socketHandle,
                                   const uint8_t *buf, uint32_t len, uint32_t *realLen);

    T_DjiReturnCode (*TcpRecvData)(T_DjiSocketHandle socketHandle,
                                   uint8_t *buf, uint32_t len, uint32_t *realLen);
} T_DjiSocketHandler;

函数原型

function DjiPlatform_RegHalUartHandler

功能:注册Hal 层接口函数 product:all

注册适配负载设备Hal 层接口的回调函数。

说明

  • 在注册Hal 层接口的回调函数前,请测试该函数能够正常写入Hal 层接口配置信息;
  • 请在使用负载设备的功能前先调用该接口,否则负载设备将无法正常运行。
T_PsdkReturnCode DjiPlatform_RegHalUartHandler(const T_DjiHalUartHandler *halUartHandler);
参数
halUartHandler:指向负载设备操作系统hal 层接口函数
返回值
根据程序执行的情况输出对应的返回值,详情请参见:DjiErrorCode

function DjiPlatform_RegHalUsbBulkHandler

功能:注册USB批量接口函数 product:all

通过您的平台注册 USB 批量接口的处理程序。

T_DjiReturnCode DjiPlatform_RegHalUsbBulkHandler(const T_DjiHalUsbBulkHandler *halUsbBulkHandler);
参数
halUsbBulkHandler:指向您的平台的 USB 批量接口的处理程序的指针。
返回值
根据程序执行的情况输出对应的返回值,详情请参见:DjiErrorCode

function DjiPlatform_RegHalNetworkHandler

功能:注册 hal 网络接口函数 product:all

通过您的平台注册 hal 网络接口的处理程序。

说明:

  • 需要注意 hal 接口已经完成测试,能够被正常写入,否则用户接口将不能成功注册。如果注册失败,需要关注返回码以定位问题。请确保在成功注册后,功能可以正常使用。
  • 本接口需要在提前调用以完成注册,否则负载设备将无法正常运行。
T_DjiReturnCode DjiPlatform_RegHalNetworkHandler(const T_DjiHalNetworkHandler *halNetworkHandler);
参数
halNetworkHandler:指向您的平台 hal 网络接口的处理程序
返回值
根据程序执行的情况输出对应的返回值,详情请参见:DjiErrorCode

function DjiPlatform_RegOsalHandler

功能:注册osal 接口函数 product:all
T_DjiReturnCode DjiPlatform_RegOsalHandler(const T_DjiOsalHandler *osalHandler);
参数
osalHandler:指向平台的 osal 接口处理程序的指针。
返回值
根据程序执行的情况输出对应的返回值,详情请参见:DjiErrorCode

function DjiPlatform_RegFileSystemHandler

功能:注册文件系统 接口函数 product:all
T_DjiReturnCode DjiPlatform_RegFileSystemHandler(const T_DjiFileSystemHandler *fileSystemHandler);
参数
fileSystemHandler:指向平台的文件系统接口处理程序的指针。
返回值
根据程序执行的情况输出对应的返回值,详情请参见:DjiErrorCode

function DjiPlatform_RegSocketHandler

功能:注册socket接口函数 product:all
T_DjiReturnCode DjiPlatform_RegSocketHandler(const T_DjiSocketHandler *socketHandler);
参数
socketHandler:指向平台的socket 接口处理程序的指针。
返回值
根据程序执行的情况输出对应的返回值,详情请参见:DjiErrorCode

function DjiPlatform_GetOsalHandler

功能:获取 osal 接口的处理程序 product:all
T_DjiOsalHandler *DjiPlatform_GetOsalHandler(void);


返回值
根据程序执行的情况输出对应的返回值,详情请参见:DjiErrorCode

function DjiPlatform_GetFileSystemHandler

功能:获取文件系统接口的处理程序 product:all
T_DjiFileSystemHandler *DjiPlatform_GetFileSystemHandler(void);


返回值
根据程序执行的情况输出对应的返回值,详情请参见:DjiErrorCode

function DjiPlatform_GetSocketHandler

功能:获取socket 接口的处理程序 product:all
T_DjiSocketHandler *DjiPlatform_GetSocketHandler(void);


返回值
根据程序执行的情况输出对应的返回值,详情请参见:DjiErrorCode

若您对文档有意见或疑惑,点击可快速反馈,我们会与您联系。