ECG Data - A4100 Sample Health App ECG Sensor

ECG Sample test data 

Upon clicking the Mason ECG tests option, the user can view either of the following screens based on first-time user experience vs a returning user to this screen.

In case the user doesn’t have permission for sensor data it will ask for permission first and once the user provides the permission the sensor will be active to send data. This one-time permission until the user disables the permission.

Grant Permissions

The following line of code is utilized in the Activity class within the Oncreate() method. It will first check for permission. If it is not enabled, you need to open up the Allow permission screen (First Figure below). If permissions are already granted User would see the Second Figure below.

Fig 1

// Code snippet to get Heart Rate, Stress, and value
// get Heart Rate 
        @Override
        public void HandleHeartRate(ECGHeartRate ecgHeartRate) {
           Log.i(TAG, "Get Heart Rate: " + Integer.toString(ecgHeartRate.getBpm()));
        }
// get Stress Score and State 
       @Override
        public void HandleStress(ECGStress ecgStress) {
            String score = Integer.toString(ecgStress.getScore());
            String state = Integer.toString(ecgStress.getState());
        }
 // get Total Energy and Progress 
       @Override
        public void HandleEnergy(ECGEnergy ecgEnergy) {
            String totalEnergy = Float.toString(ecgEnergy.getTotalEnergy());
            String progress = Integer.toString(ecgEnergy.getProgress());
        }
// User Details 
        @Override
        public void HandleUserId(ECGUserID ecgUserID) {
            String mode = Integer.toString(ecgUserID.getMode());
            String status = Integer.toString(ecgUserID.getStatus());
            String enrollProgress = Integer.toString(ecgUserID.getEnrolProgress());
            int enrollUserCnt = ecgUserID.getEnrolUserCount();
            String enrollUserCntStr = Integer.toString(enrollUserCnt);
            String enrollFTEReason = Integer.toString(ecgUserID.getEnrolFTEReason());
            int currentAutorizedUser = ecgUserID.getAuthUserId();
            String curAuthUserStr = Integer.toString(currentAutorizedUser);
            String autRejectionReason = Integer.toString(ecgUserID.getAuthRejectReason());
            String authProgress = Integer.toString(ecgUserID.getAuthProgress());
      }
// get heart rate variability and progress 
    @Override
        public void HandleHeartRateVariability(ECGHeartRateVariability ecgHeartRateVariability) {
            String hrv = Integer.toString(ecgHeartRateVariability.getHeartRateVariability());
            String progress = Integer.toString(ecgHeartRateVariability.getProgress());
        }
// get user presence and signal quality 
        @Override
        public void HandleUserPresence(ECGUserPresence ecgUserPresence) {
            String presence = Integer.toString(ecgUserPresence.getUserPresence());
            String alive = Integer.toString(ecgUserPresence.getUserAlive());
            String sQuality = Integer.toString(ecgUserPresence.getSignalQuality());
        }
// get Samples and Subtype 
        @Override
        public void HandleECGSamples(ECGSamples ecgSamples) {
            float[] samples = ecgSamples.getSamples();
            int subType = ecgSamples.getSubtype();
        }
// get Execution Response 
        @Override
        public void HandleExecuteResponse(ECGExecuteResponse ecgExecuteResponse) {
            String id = Integer.toString(ecgExecuteResponse.getCommandId());
            String ret = Integer.toString(ecgExecuteResponse.getResponse());
           Log.i("Name: " + ecgExecuteResponse.getCommandName());
        }
// get ECG Firmware Version 
        @Override
        public void HandleGetVersion(ECGFwVersion ecgFwVersion) {
            Log.i("Version " + ecgFwVersion.getVersion());
        }
// get User Metadata
       @Override
        public void HandleGetUserMetadata(ECGUserMetadata ecgUserMetadata) {
            String age = Integer.toString(ecgUserMetadata.getAge());
            String h = Integer.toString(ecgUserMetadata.getHeight());
            String w = Integer.toString(ecgUserMetadata.getWeight());
            String g = Integer.toString(ecgUserMetadata.getGender());
        }
// get ECG Library Config 
        @Override
        public void HandleGetLibConfig(ECGLibConfig ecgLibConfig) {
            int useCase = ecgLibConfig.getUseCase();
            int authMode = ecgLibConfig.getContinuousAuthEnable();
        }
};

The below code path is executed overall for measuring the sensor data. The measurement takes roughly 10-15 seconds.

// Measuring the sensor Data
private SensorEventListener mUserControlEventListener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            ecgManager.dispatch(event);
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            Log.d("TAG", "Accuracy has changed to $accuracyLevel." + accuracy);
        }
    };

    private SensorEventListener mECGSensorDataEventListener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            ecgManager.dispatch(event);
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            Log.d("TAG", "Accuracy has changed to $accuracyLevel." + accuracy);
        }
    };
 
    private SensorEventListener mECGSampleDataEventListener = new SensorEventListener() {
        @Override
        public void onSensorChanged(SensorEvent event) {
            ecgManager.dispatch(event);
        }

        @Override
        public void onAccuracyChanged(Sensor sensor, int accuracy) {
            Log.d("TAG", "Accuracy has changed to $accuracyLevel." + accuracy);
        }
    };

Data Collection for New Sensor Event

For SensorManager to get notified of new sensor data, one should utilize the public interface SensorEventListener. This has two callback methods:

Callback method  Parameters 
public abstract void onAccuracyChanged (Sensor sensor, int accuracy) Sensor: Sensor 
accuracy : int: The new accuracy of this sensor, one of SensorManager.SENSOR_STATUS
public abstract void onSensorChanged (SensorEvent event) event : SensorEvent: the SensorEvent.

Please Note

  • onAccuracyChanged() is called when the accuracy of the registered sensor has changed. Unlike onSensorChanged(), this is only called when this accuracy value is changed.  Implement onAccuracyChanged Method empty as it will never change.
  • Local caching is not applicable for capturing ECG sensor data.
Previous: 

Intro - A4100 Sample Health App User ECG Sensor

Still need help? Contact Us Contact Us