var pinoutView = "null";

var signal_description = { 
	"5V":"5 volt power line", 
	"3.3V":"3.3 volt power line", 
	"GND":"Signal ground", 
	"BATT":"RTC Battery input, Use this terminal to wire an external 3.3 volt RTC backup battery", 
	"PGD":"Wired to power good line on Netus PS1", 
	"POK":"Wired to power ok line on Netus PS1", 
	"SHDNPS#":"PS1 shutdown. Active low", 
	"NRST":"Active low CPU reset input line", 
	"SHDN#":"Wired to the SHDN Netus G20 line", 
	"WAKEUP":"Wired to the WAKEUP Netus G20 line", 
	
	"CTS3":"Clear to send ttyS4 1.8V", 
	"RTS3":"Request to send ttyS4 1.8V", 

	"RXD2":"Receive data ttyS3", 
	"TXD2":"Transmit data ttyS3", 

	"DCD0":"Data carrier detect ttyS1", 
	"DSR0":"Data set ready ttyS1", 
	"RI0":"Ring indicator ttyS1", 
	"DTR0":"Data terminal ready ttyS1", 

	"RTS1":"Request to send ttyS2", 
	"RXD1":"Receive data ttyS2", 
	"TXD1":"Transmit line ttyS2", 
	"CTS1":"Clear to send ttyS2", 
	"RTS0":"Request to send ttyS1", 
	"RXD0":"Receive data ttyS1", 
	"TXD0":"Transmit data ttyS1", 
	"CTS0":"Clear to send ttyS1", 
	"RXD3":"Receive data ttyS4", 
	"TXD3":"Transmit data ttyS4", 
	"RXD5":"Receive data ttyS6", 
	"TXD5":"Transmit data ttyS6", 
	"TXD4":"Transmit data ttyS5", 
	"RXD4":"Receive data ttyS5", 
	"name":"description", 
	
	"N.C.":"Not connected", 

	"AVDD":"Clean 3.3V out for A/D circuitry", 
	"VREF":"A/D voltage reference input", 
	"AGND":"Analog ground", 
	"AD0":"Analog input 0", 
	"AD1":"Analog input 1", 
	"AD2":"Analog input 2", 
	"AD3":"Analog input 3", 

	"SCL":"I2C Clock", 
	"SCD":"I2C Data", 

	"PA0":"General purpose I/O",
	"PA1":"General purpose I/O",
	"PA2":"General purpose I/O",
	"PA3":"General purpose I/O",
	"PA4":"General purpose I/O",
	"PA5":"General purpose I/O",
	"PA6":"General purpose I/O",
	"PA7":"General purpose I/O",
	"PA8":"General purpose I/O",
	"PA9":"General purpose I/O",
	"PA10":"General purpose I/O",
	"PA11":"General purpose I/O",
	"PA12":"General purpose I/O",
	"PA13":"General purpose I/O",
	"PA14":"General purpose I/O",
	"PA15":"General purpose I/O",
	"PA16":"General purpose I/O",
	"PA17":"General purpose I/O",
	"PA18":"General purpose I/O",
	"PA19":"General purpose I/O",
	"PA20":"General purpose I/O",
	"PA21":"General purpose I/O",
	"PA22":"General purpose I/O",
	"PA23":"General purpose I/O",
	"PA24":"General purpose I/O",
	"PA25":"General purpose I/O",
	"PA26":"General purpose I/O",
	"PA27":"General purpose I/O",
	"PA28":"General purpose I/O",
	"PA29":"General purpose I/O",
	"PA30":"General purpose I/O",
	"PA31":"General purpose I/O",

	"PB0":"General purpose I/O",
	"PB1":"General purpose I/O",
	"PB2":"General purpose I/O",
	"PB3":"General purpose I/O",
	"PB4":"General purpose I/O",
	"PB5":"General purpose I/O",
	"PB6":"General purpose I/O",
	"PB7":"General purpose I/O",
	"PB8":"General purpose I/O",
	"PB9":"General purpose I/O",
	"PB10":"General purpose I/O",
	"PB11":"General purpose I/O",
	"PB12":"General purpose I/O",
	"PB13":"General purpose I/O",
	"PB14":"General purpose I/O",
	"PB15":"General purpose I/O",
	"PB16":"General purpose I/O",
	"PB17":"General purpose I/O",
	"PB18":"General purpose I/O",
	"PB19":"General purpose I/O",
	"PB20":"General purpose I/O",
	"PB21":"General purpose I/O",
	"PB22":"General purpose I/O",
	"PB23":"General purpose I/O",
	"PB24":"General purpose I/O",
	"PB25":"General purpose I/O",
	"PB26":"General purpose I/O",
	"PB27":"General purpose I/O",
	"PB28":"General purpose I/O",
	"PB29":"General purpose I/O",
	"PB30":"General purpose I/O",
	"PB31":"General purpose I/O",

	"PC0":"General purpose I/O",
	"PC1":"General purpose I/O",
	"PC2":"General purpose I/O",
	"PC3":"General purpose I/O",
	"PC4":"General purpose I/O at 1.8V",
	"PC5":"General purpose I/O at 1.8V",
	"PC6":"Reserved. Used to read if the client USB port is wired to a PC",
	"PC7":"General purpose I/O at 1.8V wired on PC7 red led",
	"PC8":"General purpose I/O at 1.8V",
	"PC9":"General purpose I/O at 1.8V",
	"PC10":"General purpose I/O at 1.8V",
	"PC11":"General purpose I/O at 1.8V",
	"PC12":"General purpose I/O at 1.8V",
	"PC13":"General purpose I/O at 1.8V",
	"PC14":"General purpose I/O at 1.8V",
	"PC15":"General purpose I/O at 1.8V",
	"PC16":"Reserved. Used for Netus memory",
	"PC17":"Reserved. Used for Netus memory",
	"PC18":"Reserved. Used for Netus memory",
	"PC19":"Reserved. Used for Netus memory",
	"PC20":"Reserved. Used for Netus memory",
	"PC21":"Reserved. Used for Netus memory",
	"PC22":"Reserved. Used for Netus memory",
	"PC23":"Reserved. Used for Netus memory",
	"PC24":"Reserved. Used for Netus memory",
	"PC25":"Reserved. Used for Netus memory",
	"PC26":"Reserved. Used for Netus memory",
	"PC27":"Reserved. Used for Netus memory",
	"PC28":"Reserved. Used for Netus memory",
	"PC29":"Reserved. Used for Netus memory",
	"PC30":"Reserved. Used for Netus memory",
	"PC31":"Reserved. Used for Netus memory",

	"MOSI":"SPI bus master output/slave input",
	"MISO":"SPI bus master input/slave output",
	"CK":"SPI bus clock",
	"NPCS0":"SPI bus chip select 0",
	"NPCS1":"SPI bus chip select 1",
	"NPCS2":"SPI bus chip select 2",
	"NPCS3":"SPI bus chip select 3",
	
}

var pinout_foxg20_j7 = { 
	1:"GND", 
	2:"GND", 
	3:"PB18",
	4:"PB19", 
	5:"PB16", 
	6:"PB17", 
	7:"PB2", 
	8:"PB3", 
	9:"PB0", 
	10:"PB1",
	11:"PC14",
	12:"PC15",
	13:"PC12",
	14:"PC13",
	15:"PC9",
	16:"PC10",
	17:"PC7",
	18:"PC8",
	19:"PC5",
	20:"PC6",
	21:"PB9",
	22:"PB8",
	23:"BATT",
	24:"PGD",
	25:"POK",
	26:"SHDNPS#",
	27:"NRST",
	28:"SHDN#",
	29:"5V",
	30:"WAKEUP",
	31:"PB23",
	32:"PB22",
	33:"PB25",
	34:"PB24",
	35:"PA28",
	36:"PA27",
	37:"PA26",
	38:"PA25",
	39:"3.3V",
	40:"3.3V",
};

var pinout_foxg20_j6 = { 
	1:"3.3V", 
	2:"3.3V", 
	3:"PB28",
	4:"PB7", 
	5:"PB6", 
	6:"PB29", 
	7:"PB26", 
	8:"PB5", 
	9:"PB4", 
	10:"PB27",
	11:"N.C.",
	12:"5V",
	13:"PB11",
	14:"PB10",
	15:"PB13",
	16:"PB12",
	17:"PB21",
	18:"PB20",
	19:"PB31",
	20:"PB30",
	21:"PA31",
	22:"PA30",
	23:"N.C.",
	24:"PA6",
	25:"PA7",
	26:"PA9",
	27:"PC3",
	28:"PC2",
	29:"PC1",
	30:"PC0",
	31:"PA24",
	32:"PA23",
	33:"AVDD",
	34:"VREF",
	35:"AGND",
	36:"PA10",
	37:"PA22",
	38:"PA11",
	39:"GND",
	40:"GND",
};

var pinout_D1 = { 
	1:"3.3V", 
	2:"PB6", 
	3:"PB7",
	4:"PB28", 
	5:"PB29", 
	6:"N.C.",
	7:"PA23",
	8:"PA24",
	9:"5V",
	10:"GND",
};	

var pinout_D2 = { 
	1:"3.3V", 
	2:"PA31", 
	3:"PA30",
	4:"PA29", 
	5:"PA28", 
	6:"PA27",
	7:"PA26",
	8:"PA25",
	9:"PB30",
	10:"GND",
};	

var pinout_D3 = { 
	1:"3.3V", 
	2:"PB4", 
	3:"PB5",
	4:"PB26", 
	5:"PB27", 
	6:"PB22",
	7:"PB24",
	8:"PB25",
	9:"PB23",
	10:"GND",
};	

var pinout_D4 = { 
	1:"3.3V", 
	2:"AVDD", 
	3:"VREF",
	4:"AGND", 
	5:"PC0", 
	6:"PC1",
	7:"PC2",
	8:"PC3",
	9:"5V",
	10:"GND",
};	

var pinout_D5 = { 
	1:"3.3V", 
	2:"PB12", 
	3:"PB13",
	4:"PB16", 
	5:"PB17", 
	6:"PB18",
	7:"PB19",
	8:"PB20",
	9:"PB21",
	10:"GND",
};	

var pinout_D6 = { 
	1:"3.3V", 
	2:"PB10", 
	3:"PB11",
	4:"PC8", 
	5:"PC10", 
	6:"PB31",
	7:"PA23",
	8:"PA24",
	9:"5V",
	10:"GND",
};	

var pinout_D7 = { 
	1:"3.3V", 
	2:"PB1", 
	3:"PB0",
	4:"PB2", 
	5:"PB3", 
	6:"PC5",
	7:"PC4",
	8:"PC3",
	9:"5V",
	10:"GND",
};	

var pinout_D8 = { 
	1:"3.3V", 
	2:"PB8", 
	3:"PB9",
	4:"N.C.", 
	5:"N.C.", 
	6:"N.C.",
	7:"PA23",
	8:"PA24",
	9:"5V",
	10:"GND",
};	

var fox_list = new Array(
	pinout_foxg20_j6,
	pinout_foxg20_j7
)

var daisy_list = new Array(
	pinout_D1,
	pinout_D2,
	pinout_D3,
	pinout_D4,
	pinout_D5,
	pinout_D6,
	pinout_D7,
	pinout_D8
)

// Lista completa dei connettori gestiti dall'applicazione

var connectors = new Array(
	pinout_foxg20_j6,
	pinout_foxg20_j7,
	pinout_D1,
	pinout_D2,
	pinout_D3,
	pinout_D4,
	pinout_D5,
	pinout_D6,
	pinout_D7,
	pinout_D8
)

function signalConfigurator(setup) {
	switch (setup) {

	case "enable_ttyS1":
		signalChange("PB4","TXD0");
		signalChange("PB5","RXD0");
		signalChange("PB26","RTS0");
		signalChange("PB27","CTS0");
		break;	
	case "disable_ttyS1":
		signalChange("TXD0","PB4" );
		signalChange("RXD0","PB5" );
		signalChange("RTS0","PB26");
		signalChange("CTS0","PB27");
		break;	

	case "enable_ttyS2":
		signalChange("PB6","TXD1");
		signalChange("PB7","RXD1");
		signalChange("PB28","RTS1");
		signalChange("PB29","CTS1");
		break;	
	case "disable_ttyS2":
		signalChange("TXD1","PB6" );
		signalChange("RXD1","PB7" );
		signalChange("RTS1","PB28");
		signalChange("CTS1","PB29");
		break;	

	case "enable_ttyS3":
		signalChange("PB8","TXD2");
		signalChange("PB9","RXD2");
		break;	
	case "disable_ttyS3":
		signalChange("TXD2","PB8");
		signalChange("RXD2","PB9");
		break;	

	case "enable_ttyS4":
		signalChange("PB10","TXD3");
		signalChange("PB11","RXD3");
		signalChange("PC8","RTS3");
		signalChange("PC10","CTS3");
		break;	
	case "disable_ttyS4":
		signalChange("TXD3","PB10" );
		signalChange("RXD3","PB11" );
		signalChange("RTS3","PC8");
		signalChange("CTS3","PC10");
		break;	

	case "enable_ttyS5":
		signalChange("PA31","TXD4");
		signalChange("PA30","RXD4");
		break;	
	case "disable_ttyS5":
		signalChange("TXD4","PA31");
		signalChange("RXD4","PA30");
		break;	

	case "enable_ttyS6":
		signalChange("PB12","TXD5");
		signalChange("PB13","RXD5");
		break;	
	case "disable_ttyS6":
		signalChange("TXD5","PB12");
		signalChange("RXD5","PB13");
		break;	

	case "enable_i2c":
		signalChange("PA23","SCD");
		signalChange("PA24","SCL");
		break;	
	case "disable_i2c":
		signalChange("SCD","PA23");
		signalChange("SCL","PA24");
		break;	

	case "enable_spi":
		signalChange("PB1","MOSI");
		signalChange("PB0","MISO");
		signalChange("PB2","CK");
		signalChange("PB3","NPCS0");
		signalChange("PC5","NPCS1");
		signalChange("PC4","NPCS2");
		signalChange("PC3","NPCS3");
		break;	
	case "disable_spi":
		signalChange("MOSI" ,"PB1");
		signalChange("MISO" ,"PB0");
		signalChange("CK"   ,"PB2");
		signalChange("NPCS0","PB3");
		signalChange("NPCS1","PC5");
		signalChange("NPCS2","PC4");
		signalChange("NPCS3","PC3");
		break;	

	case "enable_adc":
		signalChange("PC0","AD0");
		signalChange("PC1","AD1");
		signalChange("PC2","AD2");
		signalChange("PC3","AD3");
		break;	
	case "disable_adc":
		signalChange("AD0","PC0");
		signalChange("AD1","PC1");
		signalChange("AD2","PC2");
		signalChange("AD3","PC3");
		break;	
		}
}

function signalChange(from,to) { 
	for (connector in connectors) {
		for (pin in connectors[connector]) {
			if (connectors[connector][pin]==from) {
				connectors[connector][pin]=to;
			}	
		}	
	}
}

function getKernelID(signal) {
	switch (signal.substr(0,2)) {
	case 'PA':
		return parseInt(signal.substr(2,2))+32;
	case 'PB':
		return parseInt(signal.substr(2,2))+64;
	case 'PC':
		return parseInt(signal.substr(2,2))+96;
	default:
		return " ";
	}
	
} 

function showPinout() {
	$('.signals_checkbox').each( function(index) {
		if($(this).is(":checked")){  
			signalConfigurator('enable_' + $(this).val());
		} else {  
			signalConfigurator('disable_' + $(this).val());
		}  
	});
	
	if (pinoutView.search(/daisy_/i)!=-1) {
		$('input[name=signals_checkbox_daisy]').attr('checked',true);
		showPinoutDaisy(pinoutView);
	}
	if (pinoutView.search(/fox_/i)!=-1) {
		$('input[name=signals_checkbox_fox]').attr('checked',true);
		showPinoutFox(pinoutView);
	}
	if (pinoutView.search(/netus_/i)!=-1) {
		showPinoutNetus(pinoutView);
	}
	

	$('.signals_checkbox').each( function(index) {
		if($(this).is(":checked")){  
			$('.pinout_' + $(this).val() + '_col').fadeIn('fast');
		} else {  
			$('.pinout_' + $(this).val() + '_col').fadeOut('fast');
		}  
	});
	
}

function showPinoutDaisy(pinoutView) {
	daisy_id=pinoutView.substr(7);
 
	content = "<h2>Daisy D" + daisy_id + " pinout</h2>";
	
	content += "<table class='basic' width='100%'>";
	content += "<tr>";

	content += "<td rowspan='11' width='300px'>";
	content += "<img style='float:right;' src='www-public/pinout/daisy_d" + daisy_id + ".jpg'/>";
	content += "</td>";

	content += "<th class='pinout_daisy_col'>Daisy pins</th>";
	content += "<th>Signal</th>";
	//content += "<th class='pinout_netus_col'>Netus pins</th>";
	content += "<th class='pinout_fox_col'>Fox pins</th>";
	content += "<th class='pinout_kernelid_col'>Kernel ID</th>";
	content += "<th class='pinout_description_col'>Description</th>";
	content += "</tr>";

	id_counter=0;
	for (pin_number in daisy_list[daisy_id-1]) {
		content += "<tr>";
		content += "<td id='daisy"       + id_counter  + "' class='pinout_daisy_col' align='right'>" + "D" + daisy_id + "."  + pin_number + "</td>";
		content += "<td id='signal"      + id_counter  + "' class='pinout_signal_col'>" + daisy_list[daisy_id-1][pin_number] + "</td>";
		//content += "<td id='netus"       + id_counter  + "' class='pinout_netus_col'></td>";
		content += "<td id='fox"         + id_counter  + "' class='pinout_fox_col'></td>";
		content += "<td id='kernelid"    + id_counter  + "' class='pinout_kernelid_col'>" + getKernelID(daisy_list[daisy_id-1][pin_number]) + "</td>";
		content += "<td id='description" + id_counter  + "' class='pinout_description_col'>" + signal_description[daisy_list[daisy_id-1][pin_number]] + "</td>";
		content += "</tr>";
		id_counter++;
	}
	content += "</table>";

	$('#pinout').hide().html(content).fadeIn("slow");
	//$('.pinout_fox_col').hide();	
	//$('.pinout_netus_col').hide();	
	//$('.pinout_daisy_col').show();	
	//$('.pinout_kernelid_col').hide();	
	//$('.pinout_description_col').hide();
	
	// Inserisce le corrispondenze con i pin Fox
	// Colonna "Fox pins"	
	for (sg=0;sg<10;sg++) {
		dstring = "";
		for (cn=0;cn<fox_list.length;cn++) {
			for (i in fox_list[cn]) {
				if (fox_list[cn][i]==$('#signal' +  sg).text()) {
					dstring += " " + 'J' + (cn+6) + '.' + i;
				}
			}	
		}	
		$('#fox' +  sg).text(dstring);
	}	

}

function showPinoutFox(pinoutView) {
	var pinout;

	switch (pinoutView) {
	case "fox_j6_top":
	case "fox_j6_bottom":
		pin_prefix="J6";	
		pinout=pinout_foxg20_j6;
		break;
	case "fox_j7_top":
	case "fox_j7_bottom":
		pin_prefix="J7";	
		pinout=pinout_foxg20_j7;
		break;
	}

	content = "<h2>FOX " + pin_prefix + " pinout</h2>";
	
	content += "<table class='basic' width='100%'>";
	content += "<tr>";
	content += "<td valign='top' rowspan='41' width='110px'>";
	
	content += "<img style='float:right;' src='www-public/pinout/" + pinoutView + ".jpg'/>";
	content += "</td>";
	content += "<th class='pinout_fox_col'>Fox pins</th>";
	content += "<th>Signal</th>";
	content += "<th class='pinout_daisy_col'>Daisy pins</th>";
	//content += "<th class='pinout_netus_col'>Netus pins</th>";
	content += "<th class='pinout_kernelid_col'>Kernel ID</th>";
	content += "<th class='pinout_description_col'>Description</th>";
	content += "</tr>";

	id_counter=0;
	for (pin_number in pinout) {
		content += "<tr>";
		content += "<td id='fox"         + id_counter + "' class='pinout_fox_col' align='right'>" + pin_prefix + "." + pin_number + "</td>";
		content += "<td id='signal"      + id_counter + "' class='pinout_signal_col'>" + pinout[pin_number] + "</td>";
		//content += "<td id='netus"       + id_counter + "' class='pinout_netus_col'></td>";
		content += "<td id='daisy"       + id_counter + "' class='pinout_daisy_col'></td>";
		content += "<td id='kernelid"    + id_counter + "' class='pinout_kernelid_col'>" + getKernelID(pinout[pin_number]) + "</td>";
		content += "<td id='description" + id_counter + "' class='pinout_description_col'>" + signal_description[pinout[pin_number]] + "</td>";
		content += "</tr>";
		id_counter++;
	}
	content += "</table>";

	$('#pinout').hide().html(content).fadeIn("slow");
	//$('.pinout_netus_col').hide();	
	//$('.pinout_daisy_col').hide();	
	//$('.pinout_kernelid_col').hide();	
	//$('.pinout_description_col').hide();

	// Inserisce le corrispondenze con i pin Daisy
	// Colonna "Daisy pins"	
	for (sg=0;sg<40;sg++) {
		dstring = "";
		for (cn=0;cn<daisy_list.length;cn++) {
			for (i in daisy_list[cn]) {
				if (daisy_list[cn][i]==$('#signal' +  sg).text()) {
					dstring += " " + 'D' + (cn+1) + '.' + i;
				}
			}	
		}	
		$('#daisy' +  sg).text(dstring);
	}	
}

function showPinoutNetus(pinoutView) {
	content = "<h2>Netus pinout</h2>";
	content += "<p>Non yet available. Please be patience.</p>";
	$('#pinout').hide().html(content).fadeIn("slow");
}
 
 
$(document).ready(function() {
	$(".signals_checkbox").change(function () {
		showPinout();
	});

	$("#pinout_select").change(function () {
		if ($(this).val()=="netus") {
			window.location = "http://www.acmesystems.it/?id=netus_pinout";
		}
		pinoutView=$(this).val();
		showPinout();	
	});
});


