亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频

? 歡迎來到蟲蟲下載站! | ?? 資源下載 ?? 資源專輯 ?? 關于我們
? 蟲蟲下載站

?? usb_class_requests.c

?? USB CDC and HID composite unit.
?? C
?? 第 1 頁 / 共 2 頁
字號:
//-----------------------------------------------------------------------------
// USB_Class_Requests.c
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Includes
//-----------------------------------------------------------------------------

#include "USB_Type.h"
#include "USB_Configuration.h"
#include "USB_Descriptor.h"
#include "USB_Standard_Requests.h"
#include "USB_ISR.h"
#include "USB_CDC_UART.h"
#include "USB_Main.h"
#include "USB_Class_Requests.h"

//-----------------------------------------------------------------------------
// Global Variables
//-----------------------------------------------------------------------------

#define CS_TEMPBUF_SIZE		sizeof(TLine_Coding)	// size of temporary buffer
										// must be greater than sizeof(TLine_Coding) (= 7 bytes)
BYTE         idata cs_temp_buffer[ CS_TEMPBUF_SIZE ];	// temporary buffer for
												//  CS_Get_Encapsulated_Command
												//  CS_Send_Encapsulated_Command
												//  CS_Set_Line_Coding and CS_Get_Line_Coding

//-----------------------------------------------------------------------------
// Static Variables in this file
//-----------------------------------------------------------------------------

/*
#define CS_TEMP_BUF_SIZE			0x10
static BYTE cs_temp_buffer[ CS_TEMP_BUF_SIZE ];
*/

//-----------------------------------------------------------------------------
// Local function prototypes
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Local Function prototypes
//-----------------------------------------------------------------------------

// for CDC
static void CS_Send_Encapsulated_Command(void);
static void CS_Get_Encapsulated_Command(void);
static void CS_Set_Line_Coding(void);
static bit CS_Set_Line_Coding_Complete(void);
static void CS_Get_Line_Coding(void);
static void CS_Set_ControlLine_State(void);
static void CS_Send_Break(void);

#if defined BIG_ENDIAN

void swap_endian_long( ULONG idata *lptr );

#endif // end of BIG_ENDIAN


// for HID
static void Get_Report(void);
static void Get_Idle( void );
static void Get_Protocol( void );
static void Set_Report( void );
static void Set_Idle( void );
static void Set_Protocol( void );

//-----------------------------------------------------------------------------
// SDCC suport
//-----------------------------------------------------------------------------
#if defined SDCC
#pragma nooverlay
#endif // SDCC

//-----------------------------------------------------------------------------
// class specific request dispatcher
//-----------------------------------------------------------------------------

void Class_Request( void )
{
												// CDC class request dispatcher
	if ( Setup.wIndex.i == DSC_INTERFACE_CDC_comm )
	{
		switch(Setup.bRequest)
		{
			case SEND_ENCAPSULATED_COMMAND:		CS_Send_Encapsulated_Command();	break;
			case GET_ENCAPSULATED_RESPONSE:		CS_Get_Encapsulated_Command();	break;
			case SET_LINE_CODING:				CS_Set_Line_Coding();			break;
			case GET_LINE_CODING:				CS_Get_Line_Coding();			break;
			case SET_CONTROL_LINE_STATE: 		CS_Set_ControlLine_State();		break;
			case SEND_BREAK: 					CS_Send_Break();				break;
			default:															break;
		}
	}
												// HID class request dispatcher
	else if ( Setup.wIndex.i == DSC_INTERFACE_HID )
	{
		switch( Setup.bRequest )
		{
			case HID_REQ_GET_REPORT:			Get_Report();		break;
/*
			case HID_REQ_GET_IDLE:				Get_Idle();			break;
			case HID_REQ_GET_PROTOCOL:			Get_Protocol();		break;
			case HID_REQ_SET_REPORT:			Set_Report();		break;
			case HID_REQ_SET_IDLE: 				Set_Idle();			break;
			case HID_REQ_SET_PROTOCOL: 			Set_Protocol();		break;
*/
			default:												break;
		}
	}
}

//-----------------------------------------------------------------------------
// CDC class request handlers
//-----------------------------------------------------------------------------

//-----------------------------------------------------------------------------
// Send_Encapsulated_Command
//-----------------------------------------------------------------------------
//
//	Nothing to do other than unloading the data sent in the data stage.
//
//-----------------------------------------------------------------------------

void CS_Send_Encapsulated_Command(void)
{
	if (   (Setup.bmRequestType == OUT_CL_INTERFACE)
		&& (Setup.wValue.i == 0 )
		&& (Setup.wLength.i <= CS_TEMPBUF_SIZE) )	// less than the buffer size
	{
		Ep_Status0 = EP_RX;				// Put endpoint in recieve mode
		DataPtr = (BYTE *)cs_temp_buffer;
		DataSize = Setup.wLength.i;		// Read out the command sent
		setup_handled = TRUE;
	}
}

//-----------------------------------------------------------------------------
// Get_Encapsulated_Command
//-----------------------------------------------------------------------------
//
//	Return a zero-length packet
//
//-----------------------------------------------------------------------------

void CS_Get_Encapsulated_Command(void)
{
	if (   (Setup.bmRequestType == IN_CL_INTERFACE)
		&& (Setup.wValue.i == 0) )
	{
		Ep_Status0 = EP_TX;				// Put endpoint in transmit mode
		DataPtr = (BYTE *)cs_temp_buffer;
		DataSize = 0;					// Send ZLP
		setup_handled = TRUE;
	}
}

//-----------------------------------------------------------------------------
// Set_Line_Coding
//-----------------------------------------------------------------------------
//
//	Unload the line coding structure (7 bytes) sent in the data stage.
//	Apply this setting to the UART
//	Flush the communication buffer
//
//	Line Coding Structure (7 bytes)
//	0-3 dwDTERate    Data terminal rate (baudrate), in bits per second (LSB first)
//	4   bCharFormat  Stop bits: 0 - 1 Stop bit, 1 - 1.5 Stop bits, 2 - 2 Stop bits
//	5   bParityType  Parity:    0 - None, 1 - Odd, 2 - Even, 3 - Mark, 4 - Space
//	6   bDataBits    Data bits: 5, 6, 7, 8, 16
//
//-----------------------------------------------------------------------------

void CS_Set_Line_Coding(void)
{
	if (   (Setup.bmRequestType == OUT_CL_INTERFACE)
		&& (Setup.wValue.i == 0)
		&& (Setup.wLength.i == sizeof(TLine_Coding)) )
	{
		Ep_Status0 = EP_RX;						// Put endpoint in recieve mode
		DataPtr = (BYTE *)cs_temp_buffer;
		DataSize = sizeof(TLine_Coding);		// Read out the command sent
		USB_request_callback = CS_Set_Line_Coding_Complete;
		setup_handled = TRUE;
	}
}

// called at the end of data stage
bit CS_Set_Line_Coding_Complete(void)
{

#if defined BIG_ENDIAN
						// swap baudrate field LSB first --> MSB first
	swap_endian_long( (ULONG idata *)cs_temp_buffer );

#endif // end of BIG_ENDIAN

	return Set_Line_Coding( (TLine_Coding idata *)cs_temp_buffer );
}

//-----------------------------------------------------------------------------
// Get_Line_Coding
//-----------------------------------------------------------------------------
//
//	Return the line coding structure
//
//-----------------------------------------------------------------------------

void CS_Get_Line_Coding(void)
{
	if (   (Setup.bmRequestType == IN_CL_INTERFACE)
		&& (Setup.wValue.i == 0)
		&& (Setup.wLength.i == sizeof(TLine_Coding)) )
	{

#if defined BIG_ENDIAN
		BYTE cnt;
		BYTE idata * dst;
		BYTE idata * src;

		dst = cs_temp_buffer;			// copy line coding structure
		src = (BYTE idata *)&uart_line_coding;
		for (cnt = sizeof( TLine_Coding ); cnt > 0; cnt--)
			*dst++ = *src++;

		swap_endian_long( (ULONG idata *)cs_temp_buffer );

		DataPtr = (BYTE *)cs_temp_buffer;
#else
		DataPtr = (BYTE *)(&uart_line_coding);	// send it directly
#endif // end of BIG_ENDIAN

		Ep_Status0 = EP_TX;					// Put endpoint in transmit mode
		DataSize = sizeof(TLine_Coding);	// Send Line coding
		setup_handled = TRUE;
	}
}

//-----------------------------------------------------------------------------
// Set_ControlLine_State
//-----------------------------------------------------------------------------
//
//	Set/reset RTS/DTR according to wValue
//	wValue
//	 bit 1  RTS
//	 bit 0  DTR
//
//-----------------------------------------------------------------------------

void CS_Set_ControlLine_State(void)
{
	if (   (Setup.bmRequestType == OUT_CL_INTERFACE)
		&& (Setup.wLength.i == 0) )
	{
		Set_Line_State( Setup.wValue.c[LSB] & (CDC_RTS | CDC_DTR ) );
		setup_handled = TRUE;
	}
}

//-----------------------------------------------------------------------------
// Send_Break
//-----------------------------------------------------------------------------
//
//	Send break from UART TX port, for wValue (msec) duration.
//	wValue
//	 0xFFFF: continuous break

?? 快捷鍵說明

復制代碼 Ctrl + C
搜索代碼 Ctrl + F
全屏模式 F11
切換主題 Ctrl + Shift + D
顯示快捷鍵 ?
增大字號 Ctrl + =
減小字號 Ctrl + -
亚洲欧美第一页_禁久久精品乱码_粉嫩av一区二区三区免费野_久草精品视频
中文天堂在线一区| 91精品国产一区二区| 国产一区二区三区综合| 九色|91porny| 精品一区二区在线视频| 日本美女一区二区三区| 免费人成网站在线观看欧美高清| 午夜一区二区三区视频| 日本网站在线观看一区二区三区| 日韩中文字幕91| 免费观看在线综合色| 精品亚洲成a人在线观看 | 国产不卡免费视频| 国产精品一二三在| 成人久久久精品乱码一区二区三区 | 亚洲精品视频一区| 亚洲自拍另类综合| 日本女优在线视频一区二区| 久久精品免费观看| 成人免费毛片app| 在线观看网站黄不卡| 91麻豆精品国产91久久久| 欧美tickling挠脚心丨vk| 国产欧美视频一区二区| 又紧又大又爽精品一区二区| 日韩不卡一区二区三区| 懂色av一区二区三区免费观看| 不卡电影免费在线播放一区| 欧美无砖砖区免费| 精品久久久久久无| 亚洲视频在线一区二区| 秋霞电影网一区二区| 成人性视频免费网站| 欧美精品一级二级三级| 久久综合99re88久久爱| 亚洲一区二区视频在线观看| 国产在线一区观看| 欧美在线啊v一区| 国产色综合久久| 午夜视频久久久久久| av激情综合网| 欧美mv日韩mv亚洲| 伊人色综合久久天天| 国产精品一区免费在线观看| 精品视频在线免费| 久久噜噜亚洲综合| 亚洲国产精品一区二区尤物区| 国产一区二区三区观看| 欧美日韩国产另类不卡| 亚洲欧洲日韩在线| 韩国精品久久久| 7777女厕盗摄久久久| 亚洲精品自拍动漫在线| 国产精品自拍在线| 欧美一区二区三区成人| 亚洲日本va在线观看| 国产盗摄视频一区二区三区| 日韩一级欧美一级| 视频一区在线播放| 欧美日韩一区精品| 玉足女爽爽91| 93久久精品日日躁夜夜躁欧美| 久久精品水蜜桃av综合天堂| 久久99精品久久久久久| 欧美放荡的少妇| 亚洲高清视频的网址| 色偷偷久久人人79超碰人人澡| 中文字幕的久久| 国产激情一区二区三区桃花岛亚洲| 日韩欧美在线影院| 日韩电影在线一区| 欧美日本国产视频| 五月开心婷婷久久| 欧美午夜精品久久久久久超碰| 亚洲精品免费电影| 在线免费不卡视频| 一区二区三区日本| 欧美日韩国产三级| 午夜成人免费电影| 日韩一区二区在线看| 免费xxxx性欧美18vr| 欧美不卡一区二区三区| 国产传媒欧美日韩成人| 日本一区二区三区久久久久久久久不 | 国精产品一区一区三区mba桃花 | 国产欧美1区2区3区| 国产激情一区二区三区| 中文字幕av不卡| 91免费国产在线观看| 亚洲国产视频网站| 日韩女优毛片在线| 国产成人综合网| 日韩毛片视频在线看| 欧美亚洲国产一区二区三区| 亚洲午夜精品在线| 日韩欧美久久久| 成人午夜激情在线| 亚洲黄色录像片| 精品日韩99亚洲| av在线不卡免费看| 日韩高清一区在线| 久久久久99精品一区| 色一区在线观看| 久热成人在线视频| 1024精品合集| 欧美一级夜夜爽| 成人av片在线观看| 亚洲国产日韩一区二区| 精品国产污污免费网站入口| 成人动漫视频在线| 免费观看久久久4p| 国产精品国产三级国产a| 9191精品国产综合久久久久久 | 亚洲免费资源在线播放| 91精品国产91热久久久做人人| 国产mv日韩mv欧美| 久久精品一区四区| 国产精品免费视频网站| 免费不卡在线视频| 色婷婷亚洲精品| 韩国av一区二区三区四区 | 成人av中文字幕| 亚洲福利视频导航| 国产精品女主播在线观看| 欧美美女一区二区| 91亚洲大成网污www| 韩国v欧美v日本v亚洲v| 亚洲图片自拍偷拍| 中文一区一区三区高中清不卡| 在线成人免费视频| 91麻豆国产精品久久| 国产精品888| 日av在线不卡| 亚洲一区二区中文在线| 亚洲欧洲国产日本综合| 国产欧美一区二区在线| 欧美一区二区在线免费观看| 在线视频欧美精品| 91在线视频官网| 国产成人精品影院| 激情文学综合插| 久久成人免费网| 青草av.久久免费一区| 亚洲va国产天堂va久久en| 成人网男人的天堂| 日韩一区二区三区三四区视频在线观看 | 久久久久久久电影| 欧美高清一级片在线| 欧美日韩在线亚洲一区蜜芽| 99久精品国产| 99re在线精品| 99精品视频在线观看| av不卡一区二区三区| 国产成人h网站| 成人a级免费电影| 97国产一区二区| 色综合久久综合中文综合网| 高清国产午夜精品久久久久久| 国产一区二区三区四区五区美女| 精品无人区卡一卡二卡三乱码免费卡 | 国产精品免费免费| 欧美经典三级视频一区二区三区| www久久久久| 中文字幕久久午夜不卡| 国产精品大尺度| 亚洲精品老司机| 日本aⅴ亚洲精品中文乱码| 久久91精品久久久久久秒播| 777xxx欧美| 亚洲精品在线电影| xnxx国产精品| 欧美国产欧美亚州国产日韩mv天天看完整| 国产亚洲一区二区三区四区| 一区免费观看视频| 亚洲综合一二区| 免费观看一级特黄欧美大片| 国产精品一区二区久久精品爱涩| 高清免费成人av| 色哟哟国产精品| 日韩欧美中文字幕公布| 久久久久高清精品| 亚洲综合在线视频| 久久99精品久久久久久动态图 | 91精品国产高清一区二区三区| 欧美日韩高清影院| 精品少妇一区二区三区日产乱码| 99久久婷婷国产综合精品电影 | 欧美剧情片在线观看| 成人欧美一区二区三区黑人麻豆| 精品一区二区三区免费毛片爱| 欧美日韩精品欧美日韩精品一 | 韩国三级电影一区二区| 6080午夜不卡| 午夜欧美大尺度福利影院在线看| 99re这里都是精品| 亚洲精品综合在线| 一本大道av伊人久久综合| 亚洲欧美一区二区在线观看| 成人av免费观看| 国产精品美女久久久久av爽李琼 |