| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114 |
- // SPDX-License-Identifier: GPL-2.0-or-later
- /*
- *
- * BlueZ - Bluetooth protocol stack for Linux
- *
- * Copyright (C) 2012 Intel Corporation.
- *
- */
- #ifdef HAVE_CONFIG_H
- #include <config.h>
- #endif
- #define _GNU_SOURCE
- #include "parser.h"
- #include "lib/amp.h"
- static void amp_dump_chanlist(int level, struct amp_tlv *tlv, char *prefix)
- {
- struct amp_chan_list *chan_list = (void *) tlv->val;
- struct amp_country_triplet *triplet;
- int i, num;
- num = (tlv->len - sizeof(*chan_list)) / sizeof(*triplet);
- printf("%s (number of triplets %d)\n", prefix, num);
- p_indent(level+2, 0);
- printf("Country code: %c%c%c\n", chan_list->country_code[0],
- chan_list->country_code[1], chan_list->country_code[2]);
- for (i = 0; i < num; i++) {
- triplet = &chan_list->triplets[i];
- p_indent(level+2, 0);
- if (triplet->chans.first_channel >= 201) {
- printf("Reg ext id %d reg class %d coverage class %d\n",
- triplet->ext.reg_extension_id,
- triplet->ext.reg_class,
- triplet->ext.coverage_class);
- } else {
- if (triplet->chans.num_channels == 1)
- printf("Channel %d max power %d\n",
- triplet->chans.first_channel,
- triplet->chans.max_power);
- else
- printf("Channels %d - %d max power %d\n",
- triplet->chans.first_channel,
- triplet->chans.first_channel +
- triplet->chans.num_channels,
- triplet->chans.max_power);
- }
- }
- }
- void amp_assoc_dump(int level, uint8_t *assoc, uint16_t len)
- {
- struct amp_tlv *tlv = (void *) assoc;
- p_indent(level, 0);
- printf("Assoc data [len %d]:\n", len);
- while (len > sizeof(*tlv)) {
- uint16_t tlvlen = btohs(tlv->len);
- struct amp_pal_ver *ver;
- p_indent(level+1, 0);
- switch (tlv->type) {
- case A2MP_MAC_ADDR_TYPE:
- if (tlvlen != 6)
- break;
- printf("MAC: %2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X\n",
- tlv->val[0], tlv->val[1], tlv->val[2],
- tlv->val[3], tlv->val[4], tlv->val[5]);
- break;
- case A2MP_PREF_CHANLIST_TYPE:
- amp_dump_chanlist(level, tlv, "Preferred Chan List");
- break;
- case A2MP_CONNECTED_CHAN:
- amp_dump_chanlist(level, tlv, "Connected Chan List");
- break;
- case A2MP_PAL_CAP_TYPE:
- if (tlvlen != 4)
- break;
- printf("PAL CAP: %2.2x %2.2x %2.2x %2.2x\n",
- tlv->val[0], tlv->val[1], tlv->val[2],
- tlv->val[3]);
- break;
- case A2MP_PAL_VER_INFO:
- if (tlvlen != 5)
- break;
- ver = (struct amp_pal_ver *) tlv->val;
- printf("PAL VER: %2.2x Comp ID: %4.4x SubVer: %4.4x\n",
- ver->ver, btohs(ver->company_id),
- btohs(ver->sub_ver));
- break;
- default:
- printf("Unrecognized type %d\n", tlv->type);
- break;
- }
- len -= tlvlen + sizeof(*tlv);
- assoc += tlvlen + sizeof(*tlv);
- tlv = (struct amp_tlv *) assoc;
- }
- }
|