Linux IEEE 802.15.4 and 6LoWPAN development
 help / color / mirror / Atom feed
* [PATCH v2 wpan-tools] info: add frequency to channel listing for phy capabilities
@ 2015-06-02  7:53 Christoffer Holmstedt
  2015-06-03  6:34 ` Alexander Aring
  0 siblings, 1 reply; 2+ messages in thread
From: Christoffer Holmstedt @ 2015-06-02  7:53 UTC (permalink / raw)
  To: linux-wpan

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@christofferholmstedt.se>
---
v1 -> v2:
	* Added comma between each channel listed.
	* Changed alignment so alignment is only within each channel page and
	  not between different channel pages, this makes for a more compact
	  list for some pages.

One can always argue if left or right alignment is the best option but I think
this is good enough for now.

 src/info.c | 141 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++--
 1 file changed, 138 insertions(+), 3 deletions(-)

diff --git a/src/info.c b/src/info.c
index 926a63adecce..cd6b2b74172e 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("%5.1f", freq);
+			break;
+		} else if (channel > 0 && channel < 11) {
+			freq = 906 + 2 * (channel - 1);
+		} else {
+			freq = 2405 + 5 * (channel - 11);
+		}
+		printf("%5.0f", freq);
+		break;
+	case 1:
+		if (channel == 0) {
+			freq = 868.3;
+			printf("%5.1f", freq);
+			break;
+		} else if (channel >= 1 && channel <= 10) {
+			freq = 906 + 2 * (channel - 1);
+		}
+		printf("%5.0f", freq);
+		break;
+	case 2:
+		if (channel == 0) {
+			freq = 868.3;
+			printf("%5.1f", freq);
+			break;
+		} else if (channel >= 1 && channel <= 10) {
+			freq = 906 + 2 * (channel - 1);
+		}
+		printf("%5.0f", freq);
+		break;
+	case 3:
+		if (channel >= 0 && channel <= 12) {
+			freq = 2412 + 5 * channel;
+		} else if (channel == 13) {
+			freq = 2484;
+		}
+		printf("%4.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("%3.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("%5.1f", freq);
+		break;
+	default:
+		printf("Unknown");
+		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,11 +276,22 @@ 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");
+				printf("\b\b \b\n");
 			}
 		}
 
-- 
1.9.1


-- 
Christoffer Holmstedt

^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v2 wpan-tools] info: add frequency to channel listing for phy capabilities
  2015-06-02  7:53 [PATCH v2 wpan-tools] info: add frequency to channel listing for phy capabilities Christoffer Holmstedt
@ 2015-06-03  6:34 ` Alexander Aring
  0 siblings, 0 replies; 2+ messages in thread
From: Alexander Aring @ 2015-06-03  6:34 UTC (permalink / raw)
  To: Christoffer Holmstedt; +Cc: linux-wpan

On Tue, Jun 02, 2015 at 09:53:14AM +0200, Christoffer Holmstedt wrote:
> 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@christofferholmstedt.se>

applied. Thanks.

- Alex

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2015-06-03  6:34 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2015-06-02  7:53 [PATCH v2 wpan-tools] info: add frequency to channel listing for phy capabilities Christoffer Holmstedt
2015-06-03  6:34 ` Alexander Aring

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox