⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 __vdor.c

📁 C语言版的USB单片机固件源代码
💻 C
字号:
//===================================================================//
//     Project Name : ZBoard
//      Module Name : Master Firmware Program
//     Product Type : License
//      OS/Dev Tool : AT89C52, uVision 2
//  Original Author : Ray Yang
//     Organization : YBWork.com
//    Original Date : July, 25, 2001
//             Addr : Room 402, No. 131, Meilong No. 9
//              TEL : 86-21-54630718
//            EMail : rayyang2000@yahoo.com
//          Website : http://www.ybwork.com
//		  Copyright : Copyright (L) YBWork.com, 2001
//         Comments : 
//                    
//					<< History >> 
//					July, 25, 2001		The first release
//===================================================================//

#include "ZBoard.H"
#include "USB.H"
#include "HAL.H"
#include "VDOR.H"
#include "USBD12.H"

extern CONTROL_XFER		ControlData;
extern ZBOARDFLAGS bZBoardFlags;
extern unsigned char idata GenBuf[GENBUF_LENGH];

CODE_DATA idata CodeData;

extern void ISRx_Main_TxDone(void);

extern unsigned char nFlashPhase;

/**************************************************************************/
/* Subroutines For Vendor Specific Request                                */
/**************************************************************************/
void USBVendorRequest_LEDON(void)
{
	if(bZBoardFlags.bits.bIN_ISR == 0)
		DISABLE_INTERRUPTS;

	bZBoardFlags.bits.bLED = LED_ON;
	IO_LED = 0;

	// Send a zero packet
	USB_Single_Transmit(0, 0);

	if(bZBoardFlags.bits.bIN_ISR == 0)
		ENABLE_INTERRUPTS;
}

void USBVendorRequest_LEDOFF(void)
{
	
	bZBoardFlags.bits.bLED = LED_OFF;
	IO_LED = 1;

	// Send a zero packet
	USB_Single_Transmit(0, 0);

}

void USBVendorRequest_LEDFlash(void)
{
	bZBoardFlags.bits.bLED = LED_FLASH;

	// Send a zero packet
	USB_Single_Transmit(0, 0);

}

void USBVendorRequest_WriteCode(void)
{

	bZBoardFlags.bits.bRead = FALSE;
	CodeData.wCodeAddress = ControlData.DeviceRequest.wIndex;
	CodeData.wCodeLength = ControlData.DeviceRequest.wValue;
	CodeData.wCodeCount = 0;
	CodeData.pCodeData = GenBuf;

	nFlashPhase = 0;

	// Send a zero packet
	USB_Single_Transmit(0, 0);

}

void USBVendorRequest_ReadCode(void)
{
	unsigned char nLen;

	bZBoardFlags.bits.bRead = TRUE;
	CodeData.wCodeAddress = ControlData.DeviceRequest.wIndex;
	CodeData.wCodeLength = ControlData.DeviceRequest.wValue;
	CodeData.wCodeCount = 0;
	CodeData.pCodeData = GenBuf;


	nLen = CodeData.wCodeLength;
	if(nLen > EP2_TX_FIFO_SIZE)
		nLen = EP2_TX_FIFO_SIZE;
	// Read data from flash
	FlashRead(CodeData.wCodeAddress, CodeData.pCodeData, nLen);
	nLen = USBD12_WriteEndpoint(5, CodeData.pCodeData, nLen);
	CodeData.wCodeCount += nLen;
	CodeData.wCodeAddress += nLen;

	// Send a zero packet to finish this control transfer
	USB_Single_Transmit(0, 0);
}

// The following codes are used for debugging
void USBVendorRequest_GetFlashPhase(void)
{
	// Send a zero packet
	USB_Single_Transmit(&nFlashPhase, sizeof(unsigned char));
}

void USBVendorRequest_GetCodeData(void)
{
	// Send a zero packet
//	nFlashPhase = 4;
	USB_Single_Transmit((unsigned char*)&CodeData, sizeof(CODE_DATA));
//	nFlashPhase = 5;
}

⌨️ 快捷键说明

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