📄 __vdor.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 + -