Added board type tables with physical pin numbers

This commit is contained in:
Tony Kuker 2022-10-24 22:21:57 -05:00
parent 9b87e46d8c
commit 859fa2e217
16 changed files with 630 additions and 220 deletions

View File

@ -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)

View File

@ -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

View File

@ -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
};
}

View File

@ -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
};
}

View File

@ -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

View File

@ -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

View File

@ -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) {

View File

@ -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;
//---------------------------------------------------------------------------
//

View File

@ -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

View File

@ -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)

View File

@ -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

View File

@ -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

View File

@ -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

View File

@ -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;

View File

@ -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

View File

@ -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