diff --git a/can-interface/components/mcp2521 b/can-interface/components/mcp2521 new file mode 120000 index 0000000..5f7b89f --- /dev/null +++ b/can-interface/components/mcp2521 @@ -0,0 +1 @@ +/home/alexander/Projects/gobot/common-libaries/mcp2521 \ No newline at end of file diff --git a/can-interface/components/mcp2521/include/mcp2521_register.hpp b/can-interface/components/mcp2521/include/mcp2521_register.hpp deleted file mode 100644 index f4b5702..0000000 --- a/can-interface/components/mcp2521/include/mcp2521_register.hpp +++ /dev/null @@ -1,50 +0,0 @@ -#pragma once -#include - -#include "mcp2521.hpp" - - - -class MCP2515 { - private: - - - public: - MCP2515(); - ~MCP2515(); - - void reset(); - - // Interrupts - - void register_rx_callback(void (*callback)(uint32_t id, uint8_t *data, size_t length)); - void register_tx_callback(void (*callback)(MCP2521_TX_BUFFER buffer)); - void register_error_callback(void (*callback)(uint8_t error_flags)); - void register_message_error_callback(void (*callback)(uint8_t error_flags)); - - // Transmittion - void set_tx_id(MCP2521_TX_BUFFER buffer, uint32_t id); - void set_tx_data(MCP2521_TX_BUFFER buffer, uint8_t *data, size_t length); - void set_tx_priority(MCP2521_TX_BUFFER buffer, uint8_t priority); - void set_one_shot(MCP2521_TX_BUFFER buffer, bool one_shot); - - void request_to_send(MCP2521_TX_BUFFER buffer); - void request_to_send(bool txb2, bool txb1, bool txb0); - - void abort_tx(MCP2521_TX_BUFFER buffer); - void abort_all_tx(); - - TXBnCTRL_Register get_TXBnCTRL(MCP2521_TX_BUFFER buffer); - - void transmit(MCP2521_TX_BUFFER buffer, uint32_t id, uint8_t *data, size_t length, uint8_t priority, bool one_shot); - - // Reception - - - - uint8_t get_TransmitErrorCounter(); - uint8_t get_ReceiveErrorCounter(); - - - -}; \ No newline at end of file diff --git a/can-interface/components/mcp2521_hardware_interface b/can-interface/components/mcp2521_hardware_interface new file mode 120000 index 0000000..b8e9b91 --- /dev/null +++ b/can-interface/components/mcp2521_hardware_interface @@ -0,0 +1 @@ +/home/alexander/Projects/gobot/common-libaries/mcp2521_hardware_interface \ No newline at end of file diff --git a/can-interface/main/hello_world_main.cpp b/can-interface/main/hello_world_main.cpp index 55f7e69..70432f2 100755 --- a/can-interface/main/hello_world_main.cpp +++ b/can-interface/main/hello_world_main.cpp @@ -32,7 +32,7 @@ #define EXTERNAL_TRIGGER GPIO_NUM_26 void onRX(void *arg) { - MCP2521_Command_Interface *mcp2521 = (MCP2521_Command_Interface *)arg; + MCP2521 *mcp2521 = (MCP2521 *)arg; rx_info info = mcp2521->get_rx_id(MCP2521_RX_BUFFER::RXB0); uint8_t data[8]; @@ -70,7 +70,7 @@ extern "C" void app_main() { CAN_INT_PIN ); - MCP2521_Command_Interface mcp2521(&hardware_mcp2521); + MCP2521 mcp2521(&hardware_mcp2521); uint8_t data[4] = {0xf0, 0x42, 0x13, 0x37}; diff --git a/can-interface/components/mcp2521/CMakeLists.txt b/common-libaries/mcp2521/CMakeLists.txt similarity index 83% rename from can-interface/components/mcp2521/CMakeLists.txt rename to common-libaries/mcp2521/CMakeLists.txt index 2fcfa42..f56cbe2 100644 --- a/can-interface/components/mcp2521/CMakeLists.txt +++ b/common-libaries/mcp2521/CMakeLists.txt @@ -1,7 +1,7 @@ idf_component_register(SRCS "interface_commands.cpp" - "interface_commands_complex.cpp" "interface_interrupts.cpp" + "toplevel_commands.cpp" INCLUDE_DIRS "include" REQUIRES driver REQUIRES mcp2521_hardware_interface diff --git a/can-interface/components/mcp2521/include/bitfields.hpp b/common-libaries/mcp2521/include/bitfields.hpp similarity index 100% rename from can-interface/components/mcp2521/include/bitfields.hpp rename to common-libaries/mcp2521/include/bitfields.hpp diff --git a/can-interface/components/mcp2521/include/mcp2521.hpp b/common-libaries/mcp2521/include/mcp2521.hpp similarity index 77% rename from can-interface/components/mcp2521/include/mcp2521.hpp rename to common-libaries/mcp2521/include/mcp2521.hpp index 74e0367..af3517d 100644 --- a/can-interface/components/mcp2521/include/mcp2521.hpp +++ b/common-libaries/mcp2521/include/mcp2521.hpp @@ -1,5 +1,6 @@ #pragma once +#include "mcp2521_toplevel.hpp" #include "mcp2521_command.hpp" #include "mcp2521_hardware_esp.hpp" #include "mcp2521_addresses.hpp" \ No newline at end of file diff --git a/can-interface/components/mcp2521/include/mcp2521_addresses.hpp b/common-libaries/mcp2521/include/mcp2521_addresses.hpp similarity index 100% rename from can-interface/components/mcp2521/include/mcp2521_addresses.hpp rename to common-libaries/mcp2521/include/mcp2521_addresses.hpp diff --git a/can-interface/components/mcp2521/include/mcp2521_command.hpp b/common-libaries/mcp2521/include/mcp2521_command.hpp similarity index 72% rename from can-interface/components/mcp2521/include/mcp2521_command.hpp rename to common-libaries/mcp2521/include/mcp2521_command.hpp index 471ce0b..13877d0 100644 --- a/can-interface/components/mcp2521/include/mcp2521_command.hpp +++ b/common-libaries/mcp2521/include/mcp2521_command.hpp @@ -1,10 +1,9 @@ #pragma once #include "mcp2521_addresses.hpp" +#include "mcp2521_hardware_handle.hpp" #include -#include "mcp2521_hardware_handle.hpp" - enum MCP2521_RX_BUFFER { RXB0 = 0, RXB1 = 1 @@ -90,36 +89,6 @@ public: void bit_modify(uint8_t address, uint8_t mask, uint8_t data); - // More Complex Commands - void set_tx_id(MCP2521_TX_BUFFER buffer, uint16_t id, bool extended); - - /** - * @brief Loads the Data Length Code register for the specified buffer - * - * @param buffer What Buffer to load the DLC register for - * @param length How many bytes are in the message (0-8) - * @param rtr: Remote Transmission Request - */ - void set_DLC_reg(MCP2521_TX_BUFFER buffer, uint8_t length, bool rtr); - - /** - * @brief Loads the data and id into the specified buffer - * - * @param buffer - * @param id - * @param data - * @param length - */ - void prepare_tx(MCP2521_TX_BUFFER buffer, uint32_t id, uint8_t *data, size_t length, bool rtr, bool extended); - - void set_mode_of_operation(MCP2521_OPERATION_MODE mode, bool singleshot); - void set_singleshot_mode(bool enable); - - void enable_interrupts(bool MessageError, bool ErrorInterrupt, bool WakeUp, bool TXB0, bool TXB1, bool TXB2, bool RXB0, bool RXB1); - rx_info get_rx_id(MCP2521_RX_BUFFER buffer); - - - // Registering Handlers for Interrupts void register_rx0_handler(intHandlerFunction_t handler, void * arg); void register_rx1_handler(intHandlerFunction_t handler, void * arg); diff --git a/common-libaries/mcp2521/include/mcp2521_toplevel.hpp b/common-libaries/mcp2521/include/mcp2521_toplevel.hpp new file mode 100644 index 0000000..a93fddf --- /dev/null +++ b/common-libaries/mcp2521/include/mcp2521_toplevel.hpp @@ -0,0 +1,38 @@ +#pragma once +#include + +#include "mcp2521.hpp" +#include "mcp2521_command.hpp" +#include "mcp2521_addresses.hpp" + +class MCP2521 : public MCP2521_Command_Interface { + private: + public: + void set_tx_id(MCP2521_TX_BUFFER buffer, uint16_t id, bool extended); + + /** + * @brief Loads the Data Length Code register for the specified buffer + * + * @param buffer What Buffer to load the DLC register for + * @param length How many bytes are in the message (0-8) + * @param rtr: Remote Transmission Request + */ + void set_DLC_reg(MCP2521_TX_BUFFER buffer, uint8_t length, bool rtr); + + /** + * @brief Loads the data and id into the specified buffer + * + * @param buffer + * @param id + * @param data + * @param length + */ + void prepare_tx(MCP2521_TX_BUFFER buffer, uint32_t id, uint8_t *data, size_t length, bool rtr, bool extended); + + void set_mode_of_operation(MCP2521_OPERATION_MODE mode, bool singleshot); + void set_singleshot_mode(bool enable); + + void enable_interrupts(bool MessageError, bool ErrorInterrupt, bool WakeUp, bool TXB0, bool TXB1, bool TXB2, bool RXB0, bool RXB1); + rx_info get_rx_id(MCP2521_RX_BUFFER buffer); + +}; \ No newline at end of file diff --git a/can-interface/components/mcp2521/interface_commands.cpp b/common-libaries/mcp2521/interface_commands.cpp similarity index 100% rename from can-interface/components/mcp2521/interface_commands.cpp rename to common-libaries/mcp2521/interface_commands.cpp diff --git a/can-interface/components/mcp2521/interface_interrupts.cpp b/common-libaries/mcp2521/interface_interrupts.cpp similarity index 99% rename from can-interface/components/mcp2521/interface_interrupts.cpp rename to common-libaries/mcp2521/interface_interrupts.cpp index bb47cf4..3cd9eb7 100644 --- a/can-interface/components/mcp2521/interface_interrupts.cpp +++ b/common-libaries/mcp2521/interface_interrupts.cpp @@ -1,6 +1,5 @@ #include "mcp2521.hpp" #include "mcp2521_addresses.hpp" -#include void MCP2521_Command_Interface::register_rx0_handler(intHandlerFunction_t handler, void* args) { rx0_handler = handler; diff --git a/can-interface/components/mcp2521/interface_commands_complex.cpp b/common-libaries/mcp2521/toplevel_commands.cpp similarity index 79% rename from can-interface/components/mcp2521/interface_commands_complex.cpp rename to common-libaries/mcp2521/toplevel_commands.cpp index 4a10a6a..6211996 100644 --- a/can-interface/components/mcp2521/interface_commands_complex.cpp +++ b/common-libaries/mcp2521/toplevel_commands.cpp @@ -3,7 +3,7 @@ #include "mcp2521.hpp" #include "mcp2521_addresses.hpp" -void MCP2521_Command_Interface::set_tx_id(MCP2521_TX_BUFFER buffer, uint16_t id, bool extended) { +void MCP2521::set_tx_id(MCP2521_TX_BUFFER buffer, uint16_t id, bool extended) { uint8_t addr_offset = 0; switch (buffer) { @@ -30,11 +30,7 @@ void MCP2521_Command_Interface::set_tx_id(MCP2521_TX_BUFFER buffer, uint16_t id, write_reg(MCP2521_TXB0SIDL | addr_offset, lower_id); } -// 00110101 0x35 -// 01000101 0x45 -// 01010101 0x55 - -void MCP2521_Command_Interface::set_DLC_reg(MCP2521_TX_BUFFER buffer, uint8_t length, bool rtr) { +void MCP2521::set_DLC_reg(MCP2521_TX_BUFFER buffer, uint8_t length, bool rtr) { uint8_t data = length; if (rtr) @@ -57,19 +53,19 @@ void MCP2521_Command_Interface::set_DLC_reg(MCP2521_TX_BUFFER buffer, uint8_t le write_reg(reg_address, data); } -void MCP2521_Command_Interface::set_mode_of_operation(MCP2521_OPERATION_MODE mode, bool singleshot) { +void MCP2521::set_mode_of_operation(MCP2521_OPERATION_MODE mode, bool singleshot) { uint8_t single = singleshot ? 0b00001000 : 0x0; bit_modify(MCP2521_CANCTRL, 0b11101000 , (mode << 5) | single); } -void MCP2521_Command_Interface::set_singleshot_mode(bool enable) { +void MCP2521::set_singleshot_mode(bool enable) { uint8_t data = enable ? 0x08 : 0x00; bit_modify(MCP2521_CANCTRL, 0x08, data); } -void MCP2521_Command_Interface::enable_interrupts(bool MessageError, bool ErrorInterrupt, bool WakeUp, bool TXB0, bool TXB1, bool TXB2, bool RXB0, bool RXB1) { +void MCP2521::enable_interrupts(bool MessageError, bool ErrorInterrupt, bool WakeUp, bool TXB0, bool TXB1, bool TXB2, bool RXB0, bool RXB1) { uint8_t interrupt_flags = 0; if (MessageError) interrupt_flags |= 0b10000000; @@ -84,7 +80,7 @@ void MCP2521_Command_Interface::enable_interrupts(bool MessageError, bool ErrorI write_reg(MCP2521_CANINTE, interrupt_flags); } -rx_info MCP2521_Command_Interface::get_rx_id(MCP2521_RX_BUFFER buffer) { +rx_info MCP2521::get_rx_id(MCP2521_RX_BUFFER buffer) { uint8_t data[5]; uint8_t addr_offset = MCP2521_RXB0SIDH; @@ -110,7 +106,7 @@ rx_info MCP2521_Command_Interface::get_rx_id(MCP2521_RX_BUFFER buffer) { return res; } -void MCP2521_Command_Interface::prepare_tx( +void MCP2521::prepare_tx( MCP2521_TX_BUFFER buffer, uint32_t id, uint8_t *data, diff --git a/can-interface/components/mcp2521_hardware_interface/CMakeLists.txt b/common-libaries/mcp2521_hardware_interface/CMakeLists.txt similarity index 100% rename from can-interface/components/mcp2521_hardware_interface/CMakeLists.txt rename to common-libaries/mcp2521_hardware_interface/CMakeLists.txt diff --git a/can-interface/components/mcp2521_hardware_interface/esp_implementation_cmd.cpp b/common-libaries/mcp2521_hardware_interface/esp_implementation_cmd.cpp similarity index 99% rename from can-interface/components/mcp2521_hardware_interface/esp_implementation_cmd.cpp rename to common-libaries/mcp2521_hardware_interface/esp_implementation_cmd.cpp index e5bc557..f6f5974 100644 --- a/can-interface/components/mcp2521_hardware_interface/esp_implementation_cmd.cpp +++ b/common-libaries/mcp2521_hardware_interface/esp_implementation_cmd.cpp @@ -1,11 +1,10 @@ #include "mcp2521_hardware_handle.hpp" - -const uint8_t null_buffer[32] = {0}; - #ifdef ESP_PLATFORM #include "mcp2521_hardware_esp.hpp" +const uint8_t null_buffer[32] = {0}; + void MCP2521_Hardware_Handle_ESP::spi_transmit(spi_transaction_t *t) { xSemaphoreTake(spiMutex, portMAX_DELAY); spi_device_transmit(this->spi_device_handle, t); diff --git a/can-interface/components/mcp2521_hardware_interface/esp_implementation_init.cpp b/common-libaries/mcp2521_hardware_interface/esp_implementation_init.cpp similarity index 100% rename from can-interface/components/mcp2521_hardware_interface/esp_implementation_init.cpp rename to common-libaries/mcp2521_hardware_interface/esp_implementation_init.cpp diff --git a/can-interface/components/mcp2521_hardware_interface/esp_implementation_int.cpp b/common-libaries/mcp2521_hardware_interface/esp_implementation_int.cpp similarity index 100% rename from can-interface/components/mcp2521_hardware_interface/esp_implementation_int.cpp rename to common-libaries/mcp2521_hardware_interface/esp_implementation_int.cpp diff --git a/can-interface/components/mcp2521_hardware_interface/include/mcp2521_hardware_esp.hpp b/common-libaries/mcp2521_hardware_interface/include/mcp2521_hardware_esp.hpp similarity index 100% rename from can-interface/components/mcp2521_hardware_interface/include/mcp2521_hardware_esp.hpp rename to common-libaries/mcp2521_hardware_interface/include/mcp2521_hardware_esp.hpp diff --git a/can-interface/components/mcp2521_hardware_interface/include/mcp2521_hardware_handle.hpp b/common-libaries/mcp2521_hardware_interface/include/mcp2521_hardware_handle.hpp similarity index 100% rename from can-interface/components/mcp2521_hardware_interface/include/mcp2521_hardware_handle.hpp rename to common-libaries/mcp2521_hardware_interface/include/mcp2521_hardware_handle.hpp