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

📄 usbqueue.c.bak

📁 motorola jw32 usb 源码
💻 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 + -