RE: [PATCH 2/2] emulator/le: Add LE test commands

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

 



Hi Marcel,

> -----Original Message-----
> From: linux-bluetooth-owner@xxxxxxxxxxxxxxx [mailto:linux-bluetooth-
> owner@xxxxxxxxxxxxxxx] On Behalf Of Marcel Holtmann
> Sent: Saturday, June 06, 2015 10:04 AM
> To: Gowtham Anandha Babu
> Cc: linux-bluetooth@xxxxxxxxxxxxxxx; bharat.panda@xxxxxxxxxxx
> Subject: Re: [PATCH 2/2] emulator/le: Add LE test commands
> 
> Hi Gowtham,
> 
> >>> ---
> >>> emulator/le.c | 45
> ++++++++++++++++++++++++++++++++++++++++++--
> >> -
> >>> 1 file changed, 42 insertions(+), 3 deletions(-)
> >>>
> >>> diff --git a/emulator/le.c b/emulator/le.c index dc51469..7f852a9
> >>> 100644
> >>> --- a/emulator/le.c
> >>> +++ b/emulator/le.c
> >>> @@ -258,9 +258,9 @@ static void reset_defaults(struct bt_le *hci)
> >>> 	//hci->commands[28] |= 0x02;	/* LE Long Term Key Request Reply
> >> */
> >>> 	//hci->commands[28] |= 0x04;	/* LE Long Term Key Request
> >> Negative Reply */
> >>> 	hci->commands[28] |= 0x08;	/* LE Read Supported States */
> >>> -	//hci->commands[28] |= 0x10;	/* LE Receiver Test */
> >>> -	//hci->commands[28] |= 0x20;	/* LE Transmitter Test */
> >>> -	//hci->commands[28] |= 0x40;	/* LE Test End */
> >>> +	hci->commands[28] |= 0x10;	/* LE Receiver Test */
> >>> +	hci->commands[28] |= 0x20;	/* LE Transmitter Test */
> >>> +	hci->commands[28] |= 0x40;	/* LE Test End */
> >>> 	//hci->commands[33] |= 0x10;	/* LE Remote Connection Parameter
> >> Request Reply */
> >>> 	//hci->commands[33] |= 0x20;	/* LE Remote Connection Parameter
> >> Request Negative Reply */
> >>> 	hci->commands[33] |= 0x40;	/* LE Set Data Length */
> >>> @@ -1218,6 +1218,36 @@ static void
> >> cmd_le_read_supported_states(struct bt_le *hci,
> >>> 							&rsp, sizeof(rsp));
> >>> }
> >>>
> >>> +static void cmd_le_receiver_test(struct bt_le *hci,
> >>> +						const void *data, uint8_t
> > size)
> >> {
> >>> +	uint8_t status;
> >>> +
> >>> +	status = BT_HCI_ERR_SUCCESS;
> >>> +	cmd_complete(hci, BT_HCI_CMD_LE_RECEIVER_TEST,
> >>> +					&status, sizeof(status));
> >>> +}
> >>> +
> >>> +static void cmd_le_transmitter_test(struct bt_le *hci,
> >>> +						const void *data, uint8_t
> > size)
> >> {
> >>> +	uint8_t status;
> >>> +
> >>> +	status = BT_HCI_ERR_SUCCESS;
> >>> +	cmd_complete(hci, BT_HCI_CMD_LE_TRANSMITTER_TEST,
> >>> +					&status, sizeof(status));
> >>> +}
> >>> +
> >>> +static void cmd_le_end_test(struct bt_le *hci, const void *data,
> >>> +uint8_t size) {
> >>> +	struct bt_hci_rsp_le_test_end lte;
> >>> +
> >>> +	lte.status = BT_HCI_ERR_SUCCESS;
> >>> +	lte.num_packets = 0;
> >>> +
> >>> +	cmd_complete(hci, BT_HCI_CMD_LE_TEST_END, &lte, sizeof(lte)); }
> >>> +
> >>
> >> this is actually not enough. You need to put a bit of logic into this
> > code. For
> >> example it is either RX or TX test and not both at the same time. You
> >> need
> > to
> >> return proper errors. And the test end command you also return the
> >> correct value for num_packets. So if you do a receiver test against a
> >> transmitter
> > test
> >> you are getting some useful values here. Otherwise there are just
> >> empty stubs and we better not bother having them at all.
> >>
> >
> > Thanks for the quick review.
> > Below are the assumptions that I want to clarify:
> > 1) Need to check  rx_chan and tx_chan are in 0x00 to 0x27 range, if
> > not return BT_HCI_ERR_INVALID_PARAMETERS.
> 
> that is the first thing that needs to be done.
> 
> For the TX test also test data length needs to be checked for 0x00 - 0x25.
This
> might actually depend on if data length extension is supported or not.
> 
> Also the packet payload is limited to 0x00 - 0x07.
> 
> > 2) Need to maintain a global variable (rx_test, tx_test) to track
> > which test is going on.
> 
> Yes, and command disallowed needs to be return if either of the tests is
> active.
> 
> > 3) When receiver test is called, a global variable (pkt_recv ) is
> > incremented to track  num of packets received.
> >
> > Or Should I maintain a structure for (2) & (3) instead of maintaining
> > globals?
> 
> The receiving side needs to track the num of packets received on that
> specified channel. Meaning that if no other transceiver is testing, that
should
> return 0. If some other transceiver is active, it should increment with
the
> proper interval depending on how long the test is active.
> 
> You might realise why I have not yet implemented these commands. They
> require a bit of timing accuracy that we currently do not really have in
the LE
> only emulator.

Thanks for the reply. Then I probably skip this one and work on the other
commands as well.
Listed below are few missing LE commands that I am planning to work on le.c
which requires suggestion:
1) BT_HCI_CMD_READ_TX_POWER
2) BT_HCI_CMD_READ_RSSI
3) BT_HCI_CMD_LE_CONN_UPDATE
4) BT_HCI_CMD_LE_SET_HOST_CLASSIFICATION
5) BT_HCI_CMD_LE_READ_CHANNEL_MAP


Apart from that is there any specific reason why BDADDR for LE is not
created/used anywhere in le.c,
whereas in btdev.c it was created and used wherever necessary?
Because of this, LE emulator never gets up, since le.c is using
00:00:00:00:00:00 as BDADDR.
Does it need to be fixed as in btdev?

One more thing, I am not able to write/read the local name for LE
emulator(le.c).
The cmd itself it not supported right now. Is it good to be fixed?

> >
> > 4) Finally while test end cmd,
> > 	If (tx_test)
> > 		num_packets = 0;
> > 	else if (rx_test) {
> > 		num_packets = pkt_recv;
> > 		pkt_recv = 0;
> > 	}
> 
> Setting pkt_recv to 0 happens when starting the RX test.
> 
> > Is there any tool to test the above commands?
> > If not I can add these commands to any of the tools (hcitool, I guess)
> > for testing (If it is worth to add in BlueZ, then I will send them as
> > patches too).
> 
> I used hcitool cmd for it.
> 
> Regards
> 
> Marcel
> 

Regards
Gowtham Anandha Babu

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




[Index of Archives]     [Bluez Devel]     [Linux Wireless Networking]     [Linux Wireless Personal Area Networking]     [Linux ATH6KL]     [Linux USB Devel]     [Linux Media Drivers]     [Linux Audio Users]     [Linux Kernel]     [Linux SCSI]     [Big List of Linux Books]

  Powered by Linux