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 + -
显示快捷键?