+/**
+ * Cancel a transmission of the message.
+ *
+ * The function can be called any time when communication is running
+ * (Fr_StartCommunication was called).
+ *
+ * This is one way to stop transmission for buffers configured
+ * in continuous mode.
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [in] lpdu_idx Index of the frame, where the message transmission will be stopped.
+ *
+ * @return SUCCESS if the transmission was stopped.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_cancel_transmit_lpdu(uint8_t ctrl, uint16_t lpdu_idx);
+
+/**
+ * Receive a message from the bus in the specified frame
+ *
+ * The function can be called any time when communication is running
+ * (Fr_StartCommunication was called).
+ *
+ * If new message was received in static or dynamic buffer into some RX buffer,
+ * this function can retrieve it.
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [in] lpdu_idx Index of the frame where message will be received from.
+ * @param [out] lsdu Address of the first byte of the buffer, where message will be stored.
+ * @param [out] lpdu_status Address where the status will be stored. It can be:
+ * FR_NOT_RECEIVED, FR_RECEIVED, FR_RECEIVED_MORE_DATA_AVAILABLE - for FIFO only.
+ * @param [out] lsdu_length Number of bytes of the message.
+ *
+ * @return SUCCESS if message was received.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_receive_lpdu(uint8_t ctrl, uint16_t lpdu_idx, uint8_t* lsdu, Fr_RxLPduStatusType* lpdu_status, uint8_t* lsdu_length);
+
+/**
+ * Check TX buffer status
+ *
+ * The function can be called any time when communication is running
+ * (Fr_StartCommunication was called).
+ *
+ * If buffer configured in single-shot mode, the transmission request (TXR)
+ * is pending until the message is send.
+ * For buffers configured in continuous mode, the transmission request is
+ * always pending.
+ *
+ * The TXR pending or not pending is the status of the buffer.
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [in] lpdu_idx Index of the frame to which the buffer is assigned.
+ * @param [out] lpdu_status Address of the status. It can be FR_TRANSMITTED,
+ * which means the TXR is not pending, or FR_NOT_TRANSMITTED which means that
+ * TXR is pending.
+ *
+ * @return SUCCESS if everything is OK.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_check_tx_lpdu_status(uint8_t ctrl, uint16_t lpdu_idx, Fr_TxLPduStatusType* lpdu_status);
+
+/**
+ * Disable FlexRay buffer
+ *
+ * The function can be called any time when communication is running
+ * (Fr_StartCommunication was called).
+ *
+ * This functions resets the configuration of the selected buffer.
+ * The disabled buffer is not usable any more.
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [in] lpdu_idx Index of the frame to which the buffer is assigned.
+ *
+ * @return SUCCESS if buffer was disabled.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_disable_lpdu(uint8_t ctrl, uint16_t lpdu_idx);
+
+/**
+ * Get FlexRay global time
+ *
+ * The function can be called any time after controller is initialized.
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [out] cycle Adress where the number of actual cycle will be stored.
+ * @param [out] macroticks Address where offset in the cycle will be stored.
+ *
+ * @return SUCCESS if everything is OK.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_get_global_time(uint8_t ctrl, uint8_t* cycle, uint16_t* macroticks);
+
+/**
+ * Get Network management vector.
+ *
+ * The function can be called any time after controller is initialized.
+ *
+ * The FlexRay controller updates the vector at the end of every cycle by
+ * doing bit-wise or on every network managemet vectors received from all nodes.
+ *
+ * The NM vector can be sent to a frame by a buffer with payloadPreambleIndicatorTr
+ * set. Those frames are automatically processed by the controller. But sending the
+ * vector has to be done manually by copying the NM vector data (obtainable by
+ * this function) into the TX buffer (using rpp_fr_transmit_lpdu function).
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [out] nm_vector Address where the vector will be stored. The size of the buffer has to be at least gNetworkManagementVectorLength.
+ *
+ * @return SUCCESS if everything is OK.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_get_network_management_vector(uint8_t ctrl, uint8_t* nm_vector);
+
+/**
+ * Get Channel status.
+ *
+ * The function can be called any time after controller is initialized.
+ *
+ * The output of the function is bitcoded in this way:
+ * Bit 0: Channel A/B aggregated channel status vSS!ValidFrame
+ * Bit 1: Channel A/B aggregated channel status vSS!SyntaxError
+ * Bit 2: Channel A/B aggregated channel status vSS!ContentError
+ * Bit 3: Channel A/B aggregated channel status additional communication
+ * Bit 4: Channel A/B aggregated channel status vSS!Bviolation
+ * Bit 5: Channel A/B aggregated channel status vSS!TxConflict
+ * Bit 6: Not used (0)
+ * Bit 7: Not used (0)
+ * Bit 8: Channel A/B symbol window status data vSS!ValidMTS
+ * Bit 9: Channel A/B symbol window status data vSS!SyntaxError
+ * Bit 10: Channel A/B symbol window status data vSS!Bviolation
+ * Bit 11: Channel A/B symbol window status data vSS!TxConflict
+ * Bit 12: Channel A/B NIT status data vSS!SyntaxError
+ * Bit 13: Channel A/B NIT status data vSS!Bviolation
+ * Bit 14: Not used (0)
+ * Bit 15: Not used (0)
+ *
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [out] channel_a_status Address where the bitcoded status of the channel A will be stored.
+ * @param [out] channel_b_status Address where the bitcoded status of the channel B will be stored.
+ *
+ * @return SUCCESS if everything is OK.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_get_channel_status(uint8_t ctrl, uint16_t* channel_a_status, uint16_t* channel_b_status);
+
+/**
+ * Get clock correction.
+ *
+ * The function can be called while communication is running or was stopped.
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [out] rate_correction Address where the rate will be stored.
+ * @param [out] offset_correction Address where the offset will be stored.
+ *
+ * @return SUCCESS if everything is OK.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_get_clock_correction(uint8_t ctrl, int16_t* rate_correction, int32_t* offset_correction);
+
+/**
+ * Get clock correction.
+ *
+ * The function can be called while communication is running or was stopped.
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [out] rate_correction Address where the rate will be stored.
+ * @param [out] offset_correction Address where the offset will be stored.
+ *
+ * @return SUCCESS if everything is OK.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_get_sync_frame_list(uint8_t ctrl, uint8_t list_size, uint16_t* channel_a_even_list, uint16_t* channel_b_even_list, uint16_t* channel_a_odd_list, uint16_t* channel_bodd_list);
+
+/**
+ * Get the status of WUP receiving
+ *
+ * The function can be called any time after controller is initialized.
+ *
+ * If Wake Up Pattern was received on some channel, the flag is set in status address.
+ * Bit 0: Wakeup received on channel A indicator
+ * Bit 1: Wakeup received on channel B indicator
+ * Bit 2-7: Unused
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [out] status Address where the status will be stored.
+ *
+ * @return SUCCESS if everything is OK.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_get_wakeup_rx_status(uint8_t ctrl, uint8_t* status);
+
+/**
+ * Set an absolute timer and start it.
+ *
+ * The function can be called any time after communication is running.
+ * The FlexRay controller has two absolute timers. Each of them can be
+ * configured to request the interrupt, when the global time reaches
+ * configured cycle and offset.
+ *
+ * Timer interrupt request can be detected by rpp_fr_get_timer_irq_status.
+ * Timer interrupt request can be cleared by rpp_fr_clear_timer_irq
+ * Timer can be canceled by rpp_fr_cancel_timer.
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [in] timer_idx Index of the timer (0,1).
+ * @param [in] cycle_threshold Number of the cycle.
+ * @param [in] offset_threshold Offset in the cycle in mactroticks.
+ *
+ * @return SUCCESS if everything is OK.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_set_timer(uint8_t ctrl, uint8_t timer_idx, uint8_t cycle_threshold, uint16_t offset_threshold);
+
+/**
+ * Stops an absolute timer, clear IRQ.
+ *
+ * The function can be called any time after communication is running.
+ *
+ * The FlexRay controller has two absolute timers. Each of them can be
+ * configured to request the interrupt, when the global time reaches
+ * configured cycle and offset. This function stops the timer and clears
+ * the interrupt request.
+ *
+ * Timer interrupt request can be detected by rpp_fr_get_timer_irq_status.
+ * Timer interrupt request can be cleared by rpp_fr_clear_timer_irq
+ * Timer can be started by rpp_fr_set_timer.
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [in] timer_idx Index of the timer (0,1).
+ *
+ * @return SUCCESS if everything is OK.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_cancel_timer(uint8_t ctrl, uint8_t timer_idx);
+
+/**
+ * Clear IRQ flag of the absolute timer
+ *
+ * The function can be called any time after communication is running.
+ *
+ * The FlexRay controller has two absolute timers. Each of them can be
+ * configured to request the interrupt, when the global time reaches
+ * configured cycle and offset. This function clears the IRQ flag.
+ *
+ * Timer interrupt request can be detected by rpp_fr_get_timer_irq_status.
+ * Timer can be started by rpp_fr_set_timer.
+ * Timer can be canceled by rpp_fr_cancel_timer.
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [in] timer_idx Index of the timer (0,1).
+ *
+ * @return SUCCESS if everything is OK.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_clear_timer_irq(uint8_t ctrl, uint8_t timer_idx);
+
+/**
+ * Get IRQ flag of the absolute timer
+ *
+ * The function can be called any time after communication is running.
+ *
+ * The FlexRay controller has two absolute timers. Each of them can be
+ * configured to request the interrupt, when the global time reaches
+ * configured cycle and offset. Using this function the IRQ can be detected.
+ *
+ * Timer interrupt request can be cleared by rpp_fr_clear_timer_irq
+ * Timer can be started by rpp_fr_set_timer.
+ * Timer can be canceled by rpp_fr_cancel_timer.
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [in] timer_idx Index of the timer (0,1).
+ *
+ * @return SUCCESS if everything is OK.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_get_timer_irq_status(uint8_t ctrl, uint8_t timer_idx, boolean_t* irq_pending);
+
+/**
+ * Get information about the driver vendor, module and version.
+ *
+ * The function can be called any time.
+ *
+ * @param [out] version Address, where the information will be stored.
+ *
+ * @return always SUCCESS
+ *
+ */
+int8_t rpp_fr_get_driver_version(Std_VersionInfoType* version);
+
+/**
+ * Get configuration parameter value from the internal driver structures.
+ *
+ * The function can be called any time.
+ *
+ * @param [in] ctrl Not used, set always to zero.
+ * @param [in] param_idx The index if the parameter. You can find the indexes in Fr_GeneralTypes.h file with FR_CIDX prefix.
+ * @param [out] param_value Address, where the information will be stored.
+ *
+ * @return SUCCESS if everything is OK.
+ * FAILURE if something failed.
+ *
+ */
+int8_t rpp_fr_read_com_ctrl_config(uint8_t ctrl, uint8_t param_idx, uint32_t* param_value);
+