平台移植
跨平台相关功能的头文件为dji_platform.h
,本文档描述了dji_platform.h
文件中结构体和函数原型的关键信息和使用方法。
目录
宏定义、枚举与结构体
E_DjiHalUartNum
E_DjiSocketMode
T_DjiUartStatus
T_DjiTime
T_DjiFileInfo
T_DjiHalUartHandler
T_DjiHalUsbBulkChannelInfo
T_DjiHalUsbBulkInfo
T_DjiHalUsbBulkDeviceInfo
T_DjiHalUsbBulkHandler
T_DjiHalNetworkHandler
T_DjiOsalHandler
T_DjiFileSystemHandler
T_DjiSocketHandler
DjiPlatform_RegHalUartHandler函数原型
DjiPlatform_RegHalUsbBulkHandler
DjiPlatform_RegHalNetworkHandler
DjiPlatform_RegOsalHandler
DjiPlatform_RegFileSystemHandler
DjiPlatform_RegSocketHandler
DjiPlatform_GetOsalHandler
DjiPlatform_GetFileSystemHandler
DjiPlatform_GetSocketHandler
宏定义
- 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