Retry with current ruffy.

This commit is contained in:
Johannes Mockenhaupt 2017-08-27 14:12:47 +02:00
parent c8f7b535c2
commit 2a80111034
No known key found for this signature in database
GPG key ID: 9E1EA6AF7BBBB0D1
4 changed files with 47 additions and 15 deletions

View file

@ -10,12 +10,17 @@ interface IRTHandler {
void fail(String message); void fail(String message);
void requestBluetooth(); void requestBluetooth();
boolean canDisconnect();
void rtStopped(); void rtStopped();
void rtStarted(); void rtStarted();
void rtClearDisplay(); void rtClearDisplay();
void rtUpdateDisplay(in byte[] quarter, int which); void rtUpdateDisplay(in byte[] quarter, int which);
void rtDisplayHandleMenu(in Menu menu); void rtDisplayHandleMenu(in Menu menu, in int sequence);
void rtDisplayHandleNoMenu(); void rtDisplayHandleNoMenu(in int sequence);
void keySent(in int sequence);
String getServiceIdentifier();
} }

View file

@ -6,18 +6,22 @@ import org.monkey.d.ruffy.ruffy.driver.IRTHandler;
interface IRuffyService { interface IRuffyService {
void setHandler(IRTHandler handler); void addHandler(IRTHandler handler);
void removeHandler(IRTHandler handler);
/** Connect to the pump /** Connect to the pump
* *
* @return 0 if successful, -1 otherwise * @return 0 if successful, -1 otherwise
*/ */
int doRTConnect(); int doRTConnect(IRTHandler handler);
/** Disconnect from the pump */ /** Disconnect from the pump */
void doRTDisconnect(); void doRTDisconnect(IRTHandler handler);
/*What's the meaning of 'changed'?
* changed means if a button state has been changed, like btton pressed is a change and button release another*/
void rtSendKey(byte keyCode, boolean changed); void rtSendKey(byte keyCode, boolean changed);
void resetPairing(); void resetPairing();
boolean isConnected(); boolean isConnected();
boolean isBoundToPump();
} }

View file

@ -1 +0,0 @@
//b916a900c0899ef58ad58c7427d1c30d3c8731f4

View file

@ -46,9 +46,11 @@ public class RuffyScripter {
private final Object screenlock = new Object(); private final Object screenlock = new Object();
private final Object keylock = new Object();
private int keynotwait = 0;
public void start(IRuffyService newService) { public void start(IRuffyService newService) {
try { try {
/*
if (ruffyService != null) { if (ruffyService != null) {
try { try {
ruffyService.removeHandler(mHandler); ruffyService.removeHandler(mHandler);
@ -56,7 +58,6 @@ public class RuffyScripter {
// ignore // ignore
} }
} }
*/
if (newService != null) { if (newService != null) {
this.ruffyService = newService; this.ruffyService = newService;
// TODO this'll be done better in v2 via ConnectionManager // TODO this'll be done better in v2 via ConnectionManager
@ -64,7 +65,7 @@ public class RuffyScripter {
idleDisconnectMonitorThread.start(); idleDisconnectMonitorThread.start();
} }
started = true; started = true;
newService.setHandler(mHandler); newService.addHandler(mHandler);
} }
} catch (Exception e) { } catch (Exception e) {
log.error("Unhandled exception starting RuffyScripter", e); log.error("Unhandled exception starting RuffyScripter", e);
@ -77,6 +78,7 @@ public class RuffyScripter {
} }
private volatile boolean connected = false; private volatile boolean connected = false;
private volatile boolean canDisconnect = false;
private volatile long lastDisconnected = 0; private volatile long lastDisconnected = 0;
private Thread idleDisconnectMonitorThread = new Thread(new Runnable() { private Thread idleDisconnectMonitorThread = new Thread(new Runnable() {
@ -92,7 +94,8 @@ public class RuffyScripter {
&& now > lastDisconnected + 15 * 1000) { && now > lastDisconnected + 15 * 1000) {
log.debug("Disconnecting after " + (connectionTimeOutMs / 1000) + "s inactivity timeout"); log.debug("Disconnecting after " + (connectionTimeOutMs / 1000) + "s inactivity timeout");
lastDisconnected = now; lastDisconnected = now;
ruffyService.doRTDisconnect(); canDisconnect = true;
ruffyService.doRTDisconnect(mHandler);
connected = false; connected = false;
// don't attempt anything fancy in the next 10s, let the pump settle // don't attempt anything fancy in the next 10s, let the pump settle
SystemClock.sleep(10 * 1000); SystemClock.sleep(10 * 1000);
@ -127,6 +130,11 @@ public class RuffyScripter {
log.trace("Ruffy invoked requestBluetooth callback"); log.trace("Ruffy invoked requestBluetooth callback");
} }
@Override
public boolean canDisconnect() throws RemoteException {
return canDisconnect;
}
@Override @Override
public void rtStopped() throws RemoteException { public void rtStopped() throws RemoteException {
log.debug("rtStopped callback invoked"); log.debug("rtStopped callback invoked");
@ -149,7 +157,7 @@ public class RuffyScripter {
} }
@Override @Override
public void rtDisplayHandleMenu(Menu menu) throws RemoteException { public void rtDisplayHandleMenu(Menu menu, int sequence) throws RemoteException {
// method is called every ~500ms // method is called every ~500ms
log.debug("rtDisplayHandleMenu: " + menu); log.debug("rtDisplayHandleMenu: " + menu);
@ -172,9 +180,26 @@ public class RuffyScripter {
} }
@Override @Override
public void rtDisplayHandleNoMenu() throws RemoteException { public void rtDisplayHandleNoMenu(int sequence) throws RemoteException {
log.debug("rtDisplayHandleNoMenu callback invoked"); log.debug("rtDisplayHandleNoMenu callback invoked");
} }
@Override
public void keySent(int sequence) throws RemoteException {
synchronized (keylock) {
if (keynotwait > 0)
keynotwait--;
else
keylock.notify();
}
}
@Override
public String getServiceIdentifier() throws RemoteException {
return this.toString();
}
}; };
public boolean isPumpBusy() { public boolean isPumpBusy() {
@ -182,14 +207,12 @@ public class RuffyScripter {
} }
public void unbind() { public void unbind() {
/*
if (ruffyService != null) if (ruffyService != null)
try { try {
ruffyService.removeHandler(mHandler); ruffyService.removeHandler(mHandler);
} catch (Exception e) { } catch (Exception e) {
// ignore // ignore
} }
*/
this.ruffyService = null; this.ruffyService = null;
} }
@ -352,7 +375,8 @@ public class RuffyScripter {
SystemClock.sleep(10 * 1000); SystemClock.sleep(10 * 1000);
} }
boolean connectInitSuccessful = ruffyService.doRTConnect() == 0; canDisconnect = false;
boolean connectInitSuccessful = ruffyService.doRTConnect(mHandler) == 0;
log.debug("Connect init successful: " + connectInitSuccessful); log.debug("Connect init successful: " + connectInitSuccessful);
log.debug("Waiting for first menu update to be sent"); log.debug("Waiting for first menu update to be sent");
// Note: there was an 'if(currentMenu == null)' around the next call, since // Note: there was an 'if(currentMenu == null)' around the next call, since