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

📄 usb_hid_generic_api.c

📁 用AT89C5131A开发USB的框架很好用
💻 C
字号:
#include "config.h"
#include "..\usb\usb_task.h"
#include "usb_hid_generic_api.h"
#include "lib_mcu\usb\usb_drv.h"


/*_____ D E F I N I T I O N ________________________________________________*/

U16    data_state = 0;
U8     send_data[15]={'a','b','c','d','e','f','g','h','k','l','m','n'};
U8     get_data[8];
U8     *pointer;
bit    reset_to_bootloader = FALSE;
extern volatile bit      usb_continuous_mode;
extern U8                send_free = 1;
extern S_hid_set_control SetControlBytes;
extern _MEM_TYPE_SLOW_ U8  usb_configuration_nb;




/*F**************************************************************************
* NAME: usb_read_continuous
*----------------------------------------------------------------------------
* PARAMS:
* delay:    none
* return:   none
*----------------------------------------------------------------------------
* PURPOSE: 
* This function gets data from USB bus with the continuous tansfer mode 
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE: 
*----------------------------------------------------------------------------
* REQUIREMENTS: 
*****************************************************************************/
U8 usb_read_continuous(U8 *buffer)
{
U8 number_of_byte;
   if (usb_configuration_nb != 0)
   {
      number_of_byte = 0;
      if (Is_new_data_read())
      {
         number_of_byte = Usb_byte_counter_8();
         usb_read_packet(EP_HID_OUT,buffer,number_of_byte);
         Usb_ack_receive_out_hid();
      }
      return number_of_byte;
   }
   else
   {
      return 0;
   }
}

/*F**************************************************************************
* NAME: usb_write_continuous
*----------------------------------------------------------------------------
* PARAMS:
* delay:    none
* return:   none
*----------------------------------------------------------------------------
* PURPOSE: 
* This function sends data through USB bus with the continuous tansfer mode 
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE: 
*----------------------------------------------------------------------------
* REQUIREMENTS: 
*****************************************************************************/
U8 usb_write_continuous(U8 *buffer, U8 data_length)
{
U8 remaining;
U8 c;
   if (usb_configuration_nb != 0)
   {
      if (data_length > LENGTH_OF_REPORT)
      {
         data_length = LENGTH_OF_REPORT;
      }
      c = data_length;
      remaining = LENGTH_OF_REPORT - data_length;
      send_free=0;
      Usb_select_endpoint(EP_HID_IN);
      while(0 != c)               // send data contained in buffer
      {
         Usb_write_byte(*buffer);
         c--;
         buffer++;
      }
      while(0!=remaining)           // complete the report if necessary with 0xFF
      {
         Usb_write_byte(0xFF);
         remaining--;
      }

      Usb_send_control_in();
      return data_length;
   }
   else
   {
      return 0;
   }
}

/*F**************************************************************************
* NAME: usb_transfer_data
*----------------------------------------------------------------------------
* PARAMS:
* delay:    none
* return:   none
*----------------------------------------------------------------------------
* PURPOSE: 
* This function sends data through USB bus with the chosen tansfer mode 
*----------------------------------------------------------------------------
* EXAMPLE:
*----------------------------------------------------------------------------
* NOTE: 
*----------------------------------------------------------------------------
* REQUIREMENTS: 
*****************************************************************************/
/*void usb_standard_transfer(void)
{
   switch (data_state){
   case   USB_HID_WAIT_MODE:
          if(usb_continuous_mode == 0)
          { 
             pointer=&send_data;
             data_state = USB_HID_WAIT_REPORT;
          }
          break;
   case   USB_HID_WAIT_REPORT:
          if (SetControlBytes.arrived == 1)
          { 
             if (SetControlBytes.direction == DIR_OUT)
                 data_state = USB_HID_RECEIVE_DATA_STANDARD;
             if (SetControlBytes.direction == DIR_IN)  
                 data_state = USB_HID_SEND_DATA_STANDARD;
          }                
          break;
   case  USB_HID_RECEIVE_DATA_STANDARD : 
         Usb_select_endpoint(EP_HID_OUT);
         if (Is_usb_receive_out_hid())
         { 
            usb_read_packet(EP_HID_OUT, &get_data, LENGTH_OF_REPORT);
            Usb_ack_receive_out_hid();
            SetControlBytes.length -= LENGTH_OF_REPORT; 
         }
         if (SetControlBytes.length <= 0)
         {   
            SetControlBytes.arrived = 0;
            data_state = USB_HID_WAIT_REPORT;
         }
         break;
   case  USB_HID_SEND_DATA_STANDARD :
         if (SetControlBytes.length > 0)
         { 
            pointer += usb_send_packet(EP_HID_IN, pointer, LENGTH_OF_REPORT);
            SetControlBytes.length -= LENGTH_OF_REPORT;
            data_state = USB_HID_WAIT_SEND_DATA_STANDARD;
         }
         else 
         {
            data_state = USB_HID_WAIT_REPORT;
            SetControlBytes.arrived = 0;
            pointer = &send_data;
         }
                //don't put 'break' here
   case  USB_HID_WAIT_SEND_DATA_STANDARD :
         Usb_select_endpoint(EP_HID_IN);
         if(Is_usb_read_control_enabled())
         {
            Usb_ack_in_ready();
            data_state = USB_HID_SEND_DATA_STANDARD;
         }
         break;
   default :
         data_state = USB_HID_WAIT_MODE;
         break;
   }
}
*/



⌨️ 快捷键说明

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