ch341a_software_and_drivers/Drivers/LIB/CH347/CH347DLL.H

505 lines
23 KiB
C++
Raw Permalink Normal View History

/*****************************************************************************
** Copyright (C) WCH 2001-2022 **
** Web: http://wch.cn **
******************************************************************************
Abstract:
USB2.0ת<EFBFBD><EFBFBD>оƬCH347,<EFBFBD><EFBFBD><EFBFBD><EFBFBD>480Mbps<EFBFBD><EFBFBD><EFBFBD><EFBFBD>USB<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>չUART<EFBFBD><EFBFBD>SPI<EFBFBD><EFBFBD>I2C<EFBFBD><EFBFBD>JTAG
Environment:
user mode only,VC6.0 and later
Notes:
Copyright (c) 2022 Nanjing Qinheng Microelectronics Co., Ltd.
--*/
#ifndef _CH347_DLL_H
#define _CH347_DLL_H
#ifdef __cplusplus
extern "C" {
#endif
#ifdef _WIN64
#define mOFFSET( s, m ) ( (ULONG_PTR) & ( ( ( s * ) 0 ) -> m ) ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><E1B9B9>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ<EFBFBD>ĺ<EFBFBD>
#else
#define mOFFSET( s, m ) ( (ULONG) & ( ( ( s * ) 0 ) -> m ) ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><EFBFBD><E1B9B9>Ա<EFBFBD><D4B1><EFBFBD><EFBFBD>ƫ<EFBFBD>Ƶ<EFBFBD>ַ<EFBFBD>ĺ<EFBFBD>
#endif
#ifndef max
#define max( a, b ) ( ( ( a ) > ( b ) ) ? ( a ) : ( b ) ) // <20>ϴ<EFBFBD>ֵ
#endif
#ifndef min
#define min( a, b ) ( ( ( a ) < ( b ) ) ? ( a ) : ( b ) ) // <20><>Сֵ
#endif
#ifdef ExAllocatePool
#undef ExAllocatePool // ɾ<><C9BE><EFBFBD><EFBFBD>TAG<41><47><EFBFBD>ڴ<EFBFBD><DAB4><EFBFBD><EFBFBD><EFBFBD>
#endif
#ifndef NTSTATUS
typedef LONG NTSTATUS; // <20><><EFBFBD><EFBFBD>״̬
#endif
//<2F><>CH31DLL<4C><4C><EFBFBD><EFBFBD>CH341WDM<44><4D><EFBFBD><EFBFBD>
#ifndef _CH341_DLL_H
typedef struct _USB_SETUP_PKT { // USB<53><42><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>׶ε<D7B6><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR mUspReqType; // 00H <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR mUspRequest; // 01H <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
union {
struct {
UCHAR mUspValueLow; // 02H ֵ<><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
UCHAR mUspValueHigh; // 03H ֵ<><D6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
};
USHORT mUspValue; // 02H-03H ֵ<><D6B5><EFBFBD><EFBFBD>
};
union {
struct {
UCHAR mUspIndexLow; // 04H <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
UCHAR mUspIndexHigh; // 05H <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>
};
USHORT mUspIndex; // 04H-05H <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
};
USHORT mLength; // 06H-07H <20><><EFBFBD>ݽ׶ε<D7B6><CEB5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
} mUSB_SETUP_PKT, *mPUSB_SETUP_PKT;
typedef struct _WIN32_COMMAND { // <20><><EFBFBD><EFBFBD>WIN32<33><32><EFBFBD><EFBFBD><EFBFBD>ӿڽṹ
union {
ULONG mFunction; // <20><><EFBFBD><EFBFBD>ʱָ<CAB1><D6B8><EFBFBD><EFBFBD><EFBFBD>ܴ<EFBFBD><DCB4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>߹ܵ<DFB9><DCB5><EFBFBD>
NTSTATUS mStatus; // <20><><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>ز<EFBFBD><D8B2><EFBFBD>״̬
};
ULONG mLength; // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD>,<2C><><EFBFBD>غ<EFBFBD><D8BA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵij<DDB5><C4B3><EFBFBD>
union {
mUSB_SETUP_PKT mSetupPkt; // USB<53><42><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD>Ľ<EFBFBD><C4BD><EFBFBD><EFBFBD>׶ε<D7B6><CEB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR mBuffer[ 512]; // <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ϊ0<CEAA><30>255B
};
} mWIN32_COMMAND, *mPWIN32_COMMAND;
// WIN32Ӧ<32>ò<EFBFBD><C3B2>ӿ<EFBFBD><D3BF><EFBFBD><EFBFBD><EFBFBD>
#define IOCTL_CH341_COMMAND ( FILE_DEVICE_UNKNOWN << 16 | FILE_ANY_ACCESS << 14 | 0x0f34 << 2 | METHOD_BUFFERED ) // ר<>ýӿ<C3BD>
#define mWIN32_COMMAND_HEAD mOFFSET( mWIN32_COMMAND, mBuffer ) // WIN32<33><32><EFBFBD><EFBFBD><EFBFBD>ӿڵ<D3BF>ͷ<EFBFBD><CDB7><EFBFBD><EFBFBD>
#define mCH341_MAX_NUMBER 16 // <20><><EFBFBD><EFBFBD>ͬʱ<CDAC><CAB1><EFBFBD>ӵ<EFBFBD>CH341<34><31>
#define mMAX_BUFFER_LENGTH 0x1000 // <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>󳤶<EFBFBD>4096
#define mMAX_COMMAND_LENGTH ( mWIN32_COMMAND_HEAD + mMAX_BUFFER_LENGTH ) // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹͷ<E1B9B9>ij<EFBFBD><C4B3><EFBFBD>
#define mDEFAULT_BUFFER_LEN 0x0400 // <20><><EFBFBD>ݻ<EFBFBD><DDBB><EFBFBD><EFBFBD><EFBFBD>Ĭ<EFBFBD>ϳ<EFBFBD><CFB3><EFBFBD>1024
#define mDEFAULT_COMMAND_LEN ( mWIN32_COMMAND_HEAD + mDEFAULT_BUFFER_LEN ) // Ĭ<><C4AC><EFBFBD><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3>ȼ<EFBFBD><C8BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ṹͷ<E1B9B9>ij<EFBFBD><C4B3><EFBFBD>
// CH341<34>˵<EFBFBD><CBB5><EFBFBD>ַ
#define mCH347_ENDP_DATA_UP 0x86 // CH347<34><37><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>ϴ<EFBFBD><CFB4>˵<EFBFBD><CBB5>ĵ<EFBFBD>ַ
#define mCH347_ENDP_DATA_DOWN 0x06 // CH347<34><37><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>´<EFBFBD><C2B4>˵<EFBFBD><CBB5>ĵ<EFBFBD>ַ
// <20><EFBFBD><E8B1B8><EFBFBD>ӿ<EFBFBD><D3BF><EFBFBD>Ĺܵ<C4B9><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define mPipeDeviceCtrl 0x00000004 // CH347<34><37><EFBFBD>ۺϿ<DBBA><CFBF>ƹܵ<C6B9>
#define mPipeDataUp 0x00000006 // CH347<34><37><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>ϴ<EFBFBD><CFB4>ܵ<EFBFBD>
#define mPipeDataDown 0x00000007 // CH347<34><37><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>´<EFBFBD><C2B4>ܵ<EFBFBD>
// Ӧ<>ò<EFBFBD><C3B2>ӿڵĹ<DAB5><C4B9>ܴ<EFBFBD><DCB4><EFBFBD>
#define mFuncNoOperation 0x00000000 // <20>޲<EFBFBD><DEB2><EFBFBD>
#define mFuncGetVersion 0x00000001 // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE>
#define mFuncGetConfig 0x00000002 // <20><>ȡUSB<53><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define mFuncSetTimeout 0x00000009 // <20><><EFBFBD><EFBFBD>USBͨѶ<CDA8><D1B6>ʱ
#define mFuncSetExclusive 0x0000000b // <20><><EFBFBD>ö<EFBFBD>ռʹ<D5BC><CAB9>
#define mFuncResetDevice 0x0000000c // <20><>λUSB<53>
#define mFuncResetPipe 0x0000000d // <20><>λUSB<53>ܵ<EFBFBD>
#define mFuncAbortPipe 0x0000000e // ȡ<><C8A1>USB<53>ܵ<EFBFBD><DCB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define mFuncBufferMode 0x00000020 // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD>ϴ<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
#define mFuncBufferModeDn 0x00000021 // <20><EFBFBD><E8B6A8><EFBFBD><EFBFBD><EFBFBD>´<EFBFBD>ģʽ<C4A3><CABD><EFBFBD><EFBFBD>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD><EFBFBD>ݳ<EFBFBD><DDB3><EFBFBD>
#define mFuncGetVersionEx 0x00000022 // <20><>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ż<EFBFBD>оƬ<D0BE>ͺ<EFBFBD>
// USB<53><EFBFBD><E8B1B8>׼<EFBFBD><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define mUSB_CLR_FEATURE 0x01
#define mUSB_SET_FEATURE 0x03
#define mUSB_GET_STATUS 0x00
#define mUSB_SET_ADDRESS 0x05
#define mUSB_GET_DESCR 0x06
#define mUSB_SET_DESCR 0x07
#define mUSB_GET_CONFIG 0x08
#define mUSB_SET_CONFIG 0x09
#define mUSB_GET_INTERF 0x0a
#define mUSB_SET_INTERF 0x0b
#define mUSB_SYNC_FRAME 0x0c
// CH341<34><31><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>ר<EFBFBD><D7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define mCH341_VENDOR_READ 0xC0 // ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>ʵ<EFBFBD>ֵ<EFBFBD>CH341<34><31><EFBFBD><EFBFBD>ר<EFBFBD>ö<EFBFBD><C3B6><EFBFBD><EFBFBD><EFBFBD>
#define mCH341_VENDOR_WRITE 0x40 // ͨ<><CDA8><EFBFBD><EFBFBD><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD>ʵ<EFBFBD>ֵ<EFBFBD>CH341<34><31><EFBFBD><EFBFBD>ר<EFBFBD><D7A8>д<EFBFBD><D0B4><EFBFBD><EFBFBD>
#define mCH341A_CMD_I2C_STREAM 0xAA // I2C<32>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>Ӵ<EFBFBD><D3B4>ֽڿ<D6BD>ʼΪI2C<32><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define mCH341A_CMD_UIO_STREAM 0xAB // UIO<49>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>Ӵ<EFBFBD><D3B4>ֽڿ<D6BD>ʼΪ<CABC><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define mCH341A_CMD_PIO_STREAM 0xAE // PIO<49>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C>Ӵ<EFBFBD><D3B4>ֽڿ<D6BD>ʼΪ<CABC><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// CH341A<31><41><EFBFBD>ƴ<EFBFBD><C6B4><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>ר<EFBFBD><D7A8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define mCH341A_BUF_CLEAR 0xB2 // <20><><EFBFBD><EFBFBD>δ<EFBFBD><CEB4><EFBFBD>ɵ<EFBFBD><C9B5><EFBFBD><EFBFBD><EFBFBD>
#define mCH341A_I2C_CMD_X 0x54 // <20><><EFBFBD><EFBFBD>I2C<32>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>ִ<EFBFBD><D6B4>
#define mCH341A_DELAY_MS 0x5E // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>ʱָ<CAB1><D6B8>ʱ<EFBFBD><CAB1>
#define mCH341A_GET_VER 0x5F // <20><>ȡоƬ<D0BE>
#define mCH341A_CMD_I2C_STM_STA 0x74 // I2C<32>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼλ
#define mCH341A_CMD_I2C_STM_STO 0x75 // I2C<32>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD>ֹͣλ
#define mCH341A_CMD_I2C_STM_OUT 0x80 // I2C<32>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,λ5-λ0Ϊ<30><CEAA><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>,0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽڲ<D6BD><DAB2><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define mCH341A_CMD_I2C_STM_IN 0xC0 // I2C<32>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,λ5-λ0Ϊ<30><CEAA><EFBFBD><EFBFBD>,0<><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֻ<EFBFBD><D6BB><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD>ֽڲ<D6BD><DAB2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6>
#define mCH341A_CMD_I2C_STM_MAX ( min( 0x3F, mCH341_PACKET_LENGTH ) ) // I2C<32>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD><DDB5><EFBFBD><EFBFBD>󳤶<EFBFBD>
#define mCH341A_CMD_I2C_STM_SET 0x60 // I2C<32>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD>ò<EFBFBD><C3B2><EFBFBD>,λ2=SPI<50><49>I/O<><4F>(0=<3D><><EFBFBD><EFBFBD><EBB5A5>,1=˫<><CBAB>˫<EFBFBD><CBAB>),λ1λ0=I2C<32>ٶ<EFBFBD>(00=<3D><><EFBFBD><EFBFBD>,01=<3D><>׼,10=<3D><><EFBFBD><EFBFBD>,11=<3D><><EFBFBD><EFBFBD>)
#define mCH341A_CMD_I2C_STM_US 0x40 // I2C<32>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>΢<EFBFBD><CEA2>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>ʱ,λ3-λ0Ϊ<30><CEAA>ʱֵ
#define mCH341A_CMD_I2C_STM_MS 0x50 // I2C<32>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>ʱ,λ3-λ0Ϊ<30><CEAA>ʱֵ
#define mCH341A_CMD_I2C_STM_DLY 0x0F // I2C<32>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֵ
#define mCH341A_CMD_I2C_STM_END 0x00 // I2C<32>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
#define mCH341A_CMD_UIO_STM_IN 0x00 // UIO<49>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D7-D0
#define mCH341A_CMD_UIO_STM_DIR 0x40 // UIO<49>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A>趨I/O<><4F><EFBFBD><EFBFBD>D5-D0,λ5-λ0Ϊ<30><CEAA><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define mCH341A_CMD_UIO_STM_OUT 0x80 // UIO<49>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>D5-D0,λ5-λ0Ϊ<30><CEAA><EFBFBD><EFBFBD>
#define mCH341A_CMD_UIO_STM_US 0xC0 // UIO<49>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><>΢<EFBFBD><CEA2>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB>ʱ,λ5-λ0Ϊ<30><CEAA>ʱֵ
#define mCH341A_CMD_UIO_STM_END 0x20 // UIO<49>ӿڵ<D3BF><DAB5><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>:<3A><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD>
#define MAX_DEVICE_PATH_SIZE 128 // <20><EFBFBD><E8B1B8><EFBFBD>Ƶ<EFBFBD><C6B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
#define MAX_DEVICE_ID_SIZE 64 // <20>豸ID<49><44><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
#endif _CH341_DLL_H
//<2F><><EFBFBD><EFBFBD><EFBFBD>ӿ<EFBFBD>
#define CH347_USB_VENDOR 0
#define CH347_USB_HID 2
#define CH347_USB_VCP 3
//CH347_USB_VENDOR֧<52><D6A7>CH341/7
#define CHIP_TYPE_CH341 0
#define CHIP_TYPE_CH347 1
//оƬ<D0BE><C6AC><EFBFBD>ܽӿں<D3BF>
#define CH347_FUNC_UART 0
#define CH347_FUNC_SPI_IIC 1
#define CH347_FUNC_JTAG_IIC 2
#define DEFAULT_READ_TIMEOUT 500 //Ĭ<>϶<EFBFBD><CFB6><EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define DEFAULT_WRITE_TIMEOUT 500 //Ĭ<><C4AC>д<EFBFBD><D0B4>ʱ<EFBFBD><CAB1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#define mCH347_PACKET_LENGTH 512 // CH347֧<37>ֵ<EFBFBD><D6B5><EFBFBD><EFBFBD>ݰ<EFBFBD><DDB0>ij<EFBFBD><C4B3><EFBFBD>
#pragma pack(1)
//SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
typedef struct _SPI_CONFIG{
UCHAR iMode; // 0-3:SPI Mode0/1/2/3
UCHAR iClock; // 0=60MHz, 1=30MHz, 2=15MHz, 3=7.5MHz, 4=3.75MHz, 5=1.875MHz, 6=937.5KHz<EFBFBD><EFBFBD>7=468.75KHz
UCHAR iByteOrder; // 0=<3D><>λ<EFBFBD><CEBB>ǰ(LSB), 1=<3D><>λ<EFBFBD><CEBB>ǰ(MSB)
USHORT iSpiWriteReadInterval; // SPI<50>ӿڳ<D3BF><DAB3><EFBFBD><EFBFBD><EFBFBD>ȡд<C8A1><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EEA3AC>λΪuS
UCHAR iSpiOutDefaultData; // SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱĬ<CAB1><C4AC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
ULONG iChipSelect; // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>, λ7Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>, λ7Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч: λ1λ0Ϊ00/01<30>ֱ<EFBFBD>ѡ<EFBFBD><D1A1>CS1/CS2<53><32><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϊ<EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD>ЧƬѡ
UCHAR CS1Polarity; // λ0<CEBB><30>ƬѡCS1<53><31><EFBFBD>Կ<EFBFBD><D4BF>ƣ<EFBFBD>0<EFBFBD><30><EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD>Ч<EFBFBD><D0A7>1<EFBFBD><31><EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>Ч<EFBFBD><D0A7>
UCHAR CS2Polarity; // λ0<CEBB><30>ƬѡCS2<53><32><EFBFBD>Կ<EFBFBD><D4BF>ƣ<EFBFBD>0<EFBFBD><30><EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD>Ч<EFBFBD><D0A7>1<EFBFBD><31><EFBFBD>ߵ<EFBFBD>ƽ<EFBFBD><C6BD>Ч<EFBFBD><D0A7>
USHORT iIsAutoDeativeCS; // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>Ƿ<EFBFBD><C7B7>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>Ƭѡ
USHORT iActiveDelay; // <20><><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1>ִ<EFBFBD>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>,<2C><>λus
ULONG iDelayDeactive; // <20><><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1>ִ<EFBFBD>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>,<2C><>λus
}mSpiCfgS,*mPSpiCfgS;
//<2F><EFBFBD><E8B1B8>Ϣ
typedef struct _DEV_INFOR{
UCHAR iIndex; // <20><>ǰ<EFBFBD><C7B0><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR DevicePath[MAX_PATH]; // <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>CreateFile
UCHAR UsbClass; // 0:CH347_USB_CH341, 2:CH347_USB_HID,3:CH347_USB_VCP
UCHAR FuncType; // 0:CH347_FUNC_UART,1:CH347_FUNC_SPI_I2C,2:CH347_FUNC_JTAG_I2C
CHAR DeviceID[64]; // USB\VID_xxxx&PID_xxxx
UCHAR ChipMode; // оƬģʽ,0:Mode0(UART0/1); 1:Mode1(Uart1+SPI+I2C); 2:Mode2(HID Uart1+SPI+I2C) 3:Mode3(Uart1+Jtag+IIC)
HANDLE DevHandle; // <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
USHORT BulkOutEndpMaxSize; // <20>ϴ<EFBFBD><CFB4>˵<EFBFBD><CBB5><EFBFBD>С
USHORT BulkInEndpMaxSize; // <20>´<EFBFBD><C2B4>˵<EFBFBD><CBB5><EFBFBD>С
UCHAR UsbSpeedType; // USB<53>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD>ͣ<EFBFBD>0:FS,1:HS,2:SS
UCHAR CH347IfNum; // <20><EFBFBD>ӿں<D3BF>: 0:UART,1:SPI/IIC/JTAG/GPIO
UCHAR DataUpEndp; // <20>˵<EFBFBD><CBB5><EFBFBD>ַ
UCHAR DataDnEndp; // <20>˵<EFBFBD><CBB5><EFBFBD>ַ
CHAR ProductString[64]; // USB<53><42>Ʒ<EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
CHAR ManufacturerString[64]; // USB<53><42><EFBFBD><EFBFBD><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD>
ULONG WriteTimeout; // USBд<42><D0B4>ʱ
ULONG ReadTimeout; // USB<53><42><EFBFBD><EFBFBD>ʱ
CHAR FuncDescStr[64]; // <20>ӿڹ<D3BF><DAB9><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR FirewareVer; // <20>̼<EFBFBD><CCBC>
}mDeviceInforS,*mPDeviceInforS;
#pragma pack()
// CH347ģʽ<C4A3><CABD><EFBFBD>ú<EFBFBD><C3BA><EFBFBD><><D6A7>CH347<34><37><EFBFBD><EFBFBD>ģʽ<C4A3>µĴ򿪡<C4B4><F2BFAAA1>رա<D8B1>USB<53><42><EFBFBD><EFBFBD>USBд<42><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD>HID
//<2F><><EFBFBD><EFBFBD>USB<53>
HANDLE WINAPI CH347OpenDevice(ULONG DevI);
//<2F>ر<EFBFBD>USB<53>
BOOL WINAPI CH347CloseDevice(ULONG iIndex);
//<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8>Ϣ
BOOL WINAPI CH347GetDeviceInfor(ULONG iIndex,mDeviceInforS *DevInformation);
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E6B1BE><EFBFBD><EFBFBD><EFBFBD><E6B1BE>оƬ<D0BE><C6AC><EFBFBD><EFBFBD>(CH341(FS)/CH347HS)
BOOL WINAPI CH347GetVersion(ULONG iIndex,
PUCHAR iDriverVer,
PUCHAR iDLLVer,
PUCHAR ibcdDevice,
PUCHAR iChipType); //CHIP_TYPE_CH341/7
typedef VOID ( CALLBACK * mPCH347_NOTIFY_ROUTINE ) ( // <20><EFBFBD>¼<EFBFBD>֪ͨ<CDA8>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>
ULONG iEventStatus ); // <20><EFBFBD>¼<EFBFBD><C2BC>͵<EFBFBD>ǰ״̬(<28><><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD>): 0=<3D><EFBFBD>γ<EFBFBD><CEB3>¼<EFBFBD>, 3=<3D><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>
#define CH347_DEVICE_ARRIVAL 3 // <20><EFBFBD><E8B1B8><EFBFBD><EFBFBD><EFBFBD>¼<EFBFBD>,<2C>Ѿ<EFBFBD><D1BE><EFBFBD><EFBFBD><EFBFBD>
#define CH347_DEVICE_REMOVE_PEND 1 // <20><EFBFBD><E8B1B8>Ҫ<EFBFBD>γ<EFBFBD>
#define CH347_DEVICE_REMOVE 0 // <20><EFBFBD>γ<EFBFBD><CEB3>¼<EFBFBD>,<2C>Ѿ<EFBFBD><D1BE>γ<EFBFBD>
BOOL WINAPI CH347SetDeviceNotify( // <20><EFBFBD><EFBFBD>¼<EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>,0<><30>Ӧ<EFBFBD><D3A6>һ<EFBFBD><D2BB><EFBFBD>
PCHAR iDeviceID, // <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><><D6B8><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><E8B1B8>ID,<2C>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>\0<><30>ֹ
mPCH347_NOTIFY_ROUTINE iNotifyRoutine ); // ָ<><D6B8><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>,ΪNULL<4C><4C>ȡ<EFBFBD><C8A1><EFBFBD>¼<EFBFBD>֪ͨ,<2C><><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>¼<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>øó<C3B8><C3B3><EFBFBD>
// <20><>ȡUSB<53><42><EFBFBD>ݿ<EFBFBD>
BOOL WINAPI CH347ReadData( ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
PVOID oBuffer, // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3B9BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PULONG ioLength ); // ָ<>򳤶ȵ<F2B3A4B6>Ԫ,<2C><><EFBFBD><EFBFBD>ʱΪ׼<CEAA><D7BC><EFBFBD><EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>,<2C><><EFBFBD>غ<EFBFBD>Ϊʵ<CEAA>ʶ<EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
// дȡUSB<53><42><EFBFBD>ݿ<EFBFBD>
BOOL WINAPI CH347WriteData(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
PVOID iBuffer, // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PULONG ioLength ); // ָ<>򳤶ȵ<F2B3A4B6>Ԫ,<2C><><EFBFBD><EFBFBD>ʱΪ׼<CEAA><D7BC>д<EFBFBD><D0B4><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>,<2C><><EFBFBD>غ<EFBFBD>Ϊʵ<CEAA><CAB5>д<EFBFBD><D0B4><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
// <20><><EFBFBD><EFBFBD>USB<53><42><EFBFBD>ݶ<EFBFBD>д<EFBFBD>ij<EFBFBD>ʱ
BOOL WINAPI CH347SetTimeout(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iWriteTimeout, // ָ<><D6B8>USBд<42><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>ij<EFBFBD>ʱʱ<CAB1><CAB1>,<2C>Ժ<EFBFBD><D4BA><EFBFBD>mSΪ<53><CEAA>λ,0xFFFFFFFFָ<46><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ(Ĭ<><C4AC>ֵ)
ULONG iReadTimeout ); // ָ<><D6B8>USB<53><42>ȡ<EFBFBD><C8A1><EFBFBD>ݿ<EFBFBD><DDBF>ij<EFBFBD>ʱʱ<CAB1><CAB1>,<2C>Ժ<EFBFBD><D4BA><EFBFBD>mSΪ<53><CEAA>λ,0xFFFFFFFFָ<46><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ(Ĭ<><C4AC>ֵ)
/***************SPI********************/
// SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʼ<EFBFBD><CABC>
BOOL WINAPI CH347SPI_Init(ULONG iIndex,mSpiCfgS *SpiCfg);
//<2F><>ȡSPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ϣ
BOOL WINAPI CH347SPI_GetCfg(ULONG iIndex,mSpiCfgS *SpiCfg);
//<2F><><EFBFBD><EFBFBD>Ƭѡ״̬,ʹ<><CAB9>ǰ<EFBFBD><C7B0><EFBFBD>ȵ<EFBFBD><C8B5><EFBFBD>CH347SPI_Init<69><74>CS<43><53><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL WINAPI CH347SPI_ChangeCS(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
UCHAR iStatus); // 0=<3D><><EFBFBD><EFBFBD>Ƭѡ,1=<3D><><EFBFBD><EFBFBD>Ƭѡ
//<2F><><EFBFBD><EFBFBD>SPIƬѡ
BOOL WINAPI CH347SPI_SetChipSelect(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
USHORT iEnableSelect, // <20>Ͱ<EFBFBD>λΪCS1<53><31><EFBFBD>߰<EFBFBD>λΪCS2; <20>ֽ<EFBFBD>ֵΪ1=<3D><><EFBFBD><EFBFBD>CS,Ϊ0=<3D><><EFBFBD>Դ<EFBFBD>CS<43><53><EFBFBD><EFBFBD>
USHORT iChipSelect, // <20>Ͱ<EFBFBD>λΪCS1<53><31><EFBFBD>߰<EFBFBD>λΪCS2;Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>,0=<3D><><EFBFBD><EFBFBD>Ƭѡ,1=<3D><><EFBFBD><EFBFBD>Ƭѡ
ULONG iIsAutoDeativeCS, // <20><>16λΪCS1<53><31><EFBFBD><EFBFBD>16λΪCS2;<3B><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ɺ<EFBFBD><C9BA>Ƿ<EFBFBD><C7B7>Զ<EFBFBD><D4B6><EFBFBD><EFBFBD><EFBFBD>Ƭѡ
ULONG iActiveDelay, // <20><>16λΪCS1<53><31><EFBFBD><EFBFBD>16λΪCS2;<3B><><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1>ִ<EFBFBD>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>,<2C><>λus
ULONG iDelayDeactive); // <20><>16λΪCS1<53><31><EFBFBD><EFBFBD>16λΪCS2;<3B><><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1>ִ<EFBFBD>ж<EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱʱ<CAB1><CAB1>,<2C><>λus
//SPI4д<34><D0B4><EFBFBD><EFBFBD>
BOOL WINAPI CH347SPI_Write(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iChipSelect, // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>, λ7Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>, λ7Ϊ1<CEAA><31><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
ULONG iLength, // ׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
ULONG iWriteStep, // ׼<><D7BC><EFBFBD><EFBFBD>ȡ<EFBFBD>ĵ<EFBFBD><C4B5><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
PVOID ioBuffer); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>MOSIд<49><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//SPI4<49><34><EFBFBD><EFBFBD><EFBFBD><EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD>ݣ<EFBFBD>Ч<EFBFBD>ʽ<EFBFBD>CH347SPI_WriteRead<61>ߺܶ<DFBA>
BOOL WINAPI CH347SPI_Read(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iChipSelect, // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>, λ7Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>, λ7Ϊ1<CEAA><31><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>
ULONG oLength, // ׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
PULONG iLength, // ׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
PVOID ioBuffer); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>DOUTд<54><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>غ<EFBFBD><D8BA>Ǵ<EFBFBD>DIN<49><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,4<>߽ӿ<DFBD>
BOOL WINAPI CH347SPI_WriteRead(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iChipSelect, // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>, λ7Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>, λ7Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭѡ
ULONG iLength, // ׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
PVOID ioBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>DOUTд<54><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>غ<EFBFBD><D8BA>Ǵ<EFBFBD>DIN<49><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>SPI<50><49><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,4<>߽ӿ<DFBD>
BOOL WINAPI CH347StreamSPI4(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iChipSelect, // Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>, λ7Ϊ0<CEAA><30><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ƭѡ<C6AC><D1A1><EFBFBD><EFBFBD>, λ7Ϊ1<CEAA><31><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч
ULONG iLength, // ׼<><D7BC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
PVOID ioBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC><EFBFBD><EFBFBD>DOUTд<54><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>غ<EFBFBD><D8BA>Ǵ<EFBFBD>DIN<49><4E><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
/***************JTAG********************/
//JTAG<41>ӿڳ<D3BF>ʼ<EFBFBD><CABC><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ģʽ<C4A3><CABD><EFBFBD>ٶ<EFBFBD>
BOOL WINAPI CH347Jtag_INIT(ULONG iIndex,
UCHAR iClockRate); //ͨ<><CDA8><EFBFBD>ٶȣ<D9B6><C8A3><EFBFBD>ЧֵΪ0-5<><35>ֵԽ<D6B5><D4BD>ͨ<EFBFBD><CDA8><EFBFBD>ٶ<EFBFBD>Խ<EFBFBD><D4BD>
//<2F><>ȡJtag<61>ٶ<EFBFBD><D9B6><EFBFBD><EFBFBD><EFBFBD>
BOOL WINAPI CH347Jtag_GetCfg(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
UCHAR *ClockRate); //ͨ<><CDA8><EFBFBD>ٶȣ<D9B6><C8A3><EFBFBD>ЧֵΪ0-5<><35>ֵԽ<D6B5><D4BD>ͨ<EFBFBD><CDA8><EFBFBD>ٶ<EFBFBD>Խ<EFBFBD><D4BD>
//λ<><CEBB><EFBFBD><EFBFBD>ʽJTAG IR/DR<44><52><EFBFBD>ݶ<EFBFBD>д.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĶ<DDB5>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>л<EFBFBD><D0BB>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4A1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><E4A3AC><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>CH347Jtag_WriteRead_Fast
//<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>4096<39>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ<EFBFBD><CEBB><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д
//״̬<D7B4><CCAC>:Run-Test->Shift-IR/DR..->Exit IR/DR -> Run-Test
BOOL WINAPI CH347Jtag_WriteRead(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BOOL IsDR, // =TRUE: DR<44><52><EFBFBD>ݶ<EFBFBD>д,=FALSE:IR<49><52><EFBFBD>ݶ<EFBFBD>д
ULONG iWriteBitLength, // д<><D0B4><EFBFBD><EFBFBD><><D7BC>д<EFBFBD><D0B4><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
PVOID iWriteBitBuffer, // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PULONG oReadBitLength, // ָ<>򳤶ȵ<F2B3A4B6>Ԫ,<2C><><EFBFBD>غ<EFBFBD>Ϊʵ<CEAA>ʶ<EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
PVOID oReadBitBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3B9BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//JTAG IR/DR<44><52><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д,<2C><><EFBFBD>ڶ<EFBFBD><DAB6>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>JTAG<41>̼<EFBFBD><CCBC><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD>4K<34><4B><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ȳ<EFBFBD><C8B2><EFBFBD><EFBFBD><EFBFBD>4096<39>ֽڡ<D6BD><DAA1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>С<EFBFBD><D0A1><EFBFBD><EFBFBD><EFBFBD>е<EFBFBD><D0B5><EFBFBD>
//״̬<D7B4><CCAC>:Run-Test->Shift-IR/DR..->Exit IR/DR -> Run-Test
BOOL WINAPI CH347Jtag_WriteRead_Fast(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
BOOL IsDR, // =TRUE: DR<44><52><EFBFBD>ݶ<EFBFBD>д,=FALSE:IR<49><52><EFBFBD>ݶ<EFBFBD>д
ULONG iWriteBitLength, // д<><D0B4><EFBFBD><EFBFBD><><D7BC>д<EFBFBD><D0B4><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
PVOID iWriteBitBuffer, // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PULONG oReadBitLength, // ָ<>򳤶ȵ<F2B3A4B6>Ԫ,<2C><><EFBFBD>غ<EFBFBD>Ϊʵ<CEAA>ʶ<EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
PVOID oReadBitBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3B9BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F>л<EFBFBD>JTAG״̬<D7B4><CCAC>
BOOL WINAPI CH347Jtag_SwitchTapState(UCHAR TapState);
//JTAG DRд,<2C><><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ,<2C><><EFBFBD>ڶ<EFBFBD><DAB6>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>JTAG<41>̼<EFBFBD><CCBC><EFBFBD><EFBFBD>ز<EFBFBD><D8B2><EFBFBD><EFBFBD><EFBFBD>
//״̬<D7B4><CCAC>:Run-Test->Shift-DR..->Exit DR -> Run-Test
BOOL WINAPI CH347Jtag_ByteWriteDR(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iWriteLength, // д<><D0B4><EFBFBD><EFBFBD><><D7BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
PVOID iWriteBuffer); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//JTAG DR<44><52>,<2C><><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ,<2C><><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//״̬<D7B4><CCAC>:Run-Test->Shift-DR..->Exit DR -> Run-Test
BOOL WINAPI CH347Jtag_ByteReadDR(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
PULONG oReadLength, // ָ<>򳤶ȵ<F2B3A4B6>Ԫ,<2C><><EFBFBD>غ<EFBFBD>Ϊʵ<CEAA>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
PVOID oReadBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3B9BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//JTAG IRд,<2C><><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ,<2C><><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
//״̬<D7B4><CCAC>:Run-Test->Shift-IR..->Exit IR -> Run-Test
BOOL WINAPI CH347Jtag_ByteWriteIR(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iWriteLength, // д<><D0B4><EFBFBD><EFBFBD><><D7BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
PVOID iWriteBuffer); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//JTAG IR<49><52>,<2C><><EFBFBD>ֽ<EFBFBD>Ϊ<EFBFBD><CEAA>λ,<2C><><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>д<EFBFBD><D0B4>
//״̬<D7B4><CCAC>:Run-Test->Shift-IR..->Exit IR -> Run-Test
BOOL WINAPI CH347Jtag_ByteReadIR(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
PULONG oReadLength, // ָ<>򳤶ȵ<F2B3A4B6>Ԫ,<2C><><EFBFBD>غ<EFBFBD>Ϊʵ<CEAA>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
PVOID oReadBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3B9BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//λ<><CEBB><EFBFBD><EFBFBD>ʽJTAG DR<44><52><EFBFBD><EFBFBD>д.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĶ<DDB5>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>л<EFBFBD><D0BB>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4A1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><E4A3AC><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>USB20Jtag_ByeWriteDR
//״̬<D7B4><CCAC>:Run-Test->Shift-DR..->Exit DR -> Run-Test
BOOL WINAPI CH347Jtag_BitWriteDR(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iWriteBitLength, // ָ<>򳤶ȵ<F2B3A4B6>Ԫ,<2C><><EFBFBD>غ<EFBFBD>Ϊʵ<CEAA>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
PVOID iWriteBitBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3B9BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//λ<><CEBB><EFBFBD><EFBFBD>ʽJTAG IR<49><52><EFBFBD><EFBFBD>д.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĶ<DDB5>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>л<EFBFBD><D0BB>ȿ<EFBFBD><C8BF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><E4A1A3><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><E4A3AC><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>USB20Jtag_ByteWriteIR
//״̬<D7B4><CCAC>:Run-Test->Shift-IR..->Exit IR -> Run-Test
BOOL WINAPI CH347Jtag_BitWriteIR(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iWriteBitLength, // ָ<>򳤶ȵ<F2B3A4B6>Ԫ,<2C><><EFBFBD>غ<EFBFBD>Ϊʵ<CEAA>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
PVOID iWriteBitBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3B9BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//λ<><CEBB><EFBFBD><EFBFBD>ʽJTAG IR<49><52><EFBFBD>ݶ<EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĶ<DDB5>д<EFBFBD><D0B4><EFBFBD><EFBFBD>ָ<EFBFBD><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>״̬<D7B4><CCAC><EFBFBD>л<EFBFBD><D0BB>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><E4A3AC><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>USB20Jtag_ByteReadIR
//״̬<D7B4><CCAC>:Run-Test->Shift-IR..->Exit IR -> Run-Test
BOOL WINAPI CH347Jtag_BitReadIR(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
PULONG oReadBitLength, // ָ<>򳤶ȵ<F2B3A4B6>Ԫ,<2C><><EFBFBD>غ<EFBFBD>Ϊʵ<CEAA>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
PVOID oReadBitBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3B9BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//λ<><CEBB><EFBFBD><EFBFBD>ʽJTAG DR<44><52><EFBFBD>ݶ<EFBFBD>.<2E><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݵĶ<DDB5>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͸<EFBFBD><CDB8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ݴ<EFBFBD><DDB4><EFBFBD><E4A3AC><EFBFBD><EFBFBD>ʹ<EFBFBD><CAB9>USB20Jtag_ByteReadDR
//״̬<D7B4><CCAC>:Run-Test->Shift-DR..->Exit DR -> Run-Test
BOOL WINAPI CH347Jtag_BitReadDR(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
PULONG oReadBitLength, // ָ<>򳤶ȵ<F2B3A4B6>Ԫ,<2C><><EFBFBD>غ<EFBFBD>Ϊʵ<CEAA>ʶ<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ֽڳ<D6BD><DAB3><EFBFBD>
PVOID oReadBitBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3B9BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
//<2F><>ȡCH347<34><37>GPIO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ƽֵ
BOOL WINAPI CH347GPIO_Get(ULONG iIndex,
UCHAR *iDir, //<2F><><EFBFBD>ŷ<EFBFBD><C5B7><EFBFBD>:GPIO0-7<><37>Ӧλ0-7.0<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>룻1<EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR *iData); //GPIO0<4F><30>ƽ:GPIO0-7<><37>Ӧλ0-7,0<><30><EFBFBD>͵<EFBFBD>ƽ<EFBFBD><C6BD>1<EFBFBD><31><EFBFBD>ߵ<EFBFBD>ƽ)
//<2F><><EFBFBD><EFBFBD>CH347<34><37>GPIO<49><4F><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ŵ<EFBFBD>ƽֵ
BOOL WINAPI CH347GPIO_Set(ULONG iIndex,
UCHAR iEnable, //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>Ч<EFBFBD><D0A7>־:<3A><>Ӧλ0-7,<2C><>ӦGPIO0-7.
UCHAR iSetDirOut, //<2F><><EFBFBD><EFBFBD>I/O<><4F><EFBFBD><EFBFBD>,ijλ<C4B3><CEBB>0<EFBFBD><30><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>,ijλ<C4B3><CEBB>1<EFBFBD><31><EFBFBD><EFBFBD>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>.GPIO0-7<><37>Ӧλ0-7.
UCHAR iSetDataOut); //<2F><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>I/O<><4F><EFBFBD><EFBFBD>Ϊ<EFBFBD><CEAA><EFBFBD><EFBFBD>,<2C><>ôijλ<C4B3><CEBB><30><CAB1>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>͵<EFBFBD>ƽ,ijλ<C4B3><CEBB><31><CAB1>Ӧ<EFBFBD><D3A6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ߵ<EFBFBD>ƽ
//<2F><><EFBFBD><EFBFBD>IAP<41>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD>ģʽ
BOOL WINAPI CH347StartIapFwUpate(ULONG iIndex,
ULONG FwSize); // <20>̼<EFBFBD><CCBC><EFBFBD><EFBFBD><EFBFBD>
/**************HID/VCP<43><50><EFBFBD><EFBFBD>**********************/
//<2F>򿪴<EFBFBD><F2BFAAB4><EFBFBD>
HANDLE WINAPI CH347Uart_Open(ULONG iIndex);
//<2F>رմ<D8B1><D5B4><EFBFBD>
BOOL WINAPI CH347Uart_Close(ULONG iIndex);
BOOL WINAPI CH347Uart_SetDeviceNotify( // <20><EFBFBD><EFBFBD>¼<EFBFBD>֪ͨ<CDA8><D6AA><EFBFBD><EFBFBD>
ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>,0<><30>Ӧ<EFBFBD><D3A6>һ<EFBFBD><D2BB><EFBFBD>
PCHAR iDeviceID, // <20><>ѡ<EFBFBD><D1A1><EFBFBD><EFBFBD><><D6B8><EFBFBD>ַ<EFBFBD><D6B7><EFBFBD><><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ص<EFBFBD><D8B5><EFBFBD><E8B1B8>ID,<2C>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD><EFBFBD>\0<><30>ֹ
mPCH347_NOTIFY_ROUTINE iNotifyRoutine ); // ָ<><D6B8><EFBFBD><EFBFBD>¼<EFBFBD><C2BC>ص<EFBFBD><D8B5><EFBFBD><EFBFBD><EFBFBD>,ΪNULL<4C><4C>ȡ<EFBFBD><C8A1><EFBFBD>¼<EFBFBD>֪ͨ,<2C><><EFBFBD><EFBFBD><EFBFBD>ڼ<EFBFBD><DABC><EFBFBD>¼<EFBFBD>ʱ<EFBFBD><CAB1><EFBFBD>øó<C3B8><C3B3><EFBFBD>
//<2F><>ȡUARTӲ<54><D3B2><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL WINAPI CH347Uart_GetCfg(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
PULONG BaudRate, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PUCHAR ByteSize, // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>(5,6,7,8,16)
PUCHAR Parity, // У<><D0A3>λ(0<><30>None; 1<><31>Odd; 2<><32>Even; 3<><33>Mark; 4<><34>Space)
PUCHAR StopBits, // ֹͣλ<D6B9><CEBB>(0<><30>1ֹͣλ; 1<><31>1.5ֹͣλ; 2<><32>2ֹͣλ)<29><>
PUCHAR ByteTimeout); //<2F>ֽڳ<D6BD>ʱ
//<2F><><EFBFBD><EFBFBD>UART<52><54><EFBFBD><EFBFBD>
BOOL WINAPI CH347Uart_Init(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
DWORD BaudRate, // <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
UCHAR ByteSize, // <20><><EFBFBD><EFBFBD>λ<EFBFBD><CEBB>(5,6,7,8,16)
UCHAR Parity, // У<><D0A3>λ(0<><30>None; 1<><31>Odd; 2<><32>Even; 3<><33>Mark; 4<><34>Space)
UCHAR StopBits, // ֹͣλ<D6B9><CEBB>(0<><30>1ֹͣλ; 1<><31>1.5ֹͣλ; 2<><32>2ֹͣλ)<29><>
UCHAR ByteTimeout);// <20>ֽڳ<D6BD>ʱʱ<CAB1><CAB1>,<2C><>λ100uS
// <20><><EFBFBD><EFBFBD>USB<53><42><EFBFBD>ݶ<EFBFBD>д<EFBFBD>ij<EFBFBD>ʱ
BOOL WINAPI CH347Uart_SetTimeout(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iWriteTimeout, // ָ<><D6B8>USBд<42><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD><DDBF>ij<EFBFBD>ʱʱ<CAB1><CAB1>,<2C>Ժ<EFBFBD><D4BA><EFBFBD>mSΪ<53><CEAA>λ,0xFFFFFFFFָ<46><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ(Ĭ<><C4AC>ֵ)
ULONG iReadTimeout ); // ָ<><D6B8>USB<53><42>ȡ<EFBFBD><C8A1><EFBFBD>ݿ<EFBFBD><DDBF>ij<EFBFBD>ʱʱ<CAB1><CAB1>,<2C>Ժ<EFBFBD><D4BA><EFBFBD>mSΪ<53><CEAA>λ,0xFFFFFFFFָ<46><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ʱ(Ĭ<><C4AC>ֵ)
// <20><>ȡ<EFBFBD><C8A1><EFBFBD>ݿ<EFBFBD>
BOOL WINAPI CH347Uart_Read(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
PVOID oBuffer, // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><E3B9BB><EFBFBD>Ļ<EFBFBD><C4BB><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ڱ<EFBFBD><DAB1><EFBFBD><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PULONG ioLength );// ָ<>򳤶ȵ<F2B3A4B6>Ԫ,<2C><><EFBFBD><EFBFBD>ʱΪ׼<CEAA><D7BC><EFBFBD><EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>,<2C><><EFBFBD>غ<EFBFBD>Ϊʵ<CEAA>ʶ<EFBFBD>ȡ<EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
// д<><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
BOOL WINAPI CH347Uart_Write(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
PVOID iBuffer, // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
PULONG ioLength );// ָ<>򳤶ȵ<F2B3A4B6>Ԫ,<2C><><EFBFBD><EFBFBD>ʱΪ׼<CEAA><D7BC>д<EFBFBD><D0B4><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>,<2C><><EFBFBD>غ<EFBFBD>Ϊʵ<CEAA><CAB5>д<EFBFBD><D0B4><EFBFBD>ij<EFBFBD><C4B3><EFBFBD>
//<2F><>ѯ<EFBFBD><D1AF><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ж<EFBFBD><D0B6><EFBFBD><EFBFBD>ֽ<EFBFBD>δȡ
BOOL WINAPI CH347Uart_QueryBufUpload(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
LONGLONG *RemainBytes);
//<2F><>ȡ<EFBFBD><EFBFBD><E8B1B8>Ϣ
BOOL WINAPI CH347Uart_GetDeviceInfor(ULONG iIndex,mDeviceInforS *DevInformation);
/********IIC***********/
// <20><><EFBFBD>ô<EFBFBD><C3B4><EFBFBD><EFBFBD><EFBFBD>ģʽ
BOOL WINAPI CH347I2C_Set(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iMode ); // ָ<><D6B8>ģʽ,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// λ1-λ0: I2C<32>ӿ<EFBFBD><D3BF>ٶ<EFBFBD>/SCLƵ<4C><C6B5>, 00=<3D><><EFBFBD><EFBFBD>/20KHz,01=<3D><>׼/100KHz(Ĭ<><C4AC>ֵ),10=<3D><><EFBFBD><EFBFBD>/400KHz,11=<3D><><EFBFBD><EFBFBD>/750KHz
// <20><><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>Ϊ0
// <20><><EFBFBD><EFBFBD>Ӳ<EFBFBD><D3B2><EFBFBD><EFBFBD><ECB2BD>ʱ,<2C><><EFBFBD>ú<EFBFBD><C3BA>ܿ췵<DCBF><ECB7B5>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>֮ǰ<D6AE><C7B0>ʱָ<CAB1><D6B8><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
BOOL WINAPI CH347I2C_SetDelaymS(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iDelay ) ; // ָ<><D6B8><EFBFBD><EFBFBD>ʱ<EFBFBD>ĺ<EFBFBD><C4BA><EFBFBD><EFBFBD><EFBFBD>
// <20><><EFBFBD><EFBFBD>I2C<32><43><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,2<>߽ӿ<DFBD><><CAB1><EFBFBD><EFBFBD>ΪSCL<43><4C><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ΪSDA<44><41><EFBFBD><EFBFBD>
BOOL WINAPI CH347StreamI2C( ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
ULONG iWriteLength, // ׼<><D7BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
PVOID iWriteBuffer, // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>ֽ<EFBFBD>ͨ<EFBFBD><CDA8><EFBFBD><EFBFBD>I2C<32><EFBFBD><E8B1B8>ַ<EFBFBD><D6B7><EFBFBD><EFBFBD>д<EFBFBD><D0B4><EFBFBD><EFBFBD>λ
ULONG iReadLength, // ׼<><D7BC><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
PVOID oReadBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>غ<EFBFBD><D8BA>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifndef _CH341_DLL_H
typedef enum _EEPROM_TYPE {// EEPROM<4F>ͺ<EFBFBD>
ID_24C01,
ID_24C02,
ID_24C04,
ID_24C08,
ID_24C16,
ID_24C32,
ID_24C64,
ID_24C128,
ID_24C256,
ID_24C512,
ID_24C1024,
ID_24C2048,
ID_24C4096
} EEPROM_TYPE;
#endif
// <20><>EEPROM<4F>ж<EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD>ݿ<EFBFBD>,<2C>ٶ<EFBFBD>Լ56K<36>ֽ<EFBFBD>
BOOL WINAPI CH347ReadEEPROM(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
EEPROM_TYPE iEepromID, // ָ<><D6B8>EEPROM<4F>ͺ<EFBFBD>
ULONG iAddr, // ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD>ĵ<EFBFBD>ַ
ULONG iLength, // ׼<><D7BC><EFBFBD><EFBFBD>ȡ<EFBFBD><C8A1><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
PUCHAR oBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD>غ<EFBFBD><D8BA>Ƕ<EFBFBD><C7B6><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
// <20><>EEPROM<4F><4D>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD>ݿ<EFBFBD>
BOOL WINAPI CH347WriteEEPROM(ULONG iIndex, // ָ<><D6B8><EFBFBD><EFBFBD><E8B1B8><EFBFBD><EFBFBD>
EEPROM_TYPE iEepromID, // ָ<><D6B8>EEPROM<4F>ͺ<EFBFBD>
ULONG iAddr, // ָ<><D6B8><EFBFBD><EFBFBD><EFBFBD>ݵ<EFBFBD>Ԫ<EFBFBD>ĵ<EFBFBD>ַ
ULONG iLength, // ׼<><D7BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>ֽ<EFBFBD><D6BD><EFBFBD>
PUCHAR iBuffer ); // ָ<><D6B8>һ<EFBFBD><D2BB><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>,<2C><><EFBFBD><EFBFBD>׼<EFBFBD><D7BC>д<EFBFBD><D0B4><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD><EFBFBD>
#ifdef __cplusplus
}
#endif
#endif // _CH347_DLL_H