📄 usbqueue.c.bak
字号:
/*********************************************************************
*
* MFT SKERNEL
*
*********************************************************************
* FileName: Queue.c
* Dependencies:
* Processor: hc08jb16
* Company: chengdu MFT, Inc.
*
* Software License Agreement
*
*
* Author Date Comment
*~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
* jc 2005.12.26
********************************************************************/
/*******************************************/
/* Name: Queue_Init */
/* Descrip: 队列结构初始化, 清空队列 */
/* Input: pQueue(word)队列结构首址 */
/* in_length 队列分配长度, 须等于所*/
/* 声明的队列分配长度 */
/* "OName_Macro_Max...Length" */
/* Output: 无 */
/*******************************************/
//#include "public.h"
#pragma DATA_SEG MY_ZEROPAGE
struct Usb_Queue_Struct USB_msQueue;
struct Usb_Queue_Struct USB_kbQueue;
struct Usb_Queue_Struct *pQueue=&USB_msQueue;
#pragma DATA_SEG DEFAULT
struct Mouse_Data msqueue[MsQueueLength] ;
struct Keyboard_Data kbqueue[UsbQueueLength] ;
//struct Usb_Queue_Struct USB_jkQueue;
void Queue_Init ()
{
/* queue(1) byte */
BYTE j,i ;
USB_msQueue.length = MsQueueLength;
USB_msQueue.write_pointer = 0;
USB_msQueue.read_pointer = 0;
USB_msQueue.status = EMPTY;
//-----------------------------------
USB_kbQueue.length = UsbQueueLength;
USB_kbQueue.write_pointer = 0;
USB_kbQueue.read_pointer = 0;
USB_kbQueue.status = EMPTY;
//-------------------------------
for(j=0;j<UsbQueueLength;j++)
{
for(i=0;i<KEYBOARDLENGTH;i++)
{
kbqueue[j].kbbuffer[i]=0x00 ;
}
}
}
/*********************************************/
/* Name: Queue_Put */
/* Descrip: 队列填充 */
/* Input: in_buffer要填充的数 */
/* Output: OK/ERROR(填入了/填不进去) */
/*********************************************/
BYTE Queue_Put (BYTE * in_buffer,BYTE qflag)
{
BYTE temp_pointer,i ;
if(qflag==MOUSE)
{
pQueue = &USB_msQueue;
USB_msQueue.length = MsQueueLength;
}
else if(qflag==KEYBOARD)
{
pQueue = &USB_kbQueue;
USB_kbQueue.length = UsbQueueLength;
}
/* else if(qflag==JOYSTICK)
{
pQueue = &USB_jkQueue;
}*/
else
{
return FALSE ;
}
if (pQueue->status == FULL)
{
return FALSE ;
}
if (pQueue->write_pointer >= pQueue->length)
{
return FALSE ;
}
temp_pointer = pQueue->write_pointer ;
if(qflag==MOUSE)
{
for(i=0;i<MOUSELENGTH;i++)
msqueue[temp_pointer].msbuffer[i]= in_buffer[i] ;
}
else if(qflag==KEYBOARD)
{
for(i=0;i<KEYBOARDLENGTH;i++)
kbqueue[temp_pointer].kbbuffer[i]= in_buffer[i] ;
}
/* else
{
for(i=0;i<JOYSTICKLENGTH;i++)
jkqueue[temp_pointer].jkbuffer[i]= in_buffer[i] ;
}*/
temp_pointer ++ ;
pQueue->write_pointer = temp_pointer ;
if (pQueue->write_pointer >= pQueue->length)
pQueue->write_pointer = 0;
if (pQueue->write_pointer == pQueue->read_pointer)
{
pQueue->status = FULL; /**在写入数据后,如写指针等于读指针时,队列full**/
}
else
{
pQueue->status = NORMAL;
}
return TRUE;
}
byte Queue_State(byte qflag)
{
if(qflag==MOUSE)
{
pQueue = &USB_msQueue;
}
else if(qflag==KEYBOARD)
{
pQueue = &USB_kbQueue;
}
else
return EMPTY;
return pQueue->status;
}
/***********************************************/
/* Name: Queue_Get */
/* Descrip: 从队列中取一个数据 */
/* input: out_Bufferaddr (word)取出数据填入此处*/
/* Attention: 注意输入均为外部RAM的数据 */
/* Output: OK/ERROR(取到/没取到) */
/***********************************************/
BYTE Queue_Get (BYTE *out_Bufferaddr,BYTE qflag)
{
BYTE i;
BYTE temp_pointer;
DisableInterrupts;
if(qflag==MOUSE)
{
pQueue = &USB_msQueue;
}
else if(qflag==KEYBOARD)
{
pQueue = &USB_kbQueue;
}
/* else if(qflag==JOYSTICK)
{
pQueue = &USB_jkQueue;
}*/
else
{
EnableInterrupts;
return FALSE ;
}
if ((pQueue->status==EMPTY)||(pQueue->status>FULL))
{
EnableInterrupts;
return FALSE ;
}
if ( pQueue->read_pointer >= pQueue->length)
pQueue->read_pointer = 0;
temp_pointer=pQueue->read_pointer;
if(qflag==MOUSE)
{
for(i=0;i<MOUSELENGTH;i++)
{
out_Bufferaddr[i]=msqueue[temp_pointer].msbuffer[i];
msqueue[temp_pointer].msbuffer[i]=0x00;
}
}
else if(qflag==KEYBOARD)
{
for(i=0;i<KEYBOARDLENGTH;i++)
{
out_Bufferaddr[i]=kbqueue[temp_pointer].kbbuffer[i] ;
kbqueue[temp_pointer].kbbuffer[i]=0x00 ;
}
}
/* else
{
for(i=0;i<JOYSTICKLENGTH;i++)
out_Bufferaddr[i]=jkqueue[pQueue->read_pointer].jkbuffer[i] ;
}*/
temp_pointer ++ ;
pQueue->read_pointer=temp_pointer;
if ( pQueue->read_pointer >= pQueue->length)
pQueue->read_pointer = 0;
if ( pQueue->read_pointer == pQueue->write_pointer)
{
pQueue->status = EMPTY;
}
else
{
pQueue->status = NORMAL;
}
EnableInterrupts;
return TRUE;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -