diff --git a/src/raspberrypi/Makefile b/src/raspberrypi/Makefile index 64a61970..1f519c64 100644 --- a/src/raspberrypi/Makefile +++ b/src/raspberrypi/Makefile @@ -101,6 +101,7 @@ SRC_RASCSI_CORE += $(shell find ./rascsi -name '*.cpp') SRC_RASCSI_CORE += $(shell find ./controllers -name '*.cpp') SRC_RASCSI_CORE += $(shell find ./devices -name '*.cpp') SRC_RASCSI_CORE += $(shell find ./hal -name '*.cpp') +SRC_RASCSI_CORE += $(shell find ./hal/boards -name '*.cpp') SRC_RASCSI = rascsi.cpp @@ -130,8 +131,8 @@ SRC_GPIO_TEST = \ gpiotest.cpp SRC_GPIO_TEST += $(shell find ./hal -name '*.cpp') -vpath %.h ./ ./controllers ./devices ./monitor ./hal ./rascsi ./rasctl ../BPI-WiringPi2/wiringPi/ -vpath %.cpp ./ ./controllers ./devices ./monitor ./test ./hal ./rascsi ./rasctl +vpath %.h ./ ./controllers ./devices ./monitor ./hal ./hal/boards ./rascsi ./rasctl ../BPI-WiringPi2/wiringPi/ +vpath %.cpp ./ ./controllers ./devices ./monitor ./test ./hal ./hal/boards ./rascsi ./rasctl vpath %.o ./$(OBJDIR) vpath ./$(BINDIR) diff --git a/src/raspberrypi/hal/board_type.h b/src/raspberrypi/hal/board_type.h new file mode 100644 index 00000000..6f3cd970 --- /dev/null +++ b/src/raspberrypi/hal/board_type.h @@ -0,0 +1,118 @@ +//--------------------------------------------------------------------------- +// +// SCSI Target Emulator RaSCSI Reloaded +// for Raspberry Pi +// +// Powered by XM6 TypeG Technology. +// Copyright (C) 2016-2020 GIMONS +// Copyright (C) 2022 akuker +// +//--------------------------------------------------------------------------- + +#pragma once + +#include + +namespace board_type +{ + +// This class will define the _physical_ pin numbers associated with the +// GPIOs on the Pi SBC. The equivalent Raspberry Pi GPIO numbers are +// shown as a reference. However, these are NOT applicable to other types +// of SBCs, such as the Banana Pi. +enum class pi_physical_pin_e : int { + PI_PHYS_PIN_NONE = -1, + PI_PHYS_PIN_03 = 3, // RPi GPIO 02 + PI_PHYS_PIN_05 = 5, // RPi GPIO 03 + PI_PHYS_PIN_07 = 7, // RPi GPIO 04 + PI_PHYS_PIN_08 = 8, // RPi GPIO 14 + PI_PHYS_PIN_10 = 10, // RPi GPIO 15 + PI_PHYS_PIN_11 = 11, // RPi GPIO 17 + PI_PHYS_PIN_12 = 12, // RPi GPIO 18 + PI_PHYS_PIN_13 = 13, // RPi GPIO 27 + PI_PHYS_PIN_15 = 15, // RPi GPIO 22 + PI_PHYS_PIN_16 = 16, // RPi GPIO 23 + PI_PHYS_PIN_18 = 18, // RPi GPIO 24 + PI_PHYS_PIN_19 = 19, // RPi GPIO 10 + PI_PHYS_PIN_21 = 21, // RPi GPIO 09 + PI_PHYS_PIN_22 = 22, // RPi GPIO 25 + PI_PHYS_PIN_23 = 23, // RPi GPIO 11 + PI_PHYS_PIN_24 = 24, // RPi GPIO 08 + PI_PHYS_PIN_26 = 26, // RPi GPIO 07 + PI_PHYS_PIN_27 = 27, // RPi GPIO 00 + PI_PHYS_PIN_28 = 28, // RPi GPIO 01 + PI_PHYS_PIN_29 = 29, // RPi GPIO 05 + PI_PHYS_PIN_31 = 31, // RPi GPIO 06 + PI_PHYS_PIN_32 = 32, // RPi GPIO 12 + PI_PHYS_PIN_33 = 33, // RPi GPIO 13 + PI_PHYS_PIN_35 = 35, // RPi GPIO 19 + PI_PHYS_PIN_36 = 36, // RPi GPIO 16 + PI_PHYS_PIN_37 = 37, // RPi GPIO 26 + PI_PHYS_PIN_38 = 38, // RPi GPIO 20 + PI_PHYS_PIN_40 = 40, // RPi GPIO 21 +}; + +// Operation modes definition +enum class gpio_direction_e : int { + GPIO_INPUT = 0, + GPIO_OUTPUT = 1, +}; + +enum class gpio_pull_up_down_e : int { + GPIO_PULLNONE = 0, + GPIO_PULLDOWN = 1, + GPIO_PULLUP = 2, +}; + +enum class active_high_low_e : int { + ACTIVE_HIGH = 1, // Equivalent of "ON" in old code + ACTIVE_LOW = 0, // Equivalent of "OFF" in old code +}; + +struct Rascsi_Board_Type { + public: + const std::string connect_desc; + + const int signal_control_mode; + + // Control signal output logic + const active_high_low_e act_on; // ACTIVE SIGNAL ON + const active_high_low_e enb_on; // ENABLE SIGNAL ON + const active_high_low_e ind_in; // INITIATOR SIGNAL INPUT + const active_high_low_e tad_in; // TARGET SIGNAL INPUT + const active_high_low_e dtd_in; // DATA SIGNAL INPUT + + // Control signal pin assignment (-1 means no control) + const pi_physical_pin_e pin_act; // ACTIVE + const pi_physical_pin_e pin_enb; // ENABLE + const pi_physical_pin_e pin_ind; // INITIATOR CTRL DIRECTION + const pi_physical_pin_e pin_tad; // TARGET CTRL DIRECTION + const pi_physical_pin_e pin_dtd; // DATA DIRECTION + + // SCSI signal pin assignment + const pi_physical_pin_e pin_dt0; // Data 0 + const pi_physical_pin_e pin_dt1; // Data 1 + const pi_physical_pin_e pin_dt2; // Data 2 + const pi_physical_pin_e pin_dt3; // Data 3 + const pi_physical_pin_e pin_dt4; // Data 4 + const pi_physical_pin_e pin_dt5; // Data 5 + const pi_physical_pin_e pin_dt6; // Data 6 + const pi_physical_pin_e pin_dt7; // Data 7 + const pi_physical_pin_e pin_dp; // Data parity + const pi_physical_pin_e pin_atn; // ATN + const pi_physical_pin_e pin_rst; // RST + const pi_physical_pin_e pin_ack; // ACK + const pi_physical_pin_e pin_req; // REQ + const pi_physical_pin_e pin_msg; // MSG + const pi_physical_pin_e pin_cd; // CD + const pi_physical_pin_e pin_io; // IO + const pi_physical_pin_e pin_bsy; // BSY + const pi_physical_pin_e pin_sel; // SEL +}; + +extern const Rascsi_Board_Type board_type_aibom; +extern const Rascsi_Board_Type board_type_fullspec; +extern const Rascsi_Board_Type board_type_gamernium; +extern const Rascsi_Board_Type board_type_standard; + +} // namespace board_type \ No newline at end of file diff --git a/src/raspberrypi/hal/boards/board_type_aibom.cpp b/src/raspberrypi/hal/boards/board_type_aibom.cpp new file mode 100644 index 00000000..a88b59c7 --- /dev/null +++ b/src/raspberrypi/hal/boards/board_type_aibom.cpp @@ -0,0 +1,60 @@ +//--------------------------------------------------------------------------- +// +// SCSI Target Emulator RaSCSI Reloaded +// for Raspberry Pi +// +// Powered by XM6 TypeG Technology. +// Copyright (C) 2016-2020 GIMONS +// Copyright (C) 2022 akuker +// +//--------------------------------------------------------------------------- + +#include "hal/board_type.h" + +namespace board_type +{ + +// RaSCSI Adapter Aibom version +const Rascsi_Board_Type board_type_aibom = { + + .connect_desc = "AIBOM PRODUCTS version", // Startup message + + // Select signal control mode + .signal_control_mode = 2, // SCSI positive logic specification + + // Control signal output logic + .act_on = active_high_low_e::ACTIVE_HIGH, // ACTIVE SIGNAL ON + .enb_on = active_high_low_e::ACTIVE_HIGH, // ENABLE SIGNAL ON + .ind_in = active_high_low_e::ACTIVE_LOW, // INITIATOR SIGNAL INPUT + .tad_in = active_high_low_e::ACTIVE_LOW, // TARGET SIGNAL INPUT + .dtd_in = active_high_low_e::ACTIVE_LOW, // DATA SIGNAL INPUT + + // Control signal pin assignment (-1 means no control) + .pin_act = pi_physical_pin_e::PI_PHYS_PIN_07, // ACTIVE + .pin_enb = pi_physical_pin_e::PI_PHYS_PIN_11, // ENABLE + .pin_ind = pi_physical_pin_e::PI_PHYS_PIN_13, // INITIATOR CTRL DIRECTION + .pin_tad = pi_physical_pin_e::PI_PHYS_PIN_NONE, // TARGET CTRL DIRECTION + .pin_dtd = pi_physical_pin_e::PI_PHYS_PIN_12, // DATA DIRECTION + + // SCSI signal pin assignment + .pin_dt0 = pi_physical_pin_e::PI_PHYS_PIN_31, // Data 0 + .pin_dt1 = pi_physical_pin_e::PI_PHYS_PIN_32, // Data 1 + .pin_dt2 = pi_physical_pin_e::PI_PHYS_PIN_33, // Data 2 + .pin_dt3 = pi_physical_pin_e::PI_PHYS_PIN_36, // Data 3 + .pin_dt4 = pi_physical_pin_e::PI_PHYS_PIN_35, // Data 4 + .pin_dt5 = pi_physical_pin_e::PI_PHYS_PIN_38, // Data 5 + .pin_dt6 = pi_physical_pin_e::PI_PHYS_PIN_37, // Data 6 + .pin_dt7 = pi_physical_pin_e::PI_PHYS_PIN_40, // Data 7 + .pin_dp = pi_physical_pin_e::PI_PHYS_PIN_29, // Data parity + .pin_atn = pi_physical_pin_e::PI_PHYS_PIN_15, // ATN + .pin_rst = pi_physical_pin_e::PI_PHYS_PIN_22, // RST + .pin_ack = pi_physical_pin_e::PI_PHYS_PIN_19, // ACK + .pin_req = pi_physical_pin_e::PI_PHYS_PIN_26, // REQ + .pin_msg = pi_physical_pin_e::PI_PHYS_PIN_21, // MSG + .pin_cd = pi_physical_pin_e::PI_PHYS_PIN_23, // CD + .pin_io = pi_physical_pin_e::PI_PHYS_PIN_16, // IO + .pin_bsy = pi_physical_pin_e::PI_PHYS_PIN_18, // BSY + .pin_sel = pi_physical_pin_e::PI_PHYS_PIN_24, // SEL +}; + +} \ No newline at end of file diff --git a/src/raspberrypi/hal/boards/board_type_fullspec.cpp b/src/raspberrypi/hal/boards/board_type_fullspec.cpp new file mode 100644 index 00000000..da412fd5 --- /dev/null +++ b/src/raspberrypi/hal/boards/board_type_fullspec.cpp @@ -0,0 +1,57 @@ +//--------------------------------------------------------------------------- +// +// SCSI Target Emulator RaSCSI Reloaded +// for Raspberry Pi +// +// Powered by XM6 TypeG Technology. +// Copyright (C) 2016-2020 GIMONS +// Copyright (C) 2022 akuker +// +//--------------------------------------------------------------------------- + +#include "hal/board_type.h" + +namespace board_type{ +// RaSCSI standard (SCSI logic, standard pin assignment) +const Rascsi_Board_Type board_type_fullspec = { + + .connect_desc = "FULLSPEC", // Startup message + + // Select signal control mode + .signal_control_mode = 0, // SCSI positive logic specification + + // Control signal output logic + .act_on = active_high_low_e::ACTIVE_HIGH, // ACTIVE SIGNAL ON + .enb_on = active_high_low_e::ACTIVE_HIGH, // ENABLE SIGNAL ON + .ind_in = active_high_low_e::ACTIVE_LOW, // INITIATOR SIGNAL INPUT + .tad_in = active_high_low_e::ACTIVE_LOW, // TARGET SIGNAL INPUT + .dtd_in = active_high_low_e::ACTIVE_HIGH, // DATA SIGNAL INPUT + + // Control signal pin assignment (-1 means no control) + .pin_act = pi_physical_pin_e::PI_PHYS_PIN_07, // ACTIVE + .pin_enb = pi_physical_pin_e::PI_PHYS_PIN_29, // ENABLE + .pin_ind = pi_physical_pin_e::PI_PHYS_PIN_31, // INITIATOR CTRL DIRECTION + .pin_tad = pi_physical_pin_e::PI_PHYS_PIN_26, // TARGET CTRL DIRECTION + .pin_dtd = pi_physical_pin_e::PI_PHYS_PIN_24, // DATA DIRECTION + + // SCSI signal pin assignment + .pin_dt0 = pi_physical_pin_e::PI_PHYS_PIN_19, // Data 0 + .pin_dt1 = pi_physical_pin_e::PI_PHYS_PIN_23, // Data 1 + .pin_dt2 = pi_physical_pin_e::PI_PHYS_PIN_32, // Data 2 + .pin_dt3 = pi_physical_pin_e::PI_PHYS_PIN_33, // Data 3 + .pin_dt4 = pi_physical_pin_e::PI_PHYS_PIN_08, // Data 4 + .pin_dt5 = pi_physical_pin_e::PI_PHYS_PIN_10, // Data 5 + .pin_dt6 = pi_physical_pin_e::PI_PHYS_PIN_36, // Data 6 + .pin_dt7 = pi_physical_pin_e::PI_PHYS_PIN_11, // Data 7 + .pin_dp = pi_physical_pin_e::PI_PHYS_PIN_12, // Data parity + .pin_atn = pi_physical_pin_e::PI_PHYS_PIN_35, // ATN + .pin_rst = pi_physical_pin_e::PI_PHYS_PIN_38, // RST + .pin_ack = pi_physical_pin_e::PI_PHYS_PIN_40, // ACK + .pin_req = pi_physical_pin_e::PI_PHYS_PIN_15, // REQ + .pin_msg = pi_physical_pin_e::PI_PHYS_PIN_16, // MSG + .pin_cd = pi_physical_pin_e::PI_PHYS_PIN_18, // CD + .pin_io = pi_physical_pin_e::PI_PHYS_PIN_22, // IO + .pin_bsy = pi_physical_pin_e::PI_PHYS_PIN_37, // BSY + .pin_sel = pi_physical_pin_e::PI_PHYS_PIN_13, // SEL +}; +} \ No newline at end of file diff --git a/src/raspberrypi/hal/boards/board_type_gamernium.cpp b/src/raspberrypi/hal/boards/board_type_gamernium.cpp new file mode 100644 index 00000000..28c9813e --- /dev/null +++ b/src/raspberrypi/hal/boards/board_type_gamernium.cpp @@ -0,0 +1,59 @@ +//--------------------------------------------------------------------------- +// +// SCSI Target Emulator RaSCSI Reloaded +// for Raspberry Pi +// +// Powered by XM6 TypeG Technology. +// Copyright (C) 2016-2020 GIMONS +// Copyright (C) 2022 akuker +// +//--------------------------------------------------------------------------- + +#include "hal/board_type.h" + +namespace board_type +{ + +// RaSCSI Adapter GAMERnium.com version +const Rascsi_Board_Type board_type_fullspec = { + + .connect_desc = "GAMERnium.com version", // Startup message + + // Select signal control mode + .signal_control_mode = 0, // SCSI positive logic specification + + // Control signal output logic + .act_on = active_high_low_e::ACTIVE_HIGH, // ACTIVE SIGNAL ON + .enb_on = active_high_low_e::ACTIVE_HIGH, // ENABLE SIGNAL ON + .ind_in = active_high_low_e::ACTIVE_LOW, // INITIATOR SIGNAL INPUT + .tad_in = active_high_low_e::ACTIVE_LOW, // TARGET SIGNAL INPUT + .dtd_in = active_high_low_e::ACTIVE_HIGH, // DATA SIGNAL INPUT + + // Control signal pin assignment (-1 means no control) + .pin_act = pi_physical_pin_e::PI_PHYS_PIN_08, // ACTIVE + .pin_enb = pi_physical_pin_e::PI_PHYS_PIN_31, // ENABLE + .pin_ind = pi_physical_pin_e::PI_PHYS_PIN_26, // INITIATOR CTRL DIRECTION + .pin_tad = pi_physical_pin_e::PI_PHYS_PIN_24, // TARGET CTRL DIRECTION + .pin_dtd = pi_physical_pin_e::PI_PHYS_PIN_29, // DATA DIRECTION + + // SCSI signal pin assignment + .pin_dt0 = pi_physical_pin_e::PI_PHYS_PIN_40, // 21, Data 0 + .pin_dt1 = pi_physical_pin_e::PI_PHYS_PIN_37, // 26, Data 1 + .pin_dt2 = pi_physical_pin_e::PI_PHYS_PIN_38, // 20, Data 2 + .pin_dt3 = pi_physical_pin_e::PI_PHYS_PIN_35, // 19, Data 3 + .pin_dt4 = pi_physical_pin_e::PI_PHYS_PIN_36, // 16, Data 4 + .pin_dt5 = pi_physical_pin_e::PI_PHYS_PIN_33, // 13, Data 5 + .pin_dt6 = pi_physical_pin_e::PI_PHYS_PIN_32, // 12, Data 6 + .pin_dt7 = pi_physical_pin_e::PI_PHYS_PIN_23, // 11, Data 7 + .pin_dp = pi_physical_pin_e::PI_PHYS_PIN_22, // 25, Data parity + .pin_atn = pi_physical_pin_e::PI_PHYS_PIN_19, // 10, ATN + .pin_rst = pi_physical_pin_e::PI_PHYS_PIN_15, // 22, RST + .pin_ack = pi_physical_pin_e::PI_PHYS_PIN_18, // 24, ACK + .pin_req = pi_physical_pin_e::PI_PHYS_PIN_10, // 15, REQ + .pin_msg = pi_physical_pin_e::PI_PHYS_PIN_11, // 17, MSG + .pin_cd = pi_physical_pin_e::PI_PHYS_PIN_12, // 18, CD + .pin_io = pi_physical_pin_e::PI_PHYS_PIN_07, // 4;, IO + .pin_bsy = pi_physical_pin_e::PI_PHYS_PIN_13, // 27, BSY + .pin_sel = pi_physical_pin_e::PI_PHYS_PIN_16, // 23, SEL +}; +} // namespace board_type \ No newline at end of file diff --git a/src/raspberrypi/hal/boards/board_type_standard.cpp b/src/raspberrypi/hal/boards/board_type_standard.cpp new file mode 100644 index 00000000..120fb730 --- /dev/null +++ b/src/raspberrypi/hal/boards/board_type_standard.cpp @@ -0,0 +1,58 @@ +//--------------------------------------------------------------------------- +// +// SCSI Target Emulator RaSCSI Reloaded +// for Raspberry Pi +// +// Powered by XM6 TypeG Technology. +// Copyright (C) 2016-2020 GIMONS +// Copyright (C) 2022 akuker +// +//--------------------------------------------------------------------------- + +#include "hal/board_type.h" + +namespace board_type +{ +// RaSCSI standard (SCSI logic, standard pin assignment) +const Rascsi_Board_Type board_type_fullspec = { + + .connect_desc = "STANDARD", // Startup message + + // Select signal control mode + .signal_control_mode = 0, // SCSI positive logic specification + + // Control signal output logic + .act_on = active_high_low_e::ACTIVE_HIGH, // ACTIVE SIGNAL ON + .enb_on = active_high_low_e::ACTIVE_HIGH, // ENABLE SIGNAL ON + .ind_in = active_high_low_e::ACTIVE_LOW, // INITIATOR SIGNAL INPUT + .tad_in = active_high_low_e::ACTIVE_LOW, // TARGET SIGNAL INPUT + .dtd_in = active_high_low_e::ACTIVE_HIGH, // DATA SIGNAL INPUT + + // Control signal pin assignment (-1 means no control) + .pin_act = pi_physical_pin_e::PI_PHYS_PIN_07, // RPi GPIO 4 + .pin_enb = pi_physical_pin_e::PI_PHYS_PIN_29, // RPi GPIO 5 + .pin_ind = pi_physical_pin_e::PI_PHYS_PIN_NONE, // Not applicable + .pin_tad = pi_physical_pin_e::PI_PHYS_PIN_NONE, // Not applicable + .pin_dtd = pi_physical_pin_e::PI_PHYS_PIN_NONE, // Not applicable + + // SCSI signal pin assignment + .pin_dt0 = pi_physical_pin_e::PI_PHYS_PIN_19, // RPi GPIO 10 + .pin_dt1 = pi_physical_pin_e::PI_PHYS_PIN_23, // RPi GPIO 11 + .pin_dt2 = pi_physical_pin_e::PI_PHYS_PIN_32, // RPi GPIO 12 + .pin_dt3 = pi_physical_pin_e::PI_PHYS_PIN_33, // RPi GPIO 13 + .pin_dt4 = pi_physical_pin_e::PI_PHYS_PIN_08, // RPi GPIO 14 + .pin_dt5 = pi_physical_pin_e::PI_PHYS_PIN_10, // RPi GPIO 15 + .pin_dt6 = pi_physical_pin_e::PI_PHYS_PIN_36, // RPi GPIO 16 + .pin_dt7 = pi_physical_pin_e::PI_PHYS_PIN_11, // RPi GPIO 17 + .pin_dp = pi_physical_pin_e::PI_PHYS_PIN_12, // RPi GPIO 18 + .pin_atn = pi_physical_pin_e::PI_PHYS_PIN_35, // RPi GPIO 19 + .pin_rst = pi_physical_pin_e::PI_PHYS_PIN_38, // RPi GPIO 20 + .pin_ack = pi_physical_pin_e::PI_PHYS_PIN_40, // RPi GPIO 21 + .pin_req = pi_physical_pin_e::PI_PHYS_PIN_15, // RPi GPIO 22 + .pin_msg = pi_physical_pin_e::PI_PHYS_PIN_16, // RPi GPIO 23 + .pin_cd = pi_physical_pin_e::PI_PHYS_PIN_18, // RPi GPIO 24 + .pin_io = pi_physical_pin_e::PI_PHYS_PIN_22, // RPi GPIO 25 + .pin_bsy = pi_physical_pin_e::PI_PHYS_PIN_37, // RPi GPIO 26 + .pin_sel = pi_physical_pin_e::PI_PHYS_PIN_13, // RPi GPIO 27 +}; +} // namespace board_type \ No newline at end of file diff --git a/src/raspberrypi/hal/gpiobus.cpp b/src/raspberrypi/hal/gpiobus.cpp index 9d02e36a..5df1d060 100644 --- a/src/raspberrypi/hal/gpiobus.cpp +++ b/src/raspberrypi/hal/gpiobus.cpp @@ -229,11 +229,11 @@ void GPIOBUS::SetBSY(bool ast) // Set Target signal to output SetControl(PIN_TAD, TAD_OUT); - SetMode(PIN_BSY, OUT); - SetMode(PIN_MSG, OUT); - SetMode(PIN_CD, OUT); - SetMode(PIN_REQ, OUT); - SetMode(PIN_IO, OUT); + SetMode(PIN_BSY, RASCSI_PIN_OUT); + SetMode(PIN_MSG, RASCSI_PIN_OUT); + SetMode(PIN_CD, RASCSI_PIN_OUT); + SetMode(PIN_REQ, RASCSI_PIN_OUT); + SetMode(PIN_IO, RASCSI_PIN_OUT); } else { // Turn off the ACTIVE signal SetControl(PIN_ACT, ACT_OFF); @@ -241,11 +241,11 @@ void GPIOBUS::SetBSY(bool ast) // Set the target signal to input SetControl(PIN_TAD, TAD_IN); - SetMode(PIN_BSY, IN); - SetMode(PIN_MSG, IN); - SetMode(PIN_CD, IN); - SetMode(PIN_REQ, IN); - SetMode(PIN_IO, IN); + SetMode(PIN_BSY, RASCSI_PIN_IN); + SetMode(PIN_MSG, RASCSI_PIN_IN); + SetMode(PIN_CD, RASCSI_PIN_IN); + SetMode(PIN_REQ, RASCSI_PIN_IN); + SetMode(PIN_IO, RASCSI_PIN_IN); } } } @@ -349,26 +349,26 @@ bool GPIOBUS::GetIO() // Change the data input/output direction by IO signal if (ast) { SetControl(PIN_DTD, DTD_IN); - SetMode(PIN_DT0, IN); - SetMode(PIN_DT1, IN); - SetMode(PIN_DT2, IN); - SetMode(PIN_DT3, IN); - SetMode(PIN_DT4, IN); - SetMode(PIN_DT5, IN); - SetMode(PIN_DT6, IN); - SetMode(PIN_DT7, IN); - SetMode(PIN_DP, IN); + SetMode(PIN_DT0, RASCSI_PIN_IN); + SetMode(PIN_DT1, RASCSI_PIN_IN); + SetMode(PIN_DT2, RASCSI_PIN_IN); + SetMode(PIN_DT3, RASCSI_PIN_IN); + SetMode(PIN_DT4, RASCSI_PIN_IN); + SetMode(PIN_DT5, RASCSI_PIN_IN); + SetMode(PIN_DT6, RASCSI_PIN_IN); + SetMode(PIN_DT7, RASCSI_PIN_IN); + SetMode(PIN_DP, RASCSI_PIN_IN); } else { SetControl(PIN_DTD, DTD_OUT); - SetMode(PIN_DT0, OUT); - SetMode(PIN_DT1, OUT); - SetMode(PIN_DT2, OUT); - SetMode(PIN_DT3, OUT); - SetMode(PIN_DT4, OUT); - SetMode(PIN_DT5, OUT); - SetMode(PIN_DT6, OUT); - SetMode(PIN_DT7, OUT); - SetMode(PIN_DP, OUT); + SetMode(PIN_DT0, RASCSI_PIN_OUT); + SetMode(PIN_DT1, RASCSI_PIN_OUT); + SetMode(PIN_DT2, RASCSI_PIN_OUT); + SetMode(PIN_DT3, RASCSI_PIN_OUT); + SetMode(PIN_DT4, RASCSI_PIN_OUT); + SetMode(PIN_DT5, RASCSI_PIN_OUT); + SetMode(PIN_DT6, RASCSI_PIN_OUT); + SetMode(PIN_DT7, RASCSI_PIN_OUT); + SetMode(PIN_DP, RASCSI_PIN_OUT); } } @@ -385,26 +385,26 @@ void GPIOBUS::SetIO(bool ast) if (ast) { SetControl(PIN_DTD, DTD_OUT); SetDAT(0); - SetMode(PIN_DT0, OUT); - SetMode(PIN_DT1, OUT); - SetMode(PIN_DT2, OUT); - SetMode(PIN_DT3, OUT); - SetMode(PIN_DT4, OUT); - SetMode(PIN_DT5, OUT); - SetMode(PIN_DT6, OUT); - SetMode(PIN_DT7, OUT); - SetMode(PIN_DP, OUT); + SetMode(PIN_DT0, RASCSI_PIN_OUT); + SetMode(PIN_DT1, RASCSI_PIN_OUT); + SetMode(PIN_DT2, RASCSI_PIN_OUT); + SetMode(PIN_DT3, RASCSI_PIN_OUT); + SetMode(PIN_DT4, RASCSI_PIN_OUT); + SetMode(PIN_DT5, RASCSI_PIN_OUT); + SetMode(PIN_DT6, RASCSI_PIN_OUT); + SetMode(PIN_DT7, RASCSI_PIN_OUT); + SetMode(PIN_DP, RASCSI_PIN_OUT); } else { SetControl(PIN_DTD, DTD_IN); - SetMode(PIN_DT0, IN); - SetMode(PIN_DT1, IN); - SetMode(PIN_DT2, IN); - SetMode(PIN_DT3, IN); - SetMode(PIN_DT4, IN); - SetMode(PIN_DT5, IN); - SetMode(PIN_DT6, IN); - SetMode(PIN_DT7, IN); - SetMode(PIN_DP, IN); + SetMode(PIN_DT0, RASCSI_PIN_IN); + SetMode(PIN_DT1, RASCSI_PIN_IN); + SetMode(PIN_DT2, RASCSI_PIN_IN); + SetMode(PIN_DT3, RASCSI_PIN_IN); + SetMode(PIN_DT4, RASCSI_PIN_IN); + SetMode(PIN_DT5, RASCSI_PIN_IN); + SetMode(PIN_DT6, RASCSI_PIN_IN); + SetMode(PIN_DT7, RASCSI_PIN_IN); + SetMode(PIN_DP, RASCSI_PIN_IN); } } } @@ -443,10 +443,10 @@ int GPIOBUS::CommandHandShake(BYTE *buf) DisableIRQ(); // Assert REQ signal - SetSignal(PIN_REQ, ON); + SetSignal(PIN_REQ, RASCSI_PIN_ON); // Wait for ACK signal - bool ret = WaitSignal(PIN_ACK, ON); + bool ret = WaitSignal(PIN_ACK, RASCSI_PIN_ON); // Wait until the signal line stabilizes SysTimer::SleepNsec(SCSI_DELAY_BUS_SETTLE_DELAY_NS); @@ -455,7 +455,7 @@ int GPIOBUS::CommandHandShake(BYTE *buf) *buf = GetDAT(); // Disable REQ signal - SetSignal(PIN_REQ, OFF); + SetSignal(PIN_REQ, RASCSI_PIN_OFF); // Timeout waiting for ACK assertion if (!ret) { @@ -464,7 +464,7 @@ int GPIOBUS::CommandHandShake(BYTE *buf) } // Wait for ACK to clear - ret = WaitSignal(PIN_ACK, OFF); + ret = WaitSignal(PIN_ACK, RASCSI_PIN_OFF); // Timeout waiting for ACK to clear if (!ret) { @@ -482,23 +482,23 @@ int GPIOBUS::CommandHandShake(BYTE *buf) // RaSCSI becomes ICD compatible by ignoring the prepended $1F byte before processing the CDB. if (*buf == 0x1F) { - SetSignal(PIN_REQ, ON); + SetSignal(PIN_REQ, RASCSI_PIN_ON); - ret = WaitSignal(PIN_ACK, ON); + ret = WaitSignal(PIN_ACK, RASCSI_PIN_ON); SysTimer::SleepNsec(SCSI_DELAY_BUS_SETTLE_DELAY_NS); // Get the actual SCSI command *buf = GetDAT(); - SetSignal(PIN_REQ, OFF); + SetSignal(PIN_REQ, RASCSI_PIN_OFF); if (!ret) { EnableIRQ(); return 0; } - WaitSignal(PIN_ACK, OFF); + WaitSignal(PIN_ACK, RASCSI_PIN_OFF); if (!ret) { EnableIRQ(); @@ -514,10 +514,10 @@ int GPIOBUS::CommandHandShake(BYTE *buf) int bytes_received; for (bytes_received = 1; bytes_received < command_byte_count; bytes_received++) { // Assert REQ signal - SetSignal(PIN_REQ, ON); + SetSignal(PIN_REQ, RASCSI_PIN_ON); // Wait for ACK signal - ret = WaitSignal(PIN_ACK, ON); + ret = WaitSignal(PIN_ACK, RASCSI_PIN_ON); // Wait until the signal line stabilizes SysTimer::SleepNsec(SCSI_DELAY_BUS_SETTLE_DELAY_NS); @@ -526,7 +526,7 @@ int GPIOBUS::CommandHandShake(BYTE *buf) *buf = GetDAT(); // Clear the REQ signal - SetSignal(PIN_REQ, OFF); + SetSignal(PIN_REQ, RASCSI_PIN_OFF); // Check for timeout waiting for ACK assertion if (!ret) { @@ -534,7 +534,7 @@ int GPIOBUS::CommandHandShake(BYTE *buf) } // Wait for ACK to clear - ret = WaitSignal(PIN_ACK, OFF); + ret = WaitSignal(PIN_ACK, RASCSI_PIN_OFF); // Check for timeout waiting for ACK to clear if (!ret) { @@ -567,10 +567,10 @@ int GPIOBUS::ReceiveHandShake(BYTE *buf, int count) if (actmode == mode_e::TARGET) { for (i = 0; i < count; i++) { // Assert the REQ signal - SetSignal(PIN_REQ, ON); + SetSignal(PIN_REQ, RASCSI_PIN_ON); // Wait for ACK - bool ret = WaitSignal(PIN_ACK, ON); + bool ret = WaitSignal(PIN_ACK, RASCSI_PIN_ON); // Wait until the signal line stabilizes SysTimer::SleepNsec(SCSI_DELAY_BUS_SETTLE_DELAY_NS); @@ -579,7 +579,7 @@ int GPIOBUS::ReceiveHandShake(BYTE *buf, int count) *buf = GetDAT(); // Clear the REQ signal - SetSignal(PIN_REQ, OFF); + SetSignal(PIN_REQ, RASCSI_PIN_OFF); // Check for timeout waiting for ACK signal if (!ret) { @@ -587,7 +587,7 @@ int GPIOBUS::ReceiveHandShake(BYTE *buf, int count) } // Wait for ACK to clear - ret = WaitSignal(PIN_ACK, OFF); + ret = WaitSignal(PIN_ACK, RASCSI_PIN_OFF); // Check for timeout waiting for ACK to clear if (!ret) { @@ -603,7 +603,7 @@ int GPIOBUS::ReceiveHandShake(BYTE *buf, int count) for (i = 0; i < count; i++) { // Wait for the REQ signal to be asserted - bool ret = WaitSignal(PIN_REQ, ON); + bool ret = WaitSignal(PIN_REQ, RASCSI_PIN_ON); // Check for timeout waiting for REQ signal if (!ret) { @@ -622,13 +622,13 @@ int GPIOBUS::ReceiveHandShake(BYTE *buf, int count) *buf = GetDAT(); // Assert the ACK signal - SetSignal(PIN_ACK, ON); + SetSignal(PIN_ACK, RASCSI_PIN_ON); // Wait for REQ to clear - ret = WaitSignal(PIN_REQ, OFF); + ret = WaitSignal(PIN_REQ, RASCSI_PIN_OFF); // Clear the ACK signal - SetSignal(PIN_ACK, OFF); + SetSignal(PIN_ACK, RASCSI_PIN_OFF); // Check for timeout waiting for REQ to clear if (!ret) { @@ -678,7 +678,7 @@ int GPIOBUS::SendHandShake(BYTE *buf, int count, int delay_after_bytes) SetDAT(*buf); // Wait for ACK to clear - bool ret = WaitSignal(PIN_ACK, OFF); + bool ret = WaitSignal(PIN_ACK, RASCSI_PIN_OFF); // Check for timeout waiting for ACK to clear if (!ret) { @@ -688,13 +688,13 @@ int GPIOBUS::SendHandShake(BYTE *buf, int count, int delay_after_bytes) // Already waiting for ACK to clear // Assert the REQ signal - SetSignal(PIN_REQ, ON); + SetSignal(PIN_REQ, RASCSI_PIN_ON); // Wait for ACK - ret = WaitSignal(PIN_ACK, ON); + ret = WaitSignal(PIN_ACK, RASCSI_PIN_ON); // Clear REQ signal - SetSignal(PIN_REQ, OFF); + SetSignal(PIN_REQ, RASCSI_PIN_OFF); // Check for timeout waiting for ACK to clear if (!ret) { @@ -706,7 +706,7 @@ int GPIOBUS::SendHandShake(BYTE *buf, int count, int delay_after_bytes) } // Wait for ACK to clear - WaitSignal(PIN_ACK, OFF); + WaitSignal(PIN_ACK, RASCSI_PIN_OFF); } else { // Get Phase uint32_t phase = Acquire() & GPIO_MCI; @@ -722,7 +722,7 @@ int GPIOBUS::SendHandShake(BYTE *buf, int count, int delay_after_bytes) SetDAT(*buf); // Wait for REQ to be asserted - bool ret = WaitSignal(PIN_REQ, ON); + bool ret = WaitSignal(PIN_REQ, RASCSI_PIN_ON); // Check for timeout waiting for REQ to be asserted if (!ret) { @@ -737,13 +737,13 @@ int GPIOBUS::SendHandShake(BYTE *buf, int count, int delay_after_bytes) // Already waiting for REQ assertion // Assert the ACK signal - SetSignal(PIN_ACK, ON); + SetSignal(PIN_ACK, RASCSI_PIN_ON); // Wait for REQ to clear - ret = WaitSignal(PIN_REQ, OFF); + ret = WaitSignal(PIN_REQ, RASCSI_PIN_OFF); // Clear the ACK signal - SetSignal(PIN_ACK, OFF); + SetSignal(PIN_ACK, RASCSI_PIN_OFF); // Check for timeout waiting for REQ to clear if (!ret) { diff --git a/src/raspberrypi/hal/gpiobus.h b/src/raspberrypi/hal/gpiobus.h index 39afc819..61f744b6 100644 --- a/src/raspberrypi/hal/gpiobus.h +++ b/src/raspberrypi/hal/gpiobus.h @@ -249,10 +249,10 @@ const static int GIC_GPIO_IRQ = (32 + 116); // GPIO3 // Constant declarations (SCSI) // //--------------------------------------------------------------------------- -#define IN GPIO_INPUT -#define OUT GPIO_OUTPUT -const static int ON = 1; -const static int OFF = 0; +#define RASCSI_PIN_IN GPIO_INPUT +#define RASCSI_PIN_OUT GPIO_OUTPUT +const static int RASCSI_PIN_ON = 1; +const static int RASCSI_PIN_OFF = 0; //--------------------------------------------------------------------------- // diff --git a/src/raspberrypi/hal/gpiobus_aibom.h b/src/raspberrypi/hal/gpiobus_aibom.h index 6fbb0425..817167d9 100644 --- a/src/raspberrypi/hal/gpiobus_aibom.h +++ b/src/raspberrypi/hal/gpiobus_aibom.h @@ -22,11 +22,11 @@ const std::string CONNECT_DESC = "AIBOM PRODUCTS version"; // Startup message const static int SIGNAL_CONTROL_MODE = 2; // SCSI positive logic specification // Control signal output logic -#define ACT_ON ON // ACTIVE SIGNAL ON -#define ENB_ON ON // ENABLE SIGNAL ON -#define IND_IN OFF // INITIATOR SIGNAL INPUT -#define TAD_IN OFF // TARGET SIGNAL INPUT -#define DTD_IN OFF // DATA SIGNAL INPUT +#define ACT_ON RASCSI_PIN_ON // ACTIVE SIGNAL ON +#define ENB_ON RASCSI_PIN_ON // ENABLE SIGNAL ON +#define IND_IN RASCSI_PIN_OFF // INITIATOR SIGNAL INPUT +#define TAD_IN RASCSI_PIN_OFF // TARGET SIGNAL INPUT +#define DTD_IN RASCSI_PIN_OFF // DATA SIGNAL INPUT // Control signal pin assignment (-1 means no control) const static int PIN_ACT = 4; // ACTIVE diff --git a/src/raspberrypi/hal/gpiobus_allwinner.cpp b/src/raspberrypi/hal/gpiobus_allwinner.cpp index df93abaa..cb9e36f1 100644 --- a/src/raspberrypi/hal/gpiobus_allwinner.cpp +++ b/src/raspberrypi/hal/gpiobus_allwinner.cpp @@ -23,67 +23,67 @@ extern int wiringPiMode; bool GPIOBUS_Allwinner::Init(mode_e mode) { GPIOBUS::Init(mode); - wiringPiSetup(); - wiringPiMode = WPI_MODE_GPIO; +// wiringPiSetup(); +// wiringPiMode = WPI_MODE_GPIO; - LOGTRACE("%s Set Drive Strength", __PRETTY_FUNCTION__); - // Set Drive Strength to 16mA - DrvConfig(7); +// LOGTRACE("%s Set Drive Strength", __PRETTY_FUNCTION__); +// // Set Drive Strength to 16mA +// DrvConfig(7); - // Set pull up/pull down - LOGTRACE("%s Set pull up/down....", __PRETTY_FUNCTION__); +// // Set pull up/pull down +// LOGTRACE("%s Set pull up/down....", __PRETTY_FUNCTION__); -#if SIGNAL_CONTROL_MODE == 0 - int pullmode = GPIO_PULLNONE; -#elif SIGNAL_CONTROL_MODE == 1 - int pullmode = GPIO_PULLUP; -#else - int pullmode = GPIO_PULLDOWN; -#endif +// #if SIGNAL_CONTROL_MODE == 0 +// int pullmode = GPIO_PULLNONE; +// #elif SIGNAL_CONTROL_MODE == 1 +// int pullmode = GPIO_PULLUP; +// #else +// int pullmode = GPIO_PULLDOWN; +// #endif - // Initialize all signals - LOGTRACE("%s Initialize all signals....", __PRETTY_FUNCTION__); +// // Initialize all signals +// LOGTRACE("%s Initialize all signals....", __PRETTY_FUNCTION__); - for (int i = 0; SignalTable[i] >= 0; i++) { - int j = SignalTable[i]; - PinSetSignal(j, OFF); - PinConfig(j, GPIO_INPUT); - PullConfig(j, pullmode); - } +// for (int i = 0; SignalTable[i] >= 0; i++) { +// int j = SignalTable[i]; +// PinSetSignal(j, OFF); +// PinConfig(j, GPIO_INPUT); +// PullConfig(j, pullmode); +// } - // Set control signals - LOGTRACE("%s Set control signals....", __PRETTY_FUNCTION__); - PinSetSignal(PIN_ACT, OFF); - PinSetSignal(PIN_TAD, OFF); - PinSetSignal(PIN_IND, OFF); - PinSetSignal(PIN_DTD, OFF); - PinConfig(PIN_ACT, GPIO_OUTPUT); - PinConfig(PIN_TAD, GPIO_OUTPUT); - PinConfig(PIN_IND, GPIO_OUTPUT); - PinConfig(PIN_DTD, GPIO_OUTPUT); +// // Set control signals +// LOGTRACE("%s Set control signals....", __PRETTY_FUNCTION__); +// PinSetSignal(PIN_ACT, OFF); +// PinSetSignal(PIN_TAD, OFF); +// PinSetSignal(PIN_IND, OFF); +// PinSetSignal(PIN_DTD, OFF); +// PinConfig(PIN_ACT, GPIO_OUTPUT); +// PinConfig(PIN_TAD, GPIO_OUTPUT); +// PinConfig(PIN_IND, GPIO_OUTPUT); +// PinConfig(PIN_DTD, GPIO_OUTPUT); - // Set the ENABLE signal - // This is used to show that the application is running - PinSetSignal(PIN_ENB, ENB_OFF); - PinConfig(PIN_ENB, GPIO_OUTPUT); +// // Set the ENABLE signal +// // This is used to show that the application is running +// PinSetSignal(PIN_ENB, ENB_OFF); +// PinConfig(PIN_ENB, GPIO_OUTPUT); - // Create work table +// // Create work table - LOGTRACE("%s MakeTable....", __PRETTY_FUNCTION__); - MakeTable(); +// LOGTRACE("%s MakeTable....", __PRETTY_FUNCTION__); +// MakeTable(); - // Finally, enable ENABLE - LOGTRACE("%s Finally, enable ENABLE....", __PRETTY_FUNCTION__); - // Show the user that this app is running - SetControl(PIN_ENB, ENB_ON); +// // Finally, enable ENABLE +// LOGTRACE("%s Finally, enable ENABLE....", __PRETTY_FUNCTION__); +// // Show the user that this app is running +// SetControl(PIN_ENB, ENB_ON); - // if(!SetupPollSelectEvent()){ - // LOGERROR("Failed to setup SELECT poll event"); - // return false; - // } +// // if(!SetupPollSelectEvent()){ +// // LOGERROR("Failed to setup SELECT poll event"); +// // return false; +// // } return true; @@ -254,32 +254,35 @@ void GPIOBUS_Allwinner::Reset() BYTE GPIOBUS_Allwinner::GetDAT() { LOGWARN("%s NOT IMPLEMENTED", __PRETTY_FUNCTION__) - LOGDEBUG("0:%02X 1:%02X 2:%02X 3:%02X 4:%02X 5:%02X 6:%02X 7:%02X P:%02X", GetSignal(PIN_DT0), GetSignal(PIN_DT1),GetSignal(PIN_DT2),GetSignal(PIN_DT3),GetSignal(PIN_DT4),GetSignal(PIN_DT5),GetSignal(PIN_DT6),GetSignal(PIN_DT7),GetSignal(PIN_DP)); - // TODO: This is crazy inefficient... - DWORD data = - ((GetSignal(PIN_DT0) ? 0x01: 0x00)<< 0) | - ((GetSignal(PIN_DT1) ? 0x01: 0x00)<< 1) | - ((GetSignal(PIN_DT2) ? 0x01: 0x00)<< 2) | - ((GetSignal(PIN_DT3) ? 0x01: 0x00)<< 3) | - ((GetSignal(PIN_DT4) ? 0x01: 0x00)<< 0) | - ((GetSignal(PIN_DT5) ? 0x01: 0x00)<< 5) | - ((GetSignal(PIN_DT6) ? 0x01: 0x00)<< 6) | - ((GetSignal(PIN_DT7) ? 0x01: 0x00)<< 7); + // LOGDEBUG("0:%02X 1:%02X 2:%02X 3:%02X 4:%02X 5:%02X 6:%02X 7:%02X P:%02X", GetSignal(PIN_DT0), GetSignal(PIN_DT1),GetSignal(PIN_DT2),GetSignal(PIN_DT3),GetSignal(PIN_DT4),GetSignal(PIN_DT5),GetSignal(PIN_DT6),GetSignal(PIN_DT7),GetSignal(PIN_DP)); + // // TODO: This is crazy inefficient... + // DWORD data = + // ((GetSignal(PIN_DT0) ? 0x01: 0x00)<< 0) | + // ((GetSignal(PIN_DT1) ? 0x01: 0x00)<< 1) | + // ((GetSignal(PIN_DT2) ? 0x01: 0x00)<< 2) | + // ((GetSignal(PIN_DT3) ? 0x01: 0x00)<< 3) | + // ((GetSignal(PIN_DT4) ? 0x01: 0x00)<< 0) | + // ((GetSignal(PIN_DT5) ? 0x01: 0x00)<< 5) | + // ((GetSignal(PIN_DT6) ? 0x01: 0x00)<< 6) | + // ((GetSignal(PIN_DT7) ? 0x01: 0x00)<< 7); - return (BYTE)data; + // return (BYTE)data; + return 0; } void GPIOBUS_Allwinner::SetDAT(BYTE dat) { // TODO: This is crazy inefficient... - SetSignal(PIN_DT0, dat & (1 << 0)); - SetSignal(PIN_DT1, dat & (1 << 1)); - SetSignal(PIN_DT2, dat & (1 << 2)); - SetSignal(PIN_DT3, dat & (1 << 3)); - SetSignal(PIN_DT4, dat & (1 << 4)); - SetSignal(PIN_DT5, dat & (1 << 5)); - SetSignal(PIN_DT6, dat & (1 << 6)); - SetSignal(PIN_DT7, dat & (1 << 7)); + // SetSignal(PIN_DT0, dat & (1 << 0)); + // SetSignal(PIN_DT1, dat & (1 << 1)); + // SetSignal(PIN_DT2, dat & (1 << 2)); + // SetSignal(PIN_DT3, dat & (1 << 3)); + // SetSignal(PIN_DT4, dat & (1 << 4)); + // SetSignal(PIN_DT5, dat & (1 << 5)); + // SetSignal(PIN_DT6, dat & (1 << 6)); + // SetSignal(PIN_DT7, dat & (1 << 7)); + LOGWARN("%s NOT IMPLEMENTED", __PRETTY_FUNCTION__) + } void GPIOBUS_Allwinner::MakeTable(void) @@ -289,31 +292,34 @@ void GPIOBUS_Allwinner::MakeTable(void) void GPIOBUS_Allwinner::SetControl(int pin, bool ast) { - GPIOBUS_Allwinner::SetSignal(pin, ast); + // GPIOBUS_Allwinner::SetSignal(pin, ast); + LOGWARN("%s NOT IMPLEMENTED", __PRETTY_FUNCTION__) + } void GPIOBUS_Allwinner::SetMode(int pin, int mode) { - LOGWARN("%s NOT IMPLEMENTED", __PRETTY_FUNCTION__) - if(mode == GPIO_INPUT){ - pinMode(pin, INPUT); + // LOGWARN("%s NOT IMPLEMENTED", __PRETTY_FUNCTION__) + // if(mode == GPIO_INPUT){ + // pinMode(pin, INPUT); - }else{ - pinMode(pin, OUTPUT); - } + // }else{ + // pinMode(pin, OUTPUT); + // } + LOGWARN("%s NOT IMPLEMENTED", __PRETTY_FUNCTION__) } bool GPIOBUS_Allwinner::GetSignal(int pin) const { - //LOGWARN("%s NOT IMPLEMENTED", __PRETTY_FUNCTION__) - //return false; - return (digitalRead(pin) != 0); + LOGWARN("%s NOT IMPLEMENTED", __PRETTY_FUNCTION__) + return false; + // return (digitalRead(pin) != 0); } void GPIOBUS_Allwinner::SetSignal(int pin, bool ast) { - //LOGWARN("%s NOT IMPLEMENTED", __PRETTY_FUNCTION__) - digitalWrite(pin, ast); + LOGWARN("%s NOT IMPLEMENTED", __PRETTY_FUNCTION__) + // digitalWrite(pin, ast); } @@ -325,26 +331,29 @@ void GPIOBUS_Allwinner::SetSignal(int pin, bool ast) //--------------------------------------------------------------------------- bool GPIOBUS_Allwinner::WaitSignal(int pin, int ast) { - // Get current time - uint32_t now = SysTimer::instance().GetTimerLow(); + LOGERROR("%s not implemented!!", __PRETTY_FUNCTION__) - // Calculate timeout (3000ms) - uint32_t timeout = 3000 * 1000; +// { +// // Get current time +// uint32_t now = SysTimer::instance().GetTimerLow(); + +// // Calculate timeout (3000ms) +// uint32_t timeout = 3000 * 1000; - // end immediately if the signal has changed - do { - // Immediately upon receiving a reset - Acquire(); - if (GetRST()) { - return false; - } +// // end immediately if the signal has changed +// do { +// // Immediately upon receiving a reset +// Acquire(); +// if (GetRST()) { +// return false; +// } - // Check for the signal edge - if (((signals >> pin) ^ ~ast) & 1) { - return true; - } - } while ((SysTimer::instance().GetTimerLow() - now) < timeout); +// // Check for the signal edge +// if (((signals >> pin) ^ ~ast) & 1) { +// return true; +// } +// } while ((SysTimer::instance().GetTimerLow() - now) < timeout); // We timed out waiting for the signal return false; @@ -363,39 +372,43 @@ void GPIOBUS_Allwinner::EnableIRQ() void GPIOBUS_Allwinner::PinConfig(int pin, int mode) { - if(mode == GPIO_INPUT){ - pinMode(pin, INPUT); + LOGERROR("%s not implemented!!", __PRETTY_FUNCTION__) - }else{ - pinMode(pin, OUTPUT); - } + // if(mode == GPIO_INPUT){ + // pinMode(pin, INPUT); + + // }else{ + // pinMode(pin, OUTPUT); + // } } void GPIOBUS_Allwinner::PullConfig(int pin, int mode) { - switch (mode) - { - case GPIO_PULLNONE: - pullUpDnControl(pin,PUD_OFF); - break; - case GPIO_PULLUP: - pullUpDnControl(pin,PUD_UP); - break; - case GPIO_PULLDOWN: - pullUpDnControl(pin,PUD_DOWN); - break; - default: - LOGERROR("%s INVALID PIN MODE", __PRETTY_FUNCTION__); - return; - } + // switch (mode) + // { + // case GPIO_PULLNONE: + // pullUpDnControl(pin,PUD_OFF); + // break; + // case GPIO_PULLUP: + // pullUpDnControl(pin,PUD_UP); + // break; + // case GPIO_PULLDOWN: + // pullUpDnControl(pin,PUD_DOWN); + // break; + // default: + // LOGERROR("%s INVALID PIN MODE", __PRETTY_FUNCTION__); + // return; + // } + LOGERROR("%s not implemented!!", __PRETTY_FUNCTION__) } void GPIOBUS_Allwinner::PinSetSignal(int pin, bool ast) { - digitalWrite(pin, ast); + // digitalWrite(pin, ast); + LOGERROR("%s not implemented!!", __PRETTY_FUNCTION__) } void GPIOBUS_Allwinner::DrvConfig(DWORD drive) diff --git a/src/raspberrypi/hal/gpiobus_allwinner.h b/src/raspberrypi/hal/gpiobus_allwinner.h index d02ae866..b32ffe6f 100644 --- a/src/raspberrypi/hal/gpiobus_allwinner.h +++ b/src/raspberrypi/hal/gpiobus_allwinner.h @@ -11,8 +11,10 @@ #pragma once +#include #include "config.h" #include "hal/gpiobus.h" +#include "hal/board_type.h" #include "log.h" #include "scsi.h" @@ -76,6 +78,9 @@ class GPIOBUS_Allwinner : public GPIOBUS void DrvConfig(DWORD drive) override; // Set GPIO drive strength + // Map the physical pin number to the logical GPIO number + const static std::map phys_to_gpio_map; + #if !defined(__x86_64__) && !defined(__X86__) uint32_t baseaddr = 0; // Base address #endif diff --git a/src/raspberrypi/hal/gpiobus_fullspec.h b/src/raspberrypi/hal/gpiobus_fullspec.h index 9f47eb07..0fa601e8 100644 --- a/src/raspberrypi/hal/gpiobus_fullspec.h +++ b/src/raspberrypi/hal/gpiobus_fullspec.h @@ -29,11 +29,11 @@ const static int PIN_TAD = 7; // TARGET CTRL DIRECTION const static int PIN_DTD = 8; // DATA DIRECTION // Control signal output logic -#define ACT_ON ON // ACTIVE SIGNAL ON -#define ENB_ON ON // ENABLE SIGNAL ON -#define IND_IN OFF // INITIATOR SIGNAL INPUT -#define TAD_IN OFF // TARGET SIGNAL INPUT -#define DTD_IN ON // DATA SIGNAL INPUT +#define ACT_ON RASCSI_PIN_ON // ACTIVE SIGNAL ON +#define ENB_ON RASCSI_PIN_ON // ENABLE SIGNAL ON +#define IND_IN RASCSI_PIN_OFF // INITIATOR SIGNAL INPUT +#define TAD_IN RASCSI_PIN_OFF // TARGET SIGNAL INPUT +#define DTD_IN RASCSI_PIN_ON // DATA SIGNAL INPUT // SCSI signal pin assignment const static int PIN_DT0 = 10; // Data 0 diff --git a/src/raspberrypi/hal/gpiobus_gamernium.h b/src/raspberrypi/hal/gpiobus_gamernium.h index ca4e0d76..17f3c5dc 100644 --- a/src/raspberrypi/hal/gpiobus_gamernium.h +++ b/src/raspberrypi/hal/gpiobus_gamernium.h @@ -22,11 +22,11 @@ const std::string CONNECT_DESC = "GAMERnium.com version"; // Startup message const static int SIGNAL_CONTROL_MODE = 0; // SCSI logical specification // Control signal output logic -#define ACT_ON ON // ACTIVE SIGNAL ON -#define ENB_ON ON // ENABLE SIGNAL ON -#define IND_IN OFF // INITIATOR SIGNAL INPUT -#define TAD_IN OFF // TARGET SIGNAL INPUT -#define DTD_IN ON // DATA SIGNAL INPUT +#define ACT_ON RASCSI_PIN_ON // ACTIVE SIGNAL ON +#define ENB_ON RASCSI_PIN_ON // ENABLE SIGNAL ON +#define IND_IN RASCSI_PIN_OFF // INITIATOR SIGNAL INPUT +#define TAD_IN RASCSI_PIN_OFF // TARGET SIGNAL INPUT +#define DTD_IN RASCSI_PIN_ON // DATA SIGNAL INPUT // Control signal pin assignment (-1 means no control) const static int PIN_ACT = 14; // ACTIVE diff --git a/src/raspberrypi/hal/gpiobus_raspberry.cpp b/src/raspberrypi/hal/gpiobus_raspberry.cpp index d0d324eb..1b789647 100644 --- a/src/raspberrypi/hal/gpiobus_raspberry.cpp +++ b/src/raspberrypi/hal/gpiobus_raspberry.cpp @@ -11,7 +11,8 @@ //--------------------------------------------------------------------------- #include - +#include +#include "hal/board_type.h" #include "config.h" #include "hal/gpiobus.h" #include "hal/gpiobus_raspberry.h" @@ -24,6 +25,39 @@ #include #include + +const std::map GPIOBUS_Raspberry::phys_to_gpio_map = +{ + {board_type::pi_physical_pin_e::PI_PHYS_PIN_03, 2}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_05, 3}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_07, 4}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_08, 14}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_10, 15}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_11, 17}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_12, 18}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_13, 27}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_15, 22}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_16, 23}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_18, 24}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_19, 10}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_21, 9}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_22, 25}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_23, 11}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_24, 8}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_26, 7}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_27, 0}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_28, 1}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_29, 5}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_31, 6}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_32, 12}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_33, 13}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_35, 19}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_36, 16}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_37, 26}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_38, 20}, + {board_type::pi_physical_pin_e::PI_PHYS_PIN_40, 21}, +}; + #ifdef __linux__ //--------------------------------------------------------------------------- // @@ -614,7 +648,7 @@ void GPIOBUS_Raspberry::SetControl(int pin, bool ast) void GPIOBUS_Raspberry::SetMode(int pin, int mode) { #if SIGNAL_CONTROL_MODE == 0 - if (mode == OUT) { + if (mode == RASCSI_PIN_OUT) { return; } #endif // SIGNAL_CONTROL_MODE @@ -623,7 +657,7 @@ void GPIOBUS_Raspberry::SetMode(int pin, int mode) int shift = (pin % 10) * 3; uint32_t data = gpfsel[index]; data &= ~(0x7 << shift); - if (mode == OUT) { + if (mode == RASCSI_PIN_OUT) { data |= (1 << shift); } gpio[index] = data; diff --git a/src/raspberrypi/hal/gpiobus_raspberry.h b/src/raspberrypi/hal/gpiobus_raspberry.h index eb939f35..7622e231 100644 --- a/src/raspberrypi/hal/gpiobus_raspberry.h +++ b/src/raspberrypi/hal/gpiobus_raspberry.h @@ -11,8 +11,10 @@ #pragma once +#include #include "config.h" #include "hal/gpiobus.h" +#include "hal/board_type.h" #include "log.h" #include "scsi.h" @@ -76,6 +78,9 @@ class GPIOBUS_Raspberry final : public GPIOBUS void DrvConfig(uint32_t drive) override; // Set GPIO drive strength + // Map the physical pin number to the logical GPIO number + const static std::map phys_to_gpio_map; + #if !defined(__x86_64__) && !defined(__X86__) uint32_t baseaddr = 0; // Base address #endif diff --git a/src/raspberrypi/hal/gpiobus_standard.h b/src/raspberrypi/hal/gpiobus_standard.h index f6b3cacd..da9b3867 100644 --- a/src/raspberrypi/hal/gpiobus_standard.h +++ b/src/raspberrypi/hal/gpiobus_standard.h @@ -29,11 +29,11 @@ const static int PIN_TAD = -1; // TARGET CTRL DIRECTION const static int PIN_DTD = -1; // DATA DIRECTION // Control signal output logic -#define ACT_ON ON // ACTIVE SIGNAL ON -#define ENB_ON ON // ENABLE SIGNAL ON -#define IND_IN OFF // INITIATOR SIGNAL INPUT -#define TAD_IN OFF // TARGET SIGNAL INPUT -#define DTD_IN ON // DATA SIGNAL INPUT +#define ACT_ON RASCSI_PIN_ON // ACTIVE SIGNAL ON +#define ENB_ON RASCSI_PIN_ON // ENABLE SIGNAL ON +#define IND_IN RASCSI_PIN_OFF // INITIATOR SIGNAL INPUT +#define TAD_IN RASCSI_PIN_OFF // TARGET SIGNAL INPUT +#define DTD_IN RASCSI_PIN_ON // DATA SIGNAL INPUT // SCSI signal pin assignment const static int PIN_DT0 = 10; // Data 0