muyichuan2012 发表于 2021-1-25 19:42

AT32F403A HID mouse sample code

本帖最后由 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 = {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 = MouseButton;Mouse_Buffer = X;Mouse_Buffer = Y;Joystick_Send(Mouse_Buffer, Mouse_Buffer, Mouse_Buffer, Mouse_Buffer);}/*** @briefMain program* @paramNone* @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          }                                                                                           
}


页: [1]
查看完整版本: AT32F403A HID mouse sample code