platform: Add onu channels to statpitcher/catcher
Addde current and requested channel into statpitcher to be displayed
in tech ui.
Corresponding changes in go/fibercl/78374/
In response to b/31102689
Change-Id: I425164d68ecd484af79fcb6ffd904606f244232c
diff --git a/cmds/device_stats.proto b/cmds/device_stats.proto
index 4f47b5e..fd05a68 100644
--- a/cmds/device_stats.proto
+++ b/cmds/device_stats.proto
@@ -20,5 +20,11 @@
// Public ipv6 address of onu
optional string ipv6 = 6;
+
+ // Which channel fiber jack is supposed use
+ optional int64 requested_channel = 7;
+
+ // Which channel fiber jack is currently using
+ optional int64 current_channel = 8;
};
diff --git a/cmds/statcatcher.cc b/cmds/statcatcher.cc
index bfd7033..a9ac9f0 100644
--- a/cmds/statcatcher.cc
+++ b/cmds/statcatcher.cc
@@ -143,7 +143,9 @@
"onu_acs_contact_time": "%lld",
"onu_uptime": %lld,
"onu_serial": "%s",
-"onu_ipv6": "%s"
+"onu_ipv6": "%s",
+"onu_requested_channel": %lld,
+"onu_current_channel": %lld
})";
FILE *f = fopen(tmp_file.c_str(), "w");
if (!f) {
@@ -157,7 +159,9 @@
status.acs_contact_time(),
status.uptime(),
status.serial().c_str(),
- status.ipv6().c_str());
+ status.ipv6().c_str(),
+ status.requested_channel(),
+ status.current_channel());
fclose(f);
if (rename(tmp_file.c_str(), stat_file.c_str()) != 0) {
diff --git a/cmds/statpitcher.cc b/cmds/statpitcher.cc
index 990666d..0a19443 100644
--- a/cmds/statpitcher.cc
+++ b/cmds/statpitcher.cc
@@ -158,6 +158,27 @@
return result;
}
+int64_t RequestedONUChannel() {
+ int64_t ret = -1;
+ std::string req_channel = "";
+ ReadFile("/sys/devices/platform/gpon/misc/laserChannel", &req_channel);
+ std::istringstream(req_channel) >> ret;
+ return ret;
+}
+
+int64_t CurrentONUChannel() {
+ int64_t ret = -1;
+ // Read current channel from I2C byte
+ std::shared_ptr<FILE> pipe(popen("i2cget -y 0 0x51 0x91", "r"), pclose);
+ if (pipe) {
+ char buffer[128];
+ if (fgets(buffer, 128, pipe.get()) != NULL) {
+ std::istringstream(buffer) >> ret;
+ }
+ }
+ return ret;
+}
+
void MakePacket(std::vector<uint8_t>* pkt) {
devstatus::Status status;
@@ -169,6 +190,8 @@
status.set_uptime(Uptime());
status.set_serial(serial_number);
status.set_ipv6(IPAddress());
+ status.set_requested_channel(RequestedONUChannel());
+ status.set_current_channel(CurrentONUChannel());
pkt->resize(status.ByteSize());
status.SerializeToArray(&(*pkt)[0], status.ByteSize());