kopia lustrzana https://github.com/hoglet67/RGBtoHDMI
Add new input coupling option with AC/DC 75R & high impedance combinations. Also support issue 2 & 3 analog board
rodzic
56c229196d
commit
aa006058ec
|
@ -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(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) {
|
||||
|
|
|
@ -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);
|
||||
|
||||
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) {
|
||||
|
|
10
src/osd.c
10
src/osd.c
|
@ -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[] = {
|
||||
|
|
10
src/osd.h
10
src/osd.h
|
@ -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
|
||||
};
|
||||
|
||||
|
|
Ładowanie…
Reference in New Issue