implemented saving current flash memory
This commit is contained in:
parent
563a9f1b8e
commit
f086c92b40
|
@ -26,12 +26,13 @@
|
||||||
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
|
||||||
* SUCH DAMAGE.
|
* SUCH DAMAGE.
|
||||||
*
|
*
|
||||||
* $Id: SkyFlash.java,v 1.4 2008/10/28 17:04:08 fros4943 Exp $
|
* $Id: SkyFlash.java,v 1.5 2009/06/17 13:05:27 fros4943 Exp $
|
||||||
*/
|
*/
|
||||||
|
|
||||||
package se.sics.cooja.mspmote.interfaces;
|
package se.sics.cooja.mspmote.interfaces;
|
||||||
|
|
||||||
import java.awt.Component;
|
import java.awt.Component;
|
||||||
|
import java.awt.Container;
|
||||||
import java.awt.event.ActionEvent;
|
import java.awt.event.ActionEvent;
|
||||||
import java.awt.event.ActionListener;
|
import java.awt.event.ActionListener;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
@ -81,7 +82,6 @@ public class SkyFlash extends MoteInterface {
|
||||||
|
|
||||||
public JPanel getInterfaceVisualizer() {
|
public JPanel getInterfaceVisualizer() {
|
||||||
JPanel panel = new JPanel();
|
JPanel panel = new JPanel();
|
||||||
// panel.setLayout(new BoxLayout(panel, BoxLayout.Y_AXIS));
|
|
||||||
|
|
||||||
final JButton uploadButton = new JButton("Upload file");
|
final JButton uploadButton = new JButton("Upload file");
|
||||||
panel.add(uploadButton);
|
panel.add(uploadButton);
|
||||||
|
@ -97,7 +97,7 @@ public class SkyFlash extends MoteInterface {
|
||||||
|
|
||||||
uploadButton.addActionListener(new ActionListener() {
|
uploadButton.addActionListener(new ActionListener() {
|
||||||
public void actionPerformed(ActionEvent e) {
|
public void actionPerformed(ActionEvent e) {
|
||||||
byte[] fileData = readDialogFileBytes(null);
|
byte[] fileData = readDialogFileBytes(GUI.getTopParentContainer());
|
||||||
|
|
||||||
if (fileData != null) {
|
if (fileData != null) {
|
||||||
if (fileData.length > CoojaM25P80.SIZE) {
|
if (fileData.length > CoojaM25P80.SIZE) {
|
||||||
|
@ -115,7 +115,19 @@ public class SkyFlash extends MoteInterface {
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
downloadButton.setEnabled(false);
|
downloadButton.addActionListener(new ActionListener() {
|
||||||
|
public void actionPerformed(ActionEvent e) {
|
||||||
|
try {
|
||||||
|
byte[] data = new byte[CoojaM25P80.SIZE];
|
||||||
|
m24p80.seek(0);
|
||||||
|
m24p80.readFully(data);
|
||||||
|
|
||||||
|
writeDialogFileBytes(GUI.getTopParentContainer(), data);
|
||||||
|
} catch (IOException ex) {
|
||||||
|
logger.fatal("Data download failed: " + ex.getMessage(), ex);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
Observer observer;
|
Observer observer;
|
||||||
this.addObserver(observer = new Observer() {
|
this.addObserver(observer = new Observer() {
|
||||||
|
@ -126,9 +138,6 @@ public class SkyFlash extends MoteInterface {
|
||||||
// Saving observer reference for releaseInterfaceVisualizer
|
// Saving observer reference for releaseInterfaceVisualizer
|
||||||
panel.putClientProperty("intf_obs", observer);
|
panel.putClientProperty("intf_obs", observer);
|
||||||
|
|
||||||
// panel.setMinimumSize(new Dimension(140, 60));
|
|
||||||
// panel.setPreferredSize(new Dimension(140, 60));
|
|
||||||
|
|
||||||
return panel;
|
return panel;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,13 +158,51 @@ public class SkyFlash extends MoteInterface {
|
||||||
public void setConfigXML(Collection<Element> configXML, boolean visAvailable) {
|
public void setConfigXML(Collection<Element> configXML, boolean visAvailable) {
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static void writeDialogFileBytes(Component parent, byte[] data) {
|
||||||
|
JFileChooser fc = new JFileChooser();
|
||||||
|
int returnVal = fc.showSaveDialog(GUI.getTopParentContainer());
|
||||||
|
if (returnVal != JFileChooser.APPROVE_OPTION) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
File saveFile = fc.getSelectedFile();
|
||||||
|
if (saveFile.exists()) {
|
||||||
|
String s1 = "Overwrite";
|
||||||
|
String s2 = "Cancel";
|
||||||
|
Object[] options = { s1, s2 };
|
||||||
|
int n = JOptionPane.showOptionDialog(
|
||||||
|
GUI.getTopParentContainer(),
|
||||||
|
"A file with the same name already exists.\nDo you want to remove it?",
|
||||||
|
"Overwrite existing file?", JOptionPane.YES_NO_OPTION,
|
||||||
|
JOptionPane.QUESTION_MESSAGE, null, options, s1);
|
||||||
|
if (n != JOptionPane.YES_OPTION) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
if (saveFile.exists() && !saveFile.canWrite()) {
|
||||||
|
logger.fatal("No write access to file: " + saveFile);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try {
|
||||||
|
FileOutputStream outStream = new FileOutputStream(saveFile);
|
||||||
|
outStream.write(data);
|
||||||
|
outStream.close();
|
||||||
|
} catch (Exception ex) {
|
||||||
|
logger.fatal("Could not write to file: " + saveFile);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Opens a file dialog and returns the contents of the selected file or null if dialog aborted.
|
* Opens a file dialog and returns the contents of the selected file or null if dialog aborted.
|
||||||
*
|
*
|
||||||
* @param parent Dialog parent, may be null
|
* @param parent Dialog parent, may be null
|
||||||
* @return Binary contents of user selected file
|
* @return Binary contents of user selected file
|
||||||
*/
|
*/
|
||||||
public static byte[] readDialogFileBytes(Component parent) {
|
public static byte[] readDialogFileBytes(Container parent) {
|
||||||
// Choose file
|
// Choose file
|
||||||
File file = null;
|
File file = null;
|
||||||
JFileChooser fileChooser = new JFileChooser();
|
JFileChooser fileChooser = new JFileChooser();
|
||||||
|
|
Loading…
Reference in a new issue