apps/wireless/bluetooth/btsak: Update for changes made to IOCTL commands.
This commit is contained in:
parent
c026d5ea09
commit
ef23beca7c
@ -84,14 +84,16 @@ static void btsak_advertise_showusage(FAR const char *progname,
|
||||
* Name: btsak_cmd_advertisestart
|
||||
*
|
||||
* Description:
|
||||
* Scan start command
|
||||
* Advertise start command
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static void btsak_cmd_advertisestart(FAR struct btsak_s *btsak, FAR char *cmd,
|
||||
int argc, FAR char *argv[])
|
||||
{
|
||||
struct bt_advertisestart_s start;
|
||||
struct btreq_s start;
|
||||
struct bt_eir_s ad[2]; /* Data for advertisement packets */
|
||||
struct bt_eir_s sd[2]; /* Data for scan response packets */
|
||||
int sockfd;
|
||||
int ret;
|
||||
|
||||
@ -119,29 +121,39 @@ static void btsak_cmd_advertisestart(FAR struct btsak_s *btsak, FAR char *cmd,
|
||||
* request additional information about the pallet.
|
||||
*/
|
||||
|
||||
memset(&start, 0, sizeof(struct bt_advertisestart_s));
|
||||
strncpy(start.as_name, btsak->ifname, HCI_DEVNAME_SIZE);
|
||||
/* The data for advertisement and response packets are provided as arrays
|
||||
* terminated by an entry with len=2.
|
||||
*
|
||||
* REVISIT: To be useful for anything other than testing, there must
|
||||
* be some mechanism to specify the advertise and response data.
|
||||
*/
|
||||
|
||||
start.as_type = BT_LE_ADV_IND;
|
||||
memset(&ad, 0, 2 * sizeof(struct bt_eir_s));
|
||||
ad[0].len = 2;
|
||||
ad[0].type = BT_EIR_FLAGS;
|
||||
ad[0].data[0] = BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR;
|
||||
|
||||
start.as_ad.len = 2;
|
||||
start.as_ad.type = BT_EIR_FLAGS;
|
||||
start.as_ad.data[0] = BT_LE_AD_GENERAL | BT_LE_AD_NO_BREDR;
|
||||
memset(&sd, 0, 2 * sizeof(struct bt_eir_s));
|
||||
sd[1].len = sizeof("btsak");
|
||||
sd[1].type = BT_EIR_NAME_COMPLETE;
|
||||
strcpy((FAR char *)sd[1].data, "btsak");
|
||||
|
||||
start.as_sd.len = sizeof("btsak");
|
||||
start.as_sd.type = BT_EIR_NAME_COMPLETE;
|
||||
strcpy((FAR char *)start.as_sd.data, "btsak");
|
||||
memset(&btreq, 0, sizeof(struct bt_advertisebtreq_s));
|
||||
strncpy(btreq.btr_name, btsak->ifname, HCI_DEVNAME_SIZE);
|
||||
btreq.btr_advtype = BT_LE_ADV_IND;
|
||||
btreq.btr_advad = ad;
|
||||
btreq.btr_advsd = sd;
|
||||
|
||||
/* Perform the IOCTL to start advertising */
|
||||
|
||||
sockfd = btsak_socket(btsak);
|
||||
if (sockfd >= 0)
|
||||
{
|
||||
ret = ioctl(sockfd, SIOCBT_ADVERTISESTART,
|
||||
(unsigned long)((uintptr_t)&start));
|
||||
ret = ioctl(sockfd, SIOCBTADVSTART,
|
||||
(unsigned long)((uintptr_t)&btreq));
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf(stderr, "ERROR: ioctl(SIOCBT_ADVERTISESTART) failed: %d\n",
|
||||
fprintf(stderr, "ERROR: ioctl(SIOCBTADVSTART) failed: %d\n",
|
||||
errno);
|
||||
}
|
||||
}
|
||||
@ -153,29 +165,30 @@ static void btsak_cmd_advertisestart(FAR struct btsak_s *btsak, FAR char *cmd,
|
||||
* Name: btsak_cmd_advertisestop
|
||||
*
|
||||
* Description:
|
||||
* Scan stop command
|
||||
* Advertise stop command
|
||||
*
|
||||
****************************************************************************/
|
||||
|
||||
static void btsak_cmd_advertisestop(FAR struct btsak_s *btsak, FAR char *cmd,
|
||||
int argc, FAR char *argv[])
|
||||
int argc, FAR char *argv[])
|
||||
{
|
||||
struct bt_advertisestop_s stop;
|
||||
struct btreq_s btreq;
|
||||
int sockfd;
|
||||
int ret;
|
||||
|
||||
/* Perform the IOCTL to stop advertising */
|
||||
|
||||
strncpy(stop.at_name, btsak->ifname, HCI_DEVNAME_SIZE);
|
||||
memset(&btreq, 0, sizeof(struct bt_advertisebtreq_s));
|
||||
strncpy(btreq.btr_name, btsak->ifname, HCI_DEVNAME_SIZE);
|
||||
|
||||
sockfd = btsak_socket(btsak);
|
||||
if (sockfd >= 0)
|
||||
{
|
||||
ret = ioctl(sockfd, SIOCBT_ADVERTISESTOP,
|
||||
(unsigned long)((uintptr_t)&stop));
|
||||
ret = ioctl(sockfd, SIOCBTADVSTOP,
|
||||
(unsigned long)((uintptr_t)&btreq));
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf(stderr, "ERROR: ioctl(SIOCBT_ADVERTISESTOP) failed: %d\n",
|
||||
fprintf(stderr, "ERROR: ioctl(SIOCBTADVSTOP) failed: %d\n",
|
||||
errno);
|
||||
}
|
||||
}
|
||||
|
@ -91,21 +91,24 @@ static void btsak_scan_showusage(FAR const char *progname,
|
||||
static void btsak_cmd_scanstart(FAR struct btsak_s *btsak, FAR char *cmd,
|
||||
int argc, FAR char *argv[])
|
||||
{
|
||||
struct bt_scanstart_s start;
|
||||
struct btreq_s btreq;
|
||||
int argind;
|
||||
int sockfd;
|
||||
int ret;
|
||||
|
||||
memset(&btreq, 0, sizeof(struct bt_advertisebtreq_s));
|
||||
strncpy(btreq.btr_name, btsak->ifname, HCI_DEVNAME_SIZE);
|
||||
|
||||
/* Check if an option was provided */
|
||||
|
||||
argind = 1;
|
||||
start.ss_dupenable = false;
|
||||
btreq.btr_dupenable = false;
|
||||
|
||||
if (argc > 1)
|
||||
{
|
||||
if (strcmp(argv[argind], "-d") == 0)
|
||||
{
|
||||
start.ss_dupenable = true;
|
||||
btreq.btr_dupenable = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -117,16 +120,14 @@ static void btsak_cmd_scanstart(FAR struct btsak_s *btsak, FAR char *cmd,
|
||||
|
||||
/* Perform the IOCTL to start scanning */
|
||||
|
||||
strncpy(start.ss_name, btsak->ifname, HCI_DEVNAME_SIZE);
|
||||
|
||||
sockfd = btsak_socket(btsak);
|
||||
if (sockfd >= 0)
|
||||
{
|
||||
ret = ioctl(sockfd, SIOCBT_SCANSTART,
|
||||
(unsigned long)((uintptr_t)&start));
|
||||
ret = ioctl(sockfd, SIOCBTSCANSTART,
|
||||
(unsigned long)((uintptr_t)&btreq));
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf(stderr, "ERROR: ioctl(SIOCBT_SCANSTART) failed: %d\n",
|
||||
fprintf(stderr, "ERROR: ioctl(SIOCBTSCANSTART) failed: %d\n",
|
||||
errno);
|
||||
}
|
||||
}
|
||||
@ -145,27 +146,26 @@ static void btsak_cmd_scanstart(FAR struct btsak_s *btsak, FAR char *cmd,
|
||||
static void btsak_cmd_scanget(FAR struct btsak_s *btsak, FAR char *cmd,
|
||||
int argc, FAR char *argv[])
|
||||
{
|
||||
union
|
||||
{
|
||||
struct bt_scanresult_s result;
|
||||
uint8_t b[SIZEOF_BT_SCANRESULT_S(5)];
|
||||
} u;
|
||||
struct btreq_s btreq;
|
||||
struct bt_scanresponse_s result[5];
|
||||
int sockfd;
|
||||
int ret;
|
||||
|
||||
/* Perform the IOCTL to get the scan results so far */
|
||||
|
||||
strncpy(u.result.sr_name, btsak->ifname, HCI_DEVNAME_SIZE);
|
||||
u.result.sr_nrsp = 5;
|
||||
memset(&btreq, 0, sizeof(struct bt_advertisebtreq_s));
|
||||
strncpy(btreq.btr_name, btsak->ifname, HCI_DEVNAME_SIZE);
|
||||
btreq->btr_nrsp = 5;
|
||||
btreq.btr_rsp = result;
|
||||
|
||||
sockfd = btsak_socket(btsak);
|
||||
if (sockfd >= 0)
|
||||
{
|
||||
ret = ioctl(sockfd, SIOCBT_SCANGET,
|
||||
(unsigned long)((uintptr_t)&u.result));
|
||||
ret = ioctl(sockfd, SIOCBTSCANGET,
|
||||
(unsigned long)((uintptr_t)&btreq));
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf(stderr, "ERROR: ioctl(SIOCBT_SCANGET) failed: %d\n",
|
||||
fprintf(stderr, "ERROR: ioctl(SIOCBTSCANGET) failed: %d\n",
|
||||
errno);
|
||||
}
|
||||
|
||||
@ -181,7 +181,7 @@ static void btsak_cmd_scanget(FAR struct btsak_s *btsak, FAR char *cmd,
|
||||
printf("Scan result:\n");
|
||||
for (i = 0; i < u.result.sr_nrsp; i++)
|
||||
{
|
||||
rsp = &u.result.sr_rsp[i];
|
||||
rsp = &result[i];
|
||||
printf("%d.\tname: %s\n", rsp->sr_name);
|
||||
printf("\taddr: "
|
||||
"%02x:%02x:%02x:%02x:%02x:%02x type: %d\n",
|
||||
@ -221,22 +221,23 @@ static void btsak_cmd_scanget(FAR struct btsak_s *btsak, FAR char *cmd,
|
||||
static void btsak_cmd_scanstop(FAR struct btsak_s *btsak, FAR char *cmd,
|
||||
int argc, FAR char *argv[])
|
||||
{
|
||||
struct bt_scanstop_s stop;
|
||||
struct btreq_s btreq;
|
||||
int sockfd;
|
||||
int ret;
|
||||
|
||||
/* Perform the IOCTL to stop scanning and flush any buffered responses. */
|
||||
|
||||
strncpy(stop.st_name, btsak->ifname, HCI_DEVNAME_SIZE);
|
||||
memset(&btreq, 0, sizeof(struct bt_advertisebtreq_s));
|
||||
strncpy(btreq.btr_name, btsak->ifname, HCI_DEVNAME_SIZE);
|
||||
|
||||
sockfd = btsak_socket(btsak);
|
||||
if (sockfd >= 0)
|
||||
{
|
||||
ret = ioctl(sockfd, SIOCBT_SCANSTOP,
|
||||
(unsigned long)((uintptr_t)&stop));
|
||||
ret = ioctl(sockfd, SIOCBTSCANSTOP,
|
||||
(unsigned long)((uintptr_t)&btreq));
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf(stderr, "ERROR: ioctl(SIOCBT_SCANSTOP) failed: %d\n",
|
||||
fprintf(stderr, "ERROR: ioctl(SIOCBTSCANSTOP) failed: %d\n",
|
||||
errno);
|
||||
}
|
||||
}
|
||||
|
@ -126,7 +126,7 @@ static void btsak_security_showusage(FAR const char *progname,
|
||||
|
||||
void btsak_cmd_security(FAR struct btsak_s *btsak, int argc, FAR char *argv[])
|
||||
{
|
||||
struct bt_security_s sec;
|
||||
struct btreq_s btreq;
|
||||
int sockfd;
|
||||
int ret;
|
||||
|
||||
@ -153,7 +153,10 @@ void btsak_cmd_security(FAR struct btsak_s *btsak, int argc, FAR char *argv[])
|
||||
|
||||
/* The first argument must be an address of the form xx:xx:xx:xx:xx:xx */
|
||||
|
||||
ret = btsak_str2addr(argv[1], sec.se_addr.val);
|
||||
memset(&btreq, 0, sizeof(struct bt_advertisebtreq_s));
|
||||
strncpy(btreq.btr_name, btsak->ifname, HCI_DEVNAME_SIZE);
|
||||
|
||||
ret = btsak_str2addr(argv[1], btreq.btr_secaddr.val);
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Invalid address string: %s/n", argv[1]);
|
||||
@ -162,7 +165,7 @@ void btsak_cmd_security(FAR struct btsak_s *btsak, int argc, FAR char *argv[])
|
||||
|
||||
/* The second address is the address type, either "public" or "random" */
|
||||
|
||||
ret = btsak_str2addrtype(argv[2], &sec.se_addr.type);
|
||||
ret = btsak_str2addrtype(argv[2], &btreq.btr_secaddr.type);
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf(stderr, "ERROR: Invalid address type: %s/n", argv[2]);
|
||||
@ -171,19 +174,17 @@ void btsak_cmd_security(FAR struct btsak_s *btsak, int argc, FAR char *argv[])
|
||||
|
||||
/* The third argument is the security level */
|
||||
|
||||
ret = btsak_str2seclevel(argv[3], &sec.se_level);
|
||||
ret = btsak_str2seclevel(argv[3], &btreq.btr_seclevel);
|
||||
|
||||
/* Perform the IOCTL to stop advertising */
|
||||
|
||||
strncpy(sec.se_name, btsak->ifname, HCI_DEVNAME_SIZE);
|
||||
|
||||
sockfd = btsak_socket(btsak);
|
||||
if (sockfd >= 0)
|
||||
{
|
||||
ret = ioctl(sockfd, SIOCBT_SECURITY, (unsigned long)((uintptr_t)&sec));
|
||||
ret = ioctl(sockfd, SIOCBTSECURITY, (unsigned long)((uintptr_t)&btreq));
|
||||
if (ret < 0)
|
||||
{
|
||||
fprintf(stderr, "ERROR: ioctl(SIOCBT_SECURITY) failed: %d\n",
|
||||
fprintf(stderr, "ERROR: ioctl(SIOCBTSECURITY) failed: %d\n",
|
||||
errno);
|
||||
}
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user