400 lines
12 KiB
C
400 lines
12 KiB
C
#ifndef _CH341_LIB_H
|
|
#define _CH341_LIB_H
|
|
|
|
typedef enum _EEPROM_TYPE {
|
|
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;
|
|
|
|
typedef enum _CHIP_TYPE {
|
|
CHIP_CH341 = 0,
|
|
CHIP_CH347T = 1,
|
|
CHIP_CH347F = 2,
|
|
} CHIP_TYPE;
|
|
|
|
typedef enum {
|
|
TYPE_TTY = 0,
|
|
TYPE_HID,
|
|
TYPE_VCP,
|
|
} FUNCTYPE;
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/**
|
|
* CH34XOpenDevice - open device
|
|
* @pathname: device path in /dev directory
|
|
*
|
|
* The function return positive file descriptor if successful, others if fail.
|
|
*/
|
|
extern int CH34xOpenDevice(const char *pathname);
|
|
|
|
/**
|
|
* CH34XCloseDevice - close device
|
|
* @fd: file descriptor of device
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xCloseDevice(int fd);
|
|
|
|
/**
|
|
* CH34x_GetDriverVersion - get vendor driver version
|
|
* @fd: file descriptor of device
|
|
* @Drv_Version: pointer to version string
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34x_GetDriverVersion(int fd, unsigned char *Drv_Version);
|
|
|
|
/**
|
|
* CH34x_GetChipVersion - get chip version
|
|
* @fd: file descriptor of device
|
|
* @Version: pointer to version
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34x_GetChipVersion(int fd, unsigned char *Version);
|
|
|
|
/**
|
|
* CH34x_GetChipType - get chip type
|
|
* @fd: file descriptor of device
|
|
* @ChipType: pointer to chip type
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34x_GetChipType(int fd, CHIP_TYPE *ChipType);
|
|
|
|
/**
|
|
* CH34X_GetDeviceID - get device vid and pid
|
|
* @fd: file descriptor of device
|
|
* @id: pointer to store id which contains vid and pid
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34X_GetDeviceID(int fd, uint32_t *id);
|
|
|
|
/**
|
|
* CH34xSetParaMode - set chip parrallel work mode
|
|
* @fd: file descriptor of device
|
|
* @Mode: work mode, 0/1->EPP mode, 2->MEM mode
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xSetParaMode(int fd, uint8_t Mode);
|
|
|
|
/**
|
|
* CH34xInitParallel - initial chip parrallel work mode
|
|
* @fd: file descriptor of device
|
|
* @Mode: work mode, 0/1->EPP mode, 2->MEM mode
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xInitParallel(int fd, uint8_t Mode);
|
|
|
|
/**
|
|
* CH34xEppRead - read data or addr in parrallel EPP mode
|
|
* @fd: file descriptor of device
|
|
* @oBuffer: pointer to read buffer
|
|
* @ioLength: read length
|
|
* @PipeMode: 0->read pipe0 data, 1->read pipe1 addr
|
|
*
|
|
* The function return read 0 if successful, others if fail.
|
|
*/
|
|
extern int CH34xEppRead(int fd, uint8_t *oBuffer, uint32_t ioLength, uint8_t PipeMode);
|
|
|
|
/**
|
|
* CH34xEppWrite - write data or addr in parrallel EPP mode
|
|
* @fd: file descriptor of device
|
|
* @iBuffer: pointer to write buffer
|
|
* @ioLength: write length
|
|
* @PipeMode: 0->write pipe0 data, 1->write pipe1 addr
|
|
*
|
|
* The function return 0 if successful, others if fail.
|
|
*/
|
|
extern int CH34xEppWrite(int fd, uint8_t *iBuffer, uint32_t ioLength, uint8_t PipeMode);
|
|
|
|
/**
|
|
* CH34xEppWriteData - write data in parrallel EPP mode
|
|
* @fd: file descriptor of device
|
|
* @iBuffer: pointer to write buffer
|
|
* @ioLength: write length
|
|
*
|
|
* The function return 0 if successful, others if fail.
|
|
*/
|
|
extern int CH34xEppWriteData(int fd, uint8_t *iBuffer, uint32_t ioLength);
|
|
|
|
/**
|
|
* CH34xEppReadData - read data in parrallel EPP mode
|
|
* @fd: file descriptor of device
|
|
* @oBuffer: pointer to read buffer
|
|
* @ioLength: read length
|
|
*
|
|
* The function return 0 if successful, others if fail.
|
|
*/
|
|
extern int CH34xEppReadData(int fd, uint8_t *oBuffer, uint32_t ioLength);
|
|
|
|
/**
|
|
* CH34xEppWriteAddr - write addr in parrallel EPP mode
|
|
* @fd: file descriptor of device
|
|
* @iBuffer: pointer to write buffer
|
|
* @ioLength: write length
|
|
*
|
|
* The function return 0 if successful, others if fail.
|
|
*/
|
|
extern int CH34xEppWriteAddr(int fd, uint8_t *iBuffer, uint32_t ioLength);
|
|
|
|
/**
|
|
* CH34xEppReadAddr - read addr in parrallel EPP mode
|
|
* @fd: file descriptor of device
|
|
* @oBuffer: pointer to read buffer
|
|
* @ioLength: read length
|
|
*
|
|
* The function return 0 if successful, others if fail.
|
|
*/
|
|
extern int CH34xEppReadAddr(int fd, uint8_t *oBuffer, uint32_t ioLength);
|
|
|
|
/**
|
|
* CH34xEppSetAddr - set addr in parrallel EPP mode
|
|
* @fd: file descriptor of device
|
|
* @iAddr: addr data
|
|
*
|
|
* The function return 0 if successful, others if fail.
|
|
*/
|
|
extern int CH34xEppSetAddr(int fd, uint32_t iAddr);
|
|
|
|
/**
|
|
* CH34xSetTimeout - set USB data read and write timeout
|
|
* @fd: file descriptor of device
|
|
* @iWriteTimeout: data download timeout in milliseconds
|
|
* @iReadTimeout: data upload timeout in milliseconds
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xSetTimeout(int fd, uint32_t iWriteTimeout, uint32_t iReadTimeout);
|
|
|
|
/**
|
|
* CH34xInitMEM - initial chip in parrallel MEM mode
|
|
* @fd: file descriptor of device
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xInitMEM(int fd);
|
|
|
|
/**
|
|
* CH34xMEMReadData - read data in parrallel MEM mode
|
|
* @fd: file descriptor of device
|
|
* @oBuffer: pointer to read buffer
|
|
* @ioLength: read length
|
|
* @PipeMode: 0->read pipe0, 1->read pipe1
|
|
*
|
|
* The function return 0 if successful, others if fail.
|
|
*/
|
|
extern int CH34xMEMReadData(int fd, uint8_t *oBuffer, uint32_t ioLength, uint8_t PipeMode);
|
|
|
|
/**
|
|
* CH34xMEMWriteData - write data in parrallel MEM mode
|
|
* @fd: file descriptor of device
|
|
* @iBuffer: pointer to write buffer
|
|
* @ioLength: write length
|
|
* @PipeMode: 0->write pipe0, 1->write pipe1
|
|
*
|
|
* The function return 0 if successful, others if fail.
|
|
*/
|
|
extern int CH34xMEMWriteData(int fd, uint8_t *iBuffer, uint32_t ioLength, uint32_t PipeMode);
|
|
|
|
/**
|
|
* CH34xSetStream - configure spi/i2c interface in stream mode
|
|
* @fd: file descriptor of device
|
|
* @Mode: stream mode
|
|
* ->bit0~1: set I2C SCL rate
|
|
* --> 00 : low rate 20KHz
|
|
* --> 01 : standard rate 100KHz
|
|
* --> 10 : fast rate 400KHz
|
|
* --> 11 : high rate 750KHz
|
|
* ->bit2: set spi mode
|
|
* --> 0 : one in one out(D3: clk, D5: out, D7: in)
|
|
* --> 1 : two in two out(D3 :clk, D4/D5: out, D6/D7 :in)
|
|
* ->bit7: set spi data mode
|
|
* --> 0 : low bit first
|
|
* --> 1 : high bit first
|
|
* other bits must keep 0
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xSetStream(int fd, uint8_t Mode);
|
|
|
|
/**
|
|
* CH34xSetDelaymS - delay operation
|
|
* @fd: file descriptor of device
|
|
* @iDelay: delay time in millseconds
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xSetDelaymS(int fd, uint32_t iDelay);
|
|
|
|
/**
|
|
* CH34xReadData - read for spi/i2c operation
|
|
* @fd: file descriptor of device
|
|
* @oReadBuffer: pointer to read buffer
|
|
* @oReadLength: pointer to read length
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xReadData(int fd, void *oReadBuffer, uint32_t *oReadLength);
|
|
|
|
/**
|
|
* CH34xWriteData - write data for spi/i2c operation
|
|
* @fd: file descriptor of device
|
|
* @iWriteBuffer: pointer to write buffer
|
|
* @iWriteLength: pointer to write length
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xWriteData(int fd, void *iWriteBuffer, uint32_t *iWriteLength);
|
|
|
|
/**
|
|
* CH34xWriteRead - write data then read for spi/i2c operation
|
|
* @fd: file descriptor of device
|
|
* @iWriteLength: write length
|
|
* @iWriteBuffer: pointer to write buffer
|
|
* @iReadStep: per read length
|
|
* @iReadTimes: read times
|
|
* @oReadLength: pointer to read length
|
|
* @oReadBuffer: pointer to read buffer
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xWriteRead(int fd, uint32_t iWriteLength, void *iWriteBuffer, uint32_t iReadStep, uint32_t iReadTimes,
|
|
uint32_t *oReadLength, void *oReadBuffer);
|
|
|
|
/**
|
|
* CH34xGetInput - get io status of CH341
|
|
* @fd: file descriptor of device
|
|
* @iStatus: pointer to io status
|
|
* Note:
|
|
* Bit7~Bit0<==>D7-D0, Bit8<==>ERR#, Bit9<==>PEMP, Bit10<==>INT#
|
|
* Bit11<==>SLCT, Bit13<==>WAIT#, Bit14<==>DATAS#/READ#, Bit15<==>ADDRS#/ADDR/ALE, Bit23<==>SDA
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xGetInput(int fd, uint32_t *iStatus);
|
|
|
|
/**
|
|
* CH34xSetOutput - set direction and output data of CH341
|
|
* @fd: file descriptor of device
|
|
* @iEnable: set direction and data enable
|
|
* --> Bit16 High : effect on Bit15~8 of iSetDataOut
|
|
* --> Bit17 High : effect on Bit15~8 of iSetDirOut
|
|
* --> Bit18 High : effect on Bit7~0 of iSetDataOut
|
|
* --> Bit19 High : effect on Bit7~0 of iSetDirOut
|
|
* --> Bit20 High : effect on Bit23~16 of iSetDataOut
|
|
* @iSetDirOut: set io direction
|
|
* -- > Bit High : Output
|
|
* -- > Bit Low : Input
|
|
* @iSetDataOut: set io data
|
|
* Output:
|
|
* -- > Bit High : High level
|
|
* -- > Bit Low : Low level
|
|
* Note:
|
|
* Bit7~Bit0<==>D7-D0, Bit8<==>ERR#, Bit9<==>PEMP, Bit10<==>INT#
|
|
* Bit11<==>SLCT, Bit13<==>WAIT#, Bit14<==>DATAS#/READ#, Bit15<==>ADDRS#/ADDR/ALE
|
|
*
|
|
* The pins below can only be used in output mode:
|
|
* Bit16<==>RESET#, Bit17<==>WRITE#, Bit18<==>SCL, Bit29<==>SDA
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xSetOutput(int fd, uint32_t iEnable, uint32_t iSetDirOut, uint32_t iSetDataOut);
|
|
|
|
/**
|
|
* CH34xSet_D5_D0 - set direction and output data of D5-D0 on CH341
|
|
* @fd: file descriptor of device
|
|
* @iSetDirOut: set io direction
|
|
* -- > Bit High : Output
|
|
* -- > Bit Low : Input
|
|
* @iSetDataOut: set io data
|
|
* Output:
|
|
* -- > Bit High : High level
|
|
* -- > Bit Low : Low level
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xSet_D5_D0(int fd, uint8_t iSetDirOut, uint8_t iSetDataOut);
|
|
|
|
/**
|
|
* CH34xStreamI2C - write/read i2c in stream mode
|
|
* @fd: file descriptor of device
|
|
* @iWriteLength: write length
|
|
* @iWriteBuffer: pointer to write buffer
|
|
* @iReadLength: read length
|
|
* @oReadBuffer: pointer to read buffer
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xStreamI2C(int fd, uint32_t iWriteLength, void *iWriteBuffer, uint32_t iReadLength, void *oReadBuffer);
|
|
|
|
/**
|
|
* CH34xReadEEPROM - read data from eeprom
|
|
* @fd: file descriptor of device
|
|
* @iEepromID: eeprom type
|
|
* @iAddr: address of eeprom
|
|
* @iLength: read length
|
|
* @oBuffer: pointer to read buffer
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xReadEEPROM(int fd, EEPROM_TYPE iEepromID, uint32_t iAddr, uint32_t iLength, uint8_t *oBuffer);
|
|
|
|
/**
|
|
* CH34xWriteEEPROM - write data to eeprom
|
|
* @fd: file descriptor of device
|
|
* @iEepromID: eeprom type
|
|
* @iAddr: address of eeprom
|
|
* @iLength: write length
|
|
* @iBuffer: pointer to write buffer
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xWriteEEPROM(int fd, EEPROM_TYPE iEepromID, uint32_t iAddr, uint32_t iLength, uint8_t *iBuffer);
|
|
|
|
/**
|
|
* CH34xStreamSPIx - write/read spi in stream mode
|
|
* @fd: file descriptor of device
|
|
* @iChipSelect: cs enable
|
|
* @iLength: the length of data
|
|
* @ioBuffer: one in one out buffer
|
|
* @ioBuffer2: two in two out buffer
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xStreamSPIx(int fd, uint32_t iChipSelect, uint32_t iLength, void *ioBuffer, void *ioBuffer2);
|
|
|
|
/**
|
|
* CH34xStreamSPI4 - write/read spi in 4-line stream mode
|
|
* @fd: file descriptor of device
|
|
* @iChipSelect: cs enable
|
|
* @iLength: the length of data
|
|
* @ioBuffer: one in one out buffer
|
|
*
|
|
* The function return true if successful, false if fail.
|
|
*/
|
|
extern bool CH34xStreamSPI4(int fd, uint32_t iChipSelect, uint32_t iLength, void *ioBuffer);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif
|