usb_device_state.h (2729B)
1 /* 2 * Copyright 2021 Andrei Purdea <andrei@purdea.ro> 3 * 4 * This program is free software: you can redistribute it and/or modify 5 * it under the terms of the GNU General Public License as published by 6 * the Free Software Foundation, either version 2 of the License, or 7 * (at your option) any later version. 8 * 9 * This program is distributed in the hope that it will be useful, 10 * but WITHOUT ANY WARRANTY; without even the implied warranty of 11 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 12 * GNU General Public License for more details. 13 * 14 * You should have received a copy of the GNU General Public License 15 * along with this program. If not, see <http://www.gnu.org/licenses/>. 16 */ 17 18 #pragma once 19 20 #include <stdbool.h> 21 #include <stdint.h> 22 23 typedef enum { 24 USB_DEVICE_STATE_NO_INIT = 0, // We're in this state before calling usb_device_state_init() 25 USB_DEVICE_STATE_INIT = 1, // Can consume up to 100mA 26 USB_DEVICE_STATE_CONFIGURED = 2, // Can consume up to what is specified in configuration descriptor, typically 500mA 27 USB_DEVICE_STATE_SUSPEND = 3 // Can consume only suspend current 28 } usb_configure_state_t; 29 30 typedef enum { 31 USB_PROTOCOL_BOOT = 0, 32 USB_PROTOCOL_REPORT = 1, 33 } usb_hid_protocol_t; 34 35 // note: we can't typedef this struct to usb_device_state_t because it would 36 // conflict with the previous definition in: 37 // lib/chibios-contrib/ext/nxp-middleware-usb/device/usb_device.h 38 struct usb_device_state { 39 uint8_t idle_rate; 40 uint8_t leds; 41 usb_hid_protocol_t protocol; 42 usb_configure_state_t configure_state; 43 }; 44 45 void usb_device_state_set_configuration(bool is_configured, uint8_t configuration_number); 46 void usb_device_state_set_suspend(bool is_configured, uint8_t configuration_number); 47 void usb_device_state_set_resume(bool is_configured, uint8_t configuration_number); 48 void usb_device_state_set_reset(void); 49 void usb_device_state_init(void); 50 usb_configure_state_t usb_device_state_get_configure_state(void); 51 void usb_device_state_set_protocol(usb_hid_protocol_t protocol); 52 usb_hid_protocol_t usb_device_state_get_protocol(void); 53 void usb_device_state_set_leds(uint8_t leds); 54 uint8_t usb_device_state_get_leds(void); 55 void usb_device_state_set_idle_rate(uint8_t idle_rate); 56 uint8_t usb_device_state_get_idle_rate(void); 57 void usb_device_state_reset_hid_state(void); 58 59 void notify_usb_device_state_change_kb(struct usb_device_state usb_device_state); 60 void notify_usb_device_state_change_user(struct usb_device_state usb_device_state);