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

📄 protodma.c

📁 200元买来的D12开发资料,包括上位机驱动和应用程序
💻 C
字号:

#include <stdio.h>
#include <string.h>

#include "main.h"

#include "hal.h"
#include "d12ci.h"
#include "usb100.h"


extern CONTROL_XFER ControlData;
extern IO_REQUEST idata ioRequest;
extern EPPFLAGS bEPPflags;
extern unsigned char idata EpBuf[];

extern void single_transmit(unsigned char * buf, unsigned char len);
extern void stall_ep0(void);

void get_firmware_version()
{
	unsigned char i;

	i = 0x30; // firmware version number
	single_transmit((unsigned char *)&i, 1);

}

void get_buffer_size()
{
	unsigned char i[4];


	i[0] = EP2_PACKET_SIZE;
	i[1] = 0;
	i[2] = 0;
	i[3] = 0;

	single_transmit(i, 4);

}

void trans_data()
{
    unsigned char epstatus;
   if(ControlData.dataBuffer[5]==0x81)//读请求
   {
      D12_WriteEndpoint(5,ControlData.dataBuffer[3],EpBuf);
   }
   if(ControlData.dataBuffer[5]==0x80)//写请求
   {
      epstatus=D12_ReadEndpointStatus(4);
      epstatus&=0x60;
      if(epstatus==0x60)
      D12_ReadEndpoint(5,64,EpBuf);
   }
   single_transmit(0,0);
}

void read_write_register(void)
{
	unsigned char i;

	if(ControlData.DeviceRequest.bmRequestType & (unsigned char)USB_ENDPOINT_DIRECTION_MASK) {

		if(bEPPflags.bits.verbose)
			printf("Read Registers: Offset = 0x%x, Length = 0x%x, Index = 0x%x.\n",
				ControlData.DeviceRequest.wValue,
				ControlData.DeviceRequest.wLength,
				ControlData.DeviceRequest.wIndex);

		if(ControlData.DeviceRequest.wIndex == GET_FIRMWARE_VERSION &&
			ControlData.DeviceRequest.wValue == 0 &&
			ControlData.DeviceRequest.wLength == 1)
			get_firmware_version();
		else
		if(ControlData.DeviceRequest.wIndex == GET_BUFFER_SIZE &&
			ControlData.DeviceRequest.wValue == 0 &&
			ControlData.DeviceRequest.wLength == 4)
			get_buffer_size();
		else
			stall_ep0();

	}	// if read register
	else{
		if(bEPPflags.bits.verbose) {
			for(i = 0; i < ControlData.DeviceRequest.wLength; i ++)
				printf("0x%bx, ", *((ControlData.dataBuffer)+i));
			printf("\n");
		}

		if(ControlData.DeviceRequest.wIndex == TRANS_REQUEST&&
			ControlData.DeviceRequest.wValue == 0 &&
			ControlData.DeviceRequest.wLength == 6)
			trans_data();
			//stall_ep0();
		else
			stall_ep0();
	}	// if write register
}

⌨️ 快捷键说明

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