mirror of
https://github.com/logicog/RTLPlayground.git
synced 2026-08-30 14:52:51 +08:00
Add SFP data to send_basic_info
This commit is contained in:
+13
-8
@@ -8,7 +8,6 @@ var pIsSFP = new Int8Array(10);
|
|||||||
var numPorts = 0;
|
var numPorts = 0;
|
||||||
const logToPhysPort = [0, 0, 0, 5, 1, 2, 3, 4, 6];
|
const logToPhysPort = [0, 0, 0, 5, 1, 2, 3, 4, 6];
|
||||||
const physToLogPort = [ 4, 5, 6, 7, 3, 8];
|
const physToLogPort = [ 4, 5, 6, 7, 3, 8];
|
||||||
// <div class="tooltip"><div id="ports"><span class="tooltiptext">The text for the Tooltip.</span></div></div>
|
|
||||||
function drawPorts() {
|
function drawPorts() {
|
||||||
var f = document.getElementById('ports');
|
var f = document.getElementById('ports');
|
||||||
console.log("DRAWING PORTS: ", numPorts);
|
console.log("DRAWING PORTS: ", numPorts);
|
||||||
@@ -82,16 +81,22 @@ function update() {
|
|||||||
leds[0].style.fill = "black"; leds[1].style.fill = "black";
|
leds[0].style.fill = "black"; leds[1].style.fill = "black";
|
||||||
psvg.style.opacity = 0.4
|
psvg.style.opacity = 0.4
|
||||||
}
|
}
|
||||||
tt.innerHTML = "Link speed: " + linkS[p.link + 1] + "<br>";
|
var iHTML = "<table border=\"0\" class=\"tt_table\">";
|
||||||
|
iHTML += "<tr><td align=\"left\">Link speed</td><td>:</td><td>" + linkS[p.link + 1] + "</td></tr>";
|
||||||
if (p.isSFP) {
|
if (p.isSFP) {
|
||||||
tt.innerHTML += "T = " + (Number(p.sfp_temp) >> 8) + "." + ((Number(p.sfp_temp) & 0xff)/256.0 * 100).toFixed(0) + "°C<br>";
|
iHTML += "<tr><td>Vendor</td><td>:</td><td>" + p.sfp_vendor + "</td></tr>";
|
||||||
tt.innerHTML += "Vcc = " + (Number(p.sfp_vcc) / 10000.0).toFixed(2) + "V<br>";
|
iHTML += "<tr><td>Model</td><td>:</td><td>" + p.sfp_model + "</td></tr>";
|
||||||
tt.innerHTML += "TX-Bias = " + (Number(p.sfp_txbias) / 500.0).toFixed(1) + "mA<br>";
|
iHTML += "<tr><td>Serial</td><td>:</td><td>" + p.sfp_serial + "</td></tr>";
|
||||||
tt.innerHTML += "TX-Power = " + (Number(p.sfp_txpower) / 10.0).toFixed(0) + "mW<br>";
|
if (p.sfp_options & 0x40) {
|
||||||
tt.innerHTML += "RX-Power = " + (Number(p.sfp_rxpower) / 10.0).toFixed(0) + "mW<br>";
|
iHTML += "<tr><td>Temp</td><td>:</td><td>" + (Number(p.sfp_temp) >> 8) + "." + ((Number(p.sfp_temp) & 0xff)/256.0 * 100).toFixed(0) + " ℃</td></tr>";
|
||||||
console.log(tt.innerHTML);
|
iHTML += "<tr><td>Vcc</td><td>:</td><td>" + (Number(p.sfp_vcc) / 10000.0).toFixed(2) + " V</td></tr>";
|
||||||
|
iHTML += "<tr><td>TX-Bias</td><td>:</td><td>" + (Number(p.sfp_txbias) / 500.0).toFixed(1) + " mA</td></tr>";
|
||||||
|
iHTML += "<tr><td>TX-Power</td><td>:</td><td>" + (Number(p.sfp_txpower) / 10.0).toFixed(0) + " mW</td></tr>";
|
||||||
|
iHTML += "<tr><td>RX-Power</td><td>:</td><td>" + (Number(p.sfp_rxpower) / 10.0).toFixed(0) + " mW</td></tr>";
|
||||||
|
}
|
||||||
}
|
}
|
||||||
iHTML += "</table>";
|
iHTML += "</table>";
|
||||||
|
tt.innerHTML = iHTML;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
+71
-1
@@ -34,6 +34,11 @@ extern __xdata uint16_t cmd_history_ptr;
|
|||||||
|
|
||||||
extern __xdata struct flash_region_t flash_region;
|
extern __xdata struct flash_region_t flash_region;
|
||||||
|
|
||||||
|
extern __xdata char sfp_module_vendor[2][17];
|
||||||
|
extern __xdata char sfp_module_model[2][17];
|
||||||
|
extern __xdata char sfp_module_serial[2][17];
|
||||||
|
extern __xdata uint8_t sfp_options[2];
|
||||||
|
|
||||||
__code uint8_t * __code HTTP_RESPONCE_JSON = "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n";
|
__code uint8_t * __code HTTP_RESPONCE_JSON = "HTTP/1.1 200 OK\r\nContent-Type: application/json\r\n\r\n";
|
||||||
__code uint8_t * __code HTTP_RESPONCE_TXT = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\n";
|
__code uint8_t * __code HTTP_RESPONCE_TXT = "HTTP/1.1 200 OK\r\nContent-Type: text/plain\r\n\r\n";
|
||||||
|
|
||||||
@@ -148,6 +153,40 @@ void send_sfp_info(uint8_t sfp)
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
void sfp_send_data(uint8_t slot, uint8_t reg, uint8_t len)
|
||||||
|
{
|
||||||
|
if (reg & 0x80) { // Configure SFP readings address (0x51) as I2C device address
|
||||||
|
reg &= 0x7f;
|
||||||
|
REG_WRITE(RTL837X_REG_I2C_CTRL, 0x00, 0x1 << (I2C_MEM_ADDR_WIDTH-16) | len & 0xf, 0x51 >> 5, (0x51 << 3) & 0xff);
|
||||||
|
} else {
|
||||||
|
REG_WRITE(RTL837X_REG_I2C_CTRL, 0x00, 0x1 << (I2C_MEM_ADDR_WIDTH-16) | len & 0xf, 0x50 >> 5, (0x50 << 3) & 0xff);
|
||||||
|
}
|
||||||
|
|
||||||
|
reg_read_m(RTL837X_REG_I2C_CTRL);
|
||||||
|
sfr_mask_data(1, 0xfc, machine.sfp_port[slot].i2c == 0 ? SCL_PIN << 5 | SDA_PIN_0 << 2 : SCL_PIN << 5 | SDA_PIN_1 << 2 );
|
||||||
|
reg_write_m(RTL837X_REG_I2C_CTRL);
|
||||||
|
|
||||||
|
REG_WRITE(RTL837X_REG_I2C_IN, 0, 0, 0, reg);
|
||||||
|
|
||||||
|
// Execute I2C Read
|
||||||
|
reg_bit_set(RTL837X_REG_I2C_CTRL, 0);
|
||||||
|
|
||||||
|
// Wait for execution to finish
|
||||||
|
do {
|
||||||
|
reg_read_m(RTL837X_REG_I2C_CTRL);
|
||||||
|
} while (sfr_data[3] & 0x1);
|
||||||
|
|
||||||
|
for (uint8_t i = 0; i < len & 0xf; i++) {
|
||||||
|
if (!(i & 0x3))
|
||||||
|
reg_read_m(RTL837X_REG_I2C_OUT + (i >> 2));
|
||||||
|
if (len & 0x80)
|
||||||
|
char_to_html(sfr_data[3 - (i & 0x3)]);
|
||||||
|
else
|
||||||
|
byte_to_html(sfr_data[3 - (i & 0x3)]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
void send_basic_info(void)
|
void send_basic_info(void)
|
||||||
{
|
{
|
||||||
slen = strtox(outbuf, HTTP_RESPONCE_JSON);
|
slen = strtox(outbuf, HTTP_RESPONCE_JSON);
|
||||||
@@ -354,7 +393,38 @@ void send_status(void)
|
|||||||
|
|
||||||
if (machine.is_sfp[i]) {
|
if (machine.is_sfp[i]) {
|
||||||
slen += strtox(outbuf + slen, ",\"isSFP\":1,\"enabled\":");
|
slen += strtox(outbuf + slen, ",\"isSFP\":1,\"enabled\":");
|
||||||
bool_to_html(!(sfp_pins_last & (0x1 << ((machine.is_sfp[i] - 1) << 2))));
|
if (!(sfp_pins_last & (0x1 << ((machine.is_sfp[i] - 1) << 2)))) {
|
||||||
|
bool_to_html(1);
|
||||||
|
slen += strtox(outbuf + slen,",\"sfp_options\":\"0x");
|
||||||
|
byte_to_html(sfp_options[machine.is_sfp[i]-1]);
|
||||||
|
if (sfp_options[machine.is_sfp[i]-1] & 0x40) {
|
||||||
|
sfp_send_data(machine.is_sfp[i] - 1, 92, 1);
|
||||||
|
slen += strtox(outbuf + slen,"\",\"sfp_temp\":\"0x");
|
||||||
|
sfp_send_data(machine.is_sfp[i] - 1, 224, 2);
|
||||||
|
slen += strtox(outbuf + slen,"\",\"sfp_vcc\":\"0x");
|
||||||
|
sfp_send_data(machine.is_sfp[i] - 1, 226, 2);
|
||||||
|
slen += strtox(outbuf + slen,"\",\"sfp_txbias\":\"0x");
|
||||||
|
sfp_send_data(machine.is_sfp[i] - 1, 228, 2);
|
||||||
|
slen += strtox(outbuf + slen,"\",\"sfp_txpower\":\"0x");
|
||||||
|
sfp_send_data(machine.is_sfp[i] - 1, 230, 2);
|
||||||
|
slen += strtox(outbuf + slen,"\",\"sfp_rxpower\":\"0x");
|
||||||
|
sfp_send_data(machine.is_sfp[i] - 1, 232, 2);
|
||||||
|
slen += strtox(outbuf + slen,"\",\"sfp_state\":\"0x");
|
||||||
|
sfp_send_data(machine.is_sfp[i] - 1, 238, 1);
|
||||||
|
}
|
||||||
|
slen += strtox(outbuf + slen,"\",\"sfp_vendor\":\"");
|
||||||
|
for (register uint8_t s = 0; s < 16; s++)
|
||||||
|
outbuf[slen++] = sfp_module_vendor[machine.is_sfp[i]-1][s];
|
||||||
|
slen += strtox(outbuf + slen,"\",\"sfp_model\":\"");
|
||||||
|
for (register uint8_t s = 0; s < 16; s++)
|
||||||
|
outbuf[slen++] = sfp_module_model[machine.is_sfp[i]-1][s];
|
||||||
|
slen += strtox(outbuf + slen,"\",\"sfp_serial\":\"");
|
||||||
|
for (register uint8_t s = 0; s < 16; s++)
|
||||||
|
outbuf[slen++] = sfp_module_serial[machine.is_sfp[i]-1][s];
|
||||||
|
char_to_html('"');
|
||||||
|
} else {
|
||||||
|
bool_to_html(0);
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
slen += strtox(outbuf + slen, ",\"isSFP\":0,\"enabled\":");
|
slen += strtox(outbuf + slen, ",\"isSFP\":0,\"enabled\":");
|
||||||
phy_read(i, 0x1f, 0xa610);
|
phy_read(i, 0x1f, 0xa610);
|
||||||
|
|||||||
Reference in New Issue
Block a user