123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150 |
- /* Copyright (C) 2019 RDA Technologies Limited and/or its affiliates("RDA").
- * All rights reserved.
- *
- * This software is supplied "AS IS" without any warranties.
- * RDA assumes no responsibility or liability for the use of the software,
- * conveys no license or title under any patent, copyright, or mask work
- * right to the product. RDA reserves the right to make changes in the
- * software without notification. RDA also make no representation or
- * warranty that such application will be suitable for the specified use
- * without further testing or modification.
- */
- #ifndef _BOOT_PDL_H_
- #define _BOOT_PDL_H_
- #include "osi_compiler.h"
- #include "boot_fdl_channel.h"
- OSI_EXTERN_C_BEGIN
- /**
- * \brief opaque data struct for pdl engine
- *
- * PDL protocol is only used in 8910 ROM now. and 8910 bootloader
- * implements a minimal feature set to mimic ROM. It won't be used later,
- * and many irrelevent features are ignored.
- */
- typedef struct pdlEngine pdlEngine_t;
- /**
- * \brief pdl command header
- *
- * The is common to all commands. That is, the first word of command is
- * the command type.
- */
- typedef struct
- {
- uint32_t cmd_type; ///< command type
- uint32_t payload[0]; ///< command dependent data
- } pdlCommand_t;
- /**
- * \brief pdl data command header
- */
- typedef struct
- {
- uint32_t cmd_type; ///< command type
- uint32_t address; ///< data address
- uint32_t size; ///< size, different meaning on varioud command types
- uint32_t data[0]; ///< command dependent data
- } pdlDataCommand_t;
- typedef enum
- {
- PDL_CMD_CONNECT = 0,
- PDL_CMD_START_DATA = 4,
- PDL_CMD_MID_DATA,
- PDL_CMD_END_DATA,
- PDL_CMD_EXEC_DATA,
- } pdlCommandType_t;
- typedef enum
- {
- PDL_RESP_ACK = 0,
- PDL_RESP_PACKET_ERROR,
- PDL_RESP_INVALID_CMD,
- PDL_RESP_UNKNOWN_CMD,
- PDL_RESP_INVALID_ADDR,
- PDL_RESP_INVALID_BAUDRATE,
- PDL_RESP_INVALID_PARTITION,
- PDL_RESP_INVALID_SIZE,
- PDL_RESP_WAIT_TIMEOUT,
- PDL_RESP_VERIFY_ERROR,
- PDL_RESP_CHECKSUM_ERROR,
- PDL_RESP_OPERATION_FAILED,
- PDL_RESP_DEVICE_ERROR,
- } pdlRespType_t;
- /**
- * \brief pdl command process callback
- *
- * \param pdl the pdl engine
- * \param param callback context
- * \param cmd pdl command
- * \param size total size of command, including command header
- */
- typedef void (*pdlCmdProcess_t)(pdlEngine_t *pdl, void *param, pdlCommand_t *cmd, unsigned size);
- /**
- * \brief pdl polling callback
- *
- * \param pdl the pdl engine
- * \param param callback context
- * \return true for continnue, false for quit
- */
- typedef bool (*pdlPolling_t)(pdlEngine_t *pdl, void *param);
- /**
- * \brief create pdl engine
- *
- * \param ch uart or usb channel
- * \param max_len maximum payload len
- * \return
- * - the create pdl engine
- * - NULL on failed, out of memory
- */
- pdlEngine_t *pdlEngineCreate(fdlChannel_t *ch, unsigned max_len);
- /**
- * \brief delete the pdl engine
- *
- * \param d pdl engine
- */
- void pdlEngineDelete(pdlEngine_t *d);
- /**
- * \brief start pdl engine loop
- *
- * \param d pdl engine
- * \param proc command process callback
- * \param polling polling callback
- * \param param callback context
- * \return false on failed, never return true
- */
- bool pdlEngineLoop(pdlEngine_t *d, pdlCmdProcess_t proc, pdlPolling_t polling, void *param);
- /**
- * \brief send response without data
- *
- * \param d pdl engine
- * \param resp response code
- */
- void pdlEngineSendResp(pdlEngine_t *d, pdlRespType_t resp);
- /**
- * \brief download uimage with pdl protocol
- *
- * \param ch uart or usb channel
- * \param callparam parameter at jump to uimage
- * \param start starting address of reserved region
- * \param size size of reserved region
- * \param timeout timeout for connection, 0 for wait forever
- * \return
- * - true for timeout
- * - false on error
- */
- bool pdlDnldUimage(fdlChannel_t *ch, unsigned callparam, unsigned start, unsigned size, unsigned timeout);
- OSI_EXTERN_C_END
- #endif
|