#include "gpio_i2c_sfp_control.h" #include #include // This is map mapping the connector type to the appropriate name. (see SFF-8024 Rev. 4.9, Table 4-3) const char* sfp_connector_map[256] = { "Unknown or unspecified", "SC", "Fibre Channel Style 1", "Fibre Channel Style 2", "BNC/TNC", "Fibre Channel Coax", "Fiber Jack", "LC", "MT-RJ", "MU", "SG", "Optical Pigtail", "MP0 1x12", "MP 2x16", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "HSSDC II", "Copper pigtail", "RJ45", "No seperable connector", "MXC 2x16", "CS optical connector", "SN (prev. Mini CS)", "MPO 2x12", "MPO 1x16", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved", "Reserved"}; void str_part(uint8_t* data, char* buffer, int start, int len) { int i; for(i = start; i < start + len; i++) { buffer[i - start] = data[i]; } buffer[i - start] = '\0'; } /* void print_part(uint8_t *data, char *ptype, char *prefix, int start, int len){ printf("%s: ", prefix); for (int i=start; ivendor, 20, 16); str_part(sfp_data, i2c_sfp_state->rev, 56, 4); str_part(sfp_data, i2c_sfp_state->pn, 40, 16); str_part(sfp_data, i2c_sfp_state->sn, 68, 16); str_part(sfp_data, i2c_sfp_state->dc, 84, 6); //Look up connector in table and copy to struct. strcpy(i2c_sfp_state->connector, sfp_connector_map[sfp_data[2]]); i2c_sfp_state->bitrate = sfp_data[12] * 100; i2c_sfp_state->wavelength = sfp_data[60] * 256 + sfp_data[61]; i2c_sfp_state->sm_reach = sfp_data[14]; i2c_sfp_state->mm_reach_om3 = sfp_data[19] * 10; } furi_hal_i2c_release(&furi_hal_i2c_handle_external); }