[PATCH wpan-tools] info: add frequency to channel listing for phy capabilities

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Add the frequency to the channel numbers output when running "iwpan list".
The frequencies listed are according to chapter 8.1.2 in IEEE 802.15.4-2011.
The output now looks like this (fake wpan loopback with all channels
supported):

capabilities:
	iftypes: node
	channels:
		page 0:
			[ 0]  868.3 MHz [ 1]    906 MHz [ 2]    908 MHz
			[ 3]    910 MHz [ 4]    912 MHz [ 5]    914 MHz
			[ 6]    916 MHz [ 7]    918 MHz [ 8]    920 MHz
			[ 9]    922 MHz [10]    924 MHz [11]   2405 MHz
			[12]   2410 MHz [13]   2415 MHz [14]   2420 MHz
			[15]   2425 MHz [16]   2430 MHz [17]   2435 MHz
			[18]   2440 MHz [19]   2445 MHz [20]   2450 MHz
			[21]   2455 MHz [22]   2460 MHz [23]   2465 MHz
			[24]   2470 MHz [25]   2475 MHz [26]   2480 MHz
		page 1:
			[ 0]  868.3 MHz [ 1]    906 MHz [ 2]    908 MHz
			[ 3]    910 MHz [ 4]    912 MHz [ 5]    914 MHz
			[ 6]    916 MHz [ 7]    918 MHz [ 8]    920 MHz
			[ 9]    922 MHz [10]    924 MHz
		page 2:
			[ 0]  868.3 MHz [ 1]    906 MHz [ 2]    908 MHz
			[ 3]    910 MHz [ 4]    912 MHz [ 5]    914 MHz
			[ 6]    916 MHz [ 7]    918 MHz [ 8]    920 MHz
			[ 9]    922 MHz [10]    924 MHz
		page 3:
			[ 0]   2412 MHz [ 1]   2417 MHz [ 2]   2422 MHz
			[ 3]   2427 MHz [ 4]   2432 MHz [ 5]   2437 MHz
			[ 6]   2442 MHz [ 7]   2447 MHz [ 8]   2452 MHz
			[ 9]   2457 MHz [10]   2462 MHz [11]   2467 MHz
			[12]   2472 MHz [13]   2484 MHz
		page 4:
			[ 0]  499.2 MHz [ 1] 3494.4 MHz [ 2] 3993.6 MHz
			[ 3] 4492.8 MHz [ 4] 3993.6 MHz [ 5] 6489.6 MHz
			[ 6] 6988.8 MHz [ 7] 6489.6 MHz [ 8] 7488.0 MHz
			[ 9] 7987.2 MHz [10] 8486.4 MHz [11] 7987.2 MHz
			[12] 8985.6 MHz [13] 9484.8 MHz [14] 9984.0 MHz
			[15] 9484.8 MHz
		page 5:
			[ 0]    780 MHz [ 1]    782 MHz [ 2]    784 MHz
			[ 3]    786 MHz [ 4]    780 MHz [ 5]    782 MHz
			[ 6]    784 MHz [ 7]    786 MHz
		page 6:
			[ 0]  951.2 MHz [ 1]  951.8 MHz [ 2]  952.4 MHz
			[ 3]  953.0 MHz [ 4]  953.6 MHz [ 5]  954.2 MHz
			[ 6]  954.8 MHz [ 7]  955.4 MHz [ 8]  954.4 MHz
			[ 9]  954.6 MHz [10]  951.1 MHz [11]  951.5 MHz
			[12]  951.9 MHz [13]  952.3 MHz [14]  952.7 MHz
			[15]  953.1 MHz [16]  953.5 MHz [17]  953.9 MHz
			[18]  954.3 MHz [19]  954.7 MHz [20]  955.1 MHz
			[21]  955.5 MHz

Signed-off-by: Christoffer Holmstedt <christoffer@xxxxxxxxxxxxxxxxxxxxxxx>
---
 src/info.c | 139 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 137 insertions(+), 2 deletions(-)

diff --git a/src/info.c b/src/info.c
index e8f5dda8da94..ee3a80838913 100644
--- a/src/info.c
+++ b/src/info.c
@@ -23,6 +23,129 @@ static void print_minmax_handler(int min, int max)
 	printf("\b \n");
 }
 
+static void print_freq_handler(int channel_page, int channel)
+{
+	float freq = 0;
+
+	switch (channel_page) {
+	case 0:
+		if (channel == 0) {
+			freq = 868.3;
+			printf("%6.1f", freq);
+			break;
+		} else if (channel > 0 && channel < 11) {
+			freq = 906 + 2 * (channel - 1);
+		} else {
+			freq = 2405 + 5 * (channel - 11);
+		}
+		printf("%6.0f", freq);
+		break;
+	case 1:
+		if (channel == 0) {
+			freq = 868.3;
+			printf("%6.1f", freq);
+			break;
+		} else if (channel >= 1 && channel <= 10) {
+			freq = 906 + 2 * (channel - 1);
+		}
+		printf("%6.0f", freq);
+		break;
+	case 2:
+		if (channel == 0) {
+			freq = 868.3;
+			printf("%6.1f", freq);
+			break;
+		} else if (channel >= 1 && channel <= 10) {
+			freq = 906 + 2 * (channel - 1);
+		}
+		printf("%6.0f", freq);
+		break;
+	case 3:
+		if (channel >= 0 && channel <= 12) {
+			freq = 2412 + 5 * channel;
+		} else if (channel == 13) {
+			freq = 2484;
+		}
+		printf("%6.0f", freq);
+		break;
+	case 4:
+		switch (channel) {
+		case 0:
+			freq = 499.2;
+			break;
+		case 1:
+			freq = 3494.4;
+			break;
+		case 2:
+			freq = 3993.6;
+			break;
+		case 3:
+			freq = 4492.8;
+			break;
+		case 4:
+			freq = 3993.6;
+			break;
+		case 5:
+			freq = 6489.6;
+			break;
+		case 6:
+			freq = 6988.8;
+			break;
+		case 7:
+			freq = 6489.6;
+			break;
+		case 8:
+			freq = 7488.0;
+			break;
+		case 9:
+			freq = 7987.2;
+			break;
+		case 10:
+			freq = 8486.4;
+			break;
+		case 11:
+			freq = 7987.2;
+			break;
+		case 12:
+			freq = 8985.6;
+			break;
+		case 13:
+			freq = 9484.8;
+			break;
+		case 14:
+			freq = 9984.0;
+			break;
+		case 15:
+			freq = 9484.8;
+			break;
+		}
+		printf("%6.1f", freq);
+		break;
+	case 5:
+		if (channel >= 0 && channel <= 3) {
+			freq = 780 + 2 * channel;
+		} else if (channel >= 4 && channel <= 7) {
+			freq = 780 + 2 * (channel - 4);
+		}
+		printf("%6.0f", freq);
+		break;
+	case 6:
+		if (channel >= 0 && channel <= 7) {
+			freq = 951.2 + 0.6 * channel;
+		} else if (channel >= 8 && channel <= 9) {
+			freq = 954.4 + 0.2 * (channel - 8);
+		} else if (channel >= 10  && channel <= 21) {
+			freq = 951.1 + 0.4 * (channel - 10);
+		}
+
+		printf("%6.1f", freq);
+		break;
+	default:
+		printf("Unkno.");
+		break;
+	}
+}
+
 static int print_phy_handler(struct nl_msg *msg, void *arg)
 {
 	struct nlattr *tb_msg[NL802154_ATTR_MAX + 1];
@@ -145,6 +268,7 @@ static int print_phy_handler(struct nl_msg *msg, void *arg)
 		}
 
 		if (tb_msg[NL802154_CAP_ATTR_CHANNELS]) {
+			int counter = 0;
 			int rem_pages;
 			struct nlattr *nl_pages;
 			printf("\tchannels:\n");
@@ -152,9 +276,20 @@ static int print_phy_handler(struct nl_msg *msg, void *arg)
 					    rem_pages) {
 				int rem_channels;
 				struct nlattr *nl_channels;
+				counter = 0;
 				printf("\t\tpage %d: ", nla_type(nl_pages));
-				nla_for_each_nested(nl_channels, nl_pages, rem_channels)
-					printf("%d,", nla_type(nl_channels));
+				nla_for_each_nested(nl_channels, nl_pages, rem_channels) {
+					if (counter % 3 == 0) {
+						printf("\n\t\t\t[%2d] ", nla_type(nl_channels));
+						print_freq_handler(nla_type(nl_pages), nla_type(nl_channels));
+						printf(" MHz ");
+					} else {
+						printf("[%2d] ", nla_type(nl_channels));
+						print_freq_handler(nla_type(nl_pages), nla_type(nl_channels));
+						printf(" MHz ");
+					}
+					counter++;
+				}
 				/*  TODO hack use sprintf here */
 				printf("\b \b\n");
 			}
-- 
1.9.1


-- 
Christoffer Holmstedt
--
To unsubscribe from this list: send the line "unsubscribe linux-wpan" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html




[Index of Archives]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Linux Audio Users]     [Photo]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux