aboutsummaryrefslogtreecommitdiff
path: root/src/drivers/boards/px4cannode-v1/bootloader/can/driver.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/drivers/boards/px4cannode-v1/bootloader/can/driver.h')
-rw-r--r--src/drivers/boards/px4cannode-v1/bootloader/can/driver.h198
1 files changed, 185 insertions, 13 deletions
diff --git a/src/drivers/boards/px4cannode-v1/bootloader/can/driver.h b/src/drivers/boards/px4cannode-v1/bootloader/can/driver.h
index 138e14ba3..a83cab86b 100644
--- a/src/drivers/boards/px4cannode-v1/bootloader/can/driver.h
+++ b/src/drivers/boards/px4cannode-v1/bootloader/can/driver.h
@@ -1,7 +1,56 @@
+/****************************************************************************
+ *
+ * Copyright (c) 2015 PX4 Development Team. All rights reserved.
+ * Author: Ben Dyer <ben_dyer@mac.com>
+ * Pavel Kirienko <pavel.kirienko@zubax.com>
+ * David Sidrane <david_s5@nscdg.com>
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ *
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in
+ * the documentation and/or other materials provided with the
+ * distribution.
+ * 3. Neither the name PX4 nor the names of its contributors may be
+ * used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+ * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+ * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
+ * FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
+ * COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
+ * INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
+ * BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS
+ * OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED
+ * AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
+ * ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ *
+ ****************************************************************************/
+
#pragma once
+/****************************************************************************
+ * Included Files
+ ****************************************************************************/
+
#include "timer.h"
+/****************************************************************************
+ * Pre-processor Definitions
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Type Definitions
+ ****************************************************************************/
+
+
typedef enum
{
CAN_UNKNOWN = 0,
@@ -19,29 +68,152 @@ typedef enum
CAN_Mode_Silent_LoopBack = 3 // Bits 30 and 31 11
} can_mode_t;
+
+/*
+ * Receive from FIFO 1 -- filters are configured to push the messages there,
+ * and there are send/receive functions called off the SysTick ISR so
+ * we partition the usage of the CAN hardware to avoid the same FIFOs/mailboxes
+ * as the rest of the application uses.
+ */
+
typedef enum
{
fifoAll = 0,
MBAll = 0,
- /*
- Receive from FIFO 1 -- filters are configured to push the messages there,
- and this is called from SysTick so needs to avoid the same FIFOs/mailboxes
- as the rest of the application.
- */
fifoGetNodeInfo = 1,
MBGetNodeInfo = 1,
MBNodeStatus = 1,
-
} can_fifo_mailbox_t;
-void can_tx(uint32_t message_id, size_t length,
- const uint8_t * message, uint8_t mailbox);
-uint8_t can_rx(uint32_t * out_message_id, size_t * out_length,
- uint8_t * out_message, uint8_t fifo);
-int can_init(can_speed_t speed, can_mode_t mode);
-int can_autobaud(can_speed_t *can_speed, bl_timer_id tboot);
+/****************************************************************************
+ * Global Variables
+ ****************************************************************************/
+
+/****************************************************************************
+ * Public Function Prototypes
+ ****************************************************************************/
+/****************************************************************************
+ * Name: can_speed2freq
+ *
+ * Description:
+ * This function maps a can_speed_t to a bit rate in Hz
+ *
+ * Input Parameters:
+ * can_speed - A can_speed_t from CAN_125KBAUD to CAN_1MBAUD
+ *
+ * Returned value:
+ * Bit rate in Hz
+ *
+ ****************************************************************************/
+
+int can_speed2freq(can_speed_t speed);
+
+/****************************************************************************
+ * Name: can_speed2freq
+ *
+ * Description:
+ * This function maps a frequency in Hz to a can_speed_t in the range
+ * CAN_125KBAUD to CAN_1MBAUD.
+ *
+ * Input Parameters:
+ * freq - Bit rate in Hz
+ *
+ * Returned value:
+ * A can_speed_t from CAN_125KBAUD to CAN_1MBAUD
+ *
+ ****************************************************************************/
-int can_speed2freq(can_speed_t);
can_speed_t can_freq2speed(int freq);
+
+/****************************************************************************
+ * Name: can_tx
+ *
+ * Description:
+ * This function is called to transmit a CAN frame using the supplied
+ * mailbox. It will busy wait on the mailbox if not available.
+ *
+ * Input Parameters:
+ * message_id - The CAN message's EXID field
+ * length - The number of bytes of data - the DLC field
+ * message - A pointer to 8 bytes of data to be sent (all 8 bytes will be
+ * loaded into the CAN transmitter but only length bytes will
+ * be sent.
+ * mailbox - A can_fifo_mailbox_t MBxxx value to choose the outgoing
+ * mailbox.
+ *
+ * Returned value:
+ * None
+ *
+ ****************************************************************************/
+
+void can_tx(uint32_t message_id, size_t length, const uint8_t * message,
+ uint8_t mailbox);
+
+/****************************************************************************
+ * Name: can_rx
+ *
+ * Description:
+ * This function is called to receive a CAN frame from a supplied fifo.
+ * It does not block if there is not available, but returns 0
+ *
+ * Input Parameters:
+ * message_id - A pointer to return the CAN message's EXID field
+ * length - A pointer to return the number of bytes of data - the DLC field
+ * message - A pointer to return 8 bytes of data to be sent (all 8 bytes will
+ * be written from the CAN receiver but only length bytes will be sent.
+ * fifo A can_fifo_mailbox_t fifixxx value to choose the incoming fifo.
+ *
+ * Returned value:
+ * The length of the data read or 0 if the fifo was empty
+ *
+ ****************************************************************************/
+uint8_t can_rx(uint32_t * message_id, size_t * length, uint8_t * message,
+ uint8_t fifo);
+
+/****************************************************************************
+ * Name: can_init
+ *
+ * Description:
+ * This function is used to initialize the CAN block for a given bit rate and
+ * mode.
+ *
+ * Input Parameters:
+ * speed - A can_speed_t from CAN_125KBAUD to CAN_1MBAUD
+ * mode - One of the can_mode_t of Normal, LoopBack and Silent or
+ * combination thereof.
+ *
+ * Returned value:
+ * OK - on Success or a negate errno value
+ *
+ ****************************************************************************/
+
+int can_init(can_speed_t speed, can_mode_t mode);
+
+/****************************************************************************
+ * Name: can_autobaud
+ *
+ * Description:
+ * This function will attempt to detect the bit rate in use on the CAN
+ * interface until the timeout provided expires or the successful detection
+ * occurs.
+ *
+ * It will initialize the CAN block for a given bit rate
+ * to test that a message can be received. The CAN interface is left
+ * operating at the detected bit rate and in CAN_Mode_Normal mode.
+ *
+ * Input Parameters:
+ * can_speed - A pointer to return detected can_speed_t from CAN_UNKNOWN to
+ * CAN_1MBAUD
+ * timeout - The timer id of a timer to use as the maximum time to wait for
+ * successful bit rate detection. This timer may be not running
+ * in which case the auto baud code will try indefinitely to
+ * detect the bit rate.
+ *
+ * Returned value:
+ * CAN_OK - on Success or a CAN_BOOT_TIMEOUT
+ *
+ ****************************************************************************/
+
+int can_autobaud(can_speed_t *can_speed, bl_timer_id timeout);