⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 probe_com.c

📁 lpc2478+ucosII+ucgui源码
💻 C
📖 第 1 页 / 共 5 页
字号:
/*
*********************************************************************************************************
*                                       uC/Probe Communication
*
*                         (c) Copyright 2007-2008; Micrium, Inc.; Weston, FL
*
*               All rights reserved.  Protected by international copyright laws.
*               Knowledge of the source code may NOT be used to develop a similar product.
*               Please help us continue to provide the Embedded community with the finest
*               software available.  Your honesty is greatly appreciated.
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*
*                                       COMMUNICATION: GENERIC
*
* Filename      : probe_com.c
* Version       : V2.20
* Programmer(s) : BAN
*********************************************************************************************************
* Note(s)       : (1) This file contains code to respond to generic (non protocol-dependent) commands
*                     received by the target.
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                            INCLUDE FILES
*********************************************************************************************************
*/

#define   PROBE_COM_MODULE
#include  <probe_com.h>


/*
*********************************************************************************************************
*                                            LOCAL DEFINES
*********************************************************************************************************
*/

/*
*********************************************************************************************************
*                                        DATA FORMATS DEFINES
*********************************************************************************************************
*/

#define  PROBE_COM_FMT_TX_ERR                         0x8000

#define  PROBE_COM_FMT_RX_QUERY                       0x0001    /* Query setup parameter or capability.                 */
#define  PROBE_COM_FMT_TX_QUERY                       0x8001

#define  PROBE_COM_FMT_RX_RD                          0x0002    /* Read data at memory address.                         */
#define  PROBE_COM_FMT_TX_RD                          0x8002

#define  PROBE_COM_FMT_RX_WR                          0x0003    /* Write data at memory address.                        */
#define  PROBE_COM_FMT_TX_WR                          0x8003

#define  PROBE_COM_FMT_RX_RD_MULTI                    0x0007    /* Read data at multiple memory addresses.              */
#define  PROBE_COM_FMT_TX_RD_MULTI                    0x8007
#define  PROBE_COM_FMT_TX_RD_MULTI_LO                   0x07
#define  PROBE_COM_FMT_TX_RD_MULTI_HI                   0x80

#define  PROBE_COM_FMT_RX_WR_MULTI                    0x0008    /* Write data at multiple memory addresses.             */
#define  PROBE_COM_FMT_TX_WR_MULTI                    0x8008

#define  PROBE_COM_FMT_RX_STR_OUT                     0x0009    /* Transmit output string to Probe.                     */
#define  PROBE_COM_FMT_TX_STR_OUT                     0x8009

#define  PROBE_COM_FMT_RX_STR_IN                      0x000A    /* Receive input string from Probe.                     */
#define  PROBE_COM_FMT_TX_STR_IN                      0x800A

#define  PROBE_COM_FMT_RX_TERMINAL_EXEC               0x000B    /* Execute terminal command.                            */
#define  PROBE_COM_FMT_TX_TERMINAL_EXEC               0x800B

#define  PROBE_COM_FMT_RX_TERMINAL_OUT                0x000C    /* Transmit output data to Probe.                       */
#define  PROBE_COM_FMT_TX_TERMINAL_OUT                0x800C

#define  PROBE_COM_FMT_RX_TERMINAL_IN                 0x000D    /* Receive input data from Probe.                       */
#define  PROBE_COM_FMT_TX_TERMINAL_IN                 0x800D

/*
*********************************************************************************************************
*                                      STATUS CONSTANTS DEFINES
*********************************************************************************************************
*/

#define  PROBE_COM_STATUS_OK                            0x01
#define  PROBE_COM_STATUS_TERMINAL_EXEC_NOT_RDY         0xF4    /* Terminal not rdy to exec new cmd.                    */
#define  PROBE_COM_STATUS_TERMINAL_IN_OVF               0xF5    /* Terminal in buf ovf'd.                               */
#define  PROBE_COM_STATUS_TERMINAL_OUT_NONE             0xF6    /* Terminal out buf empty.                              */
#define  PROBE_COM_STATUS_STR_IN_OVF                    0xF7    /* String in buf ovf'd.                                 */
#define  PROBE_COM_STATUS_STR_OUT_NONE                  0xF8    /* String out buf empty.                                */
#define  PROBE_COM_STATUS_UNKNOWN_REQUEST               0xF9    /* Unknown req.                                         */
#define  PROBE_COM_STATUS_QUERY_NOT_SUPPORTED           0xFC    /* Query not supported.                                 */
#define  PROBE_COM_STATUS_TX_PKT_TOO_LARGE              0xFD    /* Reply pkt too large for buf.                         */
#define  PROBE_COM_STATUS_RX_PKT_WRONG_SIZE             0xFE    /* Req pkt not correct size.                            */
#define  PROBE_COM_STATUS_FAIL                          0xFF    /* Req exec failed (or unknown err).                    */

/*
*********************************************************************************************************
*                                           QUERIES DEFINES
*********************************************************************************************************
*/

                                                                /* ------------------- CONFIGURATION ------------------ */
#define  PROBE_COM_QUERY_MAX_RX_SIZE                  0x0101    /* Get data size of largest pkt target can rx.          */
#define  PROBE_COM_QUERY_MAX_TX_SIZE                  0x0102    /* Get data size of largest pkt target can tx.          */

                                                                /* ----------------- TARGET PROPERTIES ---------------- */
#define  PROBE_COM_QUERY_ENDIANNESS_TEST              0x0201    /* Test endianness of target.                           */
#define  PROBE_COM_QUERY_STATUS                       0x0202    /* Target status.                                       */

                                                                /* ------------- COMMUNICATION CAPABILITIES ----------- */
#define  PROBE_COM_QUERY_FMT_SUPPORT                  0x1001    /* Get list of supported req's.                         */
#define  PROBE_COM_QUERY_VERSION                      0x1002    /* Get target code ver.                                 */

/*
*********************************************************************************************************
*                                          MODIFIERS DEFINES
*********************************************************************************************************
*/

#define  PROBE_COM_MODIFIER_NONE                  DEF_BIT_NONE
#define  PROBE_COM_MODIFIER_STR_OUT_AVAIL         DEF_BIT_00    /* Str out is avail.                                    */
#define  PROBE_COM_MODIFIER_TERMINAL_EXEC_DONE    DEF_BIT_01    /* Terminal cmd exec done.                              */
#define  PROBE_COM_MODIFIER_TERMINAL_OUT_AVAIL    DEF_BIT_02    /* Terminal out is avail.                               */

/*
*********************************************************************************************************
*                                        HEADER SIZES DEFINES
*
* Note(s):  (1) The first four bytes in all tx data segments is identical:
*
*               (a) A 2-byte format;
*               (b) A 1-byte status;
*               (c) A 1-byte modifier, currently unused.
*
*           (2) The first two bytes in all rx data segments is identical:
*
*               (a) A 2-byte format.
*********************************************************************************************************
*/

#define  PROBE_COM_SIZE_RX_HDR                             2
#define  PROBE_COM_SIZE_TX_HDR                             4

/*
*********************************************************************************************************
*                                           LOCAL CONSTANTS
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                          LOCAL DATA TYPES
*********************************************************************************************************
*/

typedef  struct  probe_com_buf {
    CPU_SIZE_T   Len;
    CPU_SIZE_T   IxRd;
    CPU_SIZE_T   IxWr;
    CPU_INT08U  *DataPtr;
} PROBE_COM_BUF;


/*
*********************************************************************************************************
*                                            LOCAL TABLES
*********************************************************************************************************
*/


/*
*********************************************************************************************************
*                                       LOCAL GLOBAL VARIABLES
*********************************************************************************************************
*/

#if (PROBE_COM_CFG_STR_REQ_EN       == DEF_ENABLED)
static  CPU_CHAR                       ProbeCom_StrInBufData[PROBE_COM_CFG_STR_IN_BUF_SIZE];
static  PROBE_COM_BUF                  ProbeCom_StrInBuf;

static  CPU_CHAR                       ProbeCom_StrOutBufData[PROBE_COM_CFG_STR_OUT_BUF_SIZE];
static  PROBE_COM_BUF                  ProbeCom_StrOutBuf;
#endif

#if (PROBE_COM_CFG_TERMINAL_REQ_EN  == DEF_ENABLED)
static  PROBE_COM_TERMINAL_EXEC_FNCT   ProbeCom_TerminalExecHandler;
static  CPU_BOOLEAN                    ProbeCom_TerminalExecuting;

static  PROBE_COM_TERMINAL_IN_FNCT     ProbeCom_TerminalInHandler;

static  CPU_INT08U                    *ProbeCom_TerminalOutBufPtr;
static  CPU_SIZE_T                     ProbeCom_TerminalOutBufIx;
static  CPU_SIZE_T                     ProbeCom_TerminalOutBufLen;
#endif

static  CPU_INT32U                     ProbeCom_EndiannessTest;


/*
*********************************************************************************************************
*                                      LOCAL FUNCTION PROTOTYPES
*********************************************************************************************************
*/

static  CPU_INT08U   ProbeCom_PktModifier     (void);

static  CPU_SIZE_T   ProbeCom_ReqErr          (CPU_INT08U      *ptx_buf,
                                               CPU_INT08U       pcomm_err);


                                                                /* ------------------- HANDLE REQ'S ------------------- */
static  CPU_SIZE_T   ProbeCom_ReqQuery        (CPU_INT08U      *prx_buf,
                                               CPU_INT08U      *ptx_buf,
                                               CPU_SIZE_T       rx_pkt_size,
                                               CPU_SIZE_T       tx_buf_size);

static  CPU_SIZE_T   ProbeCom_ReqRd           (CPU_INT08U      *prx_buf,
                                               CPU_INT08U      *ptx_buf,
                                               CPU_SIZE_T       rx_pkt_size,
                                               CPU_SIZE_T       tx_buf_size);

static  CPU_SIZE_T   ProbeCom_ReqRdMulti      (CPU_INT08U      *prx_buf,
                                               CPU_INT08U      *ptx_buf,
                                               CPU_SIZE_T       rx_pkt_size,
                                               CPU_SIZE_T       tx_buf_size);

#if (PROBE_COM_CFG_WR_REQ_EN == DEF_ENABLED)
static  CPU_SIZE_T   ProbeCom_ReqWr           (CPU_INT08U      *prx_buf,
                                               CPU_INT08U      *ptx_buf,
                                               CPU_SIZE_T       rx_pkt_size,
                                               CPU_SIZE_T       tx_buf_size);

static  CPU_SIZE_T   ProbeCom_ReqWrMulti      (CPU_INT08U      *prx_buf,
                                               CPU_INT08U      *ptx_buf,
                                               CPU_SIZE_T       rx_pkt_size,
                                               CPU_SIZE_T       tx_buf_size);
#endif

#if (PROBE_COM_CFG_STR_REQ_EN == DEF_ENABLED)
static  CPU_SIZE_T   ProbeCom_ReqStrIn        (CPU_INT08U      *prx_buf,
                                               CPU_INT08U      *ptx_buf,
                                               CPU_SIZE_T       rx_pkt_size,
                                               CPU_SIZE_T       tx_buf_size);

static  CPU_SIZE_T   ProbeCom_ReqStrOut       (CPU_INT08U      *prx_buf,
                                               CPU_INT08U      *ptx_buf,
                                               CPU_SIZE_T       rx_pkt_size,
                                               CPU_SIZE_T       tx_buf_size);
#endif

#if (PROBE_COM_CFG_TERMINAL_REQ_EN == DEF_ENABLED)
static  CPU_SIZE_T   ProbeCom_ReqTerminalExec (CPU_INT08U      *prx_buf,
                                               CPU_INT08U      *ptx_buf,
                                               CPU_SIZE_T       rx_pkt_size,
                                               CPU_SIZE_T       tx_buf_size);

static  CPU_SIZE_T   ProbeCom_ReqTerminalIn   (CPU_INT08U      *prx_buf,
                                               CPU_INT08U      *ptx_buf,
                                               CPU_SIZE_T       rx_pkt_size,
                                               CPU_SIZE_T       tx_buf_size);

static  CPU_SIZE_T   ProbeCom_ReqTerminalOut  (CPU_INT08U      *prx_buf,
                                               CPU_INT08U      *ptx_buf,
                                               CPU_SIZE_T       rx_pkt_size,
                                               CPU_SIZE_T       tx_buf_size);
#endif

                                                                /* ------------------- DYNAMIC BUFFER ----------------- */
#if (PROBE_COM_CFG_STR_REQ_EN == DEF_TRUE)
static  void         ProbeCom_BufInit         (PROBE_COM_BUF   *pbuf,
                                               CPU_INT08U      *pdata,
                                               CPU_SIZE_T       len);

static  CPU_SIZE_T   ProbeCom_BufRd           (PROBE_COM_BUF   *pbuf,
                                               CPU_INT08U      *pdest,
                                               CPU_SIZE_T       len)
;
static  CPU_SIZE_T   ProbeCom_BufWr           (PROBE_COM_BUF   *pbuf,
                                               CPU_INT08U      *psrc,
                                               CPU_SIZE_T       len);

static  CPU_BOOLEAN  ProbeCom_BufIsEmpty      (PROBE_COM_BUF   *pbuf);
#endif

#if 0
static  CPU_BOOLEAN  ProbeCom_BufIsFull       (PROBE_COM_BUF   *pbuf);
#endif

                                                                /* ------------------- STATIC BUFFER ------------------ */
static  CPU_INT08U   ProbeCom_GetINT08U       (CPU_INT08U     **pbuf);

static  CPU_INT16U   ProbeCom_GetINT16U       (CPU_INT08U     **pbuf);

static  CPU_INT32U   ProbeCom_GetINT32U       (CPU_INT08U     **pbuf);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -