打印
[应用相关]

AT32F403A HID mouse sample code

[复制链接]
869|0
手机看帖
扫描二维码
随时随地手机跟帖
跳转到指定楼层
楼主
muyichuan2012|  楼主 | 2021-1-25 19:42 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
本帖最后由 muyichuan2012 于 2021-1-25 19:44 编辑

HID mouse sample code
1. 鼠标自动移动
2. 增加 remote wakeup

增加PA0控制是否要移动鼠标功能。
接上PC 之后鼠标会自动移动
PC进入休眠之后可以通过按键PA0 使能Remotewakeup功能

#include "usb_lib.h"
#include "hw_config.h"
#include "usb_pwr.h"
#include "at32_board.h"

/** @addtogroup AT32F413_StdPeriph_Examples
  * @{
  */

/** @addtogroup USB_Mouse
  * @{
  */
void Mouse_send(uint8_t operation)
{
  uint8_t Mouse_Buffer[4] = {0, 0, 0, 0};
  int8_t X = 0, Y = 0,MouseButton=0;

  switch (operation)
  {
    case LEFT:
      X -= CURSOR_STEP;
      break;

    case RIGHT:
      X += CURSOR_STEP;
      break;
         
    case UP:
      Y -= CURSOR_STEP;
      break;

    case DOWN:
      Y += CURSOR_STEP;
          break;

    default:
      return;
  }
  Mouse_Buffer[0] = MouseButton;
  Mouse_Buffer[1] = X;
  Mouse_Buffer[2] = Y;
  Joystick_Send(Mouse_Buffer[0], Mouse_Buffer[1], Mouse_Buffer[2], Mouse_Buffer[3]);
  
}  
/**
  * @brief  Main program
  * @param  None
  * @retval None
  */
int main(void)
{               
    BUTTON_Type Button_Press;
    u8 keysta = 0, i;        
    static uint8_t s_flag = 0;
    /*AT START F4xx board initialize
    * Include LED, Button
    */
    AT32_Board_Init();
   
    /*USB GPIO configure*/
    AT32_USB_GPIO_init();
   
    /*Enable USB Interrut*/
           USB_Interrupts_Config();   
   
    /*Set USB Clock, USB Clock must 48MHz*/
    Set_USBClock();
   
    /*if use USB SRAM_Size = 768 Byte, default is 512 Byte*/
    //Set_USB768ByteMode();
   
    /* USB protocol and register initialize*/
           USB_Init();
   
//    while(!(GPIOA->IPTDT & 1));
   
    while(1)
          {
       if ( AT32_BUTTON_Press() == BUTTON_WAKEUP )
       {
//         Delay_ms(100);
         if ( s_flag )
           s_flag = 0;
         else
           s_flag = 1;
       }
      
       if ( bDeviceState == CONFIGURED && s_flag)
        {
            for (i = 1; i <= 10; i++)
            {
                Mouse_send(LEFT);
                Delay_ms(20);
                Mouse_send(UP);
                Delay_ms(20);
            }
            for (i = 1; i <= 10; i++)
            {

                Mouse_send(RIGHT);
                Delay_ms(20);
                Mouse_send(UP);
                Delay_ms(20);
            }
            for (i = 1; i <= 10; i++)
            {
                Mouse_send(RIGHT);
                Delay_ms(20);
                Mouse_send(DOWN);
                Delay_ms(20);
            }
            for (i = 1; i <= 10; i++)
            {
                Mouse_send(LEFT);
                Delay_ms(20);
                Mouse_send(DOWN);
                Delay_ms(20);
            }
        }else if ( bDeviceState == SUSPENDED)
        {
            if (AT32_BUTTON_Press() == BUTTON_WAKEUP && ((pInformation->Current_Feature & 0x20) != 0))
                Resume(RESUME_INTERNAL);
        }
#if 0
        Button_Press = AT32_BUTTON_Press();
        switch (Button_Press)
        {

            case BUTTON_WAKEUP:
                Joystick_Send(2, 0, 0, 0); /*send mouse right button*/
                keysta = 1;
                break;
            default:
                break;
        }
        if ( keysta != 0 )
        {
            Delay_ms(30);
            keysta=0;
            Joystick_Send(0,0,0,0);       /*release the button*/
        }
        Delay_ms(40);
        AT32_LEDn_Toggle(LED4);
#endif
          }
   
                                                                                         

}



Mouse_test.zip

44.24 KB

使用特权

评论回复
发新帖 我要提问
您需要登录后才可以回帖 登录 | 注册

本版积分规则

198

主题

1900

帖子

28

粉丝