xmodem.hpp

来自「WinCE 3.0 BSP, 包含Inter SA1110, Intel_815」· HPP 代码 · 共 138 行

HPP
138
字号
/*++
Copyright (c) 1997  Microsoft Corporation

Module Name:

    xmodem.hxx

Abstract:

    This module contains definitions for xmodem transfer protocal class

Author:

    Jun Liu 2-Aug-1996

Revision History:

    John Cooper (johncoop) 97-Oct-24: Port to LC2 platform

--*/

#ifndef _XMODEM_HXX_
#define _XMODEM_HXX_

//#include "basetype.h"

#define MODEM_SOH   0x01
#define MODEM_STX   0x02
#define MODEM_EOT   0x04
#define MODEM_ACK   0x06
#define MODEM_NCK   0x15
#define MODEM_CAN   0x18
#define MODEM_C     0x43

#define XMODEM_MAX_ERROR    100


// Time constants (unit is 54.918 ms)
#define C_TIMEOUT     75*CLOCK_FACTOR // Time period of sending C out at startup
#define DATA_TIMEOUT  10*CLOCK_FACTOR // Time out of data/control char receiving
#define SOH_TIMEOUT   30*CLOCK_FACTOR // Time out of waiting for SOH


// X Modem error condition
enum XM_ERROR {

    No_Error,
    User_Abort,
    Block_Number_Timeout,
    Non_Sequential_Block_Number,
    Complement_Block_Number_Timeout,
    Block_Number_Unmatch,
    Data_Timeout,
    Checksum_High_Timeout,
    Checksum_Low_Timeout,
    Bad_Checksum,
    SOH_Timeout,
    EOT_received

};


/////////////////////////////////////////////////////////////////////
///+
class CXModem
///
/// CXModem transfer protocal service class
///
{
private:

    ADDRESS   target_buffer;
    ADDRESS   com_base;
    ADDRESS   blockPtr;
    UCHAR     blockCount;
    UINT      errCount;
    INT       crc_computed;
    UINT      blockSize;
    UINT      lastBlockSize;

    XM_ERROR  modemError;


    // Assert XModem errror
    void AssertXMError(XM_ERROR er)
    {
        modemError = er;
        errCount++;
    };

    // Reset XModem
    void ResetXModem()
    {
        blockPtr = target_buffer;
        blockCount = 1;
        modemError = No_Error;
    };

    // Clear CRC
    void ClrCRC() { crc_computed = 0; };

    // Clear CRC
    INT GetCRC() { return crc_computed & 0xffff; };

    // Add data into CRC
    void AddCRC( UCHAR data );

    // Check for incoming data
    BOOL RxData( UCHAR &inData );

    // Send a byte of data
    void TxData( UCHAR outData );

    // Wait for receive start
    BOOL WaitStart();

    // Wait for block number
    BOOL WaitBlockNumber();

    // Wait for data
    BOOL WaitData();

    // Wait for CRC check sum
    BOOL WaitCRC();

    // Wait for SOH or EOT
    BOOL WaitSOH();

public:

    // Start XModem receive
    UINT Receive( ADDRESS buf );

};


#endif // End of _XMODEM_HXX_

⌨️ 快捷键说明

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