Beispiel #1
0
/*********************************************************************
 * @fn      sensorMeasNotify
 *
 * @brief   Prepare and send a CSC measurement notification
 *
 * @return  none
 */
static void sensorMeasNotify( void )
{
  uint8 *p = sensorMeas.value;
  uint8 flags = sensorFlags[sensorFlagsIdx];

  // Build CSC measurement structure from simulated values
  // Flags simulate the isPresent bits.
  *p++ = flags;

  // If present, add Speed data into measurement
  if (flags & CSC_FLAGS_SPEED)
  {
    *p++ = BREAK_UINT32(cummWheelRevs, 0);
    *p++ = BREAK_UINT32(cummWheelRevs, 1);
    *p++ = BREAK_UINT32(cummWheelRevs, 2);
    *p++ = BREAK_UINT32(cummWheelRevs, 3);

    *p++ = LO_UINT16(lastWheelEvtTime);
    *p++ = HI_UINT16(lastWheelEvtTime);

    // Update simulated values (simulate in the reverse direction)
 /*   if (cummWheelRevs < WHEEL_REV_INCREMENT) //don't allow revolutions to roll over
    {
      cummWheelRevs = 0;
    }
    else
    {
      cummWheelRevs -= WHEEL_REV_INCREMENT;
    }

    lastWheelEvtTime += WHEEL_EVT_INCREMENT;   */
  }

  // If present, add Cadence data into measurement
  if (flags & CSC_FLAGS_CADENCE)
  {
    *p++ = LO_UINT16(cummCrankRevs);
    *p++ = HI_UINT16(cummCrankRevs);

    *p++ = LO_UINT16(lastCrankEvtTime);
    *p++ = HI_UINT16(lastCrankEvtTime);

    // Update Simualted Values
   /* cummCrankRevs += CRANK_REV_INCREMENT;
    lastCrankEvtTime += CRANK_EVT_INCREMENT; */
  }

  // Get length
  sensorMeas.len = (uint8) (p - sensorMeas.value);

  // Send to service to send the notification
  Cycling_MeasNotify( gapConnHandle, &sensorMeas );
}
/*********************************************************************
 * @fn      sensorMeasNotify
 *
 * @brief   Prepare and send a CSC measurement notification
 *
 * @return  none
 */
static void sensorMeasNotify( void )
{
  attHandleValueNoti_t sensorMeas;
  
  sensorMeas.pValue = GATT_bm_alloc( gapConnHandle, ATT_HANDLE_VALUE_NOTI,
                                     CSC_MEAS_LEN, NULL );
  if ( sensorMeas.pValue != NULL )
  {
    uint8 *p = sensorMeas.pValue;
    uint8 flags = sensorFlags[sensorFlagsIdx];

    // Build CSC measurement structure from simulated values
    // Flags simulate the isPresent bits.
    *p++ = flags;

    // If present, add Speed data into measurement
    if (flags & CSC_FLAGS_SPEED)
    {
      *p++ = BREAK_UINT32(cummWheelRevs, 0);
      *p++ = BREAK_UINT32(cummWheelRevs, 1);
      *p++ = BREAK_UINT32(cummWheelRevs, 2);
      *p++ = BREAK_UINT32(cummWheelRevs, 3);

      *p++ = LO_UINT16(lastWheelEvtTime);
      *p++ = HI_UINT16(lastWheelEvtTime);

      // Update simulated values (simulate in the reverse direction)
      if (cummWheelRevs < WHEEL_REV_INCREMENT) //don't allow revolutions to roll over
      {
        cummWheelRevs = 0;
      }
      else
      {
        cummWheelRevs -= WHEEL_REV_INCREMENT;
      }

      lastWheelEvtTime += WHEEL_EVT_INCREMENT;
    }

    // If present, add Cadence data into measurement
    if (flags & CSC_FLAGS_CADENCE)
    {
      *p++ = LO_UINT16(cummCrankRevs);
      *p++ = HI_UINT16(cummCrankRevs);

      *p++ = LO_UINT16(lastCrankEvtTime);
      *p++ = HI_UINT16(lastCrankEvtTime);

      // Update Simualted Values
      cummCrankRevs += CRANK_REV_INCREMENT;
      lastCrankEvtTime += CRANK_EVT_INCREMENT;
    }

    // Get length
    sensorMeas.len = (uint8) (p - sensorMeas.pValue);

    // Send to service to send the notification
    if ( Cycling_MeasNotify( gapConnHandle, &sensorMeas ) != SUCCESS )
    {
      GATT_bm_free( (gattMsg_t *)&sensorMeas, ATT_HANDLE_VALUE_NOTI );
    }
  }
}