18caefee3SMatthias Ringwald package com.bluekitchen.sppclient; 28caefee3SMatthias Ringwald 38caefee3SMatthias Ringwald import java.io.UnsupportedEncodingException; 48caefee3SMatthias Ringwald import java.util.ArrayList; 58caefee3SMatthias Ringwald import java.util.List; 68caefee3SMatthias Ringwald 78caefee3SMatthias Ringwald import android.annotation.SuppressLint; 88caefee3SMatthias Ringwald import android.app.Activity; 98caefee3SMatthias Ringwald import android.os.Bundle; 108caefee3SMatthias Ringwald import android.util.Log; 118caefee3SMatthias Ringwald import android.view.Menu; 128caefee3SMatthias Ringwald import android.widget.TextView; 138caefee3SMatthias Ringwald 148caefee3SMatthias Ringwald import com.bluekitchen.btstack.RFCOMMDataPacket; 158caefee3SMatthias Ringwald import com.bluekitchen.btstack.BD_ADDR; 168caefee3SMatthias Ringwald import com.bluekitchen.btstack.BTstack; 178caefee3SMatthias Ringwald import com.bluekitchen.btstack.Packet; 188caefee3SMatthias Ringwald import com.bluekitchen.btstack.PacketHandler; 198caefee3SMatthias Ringwald import com.bluekitchen.btstack.Util; 208caefee3SMatthias Ringwald import com.bluekitchen.btstack.event.BTstackEventState; 218caefee3SMatthias Ringwald import com.bluekitchen.btstack.event.HCIEventCommandComplete; 228caefee3SMatthias Ringwald import com.bluekitchen.btstack.event.HCIEventDisconnectionComplete; 238caefee3SMatthias Ringwald import com.bluekitchen.btstack.event.HCIEventHardwareError; 248caefee3SMatthias Ringwald import com.bluekitchen.btstack.event.HCIEventInquiryComplete; 258caefee3SMatthias Ringwald import com.bluekitchen.btstack.event.HCIEventInquiryResultWithRssi; 268caefee3SMatthias Ringwald import com.bluekitchen.btstack.event.HCIEventRemoteNameRequestComplete; 27*c9eeefbcSMatthias Ringwald import com.bluekitchen.btstack.event.RFCOMMEventChannelOpened; 28045013feSMatthias Ringwald import com.bluekitchen.btstack.event.SDPEventQueryComplete; 29045013feSMatthias Ringwald import com.bluekitchen.btstack.event.SDPEventQueryRFCOMMService; 308caefee3SMatthias Ringwald 318caefee3SMatthias Ringwald 328caefee3SMatthias Ringwald public class MainActivity extends Activity implements PacketHandler { 338caefee3SMatthias Ringwald 348caefee3SMatthias Ringwald // minimal Android text UI 358caefee3SMatthias Ringwald 368caefee3SMatthias Ringwald private static final String BTSTACK_TAG = "BTstack"; 378caefee3SMatthias Ringwald 388caefee3SMatthias Ringwald private TextView tv; 398caefee3SMatthias Ringwald private String onScreenMessage = ""; 408caefee3SMatthias Ringwald 418caefee3SMatthias Ringwald @Override onCreate(Bundle savedInstanceState)428caefee3SMatthias Ringwald protected void onCreate(Bundle savedInstanceState) { 438caefee3SMatthias Ringwald super.onCreate(savedInstanceState); 448caefee3SMatthias Ringwald setContentView(R.layout.activity_main); 458caefee3SMatthias Ringwald 468caefee3SMatthias Ringwald tv = new TextView(this); 478caefee3SMatthias Ringwald setContentView(tv); 488caefee3SMatthias Ringwald 498caefee3SMatthias Ringwald test(); 508caefee3SMatthias Ringwald } 518caefee3SMatthias Ringwald addMessage(final String message)528caefee3SMatthias Ringwald void addMessage(final String message){ 538caefee3SMatthias Ringwald onScreenMessage = onScreenMessage + "\n" + message; 548caefee3SMatthias Ringwald Log.d(BTSTACK_TAG, message); 558caefee3SMatthias Ringwald runOnUiThread(new Runnable(){ 568caefee3SMatthias Ringwald public void run(){ 578caefee3SMatthias Ringwald tv.setText(onScreenMessage); 588caefee3SMatthias Ringwald } 598caefee3SMatthias Ringwald }); 608caefee3SMatthias Ringwald } 618caefee3SMatthias Ringwald addTempMessage(final String message)628caefee3SMatthias Ringwald void addTempMessage(final String message){ 638caefee3SMatthias Ringwald Log.d(BTSTACK_TAG, message); 648caefee3SMatthias Ringwald runOnUiThread(new Runnable(){ 658caefee3SMatthias Ringwald public void run(){ 668caefee3SMatthias Ringwald tv.setText(onScreenMessage +"\n" + message); 678caefee3SMatthias Ringwald } 688caefee3SMatthias Ringwald }); 698caefee3SMatthias Ringwald } 708caefee3SMatthias Ringwald clearMessages()718caefee3SMatthias Ringwald void clearMessages(){ 728caefee3SMatthias Ringwald onScreenMessage = ""; 738caefee3SMatthias Ringwald runOnUiThread(new Runnable(){ 748caefee3SMatthias Ringwald public void run(){ 758caefee3SMatthias Ringwald tv.setText(onScreenMessage); 768caefee3SMatthias Ringwald } 778caefee3SMatthias Ringwald }); 788caefee3SMatthias Ringwald } 798caefee3SMatthias Ringwald 808caefee3SMatthias Ringwald 818caefee3SMatthias Ringwald @Override onCreateOptionsMenu(Menu menu)828caefee3SMatthias Ringwald public boolean onCreateOptionsMenu(Menu menu) { 838caefee3SMatthias Ringwald // Inflate the menu; this adds items to the action bar if it is present. 848caefee3SMatthias Ringwald getMenuInflater().inflate(R.menu.main, menu); 858caefee3SMatthias Ringwald return true; 868caefee3SMatthias Ringwald } 878caefee3SMatthias Ringwald 888caefee3SMatthias Ringwald 898caefee3SMatthias Ringwald // helper class to store inquiry results 908caefee3SMatthias Ringwald private static class RemoteDevice{ 918caefee3SMatthias Ringwald private enum NAME_STATE { 928caefee3SMatthias Ringwald REMOTE_NAME_REQUEST, REMOTE_NAME_INQUIRED, REMOTE_NAME_FETCHED 938caefee3SMatthias Ringwald }; 948caefee3SMatthias Ringwald 958caefee3SMatthias Ringwald private BD_ADDR bdAddr; 968caefee3SMatthias Ringwald private int pageScanRepetitionMode; 978caefee3SMatthias Ringwald private int clockOffset; 988caefee3SMatthias Ringwald private String name; 998caefee3SMatthias Ringwald private NAME_STATE state; 1008caefee3SMatthias Ringwald RemoteDevice(BD_ADDR bdAddr, int pageScanRepetitionMode, int clockOffset)1018caefee3SMatthias Ringwald public RemoteDevice(BD_ADDR bdAddr, int pageScanRepetitionMode, int clockOffset) { 1028caefee3SMatthias Ringwald this.bdAddr = bdAddr; 1038caefee3SMatthias Ringwald this.state = NAME_STATE.REMOTE_NAME_REQUEST; 1048caefee3SMatthias Ringwald } 1058caefee3SMatthias Ringwald nameRequest()1068caefee3SMatthias Ringwald public boolean nameRequest() { 1078caefee3SMatthias Ringwald return this.state == NAME_STATE.REMOTE_NAME_REQUEST; 1088caefee3SMatthias Ringwald } 1098caefee3SMatthias Ringwald inquireName(BTstack btstack)1108caefee3SMatthias Ringwald public void inquireName(BTstack btstack) { 1118caefee3SMatthias Ringwald this.state = NAME_STATE.REMOTE_NAME_INQUIRED; 1128caefee3SMatthias Ringwald btstack.HCIRemoteNameRequest(bdAddr, pageScanRepetitionMode, 0, clockOffset); 1138caefee3SMatthias Ringwald } 1148caefee3SMatthias Ringwald getBDAddress()1158caefee3SMatthias Ringwald public BD_ADDR getBDAddress() { 1168caefee3SMatthias Ringwald return this.bdAddr; 1178caefee3SMatthias Ringwald } 1188caefee3SMatthias Ringwald getName()1198caefee3SMatthias Ringwald private String getName() { 1208caefee3SMatthias Ringwald return name; 1218caefee3SMatthias Ringwald } 1228caefee3SMatthias Ringwald setName(String name)1238caefee3SMatthias Ringwald private void setName(String name) { 1248caefee3SMatthias Ringwald this.state = NAME_STATE.REMOTE_NAME_FETCHED; 1258caefee3SMatthias Ringwald this.name = name; 1268caefee3SMatthias Ringwald } 1278caefee3SMatthias Ringwald } 1288caefee3SMatthias Ringwald 1298caefee3SMatthias Ringwald // constants 1308caefee3SMatthias Ringwald 1318caefee3SMatthias Ringwald private static final int HCI_INQUIRY_LAP = 0x9E8B33; // 0x9E8B33: General/Unlimited Inquiry Access Code (GIAC) 1328caefee3SMatthias Ringwald private static final int INQUIRY_INTERVAL = 5; 1338caefee3SMatthias Ringwald private static final int SPP_UUID = 0x1002; 1348caefee3SMatthias Ringwald 1358caefee3SMatthias Ringwald private enum STATE { 1368caefee3SMatthias Ringwald w4_btstack_working, w4_write_inquiry_mode, w4_scan_result, w4_remote_name, w4_sdp_query_result, w4_connected, active 1378caefee3SMatthias Ringwald }; 1388caefee3SMatthias Ringwald 1398caefee3SMatthias Ringwald private static final String REMOTE_DEVICE_NAME_PREFIX = "BTstack SPP"; 1408caefee3SMatthias Ringwald private static final String RFCOMM_SERVICE_PREFIX = "SPP"; 1418caefee3SMatthias Ringwald 1428caefee3SMatthias Ringwald // state 1438caefee3SMatthias Ringwald 1448caefee3SMatthias Ringwald private BTstack btstack; 1458caefee3SMatthias Ringwald private STATE state; 1468caefee3SMatthias Ringwald private int testHandle; 1478caefee3SMatthias Ringwald 1488caefee3SMatthias Ringwald private int rfcommChannelID = 0; 1498caefee3SMatthias Ringwald private int mtu = 0; 1508caefee3SMatthias Ringwald private BD_ADDR remoteBDAddr; 1518caefee3SMatthias Ringwald 152045013feSMatthias Ringwald List<SDPEventQueryRFCOMMService> services = new ArrayList<SDPEventQueryRFCOMMService>(10); 1538caefee3SMatthias Ringwald List<RemoteDevice> devices = new ArrayList<RemoteDevice>(10); 1548caefee3SMatthias Ringwald 1558caefee3SMatthias Ringwald private int counter; 1568caefee3SMatthias Ringwald 1578caefee3SMatthias Ringwald hasMoreRemoteNameRequests()1588caefee3SMatthias Ringwald private boolean hasMoreRemoteNameRequests() { 1598caefee3SMatthias Ringwald for (RemoteDevice device:devices){ 1608caefee3SMatthias Ringwald if (device.nameRequest()){ 1618caefee3SMatthias Ringwald return true; 1628caefee3SMatthias Ringwald } 1638caefee3SMatthias Ringwald } 1648caefee3SMatthias Ringwald return false; 1658caefee3SMatthias Ringwald } 1668caefee3SMatthias Ringwald doNextRemoteNameRequest()1678caefee3SMatthias Ringwald private void doNextRemoteNameRequest() { 1688caefee3SMatthias Ringwald for (RemoteDevice device:devices){ 1698caefee3SMatthias Ringwald if (device.nameRequest()){ 1708caefee3SMatthias Ringwald addMessage("Get remote name of " + device.getBDAddress()); 1718caefee3SMatthias Ringwald device.inquireName(btstack); 1728caefee3SMatthias Ringwald return; 1738caefee3SMatthias Ringwald } 1748caefee3SMatthias Ringwald } 1758caefee3SMatthias Ringwald } 1768caefee3SMatthias Ringwald restartInquiry()1778caefee3SMatthias Ringwald private void restartInquiry(){ 1788caefee3SMatthias Ringwald clearMessages(); 1798caefee3SMatthias Ringwald addMessage("Restart Inquiry"); 1808caefee3SMatthias Ringwald state = STATE.w4_scan_result; 1818caefee3SMatthias Ringwald services.clear(); 1828caefee3SMatthias Ringwald devices.clear(); 1838caefee3SMatthias Ringwald counter = 0; 1848caefee3SMatthias Ringwald btstack.HCIInquiry(HCI_INQUIRY_LAP, INQUIRY_INTERVAL, 0); 1858caefee3SMatthias Ringwald } 1868caefee3SMatthias Ringwald 1878caefee3SMatthias Ringwald @SuppressLint("DefaultLocale") handlePacket(Packet packet)1888caefee3SMatthias Ringwald public void handlePacket(Packet packet){ 1898caefee3SMatthias Ringwald if (packet instanceof HCIEventHardwareError){ 1908caefee3SMatthias Ringwald clearMessages(); 1918caefee3SMatthias Ringwald addMessage("Received HCIEventHardwareError, \nhandle power cycle of the Bluetooth \nchip of the device."); 1928caefee3SMatthias Ringwald } 1938caefee3SMatthias Ringwald 1948caefee3SMatthias Ringwald if (packet instanceof HCIEventDisconnectionComplete){ 1958caefee3SMatthias Ringwald HCIEventDisconnectionComplete event = (HCIEventDisconnectionComplete) packet; 1968caefee3SMatthias Ringwald testHandle = event.getConnectionHandle(); 1978caefee3SMatthias Ringwald addMessage(String.format("Received disconnect, status %d, handle %x", event.getStatus(), testHandle)); 1988caefee3SMatthias Ringwald restartInquiry(); 1998caefee3SMatthias Ringwald return; 2008caefee3SMatthias Ringwald } 2018caefee3SMatthias Ringwald 2028caefee3SMatthias Ringwald switch (state){ 2038caefee3SMatthias Ringwald case w4_btstack_working: 2048caefee3SMatthias Ringwald if (packet instanceof BTstackEventState){ 2058caefee3SMatthias Ringwald BTstackEventState event = (BTstackEventState) packet; 2068caefee3SMatthias Ringwald if (event.getState() == 2) { 2078caefee3SMatthias Ringwald addMessage("BTstack working. Set write inquiry mode."); 2088caefee3SMatthias Ringwald state = STATE.w4_write_inquiry_mode; 2098caefee3SMatthias Ringwald btstack.HCIWriteInquiryMode(1); // with RSSI 2108caefee3SMatthias Ringwald } 2118caefee3SMatthias Ringwald } 2128caefee3SMatthias Ringwald break; 2138caefee3SMatthias Ringwald 2148caefee3SMatthias Ringwald case w4_write_inquiry_mode: 2158caefee3SMatthias Ringwald if (packet instanceof HCIEventCommandComplete){ 2168caefee3SMatthias Ringwald state = STATE.w4_scan_result; 2178caefee3SMatthias Ringwald btstack.HCIInquiry(HCI_INQUIRY_LAP, INQUIRY_INTERVAL, 0); 2188caefee3SMatthias Ringwald } 2198caefee3SMatthias Ringwald break; 2208caefee3SMatthias Ringwald 2218caefee3SMatthias Ringwald case w4_scan_result: 2228caefee3SMatthias Ringwald if (packet instanceof HCIEventInquiryResultWithRssi){ 2238caefee3SMatthias Ringwald HCIEventInquiryResultWithRssi result = (HCIEventInquiryResultWithRssi) packet; 2248caefee3SMatthias Ringwald devices.add(new RemoteDevice(result.getBdAddr(), result.getPageScanRepetitionMode(), result.getClockOffset())); 2258caefee3SMatthias Ringwald addMessage("Found device: " + result.getBdAddr()); 2268caefee3SMatthias Ringwald } 2278caefee3SMatthias Ringwald 2288caefee3SMatthias Ringwald if (packet instanceof HCIEventInquiryComplete){ 2298caefee3SMatthias Ringwald state = STATE.w4_remote_name; 2308caefee3SMatthias Ringwald if (hasMoreRemoteNameRequests()){ 2318caefee3SMatthias Ringwald doNextRemoteNameRequest(); 2328caefee3SMatthias Ringwald break; 2338caefee3SMatthias Ringwald } 2348caefee3SMatthias Ringwald } 2358caefee3SMatthias Ringwald break; 2368caefee3SMatthias Ringwald 2378caefee3SMatthias Ringwald case w4_remote_name: 2388caefee3SMatthias Ringwald if (packet instanceof HCIEventRemoteNameRequestComplete){ 2398caefee3SMatthias Ringwald HCIEventRemoteNameRequestComplete result = (HCIEventRemoteNameRequestComplete) packet; 2408caefee3SMatthias Ringwald if (result.getStatus() == 0){ 2418caefee3SMatthias Ringwald // store name on success 2428caefee3SMatthias Ringwald setNameForDeviceWithBDAddr(result.getRemoteName(), result.getBdAddr()); 2438caefee3SMatthias Ringwald } 2448caefee3SMatthias Ringwald 2458caefee3SMatthias Ringwald if (hasMoreRemoteNameRequests()){ 2468caefee3SMatthias Ringwald doNextRemoteNameRequest(); 2478caefee3SMatthias Ringwald break; 2488caefee3SMatthias Ringwald } 2498caefee3SMatthias Ringwald 2508caefee3SMatthias Ringwald // discovery done, connect to device with remote name prefix 2518caefee3SMatthias Ringwald 2528caefee3SMatthias Ringwald RemoteDevice remoteDevice = null; 2538caefee3SMatthias Ringwald for (RemoteDevice device : devices){ 2548caefee3SMatthias Ringwald if (device.getName() != null && device.getName().startsWith(REMOTE_DEVICE_NAME_PREFIX)){ 2558caefee3SMatthias Ringwald remoteDevice = device; 2568caefee3SMatthias Ringwald } 2578caefee3SMatthias Ringwald } 2588caefee3SMatthias Ringwald 2598caefee3SMatthias Ringwald // try first one otherwise 2608caefee3SMatthias Ringwald if (remoteDevice == null && devices.size() > 0){ 2618caefee3SMatthias Ringwald remoteDevice = devices.get(0); 2628caefee3SMatthias Ringwald } 2638caefee3SMatthias Ringwald 2648caefee3SMatthias Ringwald // no device, restart inquiry 2658caefee3SMatthias Ringwald if (remoteDevice == null){ 2668caefee3SMatthias Ringwald restartInquiry(); 2678caefee3SMatthias Ringwald break; 2688caefee3SMatthias Ringwald } 2698caefee3SMatthias Ringwald 2708caefee3SMatthias Ringwald // start SDP query for RFCOMMM services 2718caefee3SMatthias Ringwald remoteBDAddr = remoteDevice.getBDAddress(); 2728caefee3SMatthias Ringwald if (remoteDevice.getName() == null){ 2738caefee3SMatthias Ringwald addMessage("Start SDP Query of " + remoteDevice.getBDAddress()); 2748caefee3SMatthias Ringwald } else { 2758caefee3SMatthias Ringwald addMessage("Start SDP Query of " + remoteDevice.getName()); 2768caefee3SMatthias Ringwald } 2778caefee3SMatthias Ringwald state = STATE.w4_sdp_query_result; 2788caefee3SMatthias Ringwald byte[] serviceSearchPattern = Util.serviceSearchPatternForUUID16(SPP_UUID); 2798caefee3SMatthias Ringwald btstack.SDPClientQueryRFCOMMServices(remoteBDAddr, serviceSearchPattern); 2808caefee3SMatthias Ringwald break; 2818caefee3SMatthias Ringwald } 2828caefee3SMatthias Ringwald break; 2838caefee3SMatthias Ringwald 2848caefee3SMatthias Ringwald case w4_sdp_query_result: 285045013feSMatthias Ringwald if (packet instanceof SDPEventQueryRFCOMMService){ 286045013feSMatthias Ringwald SDPEventQueryRFCOMMService service = (SDPEventQueryRFCOMMService) packet; 2878caefee3SMatthias Ringwald services.add(service); 2888caefee3SMatthias Ringwald addMessage(String.format("Found \"%s\", channel %d", service.getName(), service.getRFCOMMChannel())); 2898caefee3SMatthias Ringwald } 290045013feSMatthias Ringwald if (packet instanceof SDPEventQueryComplete){ 2918caefee3SMatthias Ringwald // find service with "SPP" prefix 292045013feSMatthias Ringwald SDPEventQueryRFCOMMService selectedService = null; 293045013feSMatthias Ringwald for (SDPEventQueryRFCOMMService service : services){ 2948caefee3SMatthias Ringwald if (service.getName().startsWith(RFCOMM_SERVICE_PREFIX)){ 2958caefee3SMatthias Ringwald selectedService = service; 2968caefee3SMatthias Ringwald break; 2978caefee3SMatthias Ringwald } 2988caefee3SMatthias Ringwald } 2998caefee3SMatthias Ringwald // restart demo, if no service with prefix found 3008caefee3SMatthias Ringwald if (selectedService == null){ 3018caefee3SMatthias Ringwald restartInquiry(); 3028caefee3SMatthias Ringwald break; 3038caefee3SMatthias Ringwald } 3048caefee3SMatthias Ringwald 3058caefee3SMatthias Ringwald // connect 3068caefee3SMatthias Ringwald state = STATE.w4_connected; 3078caefee3SMatthias Ringwald clearMessages(); 3088caefee3SMatthias Ringwald addMessage("SPP Test Application / Part 2"); 3098caefee3SMatthias Ringwald addMessage("Connect to channel nr " + selectedService.getRFCOMMChannel()); 3108caefee3SMatthias Ringwald btstack.RFCOMMCreateChannel(remoteBDAddr, selectedService.getRFCOMMChannel()); 3118caefee3SMatthias Ringwald } 3128caefee3SMatthias Ringwald 3138caefee3SMatthias Ringwald break; 3148caefee3SMatthias Ringwald 3158caefee3SMatthias Ringwald case w4_connected: 316*c9eeefbcSMatthias Ringwald if (packet instanceof RFCOMMEventChannelOpened){ 317*c9eeefbcSMatthias Ringwald RFCOMMEventChannelOpened e = (RFCOMMEventChannelOpened) packet; 3188caefee3SMatthias Ringwald if (e.getStatus() != 0) { 3198caefee3SMatthias Ringwald addMessage("RFCOMM channel open failed, status " + e.getStatus()); 3208caefee3SMatthias Ringwald } else { 3218caefee3SMatthias Ringwald state = STATE.active; 3228caefee3SMatthias Ringwald rfcommChannelID = e.getRFCOMMCid(); 3238caefee3SMatthias Ringwald mtu = e.getMaxFrameSize(); 3248caefee3SMatthias Ringwald addMessage(String.format("RFCOMM channel open succeeded. \nNew RFCOMM Channel ID %d,\n max frame size %d", rfcommChannelID, mtu)); 3258caefee3SMatthias Ringwald 3268caefee3SMatthias Ringwald counter = 0; 3278caefee3SMatthias Ringwald new Thread(new Runnable(){ 3288caefee3SMatthias Ringwald @Override 3298caefee3SMatthias Ringwald public void run() { 3308caefee3SMatthias Ringwald try { 3318caefee3SMatthias Ringwald while(state == STATE.active){ 3328caefee3SMatthias Ringwald Thread.sleep(1000); 3338caefee3SMatthias Ringwald byte[] data; 3348caefee3SMatthias Ringwald try { 3358caefee3SMatthias Ringwald data = String.format("BTstack SPP Counter %d\n", counter).getBytes("utf8"); 3368caefee3SMatthias Ringwald if (counter < Integer.MAX_VALUE){ 3378caefee3SMatthias Ringwald counter++; 3388caefee3SMatthias Ringwald } else { 3398caefee3SMatthias Ringwald counter = 0; 3408caefee3SMatthias Ringwald } 3418caefee3SMatthias Ringwald btstack.RFCOMMSendData(rfcommChannelID, data); 3428caefee3SMatthias Ringwald } catch (UnsupportedEncodingException e) { 3438caefee3SMatthias Ringwald // TODO Auto-generated catch block 3448caefee3SMatthias Ringwald e.printStackTrace(); 3458caefee3SMatthias Ringwald } 3468caefee3SMatthias Ringwald } 3478caefee3SMatthias Ringwald } catch (InterruptedException e) {} 3488caefee3SMatthias Ringwald } 3498caefee3SMatthias Ringwald }).start(); 3508caefee3SMatthias Ringwald } 3518caefee3SMatthias Ringwald } 3528caefee3SMatthias Ringwald break; 3538caefee3SMatthias Ringwald 3548caefee3SMatthias Ringwald case active: 3558caefee3SMatthias Ringwald if (packet instanceof RFCOMMDataPacket){ 3568caefee3SMatthias Ringwald addTempMessage("Received RFCOMM data packet: \n" + packet.toString()); 3578caefee3SMatthias Ringwald } 3588caefee3SMatthias Ringwald break; 3598caefee3SMatthias Ringwald 3608caefee3SMatthias Ringwald default: 3618caefee3SMatthias Ringwald break; 3628caefee3SMatthias Ringwald } 3638caefee3SMatthias Ringwald } 3648caefee3SMatthias Ringwald deviceForBDAddr(BD_ADDR bdAddr)3658caefee3SMatthias Ringwald private RemoteDevice deviceForBDAddr(BD_ADDR bdAddr){ 3668caefee3SMatthias Ringwald for (RemoteDevice device:devices){ 3678caefee3SMatthias Ringwald if (device.getBDAddress().equals(bdAddr) ) 3688caefee3SMatthias Ringwald return device; 3698caefee3SMatthias Ringwald } 3708caefee3SMatthias Ringwald return null; 3718caefee3SMatthias Ringwald } 3728caefee3SMatthias Ringwald setNameForDeviceWithBDAddr(String remoteName, BD_ADDR bdAddr)3738caefee3SMatthias Ringwald private void setNameForDeviceWithBDAddr(String remoteName, BD_ADDR bdAddr) { 3748caefee3SMatthias Ringwald RemoteDevice device = deviceForBDAddr(bdAddr); 3758caefee3SMatthias Ringwald if (device != null){ 3768caefee3SMatthias Ringwald addMessage("Found " + remoteName); 3778caefee3SMatthias Ringwald device.setName(remoteName); 3788caefee3SMatthias Ringwald } 3798caefee3SMatthias Ringwald } 3808caefee3SMatthias Ringwald test()3818caefee3SMatthias Ringwald void test(){ 3828caefee3SMatthias Ringwald counter = 0; 3838caefee3SMatthias Ringwald addMessage("SPP Test Application"); 3848caefee3SMatthias Ringwald 3858caefee3SMatthias Ringwald btstack = new BTstack(); 3868caefee3SMatthias Ringwald btstack.registerPacketHandler(this); 3878caefee3SMatthias Ringwald 3888caefee3SMatthias Ringwald boolean ok = btstack.connect(); 3898caefee3SMatthias Ringwald if (!ok) { 3908caefee3SMatthias Ringwald addMessage("Failed to connect to BTstack Server"); 3918caefee3SMatthias Ringwald return; 3928caefee3SMatthias Ringwald } 3938caefee3SMatthias Ringwald 3948caefee3SMatthias Ringwald addMessage("BTstackSetPowerMode(1)"); 3958caefee3SMatthias Ringwald 3968caefee3SMatthias Ringwald state = STATE.w4_btstack_working; 3978caefee3SMatthias Ringwald btstack.BTstackSetPowerMode(1); 3988caefee3SMatthias Ringwald } 3998caefee3SMatthias Ringwald } 4008caefee3SMatthias Ringwald 401