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]