Atrial fibrillation and heart rate monitoring app

Search This thread

Gastopako

Member
Aug 16, 2022
10
6
Android Wear
Hi all,

I have developed an application for a Wear OS, intended for a robust continuous atrial fibrillation (arrhythmia) and heart rate monitoring, which uses an optical sensor (green light) in the bottom of the watch. I'm currently limited to Fossil Gen 5 watch since my Samsung Galaxy Watch 4 won't give software access to its optical sensor.

Having said that, would anybody here like to test the app on their watches? It still needs to be improved and optimized, therefore, feedback would be appreciated. Also, it would run on other watches, however, in that case I would need to know an address of an optical sensor (Fossil Gen5 PPG sensor is 65572) so I could update the app.

I'd like to publish it in Google Play sometime later, have never done it before, it looks quite tricky, however, I filled most of the things there already.
 

Attachments

  • app-debug.apk
    15.9 MB · Views: 341
  • screen.png
    screen.png
    23.3 KB · Views: 53
Last edited:
  • Like
Reactions: rodken

bernarbernuli

Senior Member
Aug 26, 2010
341
750
Vigo
www.htcmania.com
Hi all,

I have developed an application for a Wear OS, intended for a robust continuous atrial fibrillation (arrhythmia) and heart rate monitoring, which uses an optical sensor (green light) in the bottom of the watch. I'm currently limited to Fossil Gen 5 watch since my Samsung Galaxy Watch 4 won't give software access to its optical sensor.

Having said that, would anybody here like to test the app on their watches? It still needs to be improved and optimized, therefore, feedback would be appreciated. Also, it would run on other watches, however, in that case I would need to know an address of an optical sensor (Fossil Gen5 PPG sensor is 65572) so I could update the app.

I'd like to publish it in Google Play sometime later, have never done it before, it looks quite tricky, however, I filled most of the things there already.

Hi, I have tried your app, it's great that you are doing this.

I have tested it on Ticwatch Pro 3 GPS, it works correctly, shows heart rate and cardiogram for arrhythmias.

When I started the app for the first time it did not ask me to enable sensor permissions nor did it alert me that it did not have the permission enabled when I started monitoring. I activated them manually and it worked as expected.

About the PPG sensor address for TWP3 I don't know which one it is, I guess it is the same as the Fossil Gen5, because it works.
 
  • Like
Reactions: Gastopako

Gastopako

Member
Aug 16, 2022
10
6
Android Wear
Hi, I have tried your app, it's great that you are doing this.

I have tested it on Ticwatch Pro 3 GPS, it works correctly, shows heart rate and cardiogram for arrhythmias.

When I started the app for the first time it did not ask me to enable sensor permissions nor did it alert me that it did not have the permission enabled when I started monitoring. I activated them manually and it worked as expected.

About the PPG sensor address for TWP3 I don't know which one it is, I guess it is the same as the Fossil Gen5, because it works.

Thank you so much! Didn't expect such a quick feedback!
I'll try correcting the permission part. And it's great to know, that app is compatible with TWP3.
Just in case, keep in mind, that this app runs in the background and should be stopped manually.
 

a0323022

New member
Jun 1, 2009
3
1
Hi, I would like to try this on my Fossil 6. Do you install the .apk on the watch or phone? Sorry, I've never installed outside of PlayStore.
 
  • Like
Reactions: Gastopako

mangobot

New member
Jun 4, 2013
2
1
Hi all,

I have developed an application for a Wear OS, intended for a robust continuous atrial fibrillation (arrhythmia) and heart rate monitoring, which uses an optical sensor (green light) in the bottom of the watch. I'm currently limited to Fossil Gen 5 watch since my Samsung Galaxy Watch 4 won't give software access to its optical sensor.

Having said that, would anybody here like to test the app on their watches? It still needs to be improved and optimized, therefore, feedback would be appreciated. Also, it would run on other watches, however, in that case I would need to know an address of an optical sensor (Fossil Gen5 PPG sensor is 65572) so I could update the app.

I'd like to publish it in Google Play sometime later, have never done it before, it looks quite tricky, however, I filled most of the things there already.

Looks to me like Samsung has their sensor hidden behind this 'privileged' api, might be worth trying to request access?
 
  • Like
Reactions: Gastopako

mangobot

New member
Jun 4, 2013
2
1
Actually I was able to find a couple potential addresses for the Samsung sensor when I poked around a bit, were you unable to actually access the hardware even with the address?
 

Gastopako

Member
Aug 16, 2022
10
6
Android Wear
Actually I was able to find a couple potential addresses for the Samsung sensor when I poked around a bit, were you unable to actually access the hardware even with the address?
Thanks for the tip. As I matter of fact I did try contacting them in the exact same way you showed, however, I the declined my request without explanation. Maybe it is because I didn't mention any affiliation with business or something like that. I'll try requesting once again.

I also tried reading all the accessible sensors in Watch 4, however, software access to the PPG sensors is restricted.

I guess the sensor you are referring to is this one:
Samsung PPGBatch Sensor /Type_String: com.samsung.sensor.ppg_batch /Type_number: 69668

Galaxy Watch 4 offers wide range of sensors and I have developed quite a lot of various algorithms, which could be implemented, e.g., continuous SpO2 monitoring (red and infrared optical sensors), confirmation of a suspected atrial fibrillation (detected by using green light optical sensor) using an ECG strip.
 

Gastopako

Member
Aug 16, 2022
10
6
Android Wear
I tested app on TicWatch E3 and it does work on this watch. However, I noticed that the quality of the Photoplethysmogram signal is worse than what I get in Fossil Gen 5 watch. With Fossil Gen 5 watch, you don't even have to search for a good spot on the wrist, the quality is always good and it is not the case with TicWatch E3. The algorithm in the app won't throw false alarms because of that, the signal quality is constantly monitored, however, with that kind of quality it would be tricky to detect AF if it was present.
 

exswim

Member
Aug 28, 2008
5
1
I apologize but I would like some help. I have a ticwatch E3. I apparently installed the app using Wear Installer 2. That app indicated that the installation was was successful. However, the app does not appear in my launcher. Is there something else I need to do?
 

rodken

Senior Member
Jan 11, 2010
1,462
629
I apologize but I would like some help. I have a ticwatch E3. I apparently installed the app using Wear Installer 2. That app indicated that the installation was was successful. However, the app does not appear in my launcher. Is there something else I need to do?
You might want to consider utilizing Bugjaeger Mobile ADB as a really alternative and innovative solution to the problem of sideloading apps on Wear OS devices.
 

exswim

Member
Aug 28, 2008
5
1
Thanks for the reply. Another question, as I said the Wear Installer 2 indicated that the app was installed. Would this app appear as an app in settings or in the launcher. If not, where is it on my watch?
 

exswim

Member
Aug 28, 2008
5
1
I tested app on TicWatch E3 and it does work on this watch. However, I noticed that the quality of the Photoplethysmogram signal is worse than what I get in Fossil Gen 5 watch. With Fossil Gen 5 watch, you don't even have to search for a good spot on the wrist, the quality is always good and it is not the case with TicWatch E3. The algorithm in the app won't throw false alarms because of that, the signal quality is constantly monitored, however, with that kind of quality it would be tricky to detect AF if it was present.
I would like some help. I have a ticwatch E3. I apparently installed the app using Wear Installer 2. That app indicated that the installation was was successful. However, the app does not appear in my launcher. Is there something else I need to do?
 

Gastopako

Member
Aug 16, 2022
10
6
Android Wear
Hi, I did some updates to the app, mainly in the representation of the heart rate change over time. There are some as to say, drawbacks because for now heart rate values are saved in a local variable, therefore, if app was closed and restarted, the previous heart rate log would not be saved. I also have some thoughts in adding additional screen for the parameters of atrial fibrillation if one was detected, however, still not sure what information (e.g., beginning and the end of the AF episode, duration of the AF episode, etc. ) regarding this would be relevant for an ordinary user. Maybe some of you might have ideas what info would be of utmost relevance for you.
 

Attachments

  • main_screen.png
    main_screen.png
    19.9 KB · Views: 35
  • hr_screen.png
    hr_screen.png
    27.4 KB · Views: 34
  • app-debug.apk
    16.4 MB · Views: 107

mura20

Senior Member
Dec 17, 2012
500
90
I would love to use this app on my Samsung Watch 5. I hope you succeed in getting access to the sensors on the Samsung Watches. I think your app would be very popular!
 
  • Like
Reactions: Gastopako

oppophoneuser

New member
Dec 4, 2022
2
0
Hi, I know it's a tech site but to anyone suffering from atrial fibrillation-one of the most common but least talked about causes is head and neck posture/atlas position, slumped forward posture- very common with the amount of time we spend on our computers- see Dr John Berg youtube channel -
A good chiropractor or acupuncture practitioner can help to correct these abnormal and harmful postures and could possibly save you from surgery or pacemaker..
Don't ignore other causes which are more serious though-especially in the lat 2 years- lots of people are getting abnormal blood clotting since having a certain injection or getting long covid.
 

Gastopako

Member
Aug 16, 2022
10
6
Android Wear
I would love to use this app on my Samsung Watch 5. I hope you succeed in getting access to the sensors on the Samsung Watches. I think your app would be very popular!
Thanks! I haven't motivated myself to fill the request for getting the sensor access yet. It is quite complicated. Another thing that I noticed is that the raw green PPG signal from Galaxy Watch 4 and 5 is sampled at 25 Hz. Mine algorithm uses higher sampling frequency. According to the info provided by Samsung, only RED and Infrared PPGs in Galaxy Watch 4 and 5 are sampled at 100 Hz.

I am planning on improving the app by integrating it with Health Connect or with something similar. Currently the app stores, e.g., heart rate data in temporary variables, which are cleared as soon as the app is restarted. Another option was to write data in the main storage; however, data management seems tricky to me, I wouldn't want to deal with databases on my own.
 
  • Like
Reactions: rodken

Top Liked Posts

  • There are no posts matching your filters.
  • 1
    Hi, I did some updates to the app, mainly in the representation of the heart rate change over time. There are some as to say, drawbacks because for now heart rate values are saved in a local variable, therefore, if app was closed and restarted, the previous heart rate log would not be saved. I also have some thoughts in adding additional screen for the parameters of atrial fibrillation if one was detected, however, still not sure what information (e.g., beginning and the end of the AF episode, duration of the AF episode, etc. ) regarding this would be relevant for an ordinary user. Maybe some of you might have ideas what info would be of utmost relevance for you.
    Thank you for creating this amazing software! I recently installed this app on my Mobvoi Ticwatch S2, but it doesn't seem to be working. I've enabled body sensor permission and checked the settings, but the cardiogram and heart rate aren't displaying. I tried running adb shell dumpsys sensorservice on the device, and this was the output:
    Sensor List: 0x00000001) LSM6DS3 Accelerometer | STMicroelectronics | ver: 1 | type: android.sensor.accelerometer(1) | perm: n/a | flags: 0x00000000 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 3000) events | non-wakeUp | 0x00000002) LSM6DS3 Accelerometer Uncalibrated | STMicroelectronics | ver: 1 | type: android.sensor.accelerometer_uncalibrated(35) | perm: n/a | flags: 0x00000000 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 3000) events | non-wakeUp | 0x00000003) LSM6DS3 Gyroscope | STMicroelectronics | ver: 1 | type: android.sensor.gyroscope(4) | perm: n/a | flags: 0x00000000 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 0) events | non-wakeUp | 0x00000004) LSM6DS3 Gyroscope Uncalibrated | STMicroelectronics | ver: 1 | type: android.sensor.gyroscope_uncalibrated(16) | perm: n/a | flags: 0x00000000 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 0) events | non-wakeUp | 0x00000005) LSM6DS3 Accelerometer -Wakeup Secondary | STMicroelectronics | ver: 1 | type: android.sensor.accelerometer(1) | perm: n/a | flags: 0x00000001 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 0) events | wakeUp | 0x00000006) LSM6DS3 Accelerometer Uncalibrated -Wakeup Secondary | STMicroelectronics | ver: 1 | type: android.sensor.accelerometer_uncalibrated(35) | perm: n/a | flags: 0x00000001 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 3000) events | wakeUp | 0x00000007) LSM6DS3 Gyroscope -Wakeup Secondary | STMicroelectronics | ver: 1 | type: android.sensor.gyroscope(4) | perm: n/a | flags: 0x00000001 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 0) events | wakeUp | 0x00000008) LSM6DS3 Gyroscope Uncalibrated -Wakeup Secondary | STMicroelectronics | ver: 1 | type: android.sensor.gyroscope_uncalibrated(16) | perm: n/a | flags: 0x00000001 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 0) events | wakeUp | 0x00000009) Gravity | QTI | ver: 2 | type: android.sensor.gravity(9) | perm: n/a | flags: 0x00000000 continuous | minRate=5.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (27941, 150) events | non-wakeUp | 0x0000000a) Linear Acceleration | QTI | ver: 2 | type: android.sensor.linear_acceleration(10) | perm: n/a | flags: 0x00000000 continuous | minRate=5.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (27941, 150) events | non-wakeUp | 0x0000000b) Step Detector | QTI | ver: 2 | type: android.sensor.step_detector(18) | perm: n/a | flags: 0x00000006 special-trigger | maxDelay=0us | minDelay=0us | FIFO (max,reserved) = (41912, 150) events | non-wakeUp | 0x0000000c) Step Counter | QTI | ver: 2 | type: android.sensor.step_counter(19) | perm: n/a | flags: 0x00000002 on-change | minRate=0.00Hz | minDelay=0us | FIFO (max,reserved) = (41912, 150) events | non-wakeUp | 0x0000000d) Significant Motion Detector | QTI | ver: 2 | type: android.sensor.significant_motion(17) | perm: n/a | flags: 0x00000005 one-shot | maxDelay=0us | minDelay=-1us | no batching | wakeUp | 0x0000000e) Game Rotation Vector | QTI | ver: 2 | type: android.sensor.game_rotation_vector(15) | perm: n/a | flags: 0x00000000 continuous | minRate=5.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (35924, 300) events | non-wakeUp | 0x0000000f) Heart Rate Monitor | QTI | ver: 4 | type: android.sensor.heart_rate(21) | perm: android.permission.BODY_SENSORS | flags: 0x00000002 on-change | minRate=1.00Hz | minDelay=0us | FIFO (max,reserved) = (200, 100) events | non-wakeUp | 0x00000010) Wrist Tilt Gesture | QTI | ver: 3 | type: android.sensor.wrist_tilt_gesture(26) | perm: n/a | flags: 0x00000007 special-trigger | maxDelay=0us | minDelay=0us | FIFO (max,reserved) = (41912, 150) events | wakeUp | 0x00000011) Gravity -Wakeup Secondary | QTI | ver: 2 | type: android.sensor.gravity(9) | perm: n/a | flags: 0x00000001 continuous | minRate=5.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (27941, 150) events | wakeUp | 0x00000012) Linear Acceleration -Wakeup Secondary | QTI | ver: 2 | type: android.sensor.linear_acceleration(10) | perm: n/a | flags: 0x00000001 continuous | minRate=5.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (27941, 150) events | wakeUp | 0x00000013) Step Detector -Wakeup Secondary | QTI | ver: 2 | type: android.sensor.step_detector(18) | perm: n/a | flags: 0x00000007 special-trigger | maxDelay=0us | minDelay=0us | FIFO (max,reserved) = (41912, 150) events | wakeUp | 0x00000014) Step Counter -Wakeup Secondary | QTI | ver: 2 | type: android.sensor.step_counter(19) | perm: n/a | flags: 0x00000003 on-change | minRate=0.00Hz | minDelay=0us | FIFO (max,reserved) = (41912, 150) events | wakeUp | 0x00000015) Game Rotation Vector -Wakeup Secondary | QTI | ver: 2 | type: android.sensor.game_rotation_vector(15) | perm: n/a | flags: 0x00000001 continuous | minRate=5.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (35924, 300) events | wakeUp | 0x00000016) Heart Rate Monitor -Wakeup Secondary | QTI | ver: 4 | type: android.sensor.heart_rate(21) | perm: android.permission.BODY_SENSORS | flags: 0x00000003 on-change | minRate=1.00Hz | minDelay=0us | FIFO (max,reserved) = (200, 100) events | wakeUp | 0x00000017) Gaze Detector -Wakeup | COMPAL | ver: 2 | type: com.google.sensor.gaze_gesture(33171025) | perm: n/a | flags: 0x00000007 special-trigger | maxDelay=0us | minDelay=0us | no batching | wakeUp | 0x00000018) AMD | QTI | ver: 2 | type: com.qti.sensor.amd(33171006) | perm: n/a | flags: 0x00000002 on-change | minRate=0.00Hz | minDelay=0us | no batching | non-wakeUp | 0x00000019) RMD | QTI | ver: 2 | type: com.qti.sensor.rmd(33171007) | perm: n/a | flags: 0x00000002 on-change | minRate=0.00Hz | minDelay=0us | no batching | non-wakeUp | 0x0000001a) Pedometer | QTI | ver: 2 | type: com.qti.sensor.pedometer(33171009) | perm: n/a | flags: 0x00000002 on-change | minRate=0.00Hz | minDelay=0us | FIFO (max,reserved) = (41912, 150) events | non-wakeUp | 0x0000001b) Coarse Motion Classifier | QTI | ver: 4 | type: com.qti.sensor.cmc(33171012) | perm: n/a | flags: 0x00000003 on-change | minRate=0.00Hz | minDelay=0us | FIFO (max,reserved) = (6985, 150) events | wakeUp | 0x0000001c) PAH8011 Touch | Pixart | ver: 1 | type: android.sensor.low_latency_offbody_detect(34) | perm: n/a | flags: 0x00000002 on-change | minRate=0.02Hz | minDelay=0us | FIFO (max,reserved) = (40960, 0) events | non-wakeUp | 0x0000001d) PAH8011 Touch -Wakeup Secondary | Pixart | ver: 1 | type: android.sensor.low_latency_offbody_detect(34) | perm: n/a | flags: 0x00000003 on-change | minRate=0.02Hz | minDelay=0us | FIFO (max,reserved) = (40960, 0) events | wakeUp | 0x0000001e) Gaze Detector Secondary | COMPAL | ver: 2 | type: com.google.sensor.gaze_gesture(33171025) | perm: n/a | flags: 0x00000006 special-trigger | maxDelay=0us | minDelay=0us | no batching | non-wakeUp | 0x0000001f) UnGaze Detector | COMPAL | ver: 2 | type: com.google.sensor.ungaze_gesture(33171026) | perm: n/a | flags: 0x00000006 special-trigger | maxDelay=0us | minDelay=0us | no batching | non-wakeUp | 0x5f676172) Game Rotation Vector Sensor | AOSP | ver: 3 | type: android.sensor.game_rotation_vector(15) | perm: n/a | flags: 0x00000000 continuous | maxDelay=0us | maxRate=100.00Hz | no batching | non-wakeUp | 0x5f677276) Gravity Sensor | AOSP | ver: 3 | type: android.sensor.gravity(9) | perm: n/a | flags: 0x00000000 continuous | maxDelay=0us | maxRate=100.00Hz | no batching | non-wakeUp |
    1
    Thank you for creating this amazing software! I recently installed this app on my Mobvoi Ticwatch S2, but it doesn't seem to be working. I've enabled body sensor permission and checked the settings, but the cardiogram and heart rate aren't displaying. I tried running adb shell dumpsys sensorservice on the device, and this was the output:
    Sensor List: 0x00000001) LSM6DS3 Accelerometer | STMicroelectronics | ver: 1 | type: android.sensor.accelerometer(1) | perm: n/a | flags: 0x00000000 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 3000) events | non-wakeUp | 0x00000002) LSM6DS3 Accelerometer Uncalibrated | STMicroelectronics | ver: 1 | type: android.sensor.accelerometer_uncalibrated(35) | perm: n/a | flags: 0x00000000 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 3000) events | non-wakeUp | 0x00000003) LSM6DS3 Gyroscope | STMicroelectronics | ver: 1 | type: android.sensor.gyroscope(4) | perm: n/a | flags: 0x00000000 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 0) events | non-wakeUp | 0x00000004) LSM6DS3 Gyroscope Uncalibrated | STMicroelectronics | ver: 1 | type: android.sensor.gyroscope_uncalibrated(16) | perm: n/a | flags: 0x00000000 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 0) events | non-wakeUp | 0x00000005) LSM6DS3 Accelerometer -Wakeup Secondary | STMicroelectronics | ver: 1 | type: android.sensor.accelerometer(1) | perm: n/a | flags: 0x00000001 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 0) events | wakeUp | 0x00000006) LSM6DS3 Accelerometer Uncalibrated -Wakeup Secondary | STMicroelectronics | ver: 1 | type: android.sensor.accelerometer_uncalibrated(35) | perm: n/a | flags: 0x00000001 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 3000) events | wakeUp | 0x00000007) LSM6DS3 Gyroscope -Wakeup Secondary | STMicroelectronics | ver: 1 | type: android.sensor.gyroscope(4) | perm: n/a | flags: 0x00000001 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 0) events | wakeUp | 0x00000008) LSM6DS3 Gyroscope Uncalibrated -Wakeup Secondary | STMicroelectronics | ver: 1 | type: android.sensor.gyroscope_uncalibrated(16) | perm: n/a | flags: 0x00000001 continuous | minRate=1.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (40960, 0) events | wakeUp | 0x00000009) Gravity | QTI | ver: 2 | type: android.sensor.gravity(9) | perm: n/a | flags: 0x00000000 continuous | minRate=5.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (27941, 150) events | non-wakeUp | 0x0000000a) Linear Acceleration | QTI | ver: 2 | type: android.sensor.linear_acceleration(10) | perm: n/a | flags: 0x00000000 continuous | minRate=5.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (27941, 150) events | non-wakeUp | 0x0000000b) Step Detector | QTI | ver: 2 | type: android.sensor.step_detector(18) | perm: n/a | flags: 0x00000006 special-trigger | maxDelay=0us | minDelay=0us | FIFO (max,reserved) = (41912, 150) events | non-wakeUp | 0x0000000c) Step Counter | QTI | ver: 2 | type: android.sensor.step_counter(19) | perm: n/a | flags: 0x00000002 on-change | minRate=0.00Hz | minDelay=0us | FIFO (max,reserved) = (41912, 150) events | non-wakeUp | 0x0000000d) Significant Motion Detector | QTI | ver: 2 | type: android.sensor.significant_motion(17) | perm: n/a | flags: 0x00000005 one-shot | maxDelay=0us | minDelay=-1us | no batching | wakeUp | 0x0000000e) Game Rotation Vector | QTI | ver: 2 | type: android.sensor.game_rotation_vector(15) | perm: n/a | flags: 0x00000000 continuous | minRate=5.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (35924, 300) events | non-wakeUp | 0x0000000f) Heart Rate Monitor | QTI | ver: 4 | type: android.sensor.heart_rate(21) | perm: android.permission.BODY_SENSORS | flags: 0x00000002 on-change | minRate=1.00Hz | minDelay=0us | FIFO (max,reserved) = (200, 100) events | non-wakeUp | 0x00000010) Wrist Tilt Gesture | QTI | ver: 3 | type: android.sensor.wrist_tilt_gesture(26) | perm: n/a | flags: 0x00000007 special-trigger | maxDelay=0us | minDelay=0us | FIFO (max,reserved) = (41912, 150) events | wakeUp | 0x00000011) Gravity -Wakeup Secondary | QTI | ver: 2 | type: android.sensor.gravity(9) | perm: n/a | flags: 0x00000001 continuous | minRate=5.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (27941, 150) events | wakeUp | 0x00000012) Linear Acceleration -Wakeup Secondary | QTI | ver: 2 | type: android.sensor.linear_acceleration(10) | perm: n/a | flags: 0x00000001 continuous | minRate=5.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (27941, 150) events | wakeUp | 0x00000013) Step Detector -Wakeup Secondary | QTI | ver: 2 | type: android.sensor.step_detector(18) | perm: n/a | flags: 0x00000007 special-trigger | maxDelay=0us | minDelay=0us | FIFO (max,reserved) = (41912, 150) events | wakeUp | 0x00000014) Step Counter -Wakeup Secondary | QTI | ver: 2 | type: android.sensor.step_counter(19) | perm: n/a | flags: 0x00000003 on-change | minRate=0.00Hz | minDelay=0us | FIFO (max,reserved) = (41912, 150) events | wakeUp | 0x00000015) Game Rotation Vector -Wakeup Secondary | QTI | ver: 2 | type: android.sensor.game_rotation_vector(15) | perm: n/a | flags: 0x00000001 continuous | minRate=5.00Hz | maxRate=100.00Hz | FIFO (max,reserved) = (35924, 300) events | wakeUp | 0x00000016) Heart Rate Monitor -Wakeup Secondary | QTI | ver: 4 | type: android.sensor.heart_rate(21) | perm: android.permission.BODY_SENSORS | flags: 0x00000003 on-change | minRate=1.00Hz | minDelay=0us | FIFO (max,reserved) = (200, 100) events | wakeUp | 0x00000017) Gaze Detector -Wakeup | COMPAL | ver: 2 | type: com.google.sensor.gaze_gesture(33171025) | perm: n/a | flags: 0x00000007 special-trigger | maxDelay=0us | minDelay=0us | no batching | wakeUp | 0x00000018) AMD | QTI | ver: 2 | type: com.qti.sensor.amd(33171006) | perm: n/a | flags: 0x00000002 on-change | minRate=0.00Hz | minDelay=0us | no batching | non-wakeUp | 0x00000019) RMD | QTI | ver: 2 | type: com.qti.sensor.rmd(33171007) | perm: n/a | flags: 0x00000002 on-change | minRate=0.00Hz | minDelay=0us | no batching | non-wakeUp | 0x0000001a) Pedometer | QTI | ver: 2 | type: com.qti.sensor.pedometer(33171009) | perm: n/a | flags: 0x00000002 on-change | minRate=0.00Hz | minDelay=0us | FIFO (max,reserved) = (41912, 150) events | non-wakeUp | 0x0000001b) Coarse Motion Classifier | QTI | ver: 4 | type: com.qti.sensor.cmc(33171012) | perm: n/a | flags: 0x00000003 on-change | minRate=0.00Hz | minDelay=0us | FIFO (max,reserved) = (6985, 150) events | wakeUp | 0x0000001c) PAH8011 Touch | Pixart | ver: 1 | type: android.sensor.low_latency_offbody_detect(34) | perm: n/a | flags: 0x00000002 on-change | minRate=0.02Hz | minDelay=0us | FIFO (max,reserved) = (40960, 0) events | non-wakeUp | 0x0000001d) PAH8011 Touch -Wakeup Secondary | Pixart | ver: 1 | type: android.sensor.low_latency_offbody_detect(34) | perm: n/a | flags: 0x00000003 on-change | minRate=0.02Hz | minDelay=0us | FIFO (max,reserved) = (40960, 0) events | wakeUp | 0x0000001e) Gaze Detector Secondary | COMPAL | ver: 2 | type: com.google.sensor.gaze_gesture(33171025) | perm: n/a | flags: 0x00000006 special-trigger | maxDelay=0us | minDelay=0us | no batching | non-wakeUp | 0x0000001f) UnGaze Detector | COMPAL | ver: 2 | type: com.google.sensor.ungaze_gesture(33171026) | perm: n/a | flags: 0x00000006 special-trigger | maxDelay=0us | minDelay=0us | no batching | non-wakeUp | 0x5f676172) Game Rotation Vector Sensor | AOSP | ver: 3 | type: android.sensor.game_rotation_vector(15) | perm: n/a | flags: 0x00000000 continuous | maxDelay=0us | maxRate=100.00Hz | no batching | non-wakeUp | 0x5f677276) Gravity Sensor | AOSP | ver: 3 | type: android.sensor.gravity(9) | perm: n/a | flags: 0x00000000 continuous | maxDelay=0us | maxRate=100.00Hz | no batching | non-wakeUp |

    Hi, thank you for sharing this dumpsys. I see PPG sensor here, which is named Pixart PAH8011 (the same is used in Fossil watches), however, there is no address to read it, it should look something like this: PAH8011 PPG | Pixart | ver: 1 | type: com.google.wear.sensor.ppg(65572) | perm: n/a.

    I attached an updated apk file, the app now shows alert dialog if a specific sensor is not detected.
    1
    Fortunately, so far as I know, I do not have an afib issue. But I have friends who learned that they did from an alert on their Apple Watch.

    On your app, I can see the graphic representation of BPM, so I assume that the app is working, but how do I know if the afib detection is working? If afib detection is enabled is a user alerted if there is an afib issue? Do you need to be looking at the app or is there some alert that pops up?

    And if logging is disabled does afib detection work?

    Thanks!
  • 2
    Hi, I did some updates to the app, mainly in the representation of the heart rate change over time. There are some as to say, drawbacks because for now heart rate values are saved in a local variable, therefore, if app was closed and restarted, the previous heart rate log would not be saved. I also have some thoughts in adding additional screen for the parameters of atrial fibrillation if one was detected, however, still not sure what information (e.g., beginning and the end of the AF episode, duration of the AF episode, etc. ) regarding this would be relevant for an ordinary user. Maybe some of you might have ideas what info would be of utmost relevance for you.
    1
    Hi all,

    I have developed an application for a Wear OS, intended for a robust continuous atrial fibrillation (arrhythmia) and heart rate monitoring, which uses an optical sensor (green light) in the bottom of the watch. I'm currently limited to Fossil Gen 5 watch since my Samsung Galaxy Watch 4 won't give software access to its optical sensor.

    Having said that, would anybody here like to test the app on their watches? It still needs to be improved and optimized, therefore, feedback would be appreciated. Also, it would run on other watches, however, in that case I would need to know an address of an optical sensor (Fossil Gen5 PPG sensor is 65572) so I could update the app.

    I'd like to publish it in Google Play sometime later, have never done it before, it looks quite tricky, however, I filled most of the things there already.
    1
    Hi all,

    I have developed an application for a Wear OS, intended for a robust continuous atrial fibrillation (arrhythmia) and heart rate monitoring, which uses an optical sensor (green light) in the bottom of the watch. I'm currently limited to Fossil Gen 5 watch since my Samsung Galaxy Watch 4 won't give software access to its optical sensor.

    Having said that, would anybody here like to test the app on their watches? It still needs to be improved and optimized, therefore, feedback would be appreciated. Also, it would run on other watches, however, in that case I would need to know an address of an optical sensor (Fossil Gen5 PPG sensor is 65572) so I could update the app.

    I'd like to publish it in Google Play sometime later, have never done it before, it looks quite tricky, however, I filled most of the things there already.

    Hi, I have tried your app, it's great that you are doing this.

    I have tested it on Ticwatch Pro 3 GPS, it works correctly, shows heart rate and cardiogram for arrhythmias.

    When I started the app for the first time it did not ask me to enable sensor permissions nor did it alert me that it did not have the permission enabled when I started monitoring. I activated them manually and it worked as expected.

    About the PPG sensor address for TWP3 I don't know which one it is, I guess it is the same as the Fossil Gen5, because it works.
    1
    Hi, I would like to try this on my Fossil 6. Do you install the .apk on the watch or phone? Sorry, I've never installed outside of PlayStore.
    1
    Fortunately, so far as I know, I do not have an afib issue. But I have friends who learned that they did from an alert on their Apple Watch.

    On your app, I can see the graphic representation of BPM, so I assume that the app is working, but how do I know if the afib detection is working? If afib detection is enabled is a user alerted if there is an afib issue? Do you need to be looking at the app or is there some alert that pops up?

    And if logging is disabled does afib detection work?

    Thanks!