diff Scan/UARTConnect/connect_scan.c @ 420:23a1868b4ac2

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)
author Jacob Alexander <haata@kiibohd.com>
date Sun, 21 Feb 2016 19:56:52 -0800
parents e7a3be42ae1e
children 077a1dfd8529
line wrap: on
line diff
--- a/Scan/UARTConnect/connect_scan.c	Sun Feb 21 14:19:52 2016 -0800
+++ b/Scan/UARTConnect/connect_scan.c	Sun Feb 21 19:56:52 2016 -0800
@@ -1,4 +1,4 @@
-/* Copyright (C) 2014-2015 by Jacob Alexander
+/* Copyright (C) 2014-2016 by Jacob Alexander
  *
  * This file is free software: you can redistribute it and/or modify
  * it under the terms of the GNU General Public License as published by
@@ -470,6 +470,14 @@
 			}
 			else
 			{
+				// Lower current requirement during errors
+				// USB minimum
+				// Only if this is not the master node
+				if ( Connect_id != 0 )
+				{
+					Output_update_external_current( 100 );
+				}
+
 				Connect_cableFaultsMaster++;
 				Connect_cableOkMaster = 0;
 				print(" Master ");
@@ -489,6 +497,12 @@
 			}
 			else
 			{
+				// If we already have an Id, then set max current again
+				if ( Connect_id != 255 && Connect_id != 0 )
+				{
+					// TODO reset to original negotiated current
+					Output_update_external_current( 500 );
+				}
 				Connect_cableChecksMaster++;
 			}
 		}
@@ -560,6 +574,14 @@
 	// Send reponse back to master
 	Connect_send_IdReport( id );
 
+	// Node now enumerated, set external power to USB Max
+	// Only set if this is not the master node
+	// TODO Determine power slice for each node as part of protocol
+	if ( Connect_id != 0 )
+	{
+		Output_update_external_current( 500 );
+	}
+
 	// Propogate next Id if the connection is ok
 	if ( Connect_cableOkSlave )
 	{
@@ -1177,6 +1199,13 @@
 }
 
 
+// Called by parent Scan module whenever the available current changes
+void Connect_currentChange( unsigned int current )
+{
+	// TODO - Any potential power saving here?
+}
+
+
 
 // ----- CLI Command Functions -----