public void run() { try { byte[] b = new byte[100]; int i = 0; while (i < 3) { if (l2ccon.ready()) { l2ccon.receive(b); System.out.println("Thread " + tn + " received data"); i++; } synchronized (this) { wait(100); } } l2ccon.close(); } catch (Exception e) { try { l2ccon.close(); } catch (IOException e1) { e1.printStackTrace(); } } System.out.println("Thread " + tn + " closed"); }
protected IncomingThread(int source, String btaddress) throws IOException, InterruptedException { super("out:" + btaddress); // see http://code.google.com/p/bluecove/issues/detail?id=64 System.setProperty(BlueCoveConfigProperties.PROPERTY_JSR_82_PSM_MINIMUM_OFF, "true"); System.setProperty(BlueCoveConfigProperties.PROPERTY_STACK_FIRST, "widcomm"); System.setProperty(BlueCoveConfigProperties.PROPERTY_STACK, "widcomm"); System.loadLibrary("bluecove"); String l2cap = "btl2cap://" + btaddress + ":13;authenticate=false;encrypt=false;master=false"; logger.log(LogService.LOG_DEBUG, "Bluetooth address: " + btaddress); logger.log(LogService.LOG_DEBUG, "Opening incoming connection: " + l2cap); incoming = (L2CAPConnection) Connector.open(l2cap, Connector.WRITE, true); logger.log(LogService.LOG_DEBUG, "Incoming connection is " + incoming.toString()); active = true; }
@Override public void run() { while (active) { byte[] buf = new byte[1024]; int length = 0; try { length = incoming.receive(buf); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); active = false; } /* StringBuffer sb = new StringBuffer(); logger.log(LogService.LOG_DEBUG, "received:"); for (int i = 0; i < length; i++) { String hex = Integer.toHexString(buf[i] & 0xff); sb.append(hex.length() == 1 ? "0x0" : "0x").append(hex).append(" "); if ((i + 1) % 8 == 0) { logger.log(LogService.LOG_DEBUG, sb.toString()); sb.delete(0, sb.length()); } } if (sb.length() > 0) { logger.log(LogService.LOG_DEBUG, sb.toString()); }*/ StringBuffer s = new StringBuffer(); for (int i = 0; i < length; i++) { s.append(String.format("%02x", buf[i])); } // do not take the last number in account, it seems to not be constant String incomingString = s.substring(0, s.length() - 1); Button b = buttonMatching.get(incomingString); if (b == null) { logger.log( LogService.LOG_WARNING, "The button with number '" + incomingString + "' is not recognized (usually because several buttons are pressed in the same time)."); } else { // FIXME: to be complete switch (b) { case CIRCLE_BACK_KEY: eventSender = sensorCircle; break; case DOWN_ARROW: eventSender = sensorDown; break; case LEFT_ARROW: eventSender = sensorLeft; break; case RIGHT_ARROW: eventSender = sensorRight; break; case UP_ARROW: eventSender = sensorUp; break; case ENTER_KEY: eventSender = sensorEnter; break; case PLAY_KEY: eventSender = sensorPlay; break; case SELECT_KEY: eventSender = sensorSelect; break; case SQUARE_VIEW_KEY: eventSender = sensorSquare; break; case START_KEY: eventSender = sensorStart; break; case TRIANGLE_OPTIONS_KEY: eventSender = sensorTriangle; break; case X_KEY: eventSender = sensorX; break; default: break; } } } }