/**@brief Function for decoding a received calibration data page from the ANT channel. * * This function decodes the received calibration data page from the ANT channel. * Only Calibration IDs 0xAC and 0xAF are supported by the implementation. * * @param[in] p_event_message_buffer ANT event message buffer. * * @return true if message contained valid data, false otherwise. */ static __INLINE bool calibration_data_page_decode(uint8_t const * const p_event_message_buffer) { bool return_code = false; // We only process calibration messages when in correct state. if (m_calibration_process_state == CALIBRATION_ACTIVE) { bp_page1_response_data_t * p_page1_general_response_data; const uint32_t calibration_id = p_event_message_buffer[BUFFER_INDEX_MESG_DATA + 1u]; switch (calibration_id) { case BP_CID_172: // Calibration ID 0xAC = calibration response manual zero success. case BP_CID_175: // Calibration ID 0xAF = calibration response failure. p_page1_general_response_data = bp_rx_data_page1_response_get(); p_page1_general_response_data->calibration_id = calibration_id; p_page1_general_response_data->auto_zero_status = p_event_message_buffer[BUFFER_INDEX_MESG_DATA + 2u]; // Reset to zero prior bit-masking. p_page1_general_response_data->calibration_data = 0; // LSB. p_page1_general_response_data->calibration_data = p_event_message_buffer[BUFFER_INDEX_MESG_DATA + 6u]; // MSB. p_page1_general_response_data->calibration_data |= (p_event_message_buffer[BUFFER_INDEX_MESG_DATA + 7u]) << 8u; return_code = true; break; default: // No implementation needed. break; } calibration_state_change(CALIBRATION_NOT_ACTIVE); } return return_code; }
/**@brief Function for processing received profile page events. * * @param[in] p_event_return Profile page event to be processed. */ static __INLINE void profile_event_page_handle(const antplus_event_return_t * const p_event_return) { #if defined(TRACE_DATA_PAGE) const bp_page16_data_t * p_page16_data; const bp_page17_data_t * p_page17_data; const bp_page18_data_t * p_page18_data; const bp_page32_data_t * p_page32_data; const page80_data_t * p_page80_data; const page81_data_t * p_page81_data; #endif // defined(TRACE_DATA_PAGE) #if defined(TRACE_CALIBRATION) const bp_page1_response_data_t * p_page1_general_response_data; #endif // defined(TRACE_CALIBRATION) switch (p_event_return->param1) { case BP_PAGE_1: // Calibration message main data page. #if defined(TRACE_CALIBRATION) p_page1_general_response_data = bp_rx_data_page1_response_get(); printf("page1:calibration_id %#x\n", (uint8_t)p_page1_general_response_data->calibration_id); printf("page1:auto_zero_status %u\n", (uint8_t)p_page1_general_response_data->auto_zero_status); printf("page1:calibration_data %i\n", (uint16_t)p_page1_general_response_data->calibration_data); #endif // defined(TRACE_CALIBRATION) break; case BP_PAGE_16: // Standard power only page. #if defined(TRACE_DATA_PAGE) p_page16_data = bp_rx_data_page16_get(); printf("Page16:event count %u\n", (unsigned int)p_page16_data->event_count); printf("Page16:pedal power %u\n", (unsigned int)p_page16_data->pedal_power); printf("Page16:instantaneous cadence %u\n", (unsigned int)p_page16_data->instantaneous_cadence); printf("Page16:accumulated power %u\n", (unsigned int)p_page16_data->accumulated_power); printf("Page16:instantaneous power %u\n", (unsigned int)p_page16_data->instantaneous_power); #endif // defined(TRACE_DATA_PAGE) break; case BP_PAGE_17: // Wheel Torque (WT) main data page. #if defined(TRACE_DATA_PAGE) p_page17_data = bp_rx_data_page17_get(); printf("Page17:update_event_counter %u\n", (unsigned int)p_page17_data->update_event_counter); printf("Page17:wheel_ticks %u\n", (unsigned int)p_page17_data->wheel_ticks); printf("Page17:instantaneous_cadence %u\n", (unsigned int)p_page17_data->instantaneous_cadence); printf("Page17:accumulated wheel_period %u\n", (unsigned int)p_page17_data->wheel_period); printf("Page17:accumulated_torgue %u\n", (unsigned int)p_page17_data->accumulated_torgue); #endif // defined(TRACE_DATA_PAGE) break; case BP_PAGE_18: // Standard Crank Torque (CT) main data page. #if defined(TRACE_DATA_PAGE) p_page18_data = bp_rx_data_page18_get(); printf("Page18:update_event_counter %u\n", (unsigned int)p_page18_data->update_event_counter); printf("Page18:crank_ticks %u\n", (unsigned int)p_page18_data->crank_ticks); printf("Page18:instantaneous_cadence %u\n", (unsigned int)p_page18_data->instantaneous_cadence); printf("Page18:accumulated crank_period %u\n", (unsigned int)p_page18_data->crank_period); printf("Page18:accumulated_torgue %u\n", (unsigned int)p_page18_data->accumulated_torgue); #endif // defined(TRACE_DATA_PAGE) break; case BP_PAGE_32: // Standard Crank Torque Frequency (CTF) main data page. #if defined(TRACE_DATA_PAGE) p_page32_data = bp_rx_data_page32_get(); printf("Page32:event_counter %u\n", (unsigned int)p_page32_data->update_event_counter); printf("Page32:slope %u\n", (unsigned int)p_page32_data->slope); printf("Page32:time_stamp %u\n", (unsigned int)p_page32_data->time_stamp); printf("Page32:torque_ticks_stamp %u\n", (unsigned int)p_page32_data->torque_ticks_stamp); printf("Page32:average_cadence %u\n", (unsigned int)p_page32_data->average_cadence); #endif // defined(TRACE_DATA_PAGE) break; case COMMON_PAGE_80: // Manufacturer's identification common data page. #if defined(TRACE_DATA_PAGE) p_page80_data = bp_rx_data_page80_get(); printf("Page80:hw_revision %u\n", (unsigned int)p_page80_data->hw_revision); printf("Page80:manufacturing_id %u\n", (unsigned int)p_page80_data->manufacturing_id); printf("Page80:model_number %u\n", (unsigned int)p_page80_data->model_number); #endif // defined(TRACE_DATA_PAGE) break; case COMMON_PAGE_81: // Product information common data page. #if defined(TRACE_DATA_PAGE) p_page81_data = bp_rx_data_page81_get(); printf("Page81:sw_revision %u\n", (unsigned int)p_page81_data->sw_revision); printf("Page81:serial_number %u\n", (unsigned int)p_page81_data->serial_number); #endif // defined(TRACE_DATA_PAGE) break; default: APP_ERROR_HANDLER(p_event_return->param1); break; } }