Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Barometer#1424 #1755

Merged
merged 11 commits into from
Nov 22, 2023
Merged

Barometer#1424 #1755

merged 11 commits into from
Nov 22, 2023

Conversation

dennisguse
Copy link
Member

@dennisguse dennisguse commented Nov 5, 2023

NOTE: increases minSDK from 24 to 26 (i.e., Android 8).

Preparation for implementing BLE barometric pressure sensors.

  • Avoid inheritance for connection handling
  • Inline BluetoothUtils (parsing code)
  • BluetoothSensors return a class for the measurement and SensorData is used to aggregate these measurements
  • Migrate AltitudeSumManager to SensorData

@dennisguse dennisguse added enhancement New feature or request maintenance Required maintenance work labels Nov 5, 2023
@dennisguse dennisguse marked this pull request as ready for review November 15, 2023 06:27
@dennisguse dennisguse force-pushed the barometer#1424 branch 3 times, most recently from 9311f2d to ecfaa14 Compare November 17, 2023 16:05
@dennisguse
Copy link
Member Author

@pstorch If you have some time, this would be reading for testing.
Technically, it is only refactoring - so no new features.

After this I can finally implement BLE Environmental Sensing.
Until now the sensor-related code had too much developed over time...

@pstorch
Copy link
Member

pstorch commented Nov 19, 2023

@dennisguse I've checked it out and put on my device for a test. Got a NPE right after stopping the first track:

Process: de.dennisguse.opentracks.debug, PID: java.lang.NullPointerException: Attempt to invoke virtual method 'void de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer.add(de.dennisguse.opentracks.sensors.sensorData.Raw)' on a null object   
  at de.dennisguse.opentracks.sensors.sensorData.SensorDataSet.update(SensorDataSet.java:122)
  at de.dennisguse.opentracks.sensors.SensorManager$1.onChange(SensorManager.java:38)
  at de.dennisguse.opentracks.sensors.AltitudeSumManager.onSensorValueChanged(AltitudeSumManager.java:44)
  at de.dennisguse.opentracks.sensors.driver.BarometerInternal$1.onSensorChanged(BarometerInternal.java:32)
  at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:991)
  at android.os.MessageQueue.nativePollOnce(Native Method)
  at android.os.MessageQueue.next(MessageQueue.java:335)
  at android.os.Looper.loopOnce(Looper.java:186)
  at android.os.Looper.loop(Looper.java:313)
  at android.app.ActivityThread.main(ActivityThread.java:8762)
  at java.lang.reflect.Method.invoke(Native Method)
  at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
  at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)

@dennisguse
Copy link
Member Author

Some kind of race condition in the recording stop part. I need to do some digging :)

@dennisguse
Copy link
Member Author

I just added some logs to get a feeling why this is crashing.

Current hypothesis: switching GainManager (was AltitudeSumManager) from pull to push (aka event-based) creates this race condition. Might even be that the disconnect actually never worked correctly.

@pstorch
Copy link
Member

pstorch commented Nov 20, 2023

Here is the same with a few lines of logcat, I hope it helps:

2023-11-20 20:15:28.158 28097-28097 TrackRecordingService   de.dennisguse.opentracks.debug       I  new status RecordingStatus[trackId=Id[id=4]] -> RecordingStatus[trackId=null]
2023-11-20 20:15:28.158 28097-28097 SensorDataSet           de.dennisguse.opentracks.debug       I  Resetting data
2023-11-20 20:15:28.163 28097-28097 MediaPlayer             de.dennisguse.opentracks.debug       V  resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
2023-11-20 20:15:28.163 28097-28097 MediaPlayer             de.dennisguse.opentracks.debug       V  cleanDrmObj: mDrmObj=null mDrmSessionId=null
2023-11-20 20:15:28.163 28097-28097 MediaPlayer-JNI         de.dennisguse.opentracks.debug       V  release
2023-11-20 20:15:28.163 28097-28097 MediaPlayerNative       de.dennisguse.opentracks.debug       V  setListener
2023-11-20 20:15:28.163 28097-28097 MediaPlayerNative       de.dennisguse.opentracks.debug       V  disconnect
2023-11-20 20:15:28.166 28097-28097 MediaPlayerNative       de.dennisguse.opentracks.debug       V  destructor
2023-11-20 20:15:28.166 28097-28097 MediaPlayerNative       de.dennisguse.opentracks.debug       V  disconnect
2023-11-20 20:15:28.166 28097-28097 BluetoothC...ionManager de.dennisguse.opentracks.debug       W  Cannot disconnect if not connected.
2023-11-20 20:15:28.166 28097-28097 BluetoothC...ionManager de.dennisguse.opentracks.debug       W  Cannot disconnect if not connected.
2023-11-20 20:15:28.166 28097-28097 BluetoothC...ionManager de.dennisguse.opentracks.debug       W  Cannot disconnect if not connected.
2023-11-20 20:15:28.166 28097-28097 BluetoothC...ionManager de.dennisguse.opentracks.debug       W  Cannot disconnect if not connected.
2023-11-20 20:15:28.166 28097-28097 BluetoothC...ionManager de.dennisguse.opentracks.debug       W  Cannot disconnect if not connected.
2023-11-20 20:15:28.166 28097-28097 GainManager             de.dennisguse.opentracks.debug       D  Stop
2023-11-20 20:15:28.167 28097-28159 TextToSpeech            de.dennisguse.opentracks.debug       I  Disconnected from TTS engine
2023-11-20 20:15:28.170 28097-28097 SensorManager           de.dennisguse.opentracks.debug       D  unregisterListener
2023-11-20 20:15:28.171 28097-28097 SensorDataSet           de.dennisguse.opentracks.debug       I  Setting aggregator de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer
2023-11-20 20:15:28.171 28097-28097 TrackRecordingService   de.dennisguse.opentracks.debug       W  Ignore newTrackPoint. Not recording.
2023-11-20 20:15:28.171 28097-28097 TrackRecordingService   de.dennisguse.opentracks.debug       E  newGpsStatus: 2131820771
2023-11-20 20:15:28.172  2899-3015  RequestManager_FLP      pid-2899                             E  [LocationManager] Location remove 6E46683C from de.dennisguse.opentracks.debug
2023-11-20 20:15:28.173 28097-28097 SensorDataSet           de.dennisguse.opentracks.debug       I  Removing all aggregators
2023-11-20 20:15:28.203 28097-28097 SensorManager           de.dennisguse.opentracks.debug       E  Exception dispatching input event.
2023-11-20 20:15:28.203 28097-28097 AndroidRuntime          de.dennisguse.opentracks.debug       D  Shutting down VM
2023-11-20 20:15:28.207 28097-28097 AndroidRuntime          de.dennisguse.opentracks.debug       E  FATAL EXCEPTION: main
                                                                                                    Process: de.dennisguse.opentracks.debug, PID: 28097
                                                                                                    java.lang.NullPointerException: Attempt to invoke virtual method 'void de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer.add(de.dennisguse.opentracks.sensors.sensorData.Raw)' on a null object reference
                                                                                                    	at de.dennisguse.opentracks.sensors.sensorData.SensorDataSet.update(SensorDataSet.java:123)
                                                                                                    	at de.dennisguse.opentracks.sensors.SensorManager$1.onChange(SensorManager.java:38)
                                                                                                    	at de.dennisguse.opentracks.sensors.GainManager.onSensorValueChanged(GainManager.java:44)
                                                                                                    	at de.dennisguse.opentracks.sensors.driver.BarometerInternal$1.onSensorChanged(BarometerInternal.java:32)
                                                                                                    	at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:991)
                                                                                                    	at android.os.MessageQueue.nativePollOnce(Native Method)
                                                                                                    	at android.os.MessageQueue.next(MessageQueue.java:335)
                                                                                                    	at android.os.Looper.loopOnce(Looper.java:186)
                                                                                                    	at android.os.Looper.loop(Looper.java:313)
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:8762)
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)
2023-11-20 20:15:28.237 28097-28097 Process                 de.dennisguse.opentracks.debug       I  Sending signal. PID: 28097 SIG: 9
2023-11-20 20:15:28.277  2899-3015  RequestManager_FLP      pid-2899                             E  [LocationManager] Location remove 0DA6BBDC from de.dennisguse.opentracks.debug

@dennisguse
Copy link
Member Author

🗡️
Something that shouldn't happen is happening.
I will add code to ignore these events.
Thx :D

@dennisguse
Copy link
Member Author

The BarometerInternal missed setting observer=null on disconnect, but still I don't get why sensors send data after unregister.
Anyhow, this should work now ;)

@dennisguse dennisguse merged commit fd91463 into main Nov 22, 2023
3 of 5 checks passed
@dennisguse dennisguse deleted the barometer#1424 branch November 22, 2023 19:05
@pstorch
Copy link
Member

pstorch commented Nov 22, 2023

Sorry for not responding in time. I've tested the new main Branch and it still happens on my device:

2023-11-22 20:29:09.544 17858-17858 ViewRootIm...gActivity] de.dennisguse.opentracks.debug       I  ViewPostIme pointer 0
2023-11-22 20:29:09.586 17858-17858 TrackRecordingManager   de.dennisguse.opentracks.debug       D  Ignoring TrackPoint as it has no distance (and sensor data is not new enough).
2023-11-22 20:29:09.599 17858-17858 TrackRecordingManager   de.dennisguse.opentracks.debug       D  Ignoring TrackPoint as it has no distance (and sensor data is not new enough).
2023-11-22 20:29:09.835 17858-17858 TrackRecordingManager   de.dennisguse.opentracks.debug       D  Ignoring TrackPoint as it has no distance (and sensor data is not new enough).
2023-11-22 20:29:09.848 17858-17858 TrackRecordingManager   de.dennisguse.opentracks.debug       D  Ignoring TrackPoint as it has no distance (and sensor data is not new enough).
2023-11-22 20:29:10.076 17858-17858 TrackRecordingService   de.dennisguse.opentracks.debug       I  new status RecordingStatus[trackId=Id[id=6]] -> RecordingStatus[trackId=null]
2023-11-22 20:29:10.076 17858-17858 SensorDataSet           de.dennisguse.opentracks.debug       I  Resetting data
2023-11-22 20:29:10.085 17858-17858 MediaPlayer             de.dennisguse.opentracks.debug       V  resetDrmState:  mDrmInfo=null mDrmProvisioningThread=null mPrepareDrmInProgress=false mActiveDrmScheme=false
2023-11-22 20:29:10.085 17858-17858 MediaPlayer             de.dennisguse.opentracks.debug       V  cleanDrmObj: mDrmObj=null mDrmSessionId=null
2023-11-22 20:29:10.085 17858-17858 MediaPlayer-JNI         de.dennisguse.opentracks.debug       V  release
2023-11-22 20:29:10.085 17858-17858 MediaPlayerNative       de.dennisguse.opentracks.debug       V  setListener
2023-11-22 20:29:10.085 17858-17858 MediaPlayerNative       de.dennisguse.opentracks.debug       V  disconnect
2023-11-22 20:29:10.087 17858-17858 MediaPlayerNative       de.dennisguse.opentracks.debug       V  destructor
2023-11-22 20:29:10.087 17858-17858 MediaPlayerNative       de.dennisguse.opentracks.debug       V  disconnect
2023-11-22 20:29:10.087 17858-17858 BluetoothC...ionManager de.dennisguse.opentracks.debug       W  Cannot disconnect if not connected.
2023-11-22 20:29:10.087 17858-17858 BluetoothC...ionManager de.dennisguse.opentracks.debug       W  Cannot disconnect if not connected.
2023-11-22 20:29:10.087 17858-17858 BluetoothC...ionManager de.dennisguse.opentracks.debug       W  Cannot disconnect if not connected.
2023-11-22 20:29:10.087 17858-17858 BluetoothC...ionManager de.dennisguse.opentracks.debug       W  Cannot disconnect if not connected.
2023-11-22 20:29:10.087 17858-17858 BluetoothC...ionManager de.dennisguse.opentracks.debug       W  Cannot disconnect if not connected.
2023-11-22 20:29:10.087 17858-17858 GainManager             de.dennisguse.opentracks.debug       D  Stop
2023-11-22 20:29:10.088 17858-17873 TextToSpeech            de.dennisguse.opentracks.debug       I  Disconnected from TTS engine
2023-11-22 20:29:10.091 17858-17858 SensorManager           de.dennisguse.opentracks.debug       D  unregisterListener
2023-11-22 20:29:10.091 17858-17858 SensorDataSet           de.dennisguse.opentracks.debug       I  Setting aggregator de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer
2023-11-22 20:29:10.091 17858-17858 TrackRecordingService   de.dennisguse.opentracks.debug       W  Ignore newTrackPoint. Not recording.
2023-11-22 20:29:10.092 17858-17858 TrackRecordingService   de.dennisguse.opentracks.debug       E  newGpsStatus: 2131820771
2023-11-22 20:29:10.092  2899-3015  RequestManager_FLP      com.sec.location.nsflp2              E  [LocationManager] Location remove 25F8F679 from de.dennisguse.opentracks.debug
2023-11-22 20:29:10.093 17858-17858 SensorDataSet           de.dennisguse.opentracks.debug       I  Removing all aggregators
2023-11-22 20:29:10.125 17858-17858 SensorManager           de.dennisguse.opentracks.debug       E  Exception dispatching input event.
2023-11-22 20:29:10.125 17858-17858 AndroidRuntime          de.dennisguse.opentracks.debug       D  Shutting down VM
2023-11-22 20:29:10.128 17858-17858 AndroidRuntime          de.dennisguse.opentracks.debug       E  FATAL EXCEPTION: main
                                                                                                    Process: de.dennisguse.opentracks.debug, PID: 17858
                                                                                                    java.lang.NullPointerException: Attempt to invoke virtual method 'void de.dennisguse.opentracks.sensors.sensorData.AggregatorBarometer.add(de.dennisguse.opentracks.sensors.sensorData.Raw)' on a null object reference
                                                                                                    	at de.dennisguse.opentracks.sensors.sensorData.SensorDataSet.update(SensorDataSet.java:123)
                                                                                                    	at de.dennisguse.opentracks.sensors.SensorManager$1.onChange(SensorManager.java:38)
                                                                                                    	at de.dennisguse.opentracks.sensors.GainManager.onSensorValueChanged(GainManager.java:44)
                                                                                                    	at de.dennisguse.opentracks.sensors.driver.BarometerInternal$1.onSensorChanged(BarometerInternal.java:32)
                                                                                                    	at android.hardware.SystemSensorManager$SensorEventQueue.dispatchSensorEvent(SystemSensorManager.java:991)
                                                                                                    	at android.os.MessageQueue.nativePollOnce(Native Method)
                                                                                                    	at android.os.MessageQueue.next(MessageQueue.java:335)
                                                                                                    	at android.os.Looper.loopOnce(Looper.java:186)
                                                                                                    	at android.os.Looper.loop(Looper.java:313)
                                                                                                    	at android.app.ActivityThread.main(ActivityThread.java:8762)
                                                                                                    	at java.lang.reflect.Method.invoke(Native Method)
                                                                                                    	at com.android.internal.os.RuntimeInit$MethodAndArgsCaller.run(RuntimeInit.java:604)
                                                                                                    	at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:1067)

@dennisguse
Copy link
Member Author

Just in time production :)

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
enhancement New feature or request maintenance Required maintenance work
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants