#ifndef RKCOMM_HEADER
|
#define RKCOMM_HEADER
|
#include "DefineHeader.h"
|
typedef enum
|
{
|
USB_BULK_READ = 0,
|
USB_BULK_WRITE,
|
USB_CONTROL,
|
} USB_ACCESS_TYPE;
|
typedef enum
|
{
|
TU_NONE_SUBCODE = 0,
|
TU_ERASESYSTEM_SUBCODE = 0xFE,
|
TU_LOWERFORMAT_SUBCODE = 0xFD,
|
TU_ERASEUSERDATA_SUBCODE = 0xFB,
|
TU_GETUSERSECTOR_SUBCODE = 0xF9
|
} TESTUNIT_SUBCODE;
|
typedef enum
|
{
|
RST_NONE_SUBCODE = 0,
|
RST_RESETMSC_SUBCODE,
|
RST_POWEROFF_SUBCODE,
|
RST_RESETMASKROM_SUBCODE,
|
RST_DISCONNECTRESET_SUBCODE
|
} RESET_SUBCODE;
|
typedef enum
|
{
|
RWMETHOD_IMAGE = 0,
|
RWMETHOD_LBA,
|
} RW_SUBCODE;
|
/* ÃüÁî */
|
typedef enum
|
{
|
TEST_UNIT_READY = 0,
|
READ_FLASH_ID = 0x01,
|
TEST_BAD_BLOCK = 0x03,
|
READ_SECTOR = 0x04,
|
WRITE_SECTOR = 0x05,
|
ERASE_NORMAL = 0x06,
|
ERASE_FORCE = 0x0B,
|
READ_LBA = 0x14,
|
WRITE_LBA = 0x15,
|
ERASE_SYSTEMDISK = 0x16,
|
READ_SDRAM = 0x17,
|
WRITE_SDRAM = 0x18,
|
EXECUTE_SDRAM = 0x19,
|
READ_FLASH_INFO = 0x1A,
|
READ_CHIP_INFO = 0x1B,
|
SET_RESET_FLAG = 0x1E,
|
WRITE_EFUSE = 0x1F,
|
READ_EFUSE = 0x20,
|
READ_SPI_FLASH = 0x21,
|
WRITE_SPI_FLASH = 0x22,
|
SWITCH_MASKROM = 0xFE,
|
DEVICE_RESET = 0xFF
|
} USB_OPERATION_CODE;
|
|
#pragma pack(1)
|
|
typedef struct
|
{
|
BYTE ucOperCode;
|
BYTE ucReserved;
|
DWORD dwAddress;
|
BYTE ucReserved2;
|
USHORT usLength;
|
BYTE ucReserved3[7];
|
} CBWCB, *PCBWCB;
|
|
typedef struct
|
{
|
DWORD dwCBWSignature;
|
DWORD dwCBWTag;
|
DWORD dwCBWTransferLength;
|
BYTE ucCBWFlags;
|
BYTE ucCBWLUN;
|
BYTE ucCBWCBLength;
|
CBWCB cbwcb;
|
} CBW, *PCBW;
|
|
typedef struct
|
{
|
DWORD dwCSWSignature;
|
DWORD dwCSWTag;
|
DWORD dwCBWDataResidue;
|
BYTE ucCSWStatus;
|
} CSW, *PCSW;
|
typedef struct
|
{
|
UINT uiSize;
|
UINT uiCrc;
|
UINT uiBlock[5];
|
} STRUCT_END_WRITE_SECTOR, *PSTRUCT_END_WRITE_SECTOR;
|
|
#pragma pack()
|
#define NAND_DRIVER_DEV "/dev/rknand_sys_storage"
|
#define NAND_DRIVER_DEV_VENDOR "/dev/rknand_sys_storage"
|
#define NAND_DRIVER_DEV_LBA "/dev/rkflash0"
|
#define EMMC_DRIVER_DEV "/dev/rknand_sys_storage"
|
#define EMMC_DRIVER_DEV_VENDOR "/dev/vendor_storage"
|
//#define EMMC_DRIVER_DEV_LBA "/dev/block/mmcblk0"
|
#define EMMC_DRIVER_DEV_LBA "/dev/mmcblk0"
|
#define EMMC_POINT_NAME "emmc_point_name"
|
|
#define READ_SECTOR_IO _IOW('r', READ_SECTOR, unsigned int)
|
#define WRITE_SECTOR_IO _IOW('r', WRITE_SECTOR, unsigned int)
|
#define READ_LBA_IO _IOW('r', READ_LBA, unsigned int)
|
#define WRITE_LBA_IO _IOW('r', WRITE_LBA, unsigned int)
|
#define START_WRITE_SECTOR_IO _IOW('r', 0x51, unsigned int)
|
#define END_WRITE_SECTOR_IO _IOW('r', 0x52, unsigned int)
|
#define GET_FLASH_INFO_IO _IOW('r', READ_FLASH_INFO, unsigned int)
|
#define GET_BAD_BLOCK_IO _IOW('r', TEST_BAD_BLOCK, unsigned int)
|
#define GET_LOCK_FLAG_IO _IOW('r', 0x53, unsigned int)
|
#define GET_PUBLIC_KEY_IO _IOW('r', 0x54, unsigned int)
|
|
#define DISABLE_NAND_LBA_WRITE_IO _IO('V',0)
|
#define ENABLE_NAND_LBA_WRITE_IO _IO('V',1)
|
#define DISABLE_NAND_LBA_READ_IO _IO('V',2)
|
#define ENABLE_NAND_LBA_READ_IO _IO('V',3)
|
|
|
#define CMD_TIMEOUT 0
|
|
#define CBW_SIGN 0x43425355 /* "USBC" */
|
#define CSW_SIGN 0x53425355 /* "USBS" */
|
|
|
#define DIRECTION_OUT 0x00
|
#define DIRECTION_IN 0x80
|
#define MAX_TEST_BLOCKS 512
|
#define MAX_ERASE_BLOCKS 128
|
#define MAX_CLEAR_LEN 16*1024
|
|
#ifndef ERR_SUCCESS
|
#define ERR_SUCCESS 0
|
#endif
|
#define ERR_DEVICE_READY 0
|
#define ERR_DEVICE_OPEN_FAILED -1
|
#define ERR_CSW_OPEN_FAILED -2
|
#define ERR_DEVICE_WRITE_FAILED -3
|
#define ERR_DEVICE_READ_FAILED -4
|
#define ERR_CMD_NOTMATCH -5
|
#define ERR_DEVICE_UNREADY -6
|
#define ERR_FOUND_BAD_BLOCK -7
|
#define ERR_FAILED -8
|
#define ERR_CROSS_BORDER -9
|
#define ERR_DEVICE_NOT_SUPPORT -10
|
#define ERR_REQUEST_NOT_SUPPORT -11
|
#define ERR_REQUEST_FAIL -12
|
#define ERR_BUFFER_NOT_ENOUGH -13
|
|
#define UFI_CHECK_SIGN(cbw, csw) ((CSW_SIGN == (csw).dwCSWSignature) && ((csw).dwCSWTag == (cbw).dwCBWTag))
|
|
class CRKLog;
|
class CRKComm
|
{
|
public:
|
virtual int RKU_EraseBlock(BYTE ucFlashCS, DWORD dwPos, DWORD dwCount, BYTE ucEraseType) = 0;
|
virtual int RKU_ReadChipInfo(BYTE *lpBuffer) = 0;
|
virtual int RKU_ReadFlashID(BYTE *lpBuffer) = 0;
|
virtual int RKU_ReadFlashInfo(BYTE *lpBuffer, UINT *puiRead = NULL) = 0;
|
virtual int RKU_ReadLBA(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer, BYTE bySubCode = RWMETHOD_IMAGE) = 0;
|
virtual int RKU_ReadSector(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer) = 0;
|
virtual int RKU_ResetDevice(BYTE bySubCode = RST_NONE_SUBCODE) = 0;
|
virtual int RKU_TestBadBlock(BYTE ucFlashCS, DWORD dwPos, DWORD dwCount, BYTE *lpBuffer) = 0;
|
virtual int RKU_TestDeviceReady(DWORD *dwTotal = NULL, DWORD *dwCurrent = NULL, BYTE bySubCode = TU_NONE_SUBCODE) = 0;
|
virtual int RKU_WriteLBA(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer, BYTE bySubCode = RWMETHOD_IMAGE) = 0;
|
virtual int RKU_LoaderWriteLBA(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer, BYTE bySubCode = RWMETHOD_IMAGE) = 0;
|
virtual int RKU_WriteSector(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer) = 0;
|
virtual int RKU_EndWriteSector(BYTE *lpBuffer) = 0;
|
virtual int RKU_GetLockFlag(BYTE *lpBuffer) = 0;
|
virtual int RKU_GetPublicKey(BYTE *lpBuffer) = 0;
|
virtual void RKU_ReopenLBAHandle() = 0;
|
virtual int RKU_ShowNandLBADevice() = 0;
|
virtual bool RKU_IsEmmcFlash() = 0;
|
CRKComm(CRKLog *pLog);
|
virtual ~CRKComm();
|
protected:
|
CRKLog *m_log;
|
bool m_bEmmc;
|
int m_hDev;
|
int m_hLbaDev;
|
private:
|
|
};
|
class CRKUsbComm: public CRKComm
|
{
|
public:
|
virtual int RKU_EraseBlock(BYTE ucFlashCS, DWORD dwPos, DWORD dwCount, BYTE ucEraseType);
|
virtual int RKU_ReadChipInfo(BYTE *lpBuffer);
|
virtual int RKU_ReadFlashID(BYTE *lpBuffer);
|
virtual int RKU_ReadFlashInfo(BYTE *lpBuffer, UINT *puiRead = NULL);
|
virtual int RKU_ReadLBA(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer, BYTE bySubCode = RWMETHOD_IMAGE);
|
virtual int RKU_ReadSector(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer);
|
virtual int RKU_ResetDevice(BYTE bySubCode = RST_NONE_SUBCODE);
|
virtual int RKU_TestBadBlock(BYTE ucFlashCS, DWORD dwPos, DWORD dwCount, BYTE *lpBuffer);
|
virtual int RKU_TestDeviceReady(DWORD *dwTotal = NULL, DWORD *dwCurrent = NULL, BYTE bySubCode = TU_NONE_SUBCODE);
|
virtual int RKU_WriteLBA(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer, BYTE bySubCode = RWMETHOD_IMAGE);
|
virtual int RKU_LoaderWriteLBA(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer, BYTE bySubCode = RWMETHOD_IMAGE);
|
virtual int RKU_WriteSector(DWORD dwPos, DWORD dwCount, BYTE *lpBuffer);
|
virtual int RKU_EndWriteSector(BYTE *lpBuffer);
|
virtual int RKU_GetLockFlag(BYTE *lpBuffer);
|
virtual int RKU_GetPublicKey(BYTE *lpBuffer);
|
virtual void RKU_ReopenLBAHandle();
|
virtual int RKU_ShowNandLBADevice();
|
virtual bool RKU_IsEmmcFlash();
|
CRKUsbComm(CRKLog *pLog);
|
~CRKUsbComm();
|
|
protected:
|
STRUCT_RKDEVICE_DESC m_deviceDesc;
|
CRKLog *m_log;
|
private:
|
bool CtrlNandLbaWrite(bool bEnable = true);
|
bool CtrlNandLbaRead(bool bEnable = true);
|
|
};
|
|
#endif
|