Add new input coupling option with AC/DC 75R & high impedance combinations. Also support issue 2 & 3 analog board

pull/144/head
IanSB 2020-02-22 05:34:51 +00:00
rodzic 56c229196d
commit aa006058ec
4 zmienionych plików z 161 dodań i 34 usunięć

Wyświetl plik

@ -34,12 +34,7 @@ typedef struct {
int dac_h;
} config_t;
static const char *rate_names[] = {
"3 Bits Per Pixel",
"6 Bits Per Pixel",
"Half-Odd (3BPP)",
"Half-Even (3BPP)"
};
// Current calibration state for mode 0..6
static config_t default_config;
@ -126,12 +121,33 @@ enum {
DAC_H
};
static const char *rate_names[] = {
"3 Bits Per Pixel",
"6 Bits Per Pixel",
"Half-Odd (3BPP)",
"Half-Even (3BPP)"
};
static const char *cpld_setup_names[] = {
"Normal",
"Set Delay"
};
static const char *termination_names[] = {
"DC/High Impedance",
"DC/75R Termination",
"AC/High Impedance",
"AC/75R Termination"
};
enum {
RGB_INPUT_DC_HI,
RGB_INPUT_DC_TERM,
RGB_INPUT_AC_HI,
RGB_INPUT_AC_TERM,
NUM_RGB_INPUT
};
enum {
CPLD_SETUP_NORMAL,
CPLD_SETUP_DELAY,
@ -152,15 +168,15 @@ static param_t params[] = {
{ DELAY, "Delay", "delay", 0, 15, 1 },
{ RATE, "Sample Mode", "sample_mode", 0, 3, 1 },
{ MUX, "Input Mux", "input_mux", 0, 1, 1 },
{ TERMINATE, "Terminate", "terminate", 0, 1, 1 },
{ TERMINATE, "Input Coupling", "coupling", 0, NUM_RGB_INPUT-1, 1 },
{ DAC_A, "DAC-A: G Hi", "dac_a", 0, 255, 1 },
{ DAC_B, "DAC-B: G Lo", "dac_b", 0, 255, 1 },
{ DAC_C, "DAC-C: RB Hi", "dac_c", 0, 255, 1 },
{ DAC_D, "DAC-D: RB Lo", "dac_d", 0, 255, 1 },
{ DAC_E, "DAC-E: G Mid/VS", "dac_f", 0, 255, 1 },
{ DAC_F, "DAC-F: Sync", "dac_g", 0, 255, 1 },
{ DAC_G, "DAC-G: Spare", "dac_g", 0, 255, 1 },
{ DAC_H, "DAC-H: G Clamp", "dac_h", 0, 255, 1 },
{ DAC_G, "DAC-G: G Clamp", "dac_g", 0, 255, 1 },
{ DAC_H, "DAC-H: Spare", "dac_h", 0, 255, 1 },
{ -1, NULL, NULL, 0, 0, 1 }
};
@ -182,16 +198,41 @@ static void sendDAC(int dac, int value)
if (value < 2) value = 2; // prevent sync being just high frequency noise when no sync input
old_dac = 2;
break;
case 6:
case 7:
old_dac = 3;
value = (config->terminate == 0) ? 0 : 255; //substitute termination state for value of DAC-G
break;
default:
break;
}
if (frontend == FRONTEND_ANALOG_ISSUE2_5259) {
switch (dac) {
case 6:
dac = 7;
break;
case 7:
{
dac = 6;
switch (config->terminate) {
default:
case RGB_INPUT_DC_HI:
case RGB_INPUT_AC_HI:
value = 0; //high impedance
break;
case RGB_INPUT_DC_TERM:
case RGB_INPUT_AC_TERM:
value = 255; //termination
break;
}
}
break;
default:
break;
}
}
switch (frontend) {
case FRONTEND_ANALOG_5259: // max5259
case FRONTEND_ANALOG_ISSUE3_5259: // max5259
case FRONTEND_ANALOG_ISSUE2_5259:
{
int packet = (dac << 11) | 0x600 | value;
RPI_SetGpioValue(STROBE_PIN, 0);
@ -208,7 +249,7 @@ static void sendDAC(int dac, int value)
}
break;
case FRONTEND_ANALOG_UA1: // tlc5260 or tlv5260
case FRONTEND_ANALOG_ISSUE1_UA1: // tlc5260 or tlv5260
{
if (old_dac >= 0) {
int packet = old_dac << 9 | value;
@ -230,7 +271,7 @@ static void sendDAC(int dac, int value)
}
break;
case FRONTEND_ANALOG_UB1: // dac084s085
case FRONTEND_ANALOG_ISSUE1_UB1: // dac084s085
{
if (old_dac >= 0) {
int packet = (old_dac << 14) | 0x1000 | (value << 4);
@ -309,10 +350,31 @@ static void write_config(config_t *config) {
sendDAC(6, config->dac_g);
sendDAC(7, config->dac_h);
RPI_SetGpioValue(SP_CLKEN_PIN, config->terminate > 0 ? 1 : 0);
switch (config->terminate) {
default:
case RGB_INPUT_DC_HI:
RPI_SetGpioValue(SP_DATA_PIN, 0); //ac-dc
RPI_SetGpioValue(SP_CLKEN_PIN, 0); //termination
break;
case RGB_INPUT_DC_TERM:
RPI_SetGpioValue(SP_DATA_PIN, 0);
RPI_SetGpioValue(SP_CLKEN_PIN, 1);
break;
case RGB_INPUT_AC_HI:
RPI_SetGpioValue(SP_DATA_PIN, 1);
RPI_SetGpioValue(SP_CLKEN_PIN, 0);
break;
case RGB_INPUT_AC_TERM:
RPI_SetGpioValue(SP_DATA_PIN, 1);
RPI_SetGpioValue(SP_CLKEN_PIN, 1);
break;
}
} else {
RPI_SetGpioValue(SP_DATA_PIN, 0);
RPI_SetGpioValue(SP_CLKEN_PIN, 0);
}
RPI_SetGpioValue(SP_DATA_PIN, 0);
RPI_SetGpioValue(MUX_PIN, config->mux);
}
@ -825,6 +887,9 @@ static const char *cpld_get_value_string(int num) {
if (num == CPLD_SETUP_MODE) {
return cpld_setup_names[config->cpld_setup_mode];
}
if (num == TERMINATE) {
return termination_names[config->terminate];
}
return NULL;
}
@ -1147,7 +1212,7 @@ static void cpld_init_rgb_analog(int version) {
}
static int cpld_frontend_info_rgb_analog() {
return FRONTEND_ANALOG_5259 | FRONTEND_ANALOG_UB1 << 16;
return FRONTEND_ANALOG_ISSUE3_5259 | FRONTEND_ANALOG_ISSUE1_UB1 << 16;
}
static void cpld_set_frontend_rgb_analog(int value) {

Wyświetl plik

@ -121,6 +121,21 @@ static const char *clamptype_names[] = {
"Back Porch Auto"
};
static const char *termination_names[] = {
"DC/High Impedance",
"DC/75R Termination",
"AC/High Impedance",
"AC/75R Termination"
};
enum {
YUV_INPUT_DC_HI,
YUV_INPUT_DC_TERM,
YUV_INPUT_AC_HI,
YUV_INPUT_AC_TERM,
NUM_YUV_INPUT
};
enum {
CPLD_SETUP_NORMAL,
CPLD_SETUP_DELAY,
@ -147,15 +162,15 @@ static param_t params[] = {
{ CLAMPTYPE, "Clamp Type", "clamptype", 0, NUM_CLAMPTYPE-1, 1 },
{ DELAY, "Delay", "delay", 0, 15, 1 },
{ MUX, "Input Mux", "input_mux", 0, 1, 1 },
{ TERMINATE, "Terminate", "terminate", 0, 1, 1 },
{ TERMINATE, "Input Coupling", "coupling", 0, NUM_YUV_INPUT-1, 1 },
{ DAC_A, "DAC-A: Y Hi", "dac_a", 0, 255, 1 },
{ DAC_B, "DAC-B: Y Lo", "dac_b", 0, 255, 1 },
{ DAC_C, "DAC-C: UV Hi", "dac_c", 0, 255, 1 },
{ DAC_D, "DAC-D: UV Lo", "dac_d", 0, 255, 1 },
{ DAC_E, "DAC-E: Y Mid/VS", "dac_f", 0, 255, 1 },
{ DAC_F, "DAC-F: Sync", "dac_g", 0, 255, 1 },
{ DAC_G, "DAC-G: Spare", "dac_g", 0, 255, 1 },
{ DAC_H, "DAC-H: Y Clamp", "dac_h", 0, 255, 1 },
{ DAC_G, "DAC-G: Y Clamp", "dac_g", 0, 255, 1 },
{ DAC_H, "DAC-H: Spare", "dac_h", 0, 255, 1 },
{ -1, NULL, NULL, 0, 0, 0 }
};
@ -176,9 +191,33 @@ static void sendDAC(int dac, int value)
if (dac == 5) {
if (value < 2) value = 2; // prevent sync being just high frequency noise when no sync input
}
if (dac == 6) {
value = (config->terminate == 0) ? 0 : 255; //substitute termination state for value of DAC-G
if (frontend == FRONTEND_YUV_ISSUE2_5259) {
switch (dac) {
case 6:
dac = 7;
break;
case 7:
{
dac = 6;
switch (config->terminate) {
default:
case YUV_INPUT_DC_HI:
case YUV_INPUT_AC_HI:
value = 0; //high impedance
break;
case YUV_INPUT_DC_TERM:
case YUV_INPUT_AC_TERM:
value = 255; //termination
break;
}
}
break;
default:
break;
}
}
int packet = (dac << 11) | 0x600 | value;
RPI_SetGpioValue(STROBE_PIN, 0);
@ -283,9 +322,25 @@ static void write_config(config_t *config) {
sendDAC(6, config->dac_g);
sendDAC(7, config->dac_h);
RPI_SetGpioValue(SP_CLKEN_PIN, config->terminate > 0 ? 1 : 0);
RPI_SetGpioValue(SP_DATA_PIN, 0);
switch (config->terminate) {
default:
case YUV_INPUT_DC_HI:
RPI_SetGpioValue(SP_DATA_PIN, 0); //ac-dc
RPI_SetGpioValue(SP_CLKEN_PIN, 0); //termination
break;
case YUV_INPUT_DC_TERM:
RPI_SetGpioValue(SP_DATA_PIN, 0);
RPI_SetGpioValue(SP_CLKEN_PIN, 1);
break;
case YUV_INPUT_AC_HI:
RPI_SetGpioValue(SP_DATA_PIN, 1);
RPI_SetGpioValue(SP_CLKEN_PIN, 0);
break;
case YUV_INPUT_AC_TERM:
RPI_SetGpioValue(SP_DATA_PIN, 1);
RPI_SetGpioValue(SP_CLKEN_PIN, 1);
break;
}
RPI_SetGpioValue(MUX_PIN, config->mux);
}
@ -531,6 +586,9 @@ static const char *cpld_get_value_string(int num) {
if (num == CPLD_SETUP_MODE) {
return cpld_setup_names[config->cpld_setup_mode];
}
if (num == TERMINATE) {
return termination_names[config->terminate];
}
return NULL;
}
@ -660,7 +718,7 @@ static int cpld_get_delay() {
}
static int cpld_frontend_info() {
return FRONTEND_YUV_5259 | FRONTEND_YUV_5259 << 16;
return FRONTEND_YUV_ISSUE3_5259 | FRONTEND_YUV_ISSUE2_5259 << 16;
}
static void cpld_set_frontend(int value) {

Wyświetl plik

@ -181,10 +181,12 @@ static const char *frontend_names[] = {
"3 BIT RGB",
"Atom",
"6 BIT RGB",
"6 BIT RGB Analog",
"6 BIT RGB Analog ALT:UA1",
"6 BIT RGB Analog ALT:UB1",
"6 BIT YUV Analog"
"6 BIT RGB Analog Issue 3",
"6 BIT RGB Analog Issue 2",
"6 BIT RGB Analog Issue 1A",
"6 BIT RGB Analog Issue 1B",
"6 BIT YUV Analog Issue 3",
"6 BIT YUV Analog Issue 2"
};
static const char *vlockspeed_names[] = {

Wyświetl plik

@ -114,10 +114,12 @@ enum {
FRONTEND_TTL_3BIT,
FRONTEND_ATOM,
FRONTEND_TTL_6BIT,
FRONTEND_ANALOG_5259,
FRONTEND_ANALOG_UA1,
FRONTEND_ANALOG_UB1,
FRONTEND_YUV_5259,
FRONTEND_ANALOG_ISSUE3_5259,
FRONTEND_ANALOG_ISSUE2_5259,
FRONTEND_ANALOG_ISSUE1_UA1,
FRONTEND_ANALOG_ISSUE1_UB1,
FRONTEND_YUV_ISSUE3_5259,
FRONTEND_YUV_ISSUE2_5259,
NUM_FRONTENDS
};