qmk_firmware

QMK firmware for my keyboards (Corne, Sweep Ferris) and trackball (Ploopy Adept)
Log | Files | Refs | Submodules | LICENSE

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);