Added power tracking api (#12691)
* Add power tracking API to lufa and chibios targets * power.c: Pass through power state to the notify function * power: added notify_power_state_change_user too. * making it pass the PR linter * Add a POWER_STATE_NO_INIT state, that we start in before calling power_init(); * Rename *power* to *usb_power* * removing stray newline * Rename usb_power* to usb_device_state* * Update quantum/usb_device_state.h Co-authored-by: Drashna Jaelre <drashna@live.com> * Fix comment * usb_device_state.h: Don't include quantum.h, only the necessary headers. Co-authored-by: Drashna Jaelre <drashna@live.com>
This commit is contained in:
		
							parent
							
								
									552c126bea
								
							
						
					
					
						commit
						b02a539625
					
				
					 6 changed files with 120 additions and 2 deletions
				
			
		| 
						 | 
				
			
			@ -27,6 +27,7 @@
 | 
			
		|||
#include "keyboard.h"
 | 
			
		||||
#include "action.h"
 | 
			
		||||
#include "action_util.h"
 | 
			
		||||
#include "usb_device_state.h"
 | 
			
		||||
#include "mousekey.h"
 | 
			
		||||
#include "led.h"
 | 
			
		||||
#include "sendchar.h"
 | 
			
		||||
| 
						 | 
				
			
			@ -139,6 +140,8 @@ void boardInit(void) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
void protocol_setup(void) {
 | 
			
		||||
    usb_device_state_init();
 | 
			
		||||
 | 
			
		||||
    // TESTING
 | 
			
		||||
    // chThdCreateStatic(waThread1, sizeof(waThread1), NORMALPRIO, Thread1, NULL);
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -39,6 +39,7 @@
 | 
			
		|||
#    include "led.h"
 | 
			
		||||
#endif
 | 
			
		||||
#include "wait.h"
 | 
			
		||||
#include "usb_device_state.h"
 | 
			
		||||
#include "usb_descriptor.h"
 | 
			
		||||
#include "usb_driver.h"
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			@ -412,6 +413,7 @@ static inline bool usb_event_queue_dequeue(usbevent_t *event) {
 | 
			
		|||
}
 | 
			
		||||
 | 
			
		||||
static inline void usb_event_suspend_handler(void) {
 | 
			
		||||
    usb_device_state_set_suspend(USB_DRIVER.configuration != 0, USB_DRIVER.configuration);
 | 
			
		||||
#ifdef SLEEP_LED_ENABLE
 | 
			
		||||
    sleep_led_enable();
 | 
			
		||||
#endif /* SLEEP_LED_ENABLE */
 | 
			
		||||
| 
						 | 
				
			
			@ -419,6 +421,7 @@ static inline void usb_event_suspend_handler(void) {
 | 
			
		|||
 | 
			
		||||
static inline void usb_event_wakeup_handler(void) {
 | 
			
		||||
    suspend_wakeup_init();
 | 
			
		||||
    usb_device_state_set_resume(USB_DRIVER.configuration != 0, USB_DRIVER.configuration);
 | 
			
		||||
#ifdef SLEEP_LED_ENABLE
 | 
			
		||||
    sleep_led_disable();
 | 
			
		||||
    // NOTE: converters may not accept this
 | 
			
		||||
| 
						 | 
				
			
			@ -440,6 +443,15 @@ void usb_event_queue_task(void) {
 | 
			
		|||
                last_suspend_state = false;
 | 
			
		||||
                usb_event_wakeup_handler();
 | 
			
		||||
                break;
 | 
			
		||||
            case USB_EVENT_CONFIGURED:
 | 
			
		||||
                usb_device_state_set_configuration(USB_DRIVER.configuration != 0, USB_DRIVER.configuration);
 | 
			
		||||
                break;
 | 
			
		||||
            case USB_EVENT_UNCONFIGURED:
 | 
			
		||||
                usb_device_state_set_configuration(false, 0);
 | 
			
		||||
                break;
 | 
			
		||||
            case USB_EVENT_RESET:
 | 
			
		||||
                usb_device_state_set_reset();
 | 
			
		||||
                break;
 | 
			
		||||
            default:
 | 
			
		||||
                // Nothing to do, we don't handle it.
 | 
			
		||||
                break;
 | 
			
		||||
| 
						 | 
				
			
			@ -482,13 +494,14 @@ static void usb_event_cb(USBDriver *usbp, usbevent_t event) {
 | 
			
		|||
            if (last_suspend_state) {
 | 
			
		||||
                usb_event_queue_enqueue(USB_EVENT_WAKEUP);
 | 
			
		||||
            }
 | 
			
		||||
            usb_event_queue_enqueue(USB_EVENT_CONFIGURED);
 | 
			
		||||
            return;
 | 
			
		||||
        case USB_EVENT_SUSPEND:
 | 
			
		||||
            usb_event_queue_enqueue(USB_EVENT_SUSPEND);
 | 
			
		||||
            /* Falls into.*/
 | 
			
		||||
        case USB_EVENT_UNCONFIGURED:
 | 
			
		||||
            /* Falls into.*/
 | 
			
		||||
        case USB_EVENT_RESET:
 | 
			
		||||
            usb_event_queue_enqueue(event);
 | 
			
		||||
            for (int i = 0; i < NUM_USB_DRIVERS; i++) {
 | 
			
		||||
                chSysLockFromISR();
 | 
			
		||||
                /* Disconnection event on suspend.*/
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
| 
						 | 
				
			
			@ -52,6 +52,7 @@
 | 
			
		|||
#include "usb_descriptor.h"
 | 
			
		||||
#include "lufa.h"
 | 
			
		||||
#include "quantum.h"
 | 
			
		||||
#include "usb_device_state.h"
 | 
			
		||||
#include <util/atomic.h>
 | 
			
		||||
 | 
			
		||||
#ifdef NKRO_ENABLE
 | 
			
		||||
| 
						 | 
				
			
			@ -414,7 +415,10 @@ void EVENT_USB_Device_Disconnect(void) {
 | 
			
		|||
 *
 | 
			
		||||
 * FIXME: Needs doc
 | 
			
		||||
 */
 | 
			
		||||
void EVENT_USB_Device_Reset(void) { print("[R]"); }
 | 
			
		||||
void EVENT_USB_Device_Reset(void) {
 | 
			
		||||
    print("[R]");
 | 
			
		||||
    usb_device_state_set_reset();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/** \brief Event USB Device Connect
 | 
			
		||||
 *
 | 
			
		||||
| 
						 | 
				
			
			@ -422,6 +426,8 @@ void EVENT_USB_Device_Reset(void) { print("[R]"); }
 | 
			
		|||
 */
 | 
			
		||||
void EVENT_USB_Device_Suspend() {
 | 
			
		||||
    print("[S]");
 | 
			
		||||
    usb_device_state_set_suspend(USB_Device_ConfigurationNumber != 0, USB_Device_ConfigurationNumber);
 | 
			
		||||
 | 
			
		||||
#ifdef SLEEP_LED_ENABLE
 | 
			
		||||
    sleep_led_enable();
 | 
			
		||||
#endif
 | 
			
		||||
| 
						 | 
				
			
			@ -437,6 +443,8 @@ void EVENT_USB_Device_WakeUp() {
 | 
			
		|||
    suspend_wakeup_init();
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    usb_device_state_set_resume(USB_DeviceState == DEVICE_STATE_Configured, USB_Device_ConfigurationNumber);
 | 
			
		||||
 | 
			
		||||
#ifdef SLEEP_LED_ENABLE
 | 
			
		||||
    sleep_led_disable();
 | 
			
		||||
    // NOTE: converters may not accept this
 | 
			
		||||
| 
						 | 
				
			
			@ -529,6 +537,8 @@ void EVENT_USB_Device_ConfigurationChanged(void) {
 | 
			
		|||
    /* Setup digitizer endpoint */
 | 
			
		||||
    ConfigSuccess &= Endpoint_ConfigureEndpoint((DIGITIZER_IN_EPNUM | ENDPOINT_DIR_IN), EP_TYPE_INTERRUPT, DIGITIZER_EPSIZE, 1);
 | 
			
		||||
#endif
 | 
			
		||||
 | 
			
		||||
    usb_device_state_set_configuration(USB_DeviceState == DEVICE_STATE_Configured, USB_Device_ConfigurationNumber);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
/* FIXME: Expose this table in the docs somehow
 | 
			
		||||
| 
						 | 
				
			
			@ -1059,6 +1069,7 @@ void protocol_setup(void) {
 | 
			
		|||
#endif
 | 
			
		||||
 | 
			
		||||
    setup_mcu();
 | 
			
		||||
    usb_device_state_init();
 | 
			
		||||
    keyboard_setup();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
| 
						 | 
				
			
			
 | 
			
		|||
		Loading…
	
	Add table
		Add a link
		
	
		Reference in a new issue