|
楼主 |
发表于 2012-7-13 00:02
|
显示全部楼层
// Decompiled by DJ v3.12.12.96 Copyright 2011 Atanas Neshkov Date: 2012/7/12 23:51:59; x9 D2 x Y. h8 }; Q
// Home Page: http://members.fortunecity.com/neshkov/dj.html http://www.neshkov.com/dj.html - Check often for new version!
" B* y5 Y1 u- v2 K a// Decompiler options: packimports(3) 2 h& h+ \+ \1 T6 U) M7 g
// Source File Name: ChargeBatteryStage.java
( H' a4 ~% P, c- r
* z' n+ ~6 u3 t; tpackage com.palm.nova.installer.core.stages;7 ^3 ^; Z9 n4 D4 x% a
3 h8 e# [. G% K7 P- g! K
import com.palm.nova.installer.core.*;0 Q% W" F, M5 j
import com.palm.novacom.*;
: Z4 k2 z, x! N2 z+ |6 uimport java.io.IOException;3 N# S) G& \" u
( |- H5 ?- C$ O! ?+ w! [$ }) c( \// Referenced classes of package com.palm.nova.installer.core.stages:$ {! t5 Z5 b% ~* T2 Q
// BaseStage, GoIntoUpdateModeStage
/ m S! z+ @9 l- F4 D
6 t, N5 J0 g! b. Epublic class ChargeBatteryStage extends BaseStage7 t3 x" Q, t0 z; @ W
implements IInstallerStage+ v& I. t( b. S# ^ c) d+ \5 T
{
; V9 Z( _& e. r8 Q. ~, T0 u7 ~' u7 n4 h2 \
public ChargeBatteryStage(INovacomDevice device)
- L2 M3 Y6 c. J u {. Q: O6 h( n; F) r
jobId = null;
8 a1 M. y7 Q- o; n progress = null;
* T: X% Q4 G7 a currentChargeLevel = 0;
% a2 P( s- a* m5 j; m' _ this.device = device;
0 \2 c, w7 M: E7 m: G7 w0 g }
; I2 a$ Q9 H) D& \8 T& a
% m5 @# e- q( a$ y) H g3 f public String toString()- m9 W b% p- O% Y
{
2 \1 o3 s* p; t, k7 A8 Z4 S$ P return "Battery Charger";& F1 u p- j' x2 Z0 V# o4 K. s
}$ T% e2 ^* I9 H
9 g7 |9 r* _/ f) M' i private void chargeBattery()
5 z B: x3 K9 o" | throws NovacomException, IOException, ]- p: M) M1 Z+ [: Z- [1 X
{8 o/ |/ N0 h+ ?' K) Q: ~
INovacomStream stream = device.runProgram("", null);
7 I) E( K: ^/ z! x) ]/ x String command = (new StringBuilder()).append("charging enable ").append(REQUIRED_POWER_PERCENTAGE).toString();/ V) r" ^4 y4 v* G9 G Y0 V
byte bytes[] = command.getBytes("US-ASCII");, O: L) n7 f2 [5 [ J; X
stream.write(bytes);* D3 Z7 C2 y4 I- [
stream.closeOutput();
/ O+ \/ u- `5 @0 w( D String streamReturn = stream.readLine();
* u; E/ r5 C3 S do, Y, z( o* C9 o; @
{
3 T! w1 r( C$ A streamReturn = stream.readLine();
2 V( d9 T. D% z) b if(streamReturn == null)
8 y( B, l* A8 i+ ` g, M3 ^ {
' L! z( C9 Z3 x% ` progress.commentOnJob(jobId, "stream interupted");, n# \& i- D' U1 B! {1 Q3 x) X2 @
throw new NovacomException(-1, "stream interupted");: |- u4 C* Y7 S
}
0 T9 f, y+ Z# p" a if(streamReturn.length() == 0)
4 q5 P! D y5 D( p3 D {
: b$ P% \" [- W progress.commentOnJob(jobId, "power charged up");
- @4 T0 @% d8 w- w9 H f/ p break;, C8 G2 f) f- u# e& W6 \
}
7 j6 _9 }" _9 k; f9 ]7 Q7 | int start;! D6 p7 ]$ d: [4 p$ t* K
int end;
4 `7 n: u( h, z: e if((start = streamReturn.indexOf("p=")) >= 0 && (end = streamReturn.indexOf(" ", start + 2)) >= 2)
6 ?2 i2 `/ z+ D! L/ _) X/ @ {. ?# U) @7 e2 I8 f* v
start += 2;6 ~7 A/ `% n9 n$ R9 H+ R' [$ U
String strReadBatteryPercentage = streamReturn.substring(start, end);
' Q9 w4 L8 p% I) B6 A try
/ r `+ \! w% s% D: [' Z c, Y: h {
8 ~. i7 ?- X5 ?4 x int readBatteryPercentage = (new Integer(strReadBatteryPercentage)).intValue();
, b0 r! z5 u1 }3 w: q: n0 c if(readBatteryPercentage > currentChargeLevel)
" I3 D, H0 P) P: y {% A/ ~2 L2 J; R. K5 t
currentChargeLevel = readBatteryPercentage;" h9 L+ f. w3 S4 `! m0 Y( _9 _- C1 g
progress.updateJob(jobId, currentChargeLevel);
& T( B! j3 c2 u1 A& G3 L. [* v9 O progress.commentOnJob(jobId, (new StringBuilder()).append("battery percentage changed: ").append(currentChargeLevel).toString());, E0 u9 B) i4 D( ]1 K4 ?" f- P
} [, A4 Z9 b" y
Thread.sleep(500L);9 l4 q5 F0 `* K+ {! E5 ?
}
0 N% N' x3 {' X) q9 R8 z catch(NumberFormatException e)
9 _5 ~4 Y( h+ _; }( Q% c! A {
3 m5 x+ r+ _, i, I; k, [/ [7 h1 V/ } progress.commentOnJob(jobId, (new StringBuilder()).append("+++++").append(streamReturn).append("-----").toString());
+ G( L3 }) Y G! y! C) u }
! c G+ n8 w% L- Q' e, w- m) t0 _ catch(InterruptedException e) { } O- X6 m- S$ b6 o) b: m2 @+ R
} else
& `" Z5 Z- i* s( f8 F {( k2 z: f& o) S9 W p
progress.commentOnJob(jobId, (new StringBuilder()).append("+++++").append(streamReturn).append("-----").toString());7 c: H) s8 X, j1 T% \
}
) e7 D& y$ D1 d& S- J% d6 q$ ?7 ]) Z stream.flush();* c9 O; X1 T# E' [
} while(true);$ H( P& D6 r) @' j% m2 L
stream.close();& ]& G+ l# n& s! @8 E
}
W2 I1 Y$ n. y, }9 K/ O3 e$ n/ G% _* y9 S6 _
public void run(), @" b$ A; E& I' s
throws NovacomException, IOException
2 |, d! ?/ a; M, x- Q {/ j4 t4 L7 p! K: F& }
progress = getProgressHandler();! {- V. J+ m2 \/ C! r
jobId = progress.startJob("Battery Charger Stage", 100);
$ I" J, [" t& |6 O( F0 v: W; g if(device.getState() != com.palm.novacom.Novacom.DeviceState.BOOTLOADER)* c6 u6 p) o, s$ ]- ]3 \1 F
{
' _! O' j) i. A& H GoIntoUpdateModeStage intoUpdateMode = new GoIntoUpdateModeStage(device);* i! V) t @$ Z1 M4 g+ _
intoUpdateMode.run();
3 [6 ~ {$ |, ~) m9 ^8 W }1 I( m3 ^9 X7 U6 g) _8 K. K
BootieUtilities bootie = new BootieUtilities(device);
( C9 T; p: M. v int currentPercentage = bootie.checkPowerStatus().intValue();
7 `( ^; ^3 B3 B0 s M) r if(REQUIRED_POWER_PERCENTAGE.intValue() > currentPercentage)
$ H5 a1 F j1 H {& t M! }* S" x8 h. Y- [; W& [
progress.commentOnJob(jobId, (new StringBuilder()).append("Battery at ").append(currentPercentage).append("%").toString());
' A" N: m% q. y$ ] int count = 0;
/ O5 \8 N4 D5 e3 ~ do0 z5 {/ [; B) J d
{% y& X _6 R, ]; l
progress.commentOnJob(jobId, "Battery Charging Started");2 q% j. g: E( j- ~! V5 y! E& v' l
progress.commentOnJob(jobId, (new StringBuilder()).append("Charging to Sufficient Power (").append(REQUIRED_POWER_PERCENTAGE).append("%), this may take a couple of minutes").toString());% d5 P( w7 W# v# {5 A- x( B
chargeBattery();2 Y4 J' \0 w7 T. H$ s7 h& d3 g
if(++count > RECHARGE_RETRY_COUNT.intValue())
; [# i# K1 g- N throw new NovacomException(-1, "failed to charge batttery");3 [ g4 Q8 I! v/ ^
} while(REQUIRED_POWER_PERCENTAGE.intValue() > currentChargeLevel);+ F/ B7 ^) N! a
} |1 r" c: b1 s0 |1 i7 G: w
progress.endJob(jobId); b7 F( S. j& P! Z/ q6 m# y
}: h3 y8 G7 P; h. J6 S5 a7 O
$ M# Y; E( v$ t private static final Integer REQUIRED_POWER_PERCENTAGE = Integer.valueOf(25);" `$ K2 q& ]3 E% ]1 _, u8 ]% N
private static final Integer RECHARGE_RETRY_COUNT = Integer.valueOf(5);
% Y; c3 f4 u, M private final INovacomDevice device;% T; Z6 g O i3 C% j; V
private Object jobId;
. z8 M6 U2 s. y- W5 v6 O: C private IStageProgressReporter progress;8 l/ J% D" A, }& ?! n$ d+ Y; }* l
private int currentChargeLevel;
/ u8 q+ b7 p. m# ~6 f. v2 `* }3 T" `9 r* ^& z
}7 T, @9 a+ N6 v
$ q, A+ U+ ~2 O) z
' I6 x6 L. n! O- [& X1 j; o" N* t求编译~~~~~~~~~~~~~~~~~ |
|