Skip to content

Commit

Permalink
TA flasher takes care of device match if device is recognized in units
Browse files Browse the repository at this point in the history
  • Loading branch information
Androxyde committed Dec 7, 2016
1 parent ed23a7e commit c141a29
Show file tree
Hide file tree
Showing 5 changed files with 126 additions and 60 deletions.
55 changes: 46 additions & 9 deletions src/gui/MainSWT.java
Expand Up @@ -60,6 +60,7 @@
import flashsystem.Bundle;
import flashsystem.X10flash;
import gui.models.TABag;
import gui.models.TADevice;
import gui.tools.APKInstallJob;
import gui.tools.BackupSystemJob;
import gui.tools.BackupTAJob;
Expand Down Expand Up @@ -552,7 +553,7 @@ public void widgetSelected(SelectionEvent e) {
mntmTARestore.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Vector<TABag> result=null;
TADevice result=null;
File srcFolder = new File(Devices.getCurrent().getFolderRegisteted()+File.separator+"s1ta");
if (srcFolder.exists()) {
if (srcFolder.listFiles().length>0) {
Expand All @@ -576,7 +577,7 @@ public void widgetSelected(SelectionEvent e) {
}
if (backupset.size()>0) {
TARestore restore = new TARestore(shlSonyericsson,SWT.PRIMARY_MODAL | SWT.SHEET);
result = (Vector<TABag>)restore.open(backupset);
result = (TADevice)restore.open(backupset);
}
else {
logger.info("No backup found");
Expand All @@ -594,8 +595,8 @@ public void widgetSelected(SelectionEvent e) {
}
else {
boolean toflash = false;
for (int i = 0 ; i < result.size() ; i++) {
if (result.get(i).toflash.size()>0) toflash=true;
for (int i = 0 ; i < result.getBags().size() ; i++) {
if (result.getBags().get(i).toflash.size()>0) toflash=true;
}
if (!toflash) {
logger.info("Nothing to do with TA restore task");
Expand Down Expand Up @@ -632,7 +633,7 @@ public void widgetSelected(SelectionEvent e) {
mntmFlashSingleTA.addSelectionListener(new SelectionAdapter() {
@Override
public void widgetSelected(SelectionEvent e) {
Vector<TABag> result=null;
TADevice result=null;
FileDialog dlg = new FileDialog(shlSonyericsson);
dlg.setFilterExtensions(new String[]{"*.ta"});
dlg.setText("TA File Chooser");
Expand All @@ -652,7 +653,7 @@ public void widgetSelected(SelectionEvent e) {

if (backupset.size()>0) {
TARestore restore = new TARestore(shlSonyericsson,SWT.PRIMARY_MODAL | SWT.SHEET);
result = (Vector<TABag>)restore.open(backupset);
result = (TADevice)restore.open(backupset);
}
else {
logger.info("No TA file selected");
Expand All @@ -662,8 +663,8 @@ public void widgetSelected(SelectionEvent e) {
}
else {
boolean toflash = false;
for (int i = 0 ; i < result.size() ; i++) {
if (result.get(i).toflash.size()>0) toflash=true;
for (int i = 0 ; i < result.getBags().size() ; i++) {
if (result.getBags().get(i).toflash.size()>0) toflash=true;
}
if (!toflash) {
logger.info("Nothing to do with TA restore task");
Expand Down Expand Up @@ -742,13 +743,49 @@ public void widgetSelected(SelectionEvent e) {
TARawParser p = new TARawParser(new File(dir));
HashMap<String,Vector<TABag>> backup = new HashMap<String, Vector<TABag>>();
backup.put("rawta", p.getBags());
TADevice result=null;
if (backup.size()>0) {
TARestore restore = new TARestore(shlSonyericsson,SWT.PRIMARY_MODAL | SWT.SHEET);
Vector<TABag> result = (Vector<TABag>)restore.open(backup);
result = (TADevice)restore.open(backup);
}
else {
logger.info("Bad TA image. Aborting");
}
if (result==null) {
logger.info("Canceled TA restore task");
}
else {
boolean toflash = false;
for (int i = 0 ; i < result.getBags().size() ; i++) {
if (result.getBags().get(i).toflash.size()>0) toflash=true;
}
if (!toflash) {
logger.info("Nothing to do with TA restore task");
}
else {
Bundle bundle = new Bundle();
bundle.setSimulate(GlobalConfig.getProperty("simulate").toLowerCase().equals("yes"));
final X10flash flash = new X10flash(bundle,shlSonyericsson);
try {
logger.info("Please connect your device into flashmode.");
String connect = (String)WidgetTask.openWaitDeviceForFlashmode(shlSonyericsson,flash);
if (connect.equals("OK")) {
RestoreTAJob rjob = new RestoreTAJob("Flash");
rjob.setFlash(flash);
rjob.setTA(result);
rjob.schedule();
}
else
logger.info("Flash canceled");
}
catch (Exception ex){
logger.error(ex.getMessage());
logger.info("Flash canceled");
if (flash.getBundle()!=null)
flash.getBundle().close();
}
}
}
} catch (Exception exc) {}
}
else {
Expand Down
50 changes: 13 additions & 37 deletions src/gui/TARestore.java
@@ -1,10 +1,7 @@
package gui;

import gui.models.TABag;
import gui.tools.WidgetTask;
import swt_components.SwtHexEdit;

import java.io.ByteArrayInputStream;
import gui.models.TADevice;
import java.io.File;
import java.util.Arrays;
import java.util.HashMap;
Expand All @@ -13,7 +10,6 @@
import org.eclipse.swt.widgets.Dialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.MessageBox;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Label;
Expand All @@ -34,40 +30,23 @@
import org.eclipse.swt.layout.FormData;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.graphics.Font;
import org.eclipse.swt.graphics.FontData;
import org.eclipse.swt.graphics.Image;
import org.ta.parsers.TAFileParser;
import org.ta.parsers.TARawParser;
import org.ta.parsers.TAUnit;
import org.util.HexDump;

import com.igormaznitsa.jbbp.io.JBBPBitInputStream;

import org.eclipse.swt.widgets.Combo;
import org.eclipse.jface.viewers.IDoubleClickListener;
import org.apache.logging.log4j.LogManager;
import org.apache.logging.log4j.Logger;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.swt.widgets.TabFolder;
import org.eclipse.swt.widgets.TabItem;
import org.system.DeviceEntry;
import org.system.DeviceIdent;
import org.system.Devices;
import org.system.OS;
import org.system.TextFile;
import org.eclipse.swt.custom.CTabFolder;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.jface.viewers.ISelectionChangedListener;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.FillLayout;
import org.eclipse.swt.layout.RowLayout;
import org.eclipse.swt.graphics.Point;
import org.eclipse.swt.custom.StyledText;

public class TARestore extends Dialog {

Expand All @@ -78,13 +57,14 @@ public class TARestore extends Dialog {
private Label lblTAlist;
private Label lblTAFlash;
private Button btnCancel;
private Button btnFlash;
private ListViewer listViewerTAUnitsToFlash;
private Combo comboBackupset;
private Combo comboPartition;
private HashMap<String,Vector<TABag>> backupset = new HashMap<String, Vector<TABag>>();
private Vector<TAUnit> available;
private Vector<TAUnit> toflash;
private Vector<TABag> result;
private TADevice result;
CTabItemWithHexViewer hexviewer;
static final Logger logger = LogManager.getLogger(TARestore.class);
String device = "";
Expand All @@ -107,6 +87,7 @@ public TARestore(Shell parent, int style) {
*/
public Object open(HashMap<String,Vector<TABag>> backupset) {
this.backupset = backupset;
result = new TADevice();
createContents();

shlTARestore.open();
Expand Down Expand Up @@ -322,7 +303,7 @@ public void widgetSelected(SelectionEvent e) {
});
btnRtoL.setText("<-");

Button btnFlash = new Button(shlTARestore, SWT.NONE);
btnFlash = new Button(shlTARestore, SWT.NONE);

btnFlash.addSelectionListener(new SelectionAdapter() {
@Override
Expand Down Expand Up @@ -405,13 +386,8 @@ public void widgetSelected(SelectionEvent e) {
}
comboBackupset.select(0);
refreshPartitions();
TABag b = getPartition(2);
Iterator<TAUnit> i = b.available.iterator();
while (i.hasNext()) {
TAUnit u = i.next();
if (u.getUnitHex().equals("000008A2")) device = new String(u.getUnitData());
if (u.getUnitHex().equals("00001324")) serial = new String(u.getUnitData());
}
device = result.getModel();
serial = result.getSerial();
if (device.length()>0) {
id = Devices.getDeviceFromVariant(device);
if (id!=null)
Expand All @@ -421,11 +397,11 @@ public void widgetSelected(SelectionEvent e) {
}

public void refreshPartitions() {
result = backupset.get(comboBackupset.getText());
result.addBags(backupset.get(comboBackupset.getText()));
comboPartition.removeAll();
String [] comboarray = new String[result.size()];
for (int i = 0; i<result.size(); i++) {
comboarray[i]=String.valueOf(result.get(i).partition);
String [] comboarray = new String[result.getBags().size()];
for (int i = 0; i<result.getBags().size(); i++) {
comboarray[i]=String.valueOf(result.getBags().get(i).partition);
}
Arrays.sort(comboarray);
comboPartition.setItems(comboarray);
Expand All @@ -449,8 +425,8 @@ public void refreshUnits() {
}

public TABag getPartition(int partition) {
for (int i=0;i<result.size();i++) {
if (result.get(i).partition==partition) return result.get(i);
for (int i=0;i<result.getBags().size();i++) {
if (result.getBags().get(i).partition==partition) return result.getBags().get(i);
}
return null;
}
Expand Down
42 changes: 42 additions & 0 deletions src/gui/models/TADevice.java
@@ -0,0 +1,42 @@
package gui.models;

import java.util.Iterator;
import java.util.Vector;

import org.ta.parsers.TAUnit;

public class TADevice {

String model = "";
String serial = "";
Vector<TABag> tabags=null;

public TADevice() {
}

public void addBags(Vector<TABag> bags) {
tabags = bags;
for (int i=0;i<tabags.size();i++) {
if (tabags.get(i).partition==2) {
Iterator<TAUnit> iu = bags.get(i).available.iterator();
while (iu.hasNext()) {
TAUnit u = iu.next();
if (u.getUnitHex().equals("000008A2")) model = new String(u.getUnitData());
if (u.getUnitHex().equals("00001324")) serial = new String(u.getUnitData());
}
}
}
}

public Vector<TABag> getBags() {
return tabags;
}

public String getModel() {
return model;
}

public String getSerial() {
return serial;
}
}
37 changes: 23 additions & 14 deletions src/gui/tools/RestoreTAJob.java
Expand Up @@ -13,12 +13,13 @@

import flashsystem.X10flash;
import gui.models.TABag;
import gui.models.TADevice;


public class RestoreTAJob extends Job {

X10flash flash = null;
Vector<TABag> bag = null;
TADevice tadev = null;
boolean canceled = false;
static final Logger logger = LogManager.getLogger(RestoreTAJob.class);

Expand All @@ -31,27 +32,35 @@ public void setFlash(X10flash f) {
flash=f;
}

public void setTA(Vector<TABag> bag) {
this.bag = bag;
public void setTA(TADevice tad) {
this.tadev = tad;
}

protected IStatus run(IProgressMonitor monitor) {
try {
flash.openDevice();
flash.sendLoader();
for (int i=0;i<bag.size();i++) {
TABag b = bag.get(i);
if (b.toflash.size()>0) {
flash.openTA(b.partition);
for (int j=0;j<b.toflash.size();j++) {
flash.sendTAUnit(b.toflash.get(j));
if (flash.getCurrentDevice().equals(tadev.getModel()) || tadev.getModel().length()==0) {
flash.sendLoader();
for (int i=0;i<tadev.getBags().size();i++) {
TABag b = tadev.getBags().get(i);
if (b.toflash.size()>0) {
flash.openTA(b.partition);
for (int j=0;j<b.toflash.size();j++) {
flash.sendTAUnit(b.toflash.get(j));
}
flash.closeTA();
}
flash.closeTA();
}
flash.closeDevice();
logger.info("Restoring TA finished.");
LogProgress.initProgress(0);
}
else {
logger.info("Those TA units are not for your device");
flash.closeDevice();
logger.info("Restoring TA finished.");
LogProgress.initProgress(0);
}
flash.closeDevice();
logger.info("Restoring TA finished.");
LogProgress.initProgress(0);
return Status.OK_STATUS;
}
catch (Exception e) {
Expand Down
2 changes: 2 additions & 0 deletions src/org/ta/parsers/TARawParser.java
Expand Up @@ -54,6 +54,7 @@ public TARawParser(File ddfile) throws FileNotFoundException, IOException {
}
else
ddFile = ddfile;
logger.info("Parsing image "+ddFile.getAbsolutePath());
openStreams();
while (ddStream.hasAvailableData()) {
TARawBlock parsedblock = partblock.parse(ddStream).mapTo(TARawBlock.class);
Expand All @@ -78,6 +79,7 @@ public TARawParser(File ddfile) throws FileNotFoundException, IOException {
}
}
closeStreams();
logger.info("Parsing finished");
}

public void closeStreams() {
Expand Down

0 comments on commit c141a29

Please sign in to comment.