+static char * print_hardware_id(const struct iwinfo_ops *iw, const char *ifname)
+{
+ static char buf[20];
+ struct iwinfo_hardware_id ids;
+
+ if (!iw->hardware_id(ifname, (char *)&ids))
+ {
+ snprintf(buf, sizeof(buf), "%04X:%04X %04X:%04X",
+ ids.vendor_id, ids.device_id,
+ ids.subsystem_vendor_id, ids.subsystem_device_id);
+ }
+ else
+ {
+ snprintf(buf, sizeof(buf), "unknown");
+ }
+
+ return buf;
+}
+
+static char * print_hardware_name(const struct iwinfo_ops *iw, const char *ifname)
+{
+ static char buf[128];
+
+ if (iw->hardware_name(ifname, buf))
+ snprintf(buf, sizeof(buf), "unknown");
+
+ return buf;
+}
+
+static char * print_txpower_offset(const struct iwinfo_ops *iw, const char *ifname)
+{
+ int off;
+ static char buf[12];
+
+ if (iw->txpower_offset(ifname, &off))
+ snprintf(buf, sizeof(buf), "unknown");
+ else if (off != 0)
+ snprintf(buf, sizeof(buf), "%d dB", off);
+ else
+ snprintf(buf, sizeof(buf), "none");
+
+ return buf;
+}
+
+static char * print_frequency_offset(const struct iwinfo_ops *iw, const char *ifname)
+{
+ int off;
+ static char buf[12];
+
+ if (iw->frequency_offset(ifname, &off))
+ snprintf(buf, sizeof(buf), "unknown");
+ else if (off != 0)
+ snprintf(buf, sizeof(buf), "%.3f GHz", ((float)off / 1000.0));
+ else
+ snprintf(buf, sizeof(buf), "none");
+
+ return buf;
+}
+