Giter Site home page Giter Site logo

nordicsemiconductor / android-nrf-mesh-library Goto Github PK

View Code? Open in Web Editor NEW
391.0 391.0 170.0 8.75 MB

The Bluetooth Mesh Provisioner and Configurator library.

Home Page: https://www.nordicsemi.com/

License: BSD 3-Clause "New" or "Revised" License

Java 99.06% Ruby 0.03% Shell 0.92%
android-mesh-library ble

android-nrf-mesh-library's People

Contributors

anees17861 avatar ball-hayden avatar cs-cw avatar daretobeorjan avatar domir avatar eklow02 avatar gridar avatar jonathannilsen avatar julesdommartin avatar likebobby avatar lz00qs avatar omkar3141 avatar philips77 avatar rawa avatar roshanrajaratnam avatar saty9 avatar thebosz avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

android-nrf-mesh-library's Issues

Get BluetoothLeScannerCompat from different Android Version

public static BluetoothLeScannerCompat getScanner() { if (mInstance != null) return mInstance; if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) return mInstance = new BluetoothLeScannerImplOreo(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) return mInstance = new BluetoothLeScannerImplMarshmallow(); if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) return mInstance = new BluetoothLeScannerImplLollipop(); return mInstance = new BluetoothLeScannerImplJB(); }
in my xiaomi 4>>will get BluetoothLeScannerImplMarshmallow (android 6.0)
xiaomi mix 2>> will get BluetoothLeScannerImplOreo( android 8.0)

could you tell me the diffrence of this?
i found xiaomi mix2 can scan provinsioned device easier than xiaomi 4,
You can't even scan it on xiammi 4,
i dont know the reaseon of this condition , whiling provinsioning , onProvisioningComplete, public void onProvisioningComplete(final ProvisionedMeshNode provisionedMeshNode) {
provisionedMeshNode.setIsProvisioned(true);
Debuger.d("onProvisioningComplete............");
mMeshNode = provisionedMeshNode;
mIsProvisioningComplete = true;

    final Intent intent = new Intent(ACTION_PROVISIONING_STATE);
    intent.putExtra(EXTRA_PROVISIONING_STATE, MeshNodeStates.MeshNodeStatus.PROVISIONING_COMPLETE.getState());
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent);

    mIsProvisioningComplete = true;
    mIsReconnecting = true;
    final Intent intent1 = new Intent(ACTION_IS_RECONNECTING);
    intent1.putExtra(EXTRA_DATA, mIsReconnecting);
    LocalBroadcastManager.getInstance(this).sendBroadcast(intent1);

    //mIsReconnecting.postValue(true);
    mBleMeshManager.setProvisioningComplete(true);
    mBleMeshManager.disconnect();
    mBleMeshManager.refreshDeviceCache();
    mHandler.postDelayed(mReconnectRunnable, 1500); //Added a slight delay to disconnect and refresh the cache
}`

in this place the xiaomi 4 rescan so hard and you can't even scan it on xiammi 4,
Is this a compatibility issue?

Implement Server Configuration

As a power user, I want to be able to enable or disable the relay and proxy services on a node so that I have granular control over how the nodes behave.

Handle multiple generic onoff server models with different elements on same device

Is your feature request related to a problem? Please describe.
We have devices with multiple elements, that all support genericOnOffServer. Sending acknowledged messages return status messages, but it is not clear, which element sent which message. Currently the callbacks for onGenericOnOffStatusReceived won't allow to determine from which element these messages came from.

public void onGenericOnOffStatusReceived(ProvisionedMeshNode node, boolean presentOnOff, Boolean targetOnOff, int transitionSteps, int transitionResolution)

Describe the solution you'd like
We would like to have public void onGenericOnOffStatusReceived(ProvisionedMeshNode node, Integer elementAddress, boolean presentOnOff, Boolean targetOnOff, int transitionSteps, int transitionResolution) where Integer elementAddress (or if preferred byte[] elementAddress) is added to all callbacks, that are coming from a specific element, but does not have the element address in the actual payload.

I'd be happy to submit a pull request. Is there any eta on #73 so I can wait for it?

Sending data PDU byte array to the mesh through GUI on app

@roshanrajaratnam Correct me if I go wrong on this.
I was going through the code and trying to figure out how to put data into the Proxy node i.e. PDU.
3 of the files caught my interest:

  1. meshprovisioner/MeshManagerApi.java (as in meshprovisioner module)
  2. nrfmeshprovisioner/ble/BleMeshManager.java (as in meshprovisioner module)
  3. ble/BleManager.java (as in ble module)

From these I feel 1 is related to Provisioning of the mesh and 2, 3 are related to sending data to the lower level Android Bluetooth manager.
I've used the Bluetooth SIG App Accelerator library/files wherein they give a BleWrapper object and writing data to/reading data from a Bluetooth device works by writing/reading to a Characteristic of a Service of a GATT server running on a Bluetooth device. Now that's how it is for Bluetooth devices which are not Mesh and one to one Bluetooth communication.
I could see in file 2 above the PROXY_IN and PROXY_OUT characteristic mentioned which makes sense when compared with the Bluetooth SIG Mesh Model document.

What confuses me is that this project needs both the 'ble' and 'meshprovisioner' module. So, there is both the BleMeshManager.java and BleManager.java. Won't their working collide with each other?

But, that's not my main question in this thread is. My main interest is to write to/read from proxy characteristics of the mesh and that will solve what @kcjian is looking for.

I can see in BleMeshManager.java that there is a function sendPdu(final byte[] pdu).
Is this the function I have to call from my MainActivity like on button press in a graphical app?

If not then can you give a code snippet of which function in which file I've to call from my MainActivity to send data PDUs (byte[] array) to mesh nodes?

Is it something like this: instanceBleMeshManager.sendPdu((byte[]) {0x01, 0x02, 0x03}) I have to call from the MainActivity?
If not then give a code snippet.
Also, give a code snippet of how to read from a PROXY_OUT characteristic of the Bluetooth service.

Thanks in advance

Implement Identify for provisioned nodes

As a user, I want to be able to identify nodes using nRF Mesh so that I can know where the models and elements are physically located and ease the process of configuring nodes.

Save sequence number for all outgoing messages

The lib should save the sequence number for all outgoing messages. Currently we do that only for the Unacknowledged messages. In case a acknowledged message is lost, we lose the correct sequence number.

control each lights individually through application

I'm using nRF52 DK, mesh SDK version 2.2.0

I want give demo of the Light-Switch example application by forming network through mobile. I found that through mobile application switch, we cannot control the lights. Is there any mobile application apart from nRF Mesh (android/IOS). And yeah through switch device I can on/off the lights but not through mobile application.

My requirement is:

  1. Control the lights subscribed to particular switch through that switch in mobile app.

  2. Control all lights individually.

control each lights individually through application

I'm using nRF52 DK, mesh SDK version 2.2.0

I want give demo of the Light-Switch example application by forming network through mobile. I found that through mobile application switch, we cannot control the lights. Is there any mobile application apart from nRF Mesh (android/IOS). And yeah through switch device I can on/off the lights but not through mobile application.
I have bind the application key to the model. But my concern is if a switch is publishing at lets say C001 publishing address, if 3 lights subscribe to the same C001. Now, if you go to light 1 and try to on/off other 2 lights also turn on/off since they are subscribed to C001. Is there any way to control each light ?

My requirement is:

1.Control the lights subscribed to particular switch through that switch in mobile app.
2.Control all lights individually.

Sensor Client Model

Describe the solution you'd like
I want to be able to access sensor data by sending commands to Sensor Server Model on another Mesh device. Things like reading Sensor descriptors, reading sensor values, etc.

Tid

Hello, ask, I want to know where to modify the value of tid, because the value of tid is the same when sending data, but I can not find the attribute tid

Add ability to send vendor model messages to group addresses

Currently the app only sends vendor model messages to only unicast addresses. If an acknowledged message is to be sent, the app should only send to the unicast address, otherwise send it to the group address if the model has subscribed to one.

nrf mesh app not connecting after provisioning


Bug description
Hi, I am trying to use nrf mesh android app to switch on light, I am facing issue some times during reconnect after provisioning. My observation is after provisioning if i disconnect and try to connect again, device is not connecting at one shot, instead app gives me below issue

  1. It just says connecting, nothing happens... as shown in this screenshot or
  2. It goes back to ProvisionedNodesScannerActivity as shown in this screenshot , if i click on available device, it might connect or go back to issue 1.

To Reproduce
Steps to reproduce the behavior:

  1. After provisioning, go to network fragment screen
  2. Click on "connect" button
  3. ProvisionedNodesScannerActivity screen is displayed with list of available devices
  4. Click on one of the node for connection

Expected behavior
App should connect to the device with in few seconds.

Platform details:

  • Device: [Lenovo K5 note]
  • OS: [Android 6.0]
  • App: [Version: 1.0.4]
  • Using latest mesh on my device

Logs / Screenshots
Screen shots are linked as urls

I have also cloned project from github and tried building app from android studio still same issue. Any advice or help will be a great. thank you in advance.

.transport.LowerTransportLayer.sendBlockAck crash

12-13 10:43:30.429 7621-7621/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: discoverServices() - device: 98:12:88:77:00:15 12-13 10:43:30.429 7621-7643/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onGetService() - Device=98:12:88:77:00:15 UUID=00001800-0000-1000-8000-00805f9b34fb 12-13 10:43:30.429 7621-7645/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onGetService() - Device=98:12:88:77:00:15 UUID=00001801-0000-1000-8000-00805f9b34fb 12-13 10:43:30.429 7621-7696/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onGetService() - Device=98:12:88:77:00:15 UUID=00001828-0000-1000-8000-00805f9b34fb 12-13 10:43:30.429 7621-7643/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onGetCharacteristic() - Device=98:12:88:77:00:15 UUID=00002a00-0000-1000-8000-00805f9b34fb 12-13 10:43:30.439 7621-7645/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onGetCharacteristic() - Device=98:12:88:77:00:15 UUID=00002a01-0000-1000-8000-00805f9b34fb 12-13 10:43:30.439 7621-7696/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onGetCharacteristic() - Device=98:12:88:77:00:15 UUID=00002a04-0000-1000-8000-00805f9b34fb 12-13 10:43:30.439 7621-7643/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onGetCharacteristic() - Device=98:12:88:77:00:15 UUID=00002a05-0000-1000-8000-00805f9b34fb 12-13 10:43:30.449 7621-7645/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onGetCharacteristic() - Device=98:12:88:77:00:15 UUID=00002add-0000-1000-8000-00805f9b34fb 12-13 10:43:30.449 7621-7696/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onGetCharacteristic() - Device=98:12:88:77:00:15 UUID=00002ade-0000-1000-8000-00805f9b34fb 12-13 10:43:30.449 7621-7643/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onGetDescriptor() - Device=98:12:88:77:00:15 UUID=00002902-0000-1000-8000-00805f9b34fb 12-13 10:43:30.459 7621-7645/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onGetDescriptor() - Device=98:12:88:77:00:15 UUID=00002902-0000-1000-8000-00805f9b34fb 12-13 10:43:30.459 7621-7696/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onSearchComplete() = Device=98:12:88:77:00:15 Status=0 12-13 10:43:30.459 7621-7621/no.nordicsemi.android.nrfmeshprovisioner D/PRETTY_LOGGER: ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ Thread: main ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ │ MeshProvisionerActivity$1.onChanged (MeshProvisionerActivity.java:193) │ Debuger.d (Debuger.java:16) ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ │ Initializing… └──────────────────────────────────────────────────────────────────────────────────────────────────────────────── 12-13 10:43:30.469 7621-7696/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: setCharacteristicNotification() - uuid: 00002ade-0000-1000-8000-00805f9b34fb enable: true 12-13 10:43:30.469 7621-7696/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: writeDescriptor() - uuid: 00002902-0000-1000-8000-00805f9b34fb 12-13 10:43:30.539 7621-7643/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onDescriptorWrite() - Device=98:12:88:77:00:15 UUID=00002ade-0000-1000-8000-00805f9b34fb 12-13 10:43:30.539 7621-7643/no.nordicsemi.android.nrfmeshprovisioner D/PRETTY_LOGGER: ┌──────────────────────────────────────────────────────────────────────────────────────────────────────────────── │ Thread: Binder_1 ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ │ MeshService.onDeviceReady (MeshService.java:405) │ Debuger.d (Debuger.java:16) ├┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄┄ 12-13 10:43:30.549 7621-7643/no.nordicsemi.android.nrfmeshprovisioner D/PRETTY_LOGGER: │ 98:12:88:77:00:15 └──────────────────────────────────────────────────────────────────────────────────────────────────────────────── 12-13 10:43:32.549 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/MeshTransport: Src address: 07FF Dst address: 002B Key: C3BE94232FFFB189256CC19760C5A4A0 akf: 0 aid: 0 aszmic: 0 Sequence number: 123 Access message opcode: 32776 Access message parameters: FF 12-13 10:43:32.549 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/AccessLayer: Created Access PDU 8008FF 12-13 10:43:32.549 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/UpperTransportLayer: Device nonce: 020000007B07FF002B00000000 12-13 10:43:32.559 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/UpperTransportLayer: Encrypted upper transport pdu: 7174AC29C3B4C1 12-13 10:43:32.559 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/LowerTransportLayer: Unsegmented Lower transport access PDU 007174AC29C3B4C1 12-13 10:43:32.559 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/NetworkLayer: Encryption key: 09D98362AFD9980568560D7ABB90472E Privacy key: F9CA93F9110E9AD5EF741B35DF2C35F4 Sequence Number: 00007B Network nonce: 006400007B07FF000000000000 Encrypted Network payload: 86FCB04510E4CDCBA38C2B8C6A44 12-13 10:43:32.559 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/ConfigCompositionDataGet: Sending composition data get 12-13 10:43:32.559 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Sending data : 0x400C2793473B679886FCB04510E4CDCBA38C2B8C 12-13 10:43:32.559 7621-7621/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: writeCharacteristic() - uuid: 00002add-0000-1000-8000-00805f9b34fb 12-13 10:43:32.559 7621-7696/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onCharacteristicWrite() - Device=98:12:88:77:00:15 UUID=00002add-0000-1000-8000-00805f9b34fb Status=0 12-13 10:43:32.569 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Data written: 0x400C2793473B679886FCB04510E4CDCBA38C2B8C 12-13 10:43:32.569 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Sending data : 0xC06A44 12-13 10:43:32.569 7621-7621/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: writeCharacteristic() - uuid: 00002add-0000-1000-8000-00805f9b34fb 12-13 10:43:32.569 7621-7643/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onCharacteristicWrite() - Device=98:12:88:77:00:15 UUID=00002add-0000-1000-8000-00805f9b34fb Status=0 12-13 10:43:32.569 7621-7643/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Data written: 0xC06A44 12-13 10:43:32.569 7621-7643/no.nordicsemi.android.nrfmeshprovisioner V/MeshManagerApi: Network pdu sent: 0x000C2793473B679886FCB04510E4CDCBA38C2B8C6A44 12-13 10:43:32.569 7621-7643/no.nordicsemi.android.nrfmeshprovisioner V/MeshMessageHandler: Switching current state on write complete ConfigCompositionDataGet to ConfigCompositionDataStatus 12-13 10:43:32.639 7621-7645/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onNotify() - Device=98:12:88:77:00:15 UUID=00002ade-0000-1000-8000-00805f9b34fb 12-13 10:43:32.639 7621-7645/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Characteristic notified: 0x400C3BF3E4D5D32B6611C9A0430168E45E013C5C 12-13 10:43:32.679 7621-7696/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onNotify() - Device=98:12:88:77:00:15 UUID=00002ade-0000-1000-8000-00805f9b34fb 12-13 10:43:32.679 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Characteristic notified: 0xC08528CB43E9BF1DECC4B0 12-13 10:43:32.679 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/MeshManagerApi: Received network pdu: 0x000C3BF3E4D5D32B6611C9A0430168E45E013C5C8528CB43E9BF1DECC4B0 12-13 10:43:32.689 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/NetworkLayer: Privacy Random: 0000000000000000006611C9A0430168 TTL for received message: 10 Sequence number of received access message: 0 Received a segmented access message from: 002B 12-13 10:43:32.689 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/LowerTransportLayer: SEG O: 0 SEG N: 2 Current SeqAuth value 0 Starting incomplete timer for src: 002B 12-13 10:43:32.689 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/ConfigCompositionDataStatus: Message reassembly may not be complete yet 12-13 10:43:32.729 7621-7643/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onNotify() - Device=98:12:88:77:00:15 UUID=00002ade-0000-1000-8000-00805f9b34fb 12-13 10:43:32.729 7621-7643/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Characteristic notified: 0x400CF46E0F9988AE184FC6819A528C1C3FFCB0DD 12-13 10:43:32.729 7621-7645/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onNotify() - Device=98:12:88:77:00:15 UUID=00002ade-0000-1000-8000-00805f9b34fb 12-13 10:43:32.729 7621-7645/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Characteristic notified: 0xC04891656D545D56BD8856 12-13 10:43:32.729 7621-7645/no.nordicsemi.android.nrfmeshprovisioner V/MeshManagerApi: Received network pdu: 0x000CF46E0F9988AE184FC6819A528C1C3FFCB0DD4891656D545D56BD8856 12-13 10:43:32.729 7621-7645/no.nordicsemi.android.nrfmeshprovisioner V/NetworkLayer: Privacy Random: 000000000000000000184FC6819A528C TTL for received message: 10 12-13 10:43:32.739 7621-7645/no.nordicsemi.android.nrfmeshprovisioner V/NetworkLayer: Sequence number of received access message: 1 Received a segmented access message from: 002B 12-13 10:43:32.739 7621-7645/no.nordicsemi.android.nrfmeshprovisioner V/LowerTransportLayer: SEG O: 1 SEG N: 2 Last SeqAuth value 0 Current SeqAuth value 0 Restarting incomplete timer for src: 002B 12-13 10:43:32.739 7621-7645/no.nordicsemi.android.nrfmeshprovisioner V/ConfigCompositionDataStatus: Message reassembly may not be complete yet 12-13 10:43:33.319 7621-7696/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onNotify() - Device=98:12:88:77:00:15 UUID=00002ade-0000-1000-8000-00805f9b34fb 12-13 10:43:33.319 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Characteristic notified: 0x400C10883D6EBB5B3F4C1D3EA3CE81ADACFA6F43 12-13 10:43:33.339 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/LowerTransportLayer: All segments received cancelling incomplete timer Block acknowledgement payload: 000000000003 Creating unsegmented transport control Unsegmented Lower transport control PDU 00000000000003 12-13 10:43:33.339 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/NetworkLayer: Encryption key: 09D98362AFD9980568560D7ABB90472E Privacy key: F9CA93F9110E9AD5EF741B35DF2C35F4 Sequence Number: 00007C Network nonce: 008A00007C07FF000000000000 12-13 10:43:33.349 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/NetworkLayer: Encrypted Network payload: DC0AA0F80619B685C5A0F183133F75AD7E 12-13 10:43:33.349 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/ConfigCompositionDataStatus: Sending acknowledgement: 000CA3485591C16DDC0AA0F80619B685C5A0F183133F75AD7E 12-13 10:43:33.349 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Sending data : 0x400CA3485591C16DDC0AA0F80619B685C5A0F183 12-13 10:43:33.349 7621-7621/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: writeCharacteristic() - uuid: 00002add-0000-1000-8000-00805f9b34fb 12-13 10:43:33.349 7621-7643/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onCharacteristicWrite() - Device=98:12:88:77:00:15 UUID=00002add-0000-1000-8000-00805f9b34fb Status=0 12-13 10:43:33.349 7621-7643/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Data written: 0x400CA3485591C16DDC0AA0F80619B685C5A0F183 12-13 10:43:33.359 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Sending data : 0xC0133F75AD7E 12-13 10:43:33.359 7621-7621/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: writeCharacteristic() - uuid: 00002add-0000-1000-8000-00805f9b34fb 12-13 10:43:33.359 7621-7645/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onCharacteristicWrite() - Device=98:12:88:77:00:15 UUID=00002add-0000-1000-8000-00805f9b34fb Status=0 12-13 10:43:33.369 7621-7645/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Data written: 0xC0133F75AD7E 12-13 10:43:33.369 7621-7645/no.nordicsemi.android.nrfmeshprovisioner V/MeshManagerApi: Network pdu sent: 0x000CA3485591C16DDC0AA0F80619B685C5A0F183133F75AD7E 12-13 10:43:33.369 7621-7696/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onNotify() - Device=98:12:88:77:00:15 UUID=00002ade-0000-1000-8000-00805f9b34fb 12-13 10:43:33.369 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Characteristic notified: 0xC0533AD77F 12-13 10:43:33.369 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/MeshManagerApi: Received network pdu: 0x000C10883D6EBB5B3F4C1D3EA3CE81ADACFA6F43533AD77F 12-13 10:43:33.369 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/NetworkLayer: Privacy Random: 0000000000000000003F4C1D3EA3CE81 TTL for received message: 10 Sequence number of received access message: 2 12-13 10:43:33.379 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/NetworkLayer: Received a segmented access message from: 002B 12-13 10:43:33.379 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/LowerTransportLayer: SEG O: 2 SEG N: 2 Last SeqAuth value 0 Current SeqAuth value 0 Restarting incomplete timer for src: 002B 12-13 10:43:33.379 7621-7621/no.nordicsemi.android.nrfmeshprovisioner V/LowerTransportLayer: Block ack value: 3 12-13 10:43:33.379 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/LowerTransportLayer: Restarting block acknowledgement timer for src: 002B All segments received Block ack sent? true 12-13 10:43:33.389 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/AccessLayer: Opcode length: 1 Octets Received Access PDU 02000C001A000100080003000001020000000010000101000010 12-13 10:43:33.389 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/ConfigCompositionDataStatus: Received composition data status Company identifier: 000C Product identifier: 001A Version identifier: 0001 crpl: 0008 Features: 0003 Relay feature: true Proxy feature: true Friend feature: false Low power feature: false Location identifier: 0100 12-13 10:43:33.399 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/ConfigCompositionDataStatus: Number of sig models: 2 Number of vendor models: 0 Sig model ID 0 : 0000 Sig model ID 1 : 1000 Location identifier: 0100 Number of sig models: 1 Number of vendor models: 0 Sig model ID 0 : 1000 Number of elements: 2 12-13 10:43:33.419 7621-7696/no.nordicsemi.android.nrfmeshprovisioner V/MeshMessageHandler: Switched to No operation state

12-13 10:43:34.029 7621-7621/no.nordicsemi.android.nrfmeshprovisioner W/dalvikvm: threadid=1: thread exiting with uncaught exception (group=0x41742d58) 12-13 10:43:34.049 7621-7621/no.nordicsemi.android.nrfmeshprovisioner W/System.err: java.lang.NullPointerException at no.nordicsemi.android.meshprovisioner.transport.LowerTransportLayer.sendBlockAck(LowerTransportLayer.java:686) at no.nordicsemi.android.meshprovisioner.transport.LowerTransportLayer.lambda$initSegmentedAccessAcknowledgementTimer$0$LowerTransportLayer(LowerTransportLayer.java:655) at no.nordicsemi.android.meshprovisioner.transport.LowerTransportLayer$$Lambda$0.run(Unknown Source) at android.os.Handler.handleCallback(Handler.java:733) at android.os.Handler.dispatchMessage(Handler.java:95) at android.os.Looper.loop(Looper.java:136) at android.app.ActivityThread.main(ActivityThread.java:5052) at java.lang.reflect.Method.invokeNative(Native Method) at java.lang.reflect.Method.invoke(Method.java:515) at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:796) at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:612) 12-13 10:43:34.059 7621-7621/no.nordicsemi.android.nrfmeshprovisioner W/System.err: at dalvik.system.NativeStart.main(Native Method)

Error while building basic example


Random values.xml pops up and build fails
When I build the project, it fails with the message:

..\Android-nRF-Mesh-Library\Example\nrf-mesh\app\build\intermediates\res\merged\debug\values\values.xml
Error:(1073) Multiple substitutions specified in non-positional format; did you mean to add the formatted="false" attribute?
Error:(1073) Unexpected end tag string

Error is in line 1073 of this file. Tried many solutions given on the net and they don't work. Also opening of resources tag:
<resources xmlns:ns1="urn:oasis:names:tc:xliff:document:1.2" xmlns:ns2="http://schemas.android.com/tools">
The values of ns1= and ns2= values are red in colour i.e. error.
What I did here is removed these ns1 and ns2 values and converted it to:
<resources>
I then rebuilt it.

This time the error was different. It was in the file no\nordicsemi\android\meshprovisioner\transport\LowerTransportLayer.java
It gives an error for:
mHandler.postDelayed(() -> {
I says:

Error:(476, 34) error: cannot find symbol method metafactory(Lookup,String,MethodType,MethodType,MethodHandle,MethodType)

Platform details:

  • Device: HP ZBook (8 GB RAM)
  • OS: Windows 10
  • Android 2.3.3
  • Version of repository on 20 Jun 2018 at 17:30 IST

Logs / Screenshots
Below is my app gradle file:

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    buildToolsVersion "27.0.3"

    defaultConfig {
        applicationId "no.nordicsemi.android.nrfmeshprovisioner"
        minSdkVersion 18
        targetSdkVersion 27
        versionCode 5
        versionName "0.2"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
        multiDexEnabled true
        vectorDrawables.useSupportLibrary = true

        jackOptions {
            enabled true
        }
    }
    buildTypes {
        release {
            minifyEnabled false
            shrinkResources false
            useProguard true
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    compileOptions {
        targetCompatibility JavaVersion.VERSION_1_8
        sourceCompatibility JavaVersion.VERSION_1_8
    }

    dexOptions {
        preDexLibraries = false
    }
}
dependencies {
    compile fileTree(include: ['*.jar'], dir: 'libs')
    compile 'com.android.support:appcompat-v7:27.1.1'
    compile 'com.android.support:design:27.1.1'
    compile 'com.android.support:recyclerview-v7:27.1.1'
    compile 'com.android.support:cardview-v7:27.1.1'
    compile 'com.android.support.constraint:constraint-layout:1.1.0'
    // Butter Knife
    compile 'com.jakewharton:butterknife:8.8.1'
    annotationProcessor 'com.jakewharton:butterknife-compiler:8.8.1'
    // Brings the new BluetoothLeScanner API to older platforms
    compile 'no.nordicsemi.android.support.v18:scanner:1.1.0'
    compile 'no.nordicsemi.android:ble:1.2.0'
    // Log Bluetooth LE events in nRF Logger
    compile 'com.android.support:multidex:1.0.1'
    // Lifecycle extensions
    compile 'android.arch.lifecycle:extensions:1.1.0'
    compile 'com.google.dagger:dagger:2.11'
    compile 'com.google.dagger:dagger-android:2.11'
    compile 'com.google.dagger:dagger-android-support:2.11'
    annotationProcessor 'com.google.dagger:dagger-android-processor:2.11'
    annotationProcessor 'com.google.dagger:dagger-compiler:2.11'
    compile 'com.google.code.gson:gson:2.8.3'
    compile project(':meshprovisioner')
}

Implement grouping using friendly names

As a user, I want to be able to CRUD groups from the settings so that I do not have to input addresses into the node configuration view and improve my experience.

Provisioning fails for mynewt-based device


Describe the bug
Provisioning fails after Sending public key state.

To Reproduce
I'm using hardware mynewt-based mesh network node, on RedBear blenano2 (nrf52) device.
This same device is confirmed to work with SiliconLabs demo app.

  1. Reset the device
  2. Scan for devices in the app
  3. Select the device and confirm provisioning
  4. I see "Provisioning failed" message with the text of "App key was added successfully" (weird but true)

Expected behavior
Provisioning completes successfully.

Platform details:

  • Device: Nexus 5X
  • OS: Android 8.1
  • Library Version: dev branch

Logs

06-09 23:01:24.193 23694-23694/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Sending data : 0x03000A
06-09 23:01:24.199 23694-23741/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Data written: 0x03000A
06-09 23:01:24.199 23694-23741/no.nordicsemi.android.nrfmeshprovisioner V/MeshManagerApi: Provisioning pdu sent: 0x03000A
06-09 23:01:24.285 23694-23719/no.nordicsemi.android.nrfmeshprovisioner V/MeshManagerApi: Received provisioning message: 0x03010100010000040007000000
06-09 23:01:39.306 23694-23719/no.nordicsemi.android.nrfmeshprovisioner V/ProvisioningInvite: Number of elements: 1
06-09 23:01:39.310 23694-23719/no.nordicsemi.android.nrfmeshprovisioner V/ProvisioningInvite: Algorithm: 1
06-09 23:01:39.311 23694-23719/no.nordicsemi.android.nrfmeshprovisioner V/ProvisioningInvite: Public key type: Public key information unavailable
06-09 23:01:39.314 23694-23719/no.nordicsemi.android.nrfmeshprovisioner V/ProvisioningInvite: Static OOB type: Static OOB Actions unavailable
06-09 23:01:39.315 23694-23719/no.nordicsemi.android.nrfmeshprovisioner V/ProvisioningInvite: Output OOB size: 4
06-09 23:01:39.317 23694-23719/no.nordicsemi.android.nrfmeshprovisioner V/ProvisioningInvite: Output OOB action: Unknown
06-09 23:01:39.318 23694-23719/no.nordicsemi.android.nrfmeshprovisioner V/ProvisioningInvite: Input OOB size: 0
06-09 23:01:39.320 23694-23719/no.nordicsemi.android.nrfmeshprovisioner V/ProvisioningInvite: Input OOB action: No Input
06-09 23:01:39.323 23694-23719/no.nordicsemi.android.nrfmeshprovisioner V/ProvisioningStart: Provisioning start PDU: 0x03020000000004
06-09 23:01:39.327 23694-23719/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Sending data : 0x03020000000004
06-09 23:01:39.338 23694-23720/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Data written: 0x03020000000004
06-09 23:01:39.338 23694-23720/no.nordicsemi.android.nrfmeshprovisioner V/MeshManagerApi: Provisioning pdu sent: 0x03020000000004
06-09 23:01:39.525 23694-23701/no.nordicsemi.android.nrfmeshprovisioner I/zygote64: Compiler allocated 6MB to compile void android.view.ViewRootImpl.performTraversals()
06-09 23:01:41.104 23694-23720/no.nordicsemi.android.nrfmeshprovisioner V/ProvisioningPublicKey: X: length: 32 9C62CFE4201131671AB81D5D79AB17D18AA98ECFFC6E432BD507C15C76E2EB9D
06-09 23:01:41.105 23694-23720/no.nordicsemi.android.nrfmeshprovisioner V/ProvisioningPublicKey: Y: length: 32 500E2CF5658F56440CDD7C522C3545DB4C838C5C8D4C4F33DB00022D55105E31
    XY: 0x9C62CFE4201131671AB81D5D79AB17D18AA98ECFFC6E432BD507C15C76E2EB9D500E2CF5658F56440CDD7C522C3545DB4C838C5C8D4C4F33DB00022D55105E31
06-09 23:01:41.107 23694-23720/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Sending data : 0x03039C62CFE4201131671AB81D5D79AB17D18AA98ECFFC6E432BD507C15C76E2EB9D500E2CF5658F56440CDD7C522C3545DB4C838C5C8D4C4F33DB00022D55105E31
06-09 23:01:41.113 23694-23720/no.nordicsemi.android.nrfmeshprovisioner V/MeshManagerApi: Received provisioning message: 0x030902
06-09 23:01:47.531 23694-23720/no.nordicsemi.android.nrfmeshprovisioner V/BleMeshManager: Data written: 0x03039C62CFE4201131671AB81D5D79AB17D18AA98ECFFC6E432BD507C15C76E2EB9D500E2CF5658F56440CDD7C522C3545DB4C838C5C8D4C4F33DB00022D55105E31
06-09 23:01:47.532 23694-23720/no.nordicsemi.android.nrfmeshprovisioner V/MeshManagerApi: Provisioning pdu sent: 0x03039C62CFE4201131671AB81D5D79AB17D18AA98ECFFC6E432BD507C15C76E2EB9D500E2CF5658F56440CDD7C522C3545DB4C838C5C8D4C4F33DB00022D55105E31
06-09 23:01:47.536 23694-23720/no.nordicsemi.android.nrfmeshprovisioner V/MeshManagerApi: Received provisioning message: 0x0303294E9F14E777304B9D7C2206DCCC9D6EF2B59B91EDB2D75FBFEE29A10439D585E83279CB0B0E72572CCEF58FB3EB078DC8250DBEDB5F8F0A6AC446F629A52709
06-09 23:02:13.026 23694-23694/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: cancelOpen() - device: 19:A4:5B:3C:6A:D0
06-09 23:02:13.062 23694-23738/no.nordicsemi.android.nrfmeshprovisioner D/OpenGLRenderer: endAllActiveAnimators on 0x7bf09e2800 (RippleDrawable) with handle 0x7bf09cbb40
06-09 23:02:13.113 23694-23694/no.nordicsemi.android.nrfmeshprovisioner V/ScannerFragment: scan started
06-09 23:02:13.125 23694-23694/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothAdapter: isLeEnabled(): ON
06-09 23:02:13.131 23694-23719/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=7 mScannerId=0
06-09 23:02:14.666 23694-23720/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=8 device=19:A4:5B:3C:6A:D0
06-09 23:02:14.675 23694-23720/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: close()

PS: Great thanks for the lib! You are the only ones (at least the only ones I've found) providing some libraries to communicate with ble meshes!
My intent is to implement PC library in JS to run on laptops or raspberry pis (or even Web Bluetooth), but I'm still struggling with the protocol, especially with provision part.

ConfigRelaySet

Is your feature request related to a problem? Please describe.
A clear and concise description of what the problem is. Ex. I'm always frustrated when [...]

Describe the solution you'd like
A clear and concise description of what you want to happen.

Describe alternatives you've considered
A clear and concise description of any alternative solutions or features you've considered.

Additional context
Add any other context or screenshots about the feature request here.

Identify node before provisioning

As a user it would be nice to identify the node before starting provisioning process as there could be multiple un-provisioned nodes.

sometimes TID remains same if controlling Group of NODEs

As per Mesh Model Specification (on firmware end) ,


if ( TID ==  LAST_TID &&
     SRC_ADDR == LAST_SRC_ADDR &&
     DST_ADDR == LAST_DST_ADDR &&
     (now - last_msg_timestamp <= 6 Seconds) ) {

  // re-transmitted message & hence
  return;

}

Android #nRFMesh issue:
If App is controlling Group of NODEs which actually has only one NODE then each button toggle event send message with new TID. This is perfect implementation.

But it is observed that if there are many NODEs actually available then APP sends message with same TID. This happens intermittently. Because of it, above mentioned condition get executed on firmware end & server assumes it is re-transmitted message & state does not get updated.

We would like to provision multiple networks

Is your feature request related to a problem? Please describe.
The newest version of this library saves the provisioning settings to SharedPreferences, but should probably be passed to the MeshApi in some way.

Describe the solution you'd like
Pass the networkkey and application keys to the api like in the previous version, which would allow to manage multiple networks.

What's the strategy on this? Reading them from SharedPreferences does not seem to be an optimal solution for a library and should rather be taken care of by the application.

Add GenericLevel model

As a user, I want to be able to send GenericLevel related messages so that I can test GenericLevel features on my hardware.

Generic Level Server controls

Describe the solution you'd like
I want to be able to control Generic Level Server model of a Mesh node from the app.

Use Android switch light

Hi,
I want to click a button on this app to switch lights.
Can you tell me how to use an Android application to switch lights, such as the iOS application nRF Mesh?
Or can you add this feature to the Android application nRF Mesh?
Thank you!

Configuration Server controls

Describe the solution you'd like
I want to be able to control Configuration Server settings of a Mesh node from the app.

NullPointerException

08-22 15:31:10.601 10887-10887/no.nordicsemi.android.nrfmeshprovisioner V/ScannerFragment: scan started
08-22 15:31:10.608 10887-10887/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothAdapter: isLeEnabled(): ON
08-22 15:31:10.613 10887-22242/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothLeScanner: onScannerRegistered() - status=0 scannerId=7 mScannerId=0
08-22 15:31:10.649 10887-10901/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: close()
unregisterApp() - mClientIf=8
08-22 15:31:10.699 10887-10925/no.nordicsemi.android.nrfmeshprovisioner D/OpenGLRenderer: endAllActiveAnimators on 0x779be4a000 (RippleDrawable) with handle 0x779b2582a0
08-22 15:31:15.808 10887-10887/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: connect() - device: 9E:16:11:07:DA:78, auto: false
registerApp()
08-22 15:31:15.809 10887-10887/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: registerApp() - UUID=252eef3f-9b0c-4b1b-a048-0e3544d1df75
08-22 15:31:15.810 10887-10901/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onClientRegistered() - status=0 clientIf=8
08-22 15:31:16.216 10887-10887/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothAdapter: isLeEnabled(): ON
08-22 15:31:16.221 10887-10887/no.nordicsemi.android.nrfmeshprovisioner V/ScannerFragment: stopping scan
08-22 15:31:16.519 10887-10926/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onClientConnectionState() - status=0 clientIf=8 device=9E:16:11:07:DA:78
08-22 15:31:16.583 10887-10887/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: discoverServices() - device: 9E:16:11:07:DA:78
08-22 15:31:16.957 10887-10902/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onConnectionUpdated() - Device=9E:16:11:07:DA:78 interval=6 latency=0 timeout=500 status=0
08-22 15:31:17.343 10887-22242/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onSearchComplete() = Device=9E:16:11:07:DA:78 Status=0
08-22 15:31:17.538 10887-22242/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: setCharacteristicNotification() - uuid: 00002ade-0000-1000-8000-00805f9b34fb enable: true
08-22 15:31:17.571 10887-22242/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onConnectionUpdated() - Device=9E:16:11:07:DA:78 interval=39 latency=0 timeout=500 status=0
08-22 15:31:17.715 10887-10901/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: configureMTU() - device: 9E:16:11:07:DA:78 mtu: 517
08-22 15:31:17.782 10887-10926/no.nordicsemi.android.nrfmeshprovisioner D/BluetoothGatt: onConfigureMTU() - Device=9E:16:11:07:DA:78 mtu=158 status=0
08-22 15:31:17.803 10887-10926/no.nordicsemi.android.nrfmeshprovisioner W/BluetoothGatt: Unhandled exception in callback
java.lang.NullPointerException: Attempt to invoke virtual method 'void no.nordicsemi.android.meshprovisioner.configuration.ProvisionedMeshNode.setBluetoothDeviceAddress(java.lang.String)' on a null object reference
at no.nordicsemi.android.nrfmeshprovisioner.service.MeshService.onDeviceReady(MeshService.java:358)
at no.nordicsemi.android.ble.BleManager$BleManagerGattCallback.onDeviceReady(BleManager.java:1053)
at no.nordicsemi.android.nrfmeshprovisioner.ble.BleMeshManager$1.onDeviceReady(BleMeshManager.java:179)
at no.nordicsemi.android.ble.BleManager$BleManagerGattCallback.nextRequest(BleManager.java:1513)
at no.nordicsemi.android.ble.BleManager$BleManagerGattCallback.onMtuChanged(BleManager.java:1459)
at android.bluetooth.BluetoothGatt$1$13.run(BluetoothGatt.java:610)
at android.bluetooth.BluetoothGatt.runOrQueueCallback(BluetoothGatt.java:725)
at android.bluetooth.BluetoothGatt.-wrap0(Unknown Source:0)
at android.bluetooth.BluetoothGatt$1.onConfigureMTU(BluetoothGatt.java:605)
at android.bluetooth.IBluetoothGattCallback$Stub.onTransact(IBluetoothGattCallback.java:208)
at android.os.Binder.execTransact(Binder.java:697)

Library usage example + clean methods.

Is your feature request related to a problem? Please describe.
As a dev, It's still a nightmare trying to get the library working in my custom app. (non-native)

Describe the solution you'd like

  • Usage README. The provided snippet is useless.

Describe alternatives you've considered

Additional context

the bug of MeshModel


` protected MeshModel(final Parcel in) {

    final int modelId = in.readInt();
    if (modelId < Short.MIN_VALUE || modelId > Short.MAX_VALUE) {
        mModelId = modelId;
    } else {
        mModelId = (short) modelId;
    }
    in.readList(mBoundAppKeyIndexes, Integer.class.getClassLoader());
    sortAppKeys(in.readHashMap(String.class.getClassLoader()));
    publishAddress = in.createByteArray();
    publishAppKeyIndex = in.createByteArray();
    credentialFlag = in.readInt();
    publishTtl = in.readInt();
    publishPeriod = in.readInt();

// publicationSteps = publishPeriod >> 6;
// publicationResolution = publishPeriod & 0x03;
publicationSteps = (short) (publishPeriod >> 2);
publicationResolution = publishPeriod & 0x03;
publishRetransmitCount=in.readInt();//add it 2018/11/6
publishRetransmitIntervalSteps = in.readInt();
in.readList(mSubscriptionAddress, byte[].class.getClassLoader());
}`

Add ability to remove non-connected/non-configured nodes

if a node is provisioned but due to edge cases, is not configurable, we cannot reconnect to the node or relay messages, causing it to be only removed by resetting the whole network, this was by design due to the fact that the node will still have the network key, etc..
a better approach would be allowing a specific node to be "force deleted" with a user warning about security complications.

One of the more reasons for having this is in case a user physically resets the node, there is no way of removing the node from the network.

Select mesh node based on src address

Currently the app disregards the src of the messages and assumes that its the same node as the user is already communicating with. This may lead to wrong node being updated when receiving messages.

Provisioning the second Thingy will failed


Describe the bug
Provisioning the second Thingy will failed,happen to Example/nrf-mesh 1.0

To Reproduce
Steps to reproduce the behavior:

  1. Provisioning a Thingy,Succeed
  2. Provisioning the second Thingy , Failed always

Vendor Model

We hope to add a Vendor Model to config beacon,We consulted the GenericOnOffModel and made some necessary changes,implemented BeaconGet, BeaconSet,BeaconStatus;
we can receive BeaconStatus when i get Beacon Data,No matter how long the data is.
we can receive BeaconStatus when I send a short data to set beacon ,that valid data about 6 bytes ,example beacon major.
But we can not receive any data when I send a long data to set beacon ,that valid data about 20 bytes ,example beacon uuid,My colleague said he didn't receive the data of setting.
The above data length include our protocol but does not include mesh protocol.
Can you give me any advice,thanks!

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.