Adding dynamic USB power support

- Each scan module now has a current change callback which passes the available current as a parameter
- No longer attempts to use the max 500 mA immediately, starts with 100 mA then goes to 500 mA after enumeration
- If enumeration fails due to bMaxPower of 500 mA, then attempt again at 100 mA (might also be possible to go even lower to 20 mA in certain cases)
- Now working with the Apple Ipad (no over-power messages)
- Fixed Wake-up behaviour on Apple Ipad (and likely other iOS devices)
- More effecient set_feature/clear_feature handling (device handler)
- Initial power handling via Interconnect (still needs work to get it more dynamic)
This commit is contained in:
Jacob Alexander 2016-02-21 19:56:52 -08:00
parent 62ba0c558b
commit aaae9bc0f2
29 changed files with 503 additions and 48 deletions

View file

@ -1,4 +1,4 @@
/* Copyright (C) 2013-2015 by Jacob Alexander
/* Copyright (C) 2013-2016 by Jacob Alexander
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
@ -82,6 +82,8 @@ extern volatile uint8_t Output_Available; // 0 - Output module not fully functi
extern uint8_t Output_DebugMode; // 0 - Debug disabled, 1 - Debug enabled
extern uint16_t Output_ExtCurrent_Available; // mA - Set by outside module if not using USB (i.e. Interconnect)
// ----- Functions -----
@ -97,6 +99,12 @@ void Output_softReset();
// Relies on USB serial module
unsigned int Output_availablechar();
// Returns the total mA available (total, if used in a chain, each device will have to use a slice of it)
unsigned int Output_current_available();
void Output_update_external_current( unsigned int current );
void Output_update_usb_current( unsigned int current );
int Output_getchar();
int Output_putchar( char c );
int Output_putstr( char* str );