Changeset 2155


Ignore:
Timestamp:
Jan 27, 2011, 1:16:42 AM (5 years ago)
Author:
wmb
Message:

USB - handle overcurrent conditions more gracefully.

File:
1 edited

Legend:

Unmodified
Added
Removed
  • dev/usb2/hcd/probehub.fth

    r2152 r2155  
    1414: clear-status-change  ( port -- )  C_PORT_CONNECTION  DR_PORT " clear-feature" $call-parent drop  ;
    1515: parent-set-target  ( dev -- )  " set-target" $call-parent  ;
     16: hub-error?  ( -- error? )
     17   hub-buf 4  0  DR_HUB " get-status" $call-parent    ( actual usberror )
     18   nip  if                                   ( )
     19      ." Failed to get hub status" cr
     20      true                                   ( true )
     21   else                                      ( )
     22      hub-buf 2+ c@ 2 and  if                ( )
     23         ." USB Hub shut down due to over-current" cr      ( )
     24         true                                ( true )
     25      else                                   ( )
     26         false                               ( false )
     27      then                                   ( error? )
     28   then                                      ( error? )
     29;
     30
    1631: get-port-status  ( port -- error? )
    1732   hub-buf 4  2 pick   DR_PORT " get-status" $call-parent    ( port actual usberror )
     
    2843      drop false exit           ( -- false )
    2944   then                         ( port )
     45
     46   hub-buf c@ 8 and  if         ( port )
     47      ." Hub port " . ." is over current" cr
     48      false  exit               ( -- false )
     49   then
    3050
    3151   hub-buf 2+ c@  1 and  if     ( port )
     
    5979;
    6080
    61 : hub-#ports  ( -- n )
     81: hub-#ports  ( -- #ports )
    6282   hub-buf 8 0 0 HUB DR_HUB " get-desc" $call-parent nip  if
    6383      ." Failed to get hub descriptor" cr
    6484      0 exit
    6585   then
    66    hub-buf 2 + c@ 1+            ( #ports )
     86   hub-buf 2 + c@               ( #ports )
    6787;
    6888: hub-delay  ( -- #2ms )  hub-buf 5 + c@  ;
    6989
    7090: power-hub-ports  ( #ports -- )
    71    1  ?do  i power-hub-port  loop           ( )
     91   1+  1  ?do  i power-hub-port  loop       ( )
    7292   
    7393   hub-delay 2* ms                          ( )
     
    89109: probe-hub  ( dev -- )
    90110   dup parent-set-target                ( hub-dev )
    91    hub-#ports                           ( hub-dev #ports )
     111   hub-#ports  dup  0=  if              ( hub-dev #ports )
     112      2drop exit                        ( -- )
     113   then                                 ( hub-dev #ports )
    92114
    93    " configuration#" get-int-property
     115   " configuration#" get-int-property   ( hub-dev #ports config# )
    94116   " set-config" $call-parent           ( hub-dev #ports usberr )
    95117   if  drop  ." Failed to set config for hub at " u. cr exit  then  ( hub-dev #ports )
    96118
    97    dup power-hub-ports                  ( hub-dev #ports )
     119   dup power-hub-ports                  ( hub-dev #ports )
    98120
    99    1  ?do                                       ( hub-dev )
    100       dup i safe-probe-hub-port                 ( hub-dev )
    101    loop                                         ( hub-dev )
    102    drop                                         ( )
     121   hub-error?  if  2drop exit  then     ( hub-dev #ports )
     122
     123   1+ 1  ?do                            ( hub-dev )
     124      dup i safe-probe-hub-port         ( hub-dev )
     125   loop                                 ( hub-dev )
     126   drop                                 ( )
    103127;
    104128
     
    107131: do-reprobe-hub  ( dev -- )
    108132   dup parent-set-target                        ( hub-dev )
    109    hub-#ports  1  ?do                           ( hub-dev )
     133   
     134   hub-#ports  dup 0=  if                       ( hub-dev #ports )
     135      2drop exit                                ( -- )
     136   then                                         ( hub-dev #ports )
     137
     138   hub-error?  if  2drop exit  then             ( hub-dev #ports )
     139
     140   1+  1  ?do                                   ( hub-dev )
    110141      dup i port-status-changed?  if            ( hub-dev connected? )
    111142         if                                     ( hub-dev )
Note: See TracChangeset for help on using the changeset viewer.