2022-12-03 04:20:27 +00:00
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
//
|
2022-12-05 17:58:23 +00:00
|
|
|
// SCSI Target Emulator PiSCSI for Raspberry Pi
|
2022-12-03 04:20:27 +00:00
|
|
|
// Loopback tester utility
|
|
|
|
//
|
|
|
|
// Copyright (C) 2022 akuker
|
|
|
|
//
|
|
|
|
//---------------------------------------------------------------------------
|
|
|
|
|
|
|
|
#include <map>
|
|
|
|
#include <string>
|
|
|
|
#include <vector>
|
|
|
|
|
|
|
|
#include "hal/gpiobus.h"
|
|
|
|
|
|
|
|
using namespace std;
|
|
|
|
|
|
|
|
class ScsiLoop_GPIO
|
|
|
|
{
|
|
|
|
public:
|
|
|
|
ScsiLoop_GPIO();
|
|
|
|
~ScsiLoop_GPIO() = default;
|
|
|
|
int RunLoopbackTest(vector<string> &error_list);
|
|
|
|
int RunDataInputTest(vector<string> &error_list);
|
|
|
|
int RunDataOutputTest(vector<string> &error_list);
|
|
|
|
void Cleanup();
|
|
|
|
|
|
|
|
private:
|
|
|
|
struct loopback_connections_struct {
|
|
|
|
int this_pin;
|
|
|
|
int connected_pin;
|
|
|
|
int dir_ctrl_pin;
|
|
|
|
};
|
|
|
|
typedef loopback_connections_struct loopback_connection;
|
|
|
|
|
|
|
|
std::map<int, string> pin_name_lookup;
|
|
|
|
std::vector<loopback_connection> loopback_conn_table;
|
|
|
|
|
|
|
|
void set_dtd_out();
|
|
|
|
void set_dtd_in();
|
|
|
|
void set_ind_out();
|
|
|
|
void set_ind_in();
|
|
|
|
void set_tad_out();
|
|
|
|
void set_tad_in();
|
|
|
|
void set_output_channel(int out_gpio);
|
|
|
|
void loopback_setup();
|
|
|
|
|
|
|
|
int test_gpio_pin(loopback_connection &gpio_rec, vector<string> &error_list, bool &loopback_adapter_missing);
|
|
|
|
|
|
|
|
void set_dat_inputs_loop(uint8_t value);
|
|
|
|
|
|
|
|
void dat_input_test_setup();
|
|
|
|
void dat_output_test_setup();
|
|
|
|
|
|
|
|
uint8_t get_dat_outputs_loop();
|
|
|
|
|
|
|
|
int local_pin_dtd = -1;
|
|
|
|
int local_pin_tad = -1;
|
|
|
|
int local_pin_ind = -1;
|
|
|
|
int local_pin_ack = -1;
|
|
|
|
int local_pin_sel = -1;
|
|
|
|
int local_pin_atn = -1;
|
|
|
|
int local_pin_rst = -1;
|
|
|
|
int local_pin_cd = -1;
|
|
|
|
int local_pin_io = -1;
|
|
|
|
int local_pin_msg = -1;
|
|
|
|
int local_pin_req = -1;
|
|
|
|
int local_pin_bsy = -1;
|
|
|
|
|
|
|
|
int local_pin_dt0 = -1;
|
|
|
|
int local_pin_dt1 = -1;
|
|
|
|
int local_pin_dt2 = -1;
|
|
|
|
int local_pin_dt3 = -1;
|
|
|
|
int local_pin_dt4 = -1;
|
|
|
|
int local_pin_dt5 = -1;
|
|
|
|
int local_pin_dt6 = -1;
|
|
|
|
int local_pin_dt7 = -1;
|
|
|
|
int local_pin_dp = -1;
|
|
|
|
|
|
|
|
shared_ptr<BUS> bus;
|
|
|
|
};
|