Exemplo n.º 1
0
/*********************************************************************
 * @fn      heartRateMeasNotify
 *
 * @brief   Prepare and send a heart rate measurement notification
 *
 * @return  none
 */
static void heartRateMeasNotify(void)
{
  // Heart rate measurement value stored in this structure
  attHandleValueNoti_t heartRateMeas;

  heartRateMeas.pValue = GATT_bm_alloc( gapConnHandle, ATT_HANDLE_VALUE_NOTI,
                                        HR_MEAS_LEN, NULL );
  if ( heartRateMeas.pValue != NULL )
  {
    uint8 *p = heartRateMeas.pValue;
    uint8 flags = heartRateFlags[heartRateFlagsIdx];
    
    // build heart rate measurement structure from simulated values
    *p++ = flags;
    *p++ = heartRateBpm;
    
    if (flags & HEARTRATE_FLAGS_FORMAT_UINT16)
    {
      // additional byte for 16 bit format
      *p++ = 0;
    }
    
    if (flags & HEARTRATE_FLAGS_ENERGY_EXP)
    {
      *p++ = LO_UINT16(heartRateEnergy);
      *p++ = HI_UINT16(heartRateEnergy);
    }
    
    if (flags & HEARTRATE_FLAGS_RR)
    {
      *p++ = LO_UINT16(heartRateRrInterval1);
      *p++ = HI_UINT16(heartRateRrInterval1);  
      *p++ = LO_UINT16(heartRateRrInterval2);
      *p++ = HI_UINT16(heartRateRrInterval2);  
    }
    
    heartRateMeas.len = (uint8) (p - heartRateMeas.pValue);
    
    if ( HeartRate_MeasNotify( gapConnHandle, &heartRateMeas ) != SUCCESS )
    {
      GATT_bm_free( (gattMsg_t *)&heartRateMeas, ATT_HANDLE_VALUE_IND );
    }
    
    // update simulated values 
    heartRateEnergy += ENERGY_INCREMENT;
    if (++heartRateBpm == BPM_MAX)
    {
      heartRateBpm = BPM_DEFAULT;
    }
    
    heartRateRrInterval1 = heartRateRrInterval2 = HEARTRATE_BPM_TO_RR(heartRateBpm);
  }
}
Exemplo n.º 2
0
/*********************************************************************
 * @fn      heartRateMeasNotify
 *
 * @brief   Prepare and send a heart rate measurement notification
 *
 * @return  none
 */
static void heartRateMeasNotify(void)
{
  uint8 *p = heartRateMeas.value;
  uint8 flags = heartRateFlags[heartRateFlagsIdx];
  
  // build heart rate measurement structure from simulated values
  *p++ = flags;
  *p++ = heartRateBpm;
  if (flags & HEARTRATE_FLAGS_FORMAT_UINT16)
  {
    // additional byte for 16 bit format
    *p++ = 0;
  }
  if (flags & HEARTRATE_FLAGS_ENERGY_EXP)
  {
    *p++ = LO_UINT16(heartRateEnergy);
    *p++ = HI_UINT16(heartRateEnergy);
  }
  if (flags & HEARTRATE_FLAGS_RR)
  {
    *p++ = LO_UINT16(heartRateRrInterval1);
    *p++ = HI_UINT16(heartRateRrInterval1);  
    *p++ = LO_UINT16(heartRateRrInterval2);
    *p++ = HI_UINT16(heartRateRrInterval2);  
  }
  heartRateMeas.len = (uint8) (p - heartRateMeas.value);
  HeartRate_MeasNotify( gapConnHandle, &heartRateMeas );
  
  // update simulated values 
  heartRateEnergy += ENERGY_INCREMENT;
  if (++heartRateBpm == BPM_MAX)
  {
    heartRateBpm = BPM_DEFAULT;
  }
  heartRateRrInterval1 = heartRateRrInterval2 = HEARTRATE_BPM_TO_RR(heartRateBpm);
}
Exemplo n.º 3
0
  LO_UINT16(HEARTRATE_SERV_UUID),
  HI_UINT16(HEARTRATE_SERV_UUID),
  LO_UINT16(BATT_SERV_UUID),
  HI_UINT16(BATT_SERV_UUID)
};

// Device name attribute value
static uint8 attDeviceName[GAP_DEVICE_NAME_LEN] = "Heart Rate Sensor";

// GAP connection handle
static uint16 gapConnHandle;

// Components of heart rate measurement structure
static uint8 heartRateBpm = BPM_DEFAULT;
static uint16 heartRateEnergy = 0;
static uint16 heartRateRrInterval1 = HEARTRATE_BPM_TO_RR(BPM_DEFAULT);
static uint16 heartRateRrInterval2 = HEARTRATE_BPM_TO_RR(BPM_DEFAULT);

// flags for simulated measurements
static const uint8 heartRateFlags[FLAGS_IDX_MAX] =
{
  HEARTRATE_FLAGS_CONTACT_NOT_SUP,
  HEARTRATE_FLAGS_CONTACT_NOT_DET,
  HEARTRATE_FLAGS_CONTACT_DET | HEARTRATE_FLAGS_ENERGY_EXP,
  HEARTRATE_FLAGS_CONTACT_DET | HEARTRATE_FLAGS_RR,
  HEARTRATE_FLAGS_CONTACT_DET | HEARTRATE_FLAGS_ENERGY_EXP | HEARTRATE_FLAGS_RR,
  HEARTRATE_FLAGS_FORMAT_UINT16 | HEARTRATE_FLAGS_CONTACT_DET | HEARTRATE_FLAGS_ENERGY_EXP | HEARTRATE_FLAGS_RR,
  0x00
};

static uint8 heartRateFlagsIdx = 0;