mirror of https://github.com/akuker/RASCSI.git
Added board type tables with physical pin numbers
This commit is contained in:
parent
9b87e46d8c
commit
859fa2e217
|
@ -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)
|
||||
|
||||
|
|
|
@ -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 <string>
|
||||
|
||||
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
|
|
@ -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
|
||||
};
|
||||
|
||||
}
|
|
@ -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
|
||||
};
|
||||
}
|
|
@ -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
|
|
@ -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
|
|
@ -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) {
|
||||
|
|
|
@ -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;
|
||||
|
||||
//---------------------------------------------------------------------------
|
||||
//
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -11,8 +11,10 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
#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<board_type::pi_physical_pin_e, int> phys_to_gpio_map;
|
||||
|
||||
#if !defined(__x86_64__) && !defined(__X86__)
|
||||
uint32_t baseaddr = 0; // Base address
|
||||
#endif
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -11,7 +11,8 @@
|
|||
//---------------------------------------------------------------------------
|
||||
|
||||
#include <sys/mman.h>
|
||||
|
||||
#include <map>
|
||||
#include "hal/board_type.h"
|
||||
#include "config.h"
|
||||
#include "hal/gpiobus.h"
|
||||
#include "hal/gpiobus_raspberry.h"
|
||||
|
@ -24,6 +25,39 @@
|
|||
#include <sys/mman.h>
|
||||
#include <sys/time.h>
|
||||
|
||||
|
||||
const std::map<board_type::pi_physical_pin_e, int> 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;
|
||||
|
|
|
@ -11,8 +11,10 @@
|
|||
|
||||
#pragma once
|
||||
|
||||
#include <map>
|
||||
#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<board_type::pi_physical_pin_e, int> phys_to_gpio_map;
|
||||
|
||||
#if !defined(__x86_64__) && !defined(__X86__)
|
||||
uint32_t baseaddr = 0; // Base address
|
||||
#endif
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in New Issue