BowlerKernel
NRBootLoader.java
Go to the documentation of this file.
1 
4 package com.neuronrobotics.sdk.bootloader;
5 
6 import java.io.IOException;
7 
8 import com.neuronrobotics.sdk.commands.neuronrobotics.bootloader.BootloaderIDCommand;
9 import com.neuronrobotics.sdk.commands.neuronrobotics.bootloader.EraseFlashCommand;
10 import com.neuronrobotics.sdk.commands.neuronrobotics.bootloader.ProgramSectionCommand;
11 import com.neuronrobotics.sdk.commands.neuronrobotics.bootloader.ResetChipCommand;
12 import com.neuronrobotics.sdk.common.BowlerAbstractConnection;
13 import com.neuronrobotics.sdk.common.BowlerAbstractDevice;
14 import com.neuronrobotics.sdk.common.BowlerDatagram;
15 import com.neuronrobotics.sdk.common.BowlerDatagramFactory;
16 import com.neuronrobotics.sdk.common.ByteList;
17 
18 // TODO: Auto-generated Javadoc
24 public class NRBootLoader extends BowlerAbstractDevice {
25 
31  public NRBootLoader(BowlerAbstractConnection serialConnection) {
32  setConnection(serialConnection);
33 
34  if(!connect()) {
35  throw new RuntimeException("Failed to connect bootloader");
36  }
37  //Log.enableDebugPrint(true);
38  //Log.enableSystemPrint(true);
39  }
40 
41  /* (non-Javadoc)
42  * @see com.neuronrobotics.sdk.common.BowlerAbstractDevice#connect()
43  */
44  @Override
45  public boolean connect() {
46  if(super.connect()) {
47  //System.out.println("Connect OK");
48  try {
50  }catch (Exception e) {
51  //System.out.println("Failed bootloader test");
52  disconnect();
53  }
54  }
56  return isAvailable();
57  //Log.enableDebugPrint(true);
58  //Log.enableSystemPrint(true);
59  }
60 
66  public String getBootloaderID(){
68  if (back==null)
69  return null;
70  String s = new String();
71  for (Byte b : back.getData()){
72  s+=(char)b.byteValue();
73  }
74  return s;
75  }
76 
84  public boolean write(int core, ByteData flashData){
85  BowlerDatagram b=null;
86  for (int i=0;i<10;i++){
87  try{
88  b = send(new ProgramSectionCommand(core,(int) flashData.getStartAddress(),new ByteList(flashData.getData())));
89  }catch (Exception e){
90  e.printStackTrace();
91  b=null;
92  }
93  if (b!=null){
94  if(!b.getRPC().contains("_err"))
95  return true;
96  }
97  }
98  System.err.println("\nFailed to send 10 times!\n");
99  return false;
100  }
101 
108  public boolean erase(int core){
109  return send(new EraseFlashCommand(core)) != null;
110  }
111 
115  public void reset(){
116  //We expect this to fail the connection.
117  //No response is expected
118  //Disconnect afterwards
120  try {
121  getConnection().sendAsync(bd);
122  getConnection().getDataOuts().flush();
123  } catch (IOException e) {
124  // TODO Auto-generated catch block
125  e.printStackTrace();
126  }
127  disconnect();
128  }
129 
130  /* (non-Javadoc)
131  * @see com.neuronrobotics.sdk.common.IBowlerDatagramListener#onAllResponse(com.neuronrobotics.sdk.common.BowlerDatagram)
132  */
133  public void onAllResponse(BowlerDatagram data) {
134  // TODO Auto-generated method stub
136  }
137 
138  /* (non-Javadoc)
139  * @see com.neuronrobotics.sdk.common.IBowlerDatagramListener#onAsyncResponse(com.neuronrobotics.sdk.common.BowlerDatagram)
140  */
141  public void onAsyncResponse(BowlerDatagram data) {
142  // TODO Auto-generated method stub
143 
144  }
145 }
boolean write(int core, ByteData flashData)
NRBootLoader(BowlerAbstractConnection serialConnection)
void setConnection(BowlerAbstractConnection connection)
BowlerDatagram send(BowlerAbstractCommand command)