|
楼主 |
发表于 2012-7-13 00:02
|
显示全部楼层
// Decompiled by DJ v3.12.12.96 Copyright 2011 Atanas Neshkov Date: 2012/7/12 23:51:59- c, S- m1 D' |5 O: |
// Home Page: http://members.fortunecity.com/neshkov/dj.html http://www.neshkov.com/dj.html - Check often for new version!; f5 H# E* F1 M5 L8 a$ {
// Decompiler options: packimports(3) " v7 m/ T7 Q; T9 u+ ^
// Source File Name: ChargeBatteryStage.java- r S/ s$ ~& k* B2 I4 t- {
. R) e" G" ?) M8 l |package com.palm.nova.installer.core.stages; H J7 K: ]" u
" T* n& ?+ e2 }/ {& P! x6 g/ _4 ?
import com.palm.nova.installer.core.*;
, u- G4 g2 M4 Dimport com.palm.novacom.*;
8 o o9 `% ^& D. q" D( fimport java.io.IOException;
4 f) M7 j5 P! {) {! b; D3 v Y! q$ [/ r5 V9 r# d
// Referenced classes of package com.palm.nova.installer.core.stages:
1 O4 C0 B$ e2 X4 v* N" u I// BaseStage, GoIntoUpdateModeStage
N! \) s$ \" A& ^5 [4 S# g( |/ H: i: J
public class ChargeBatteryStage extends BaseStage. B' {; W5 g) l! ]8 `
implements IInstallerStage
2 \4 w9 i. @, w8 G# j7 j4 c/ Q{- t. D8 w8 U/ L& Y% {: F
& s3 g5 y( _9 b4 g. w* x
public ChargeBatteryStage(INovacomDevice device)
4 f* m$ f( i" W6 b {* S) t( J" W% M8 C% F
jobId = null;
, y8 j4 N5 T$ b7 H# c progress = null;8 _: N6 @8 O b" Y7 R: a
currentChargeLevel = 0;
, f, e* a$ J1 m! \0 P this.device = device;, [- ?- O8 D" z+ B) e% _
}8 c% z" X+ {- z( I& N
/ Z g9 M. T/ p8 m7 K; f3 a
public String toString()( y/ f+ I: f4 u* p' J: r* V
{4 L0 p1 \! }: v6 s- L8 H6 f9 q4 M* T
return "Battery Charger";
7 [/ d4 ~4 k f, p4 f }
$ Q8 U% b" V7 s6 \3 N" n, h. d3 S8 @2 c9 h
private void chargeBattery()0 f$ x1 Y% f; [* ^5 C/ x) Y3 k
throws NovacomException, IOException7 k+ o' j8 _; c% H, Y
{2 A" @1 T( a. b5 O
INovacomStream stream = device.runProgram("", null);* W8 n1 u6 Q1 a- K
String command = (new StringBuilder()).append("charging enable ").append(REQUIRED_POWER_PERCENTAGE).toString();5 A( o/ m$ {. A$ w$ N% Q6 j
byte bytes[] = command.getBytes("US-ASCII");3 c" l: |: t9 K* W/ X Z
stream.write(bytes);
$ d2 |! F7 d/ u5 y8 o stream.closeOutput();4 ~, E0 {9 e- Z
String streamReturn = stream.readLine();
9 \) |8 O; B0 v7 N& B3 _6 p, ~ do
0 _; f1 V+ A+ _6 v {
% `5 G; w. h! w; I) O streamReturn = stream.readLine();' i3 P- I! T. \
if(streamReturn == null)5 N8 }. x& h7 m; t. b" F( Y9 C
{0 Q: w, {* ]% H! v9 w
progress.commentOnJob(jobId, "stream interupted");
. r; K, ]4 J3 Q throw new NovacomException(-1, "stream interupted");$ Z- v+ G, h5 K% U9 C
}! u- n9 ~% r; U0 P
if(streamReturn.length() == 0)" r! y: Z+ ?0 y9 M
{
# W* Z# m2 F8 t" G+ q+ V" q. | progress.commentOnJob(jobId, "power charged up");( a3 I- ?- I E' ~, w
break;
( n: T9 n8 W: Z: [ K! C }
8 H2 ]3 u0 W& d6 @$ A int start;
+ e8 R8 N2 o7 @. z3 R6 H int end;
. L/ S* r& n" v- F# W% V if((start = streamReturn.indexOf("p=")) >= 0 && (end = streamReturn.indexOf(" ", start + 2)) >= 2)$ \6 R# P3 Q! }+ S% z
{$ H3 K& u/ r* V0 }; J- b
start += 2;3 N# ~) J' I) w- m' G# A
String strReadBatteryPercentage = streamReturn.substring(start, end);8 h1 P4 W* X' m( z
try+ j+ m0 M/ G' J; w, |5 ~
{9 a0 V" l1 ~3 j) P; b& E4 ~
int readBatteryPercentage = (new Integer(strReadBatteryPercentage)).intValue();
[; E( X- x1 m$ e4 Y- U3 a: R if(readBatteryPercentage > currentChargeLevel); {+ `) H4 K, n5 O1 |7 A
{" [. Z5 `5 f% m/ h
currentChargeLevel = readBatteryPercentage;8 Z% o3 d: x% F% p
progress.updateJob(jobId, currentChargeLevel);
' S a- [3 C; {3 b& V2 Q progress.commentOnJob(jobId, (new StringBuilder()).append("battery percentage changed: ").append(currentChargeLevel).toString());! X* D& P0 Z) B
}. Z, V/ ]: K# m7 N
Thread.sleep(500L);, z+ S* S* A. g' l0 `9 W' c2 k& P
}
9 g7 X& D0 L! I" W1 K$ e7 d3 j catch(NumberFormatException e)
7 Q# _, _2 D x& _# ^4 b2 ]9 @ {
* \" y P' u, u( |3 R progress.commentOnJob(jobId, (new StringBuilder()).append("+++++").append(streamReturn).append("-----").toString());
" L3 W6 [" R$ Q/ N m! K- v2 |' S }& Y% Q7 \0 A+ \
catch(InterruptedException e) { }9 |3 K. M7 B5 Z3 \- Y
} else# @" K" Z5 `, b4 @" p
{
! z1 g- f3 o: I3 d$ o, S progress.commentOnJob(jobId, (new StringBuilder()).append("+++++").append(streamReturn).append("-----").toString());
6 l' A1 f5 f7 m# G# u0 Q' q; E }! p3 Q3 ^! Q' V( E( _4 [! x
stream.flush();7 M/ k9 L U( t
} while(true);2 n( s% V: E3 L( c, d/ v
stream.close();
7 g% }$ ]! S: s1 J3 S$ u }3 _, r, V, Z6 o# k R
8 C* {; O0 X @( h public void run()
+ m. V( \ l G# `: V7 C! t+ b throws NovacomException, IOException
" ]" ?! U: \8 I2 }: Y {% G% b5 J2 x8 O$ O: d9 d& A8 `
progress = getProgressHandler();" r0 `$ q% B; Q: V& d+ r Q! s
jobId = progress.startJob("Battery Charger Stage", 100);
% f C: F9 W2 S if(device.getState() != com.palm.novacom.Novacom.DeviceState.BOOTLOADER)7 V( q5 C; ^' d! C, t
{% @6 D' a @- [; R3 u+ v
GoIntoUpdateModeStage intoUpdateMode = new GoIntoUpdateModeStage(device);7 f U0 z" h! H4 T
intoUpdateMode.run();/ F) ]9 `( E$ r) H8 R! G! ^
}
# d8 d7 \1 b( x' Z# P, c1 h BootieUtilities bootie = new BootieUtilities(device);
! r, z; f) s5 y, b. \$ m/ a int currentPercentage = bootie.checkPowerStatus().intValue();
6 \4 J7 J \2 @ if(REQUIRED_POWER_PERCENTAGE.intValue() > currentPercentage)
3 A- C8 I6 z/ W. f( p: H4 h6 Y9 { {' b1 _+ y* [, p$ _: H
progress.commentOnJob(jobId, (new StringBuilder()).append("Battery at ").append(currentPercentage).append("%").toString());! }6 r$ B, U- U1 l2 T; l5 K
int count = 0;# }: a3 n9 O) ^, _# G6 e# I
do7 \* h+ A6 M. _' {# Q! b7 D6 W
{9 F2 X0 B$ @( P' m6 O
progress.commentOnJob(jobId, "Battery Charging Started");+ O% D2 ~8 b9 T2 v8 e! b
progress.commentOnJob(jobId, (new StringBuilder()).append("Charging to Sufficient Power (").append(REQUIRED_POWER_PERCENTAGE).append("%), this may take a couple of minutes").toString());
0 O- U: e. x% t$ D chargeBattery();; ^% ?# j! ~7 i6 D' Z) {
if(++count > RECHARGE_RETRY_COUNT.intValue())& j! X7 y3 W5 |* N
throw new NovacomException(-1, "failed to charge batttery");
& x$ _. o0 _. ]2 O4 n } while(REQUIRED_POWER_PERCENTAGE.intValue() > currentChargeLevel);% T1 {! [. j6 y3 ~' e1 j
}
( O; f( n. K% {( K progress.endJob(jobId);
, l, e: C3 _7 o2 R" Q" u }
$ z& Z1 M7 l0 |* [: h6 B$ ^ f2 n! s k( a
private static final Integer REQUIRED_POWER_PERCENTAGE = Integer.valueOf(25);
2 x1 m/ i2 _$ o: j4 ~# m private static final Integer RECHARGE_RETRY_COUNT = Integer.valueOf(5); |% @$ ?2 a* `3 [
private final INovacomDevice device;
6 v+ ~3 S1 @5 s+ ^, N3 X private Object jobId;8 A7 o2 `0 r4 E9 P
private IStageProgressReporter progress;
& }! [, F3 E, G, N5 f9 S$ X private int currentChargeLevel;
8 ~8 K/ l+ O: V
" w3 W& A% k6 {}
" H$ f5 \: D) E F2 Y! b9 c
6 G; o/ ^5 s+ p. m1 f8 x7 a
$ K: i: C0 e0 I: P求编译~~~~~~~~~~~~~~~~~ |
|