4987 lines
149 KiB
C
4987 lines
149 KiB
C
/* packet-btbrlmp.c
|
|
* Routines for Bluetooth LMP dissection
|
|
* Copyright 2009, Michael Ossmann <mike@ossmann.com>
|
|
*
|
|
* Wireshark - Network traffic analyzer
|
|
* By Gerald Combs <gerald@wireshark.org>
|
|
* Copyright 1998 Gerald Combs
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License
|
|
* as published by the Free Software Foundation; either version 2
|
|
* of the License, or (at your option) any later version.
|
|
*
|
|
* This program is distributed in the hope that it will be useful,
|
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
* GNU General Public License for more details.
|
|
*
|
|
* You should have received a copy of the GNU General Public License
|
|
* along with this program; if not, write to the Free Software
|
|
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
|
|
*/
|
|
|
|
#include "config.h"
|
|
|
|
#include <epan/packet.h>
|
|
#include <epan/prefs.h>
|
|
|
|
/* LMP opcodes */
|
|
#define LMP_VSC 0
|
|
#define LMP_NAME_REQ 1
|
|
#define LMP_NAME_RES 2
|
|
#define LMP_ACCEPTED 3
|
|
#define LMP_NOT_ACCEPTED 4
|
|
#define LMP_CLKOFFSET_REQ 5
|
|
#define LMP_CLKOFFSET_RES 6
|
|
#define LMP_DETACH 7
|
|
#define LMP_IN_RAND 8
|
|
#define LMP_COMB_KEY 9
|
|
#define LMP_UNIT_KEY 10
|
|
#define LMP_AU_RAND 11
|
|
#define LMP_SRES 12
|
|
#define LMP_TEMP_RAND 13
|
|
#define LMP_TEMP_KEY 14
|
|
#define LMP_ENCRYPTION_MODE_REQ 15
|
|
#define LMP_ENCRYPTION_KEY_SIZE_REQ 16
|
|
#define LMP_START_ENCRYPTION_REQ 17
|
|
#define LMP_STOP_ENCRYPTION_REQ 18
|
|
#define LMP_SWITCH_REQ 19
|
|
#define LMP_HOLD 20
|
|
#define LMP_HOLD_REQ 21
|
|
#define LMP_SNIFF_REQ 23
|
|
#define LMP_UNSNIFF_REQ 24
|
|
#define LMP_PARK_REQ 25
|
|
#define LMP_SET_BROADCAST_SCAN_WINDOW 27
|
|
#define LMP_MODIFY_BEACON 28
|
|
#define LMP_UNPARK_BD_ADDR_REQ 29
|
|
#define LMP_UNPARK_PM_ADDR_REQ 30
|
|
#define LMP_INCR_POWER_REQ 31
|
|
#define LMP_DECR_POWER_REQ 32
|
|
#define LMP_MAX_POWER 33
|
|
#define LMP_MIN_POWER 34
|
|
#define LMP_AUTO_RATE 35
|
|
#define LMP_PREFERRED_RATE 36
|
|
#define LMP_VERSION_REQ 37
|
|
#define LMP_VERSION_RES 38
|
|
#define LMP_FEATURES_REQ 39
|
|
#define LMP_FEATURES_RES 40
|
|
#define LMP_QUALITY_OF_SERVICE 41
|
|
#define LMP_QUALITY_OF_SERVICE_REQ 42
|
|
#define LMP_SCO_LINK_REQ 43
|
|
#define LMP_REMOVE_SCO_LINK_REQ 44
|
|
#define LMP_MAX_SLOT 45
|
|
#define LMP_MAX_SLOT_REQ 46
|
|
#define LMP_TIMING_ACCURACY_REQ 47
|
|
#define LMP_TIMING_ACCURACY_RES 48
|
|
#define LMP_SETUP_COMPLETE 49
|
|
#define LMP_USE_SEMI_PERMANENT_KEY 50
|
|
#define LMP_HOST_CONNECTION_REQ 51
|
|
#define LMP_SLOT_OFFSET 52
|
|
#define LMP_PAGE_MODE_REQ 53
|
|
#define LMP_PAGE_SCAN_MODE_REQ 54
|
|
#define LMP_SUPERVISION_TIMEOUT 55
|
|
#define LMP_TEST_ACTIVATE 56
|
|
#define LMP_TEST_CONTROL 57
|
|
#define LMP_ENCRYPTION_KEY_SIZE_MASK_REQ 58
|
|
#define LMP_ENCRYPTION_KEY_SIZE_MASK_RES 59
|
|
#define LMP_SET_AFH 60
|
|
#define LMP_ENCAPSULATED_HEADER 61
|
|
#define LMP_ENCAPSULATED_PAYLOAD 62
|
|
#define LMP_SIMPLE_PAIRING_CONFIRM 63
|
|
#define LMP_SIMPLE_PAIRING_NUMBER 64
|
|
#define LMP_DHKEY_CHECK 65
|
|
#define LMP_ESCAPE_1 124
|
|
#define LMP_ESCAPE_2 125
|
|
#define LMP_ESCAPE_3 126
|
|
#define LMP_ESCAPE_4 127
|
|
|
|
/* LMP extended opcodes */
|
|
#define LMP_ACCEPTED_EXT 1
|
|
#define LMP_NOT_ACCEPTED_EXT 2
|
|
#define LMP_FEATURES_REQ_EXT 3
|
|
#define LMP_FEATURES_RES_EXT 4
|
|
#define LMP_PACKET_TYPE_TABLE_REQ 11
|
|
#define LMP_ESCO_LINK_REQ 12
|
|
#define LMP_REMOVE_ESCO_LINK_REQ 13
|
|
#define LMP_CHANNEL_CLASSIFICATION_REQ 16
|
|
#define LMP_CHANNEL_CLASSIFICATION 17
|
|
#define LMP_SNIFF_SUBRATING_REQ 21
|
|
#define LMP_SNIFF_SUBRATING_RES 22
|
|
#define LMP_PAUSE_ENCRYPTION_REQ 23
|
|
#define LMP_RESUME_ENCRYPTION_REQ 24
|
|
#define LMP_IO_CAPABILITY_REQ 25
|
|
#define LMP_IO_CAPABILITY_RES 26
|
|
#define LMP_NUMERIC_COMPARISON_FAILED 27
|
|
#define LMP_PASSKEY_FAILED 28
|
|
#define LMP_OOB_FAILED 29
|
|
#define LMP_KEYPRESS_NOTIFICATION 30
|
|
#define LMP_POWER_CONTROL_REQ 31
|
|
#define LMP_POWER_CONTROL_RES 32
|
|
#define LMP_PING_REQ 33
|
|
#define LMP_PING_RES 34
|
|
|
|
/* initialize the protocol and registered fields */
|
|
static int proto_btbrlmp = -1;
|
|
static int hf_lmp_accscheme = -1;
|
|
static int hf_lmp_afhchmap = -1;
|
|
static int hf_lmp_afhclass = -1;
|
|
static int hf_lmp_afhinst = -1;
|
|
static int hf_lmp_afhmaxintvl = -1;
|
|
static int hf_lmp_afhminintvl = -1;
|
|
static int hf_lmp_afhmode = -1;
|
|
static int hf_lmp_afhrptmode = -1;
|
|
static int hf_lmp_airmode = -1;
|
|
static int hf_lmp_araddr = -1;
|
|
static int hf_lmp_authreqs = -1;
|
|
static int hf_lmp_authres = -1;
|
|
static int hf_lmp_bdaddr = -1;
|
|
static int hf_lmp_bdaddr1 = -1;
|
|
static int hf_lmp_bdaddr2 = -1;
|
|
static int hf_lmp_bsw = -1;
|
|
static int hf_lmp_clkoffset = -1;
|
|
static int hf_lmp_commit = -1;
|
|
static int hf_lmp_confirm = -1;
|
|
static int hf_lmp_compid = -1;
|
|
static int hf_lmp_cryptmode = -1;
|
|
static int hf_lmp_daccess = -1;
|
|
static int hf_lmp_db = -1;
|
|
static int hf_lmp_dbsleep = -1;
|
|
static int hf_lmp_deltab = -1;
|
|
static int hf_lmp_desco = -1;
|
|
static int hf_lmp_drift = -1;
|
|
static int hf_lmp_dsco = -1;
|
|
static int hf_lmp_dsniff = -1;
|
|
static int hf_lmp_encdata = -1;
|
|
static int hf_lmp_enclen = -1;
|
|
static int hf_lmp_encmaj = -1;
|
|
static int hf_lmp_encmin = -1;
|
|
static int hf_lmp_eop = -1;
|
|
static int hf_lmp_eopinre = -1;
|
|
static int hf_lmp_escolenms = -1;
|
|
static int hf_lmp_escolensm = -1;
|
|
static int hf_lmp_escotypems = -1;
|
|
static int hf_lmp_escotypesm = -1;
|
|
static int hf_lmp_err = -1;
|
|
static int hf_lmp_escohdl = -1;
|
|
static int hf_lmp_escoltaddr = -1;
|
|
static int hf_lmp_features = -1;
|
|
static int hf_lmp_feat_3slot = -1;
|
|
static int hf_lmp_feat_5slot = -1;
|
|
static int hf_lmp_feat_enc = -1;
|
|
static int hf_lmp_feat_slotoff = -1;
|
|
static int hf_lmp_feat_timacc = -1;
|
|
static int hf_lmp_feat_rolesw = -1;
|
|
static int hf_lmp_feat_holdmo = -1;
|
|
static int hf_lmp_feat_sniffmo = -1;
|
|
static int hf_lmp_feat_res0 = -1;
|
|
static int hf_lmp_feat_pwrctlreq = -1;
|
|
static int hf_lmp_feat_cqddr = -1;
|
|
static int hf_lmp_feat_sco = -1;
|
|
static int hf_lmp_feat_hv2 = -1;
|
|
static int hf_lmp_feat_hv3 = -1;
|
|
static int hf_lmp_feat_mulaw = -1;
|
|
static int hf_lmp_feat_alaw = -1;
|
|
static int hf_lmp_feat_cvsd = -1;
|
|
static int hf_lmp_feat_pagneg = -1;
|
|
static int hf_lmp_feat_pwrctl = -1;
|
|
static int hf_lmp_feat_transsync = -1;
|
|
static int hf_lmp_feat_flowctl1 = -1;
|
|
static int hf_lmp_feat_flowctl2 = -1;
|
|
static int hf_lmp_feat_flowctl3 = -1;
|
|
static int hf_lmp_feat_bcenc = -1;
|
|
static int hf_lmp_feat_res1 = -1;
|
|
static int hf_lmp_feat_acl2 = -1;
|
|
static int hf_lmp_feat_acl3 = -1;
|
|
static int hf_lmp_feat_eninq = -1;
|
|
static int hf_lmp_feat_intinq = -1;
|
|
static int hf_lmp_feat_intpag = -1;
|
|
static int hf_lmp_feat_rssiinq = -1;
|
|
static int hf_lmp_feat_ev3 = -1;
|
|
static int hf_lmp_feat_ev4 = -1;
|
|
static int hf_lmp_feat_ev5 = -1;
|
|
static int hf_lmp_feat_res2 = -1;
|
|
static int hf_lmp_feat_afhcapsl = -1;
|
|
static int hf_lmp_feat_afhclasl = -1;
|
|
static int hf_lmp_feat_bredrnotsup = -1;
|
|
static int hf_lmp_feat_lesup = -1;
|
|
static int hf_lmp_feat_3slotenh = -1;
|
|
static int hf_lmp_feat_5slotenh = -1;
|
|
static int hf_lmp_feat_sniffsubr = -1;
|
|
static int hf_lmp_feat_pauseenc = -1;
|
|
static int hf_lmp_feat_afhcapma = -1;
|
|
static int hf_lmp_feat_afhclama = -1;
|
|
static int hf_lmp_feat_esco2 = -1;
|
|
static int hf_lmp_feat_esco3 = -1;
|
|
static int hf_lmp_feat_3slotenhesco = -1;
|
|
static int hf_lmp_feat_extinqres = -1;
|
|
static int hf_lmp_feat_simlebredr = -1;
|
|
static int hf_lmp_feat_res3 = -1;
|
|
static int hf_lmp_feat_ssp = -1;
|
|
static int hf_lmp_feat_enpdu = -1;
|
|
static int hf_lmp_feat_edr = -1;
|
|
static int hf_lmp_feat_nonflush = -1;
|
|
static int hf_lmp_feat_res4 = -1;
|
|
static int hf_lmp_feat_lstimche = -1;
|
|
static int hf_lmp_feat_inqtxpwr = -1;
|
|
static int hf_lmp_feat_enhpwr = -1;
|
|
static int hf_lmp_feat_res5 = -1;
|
|
static int hf_lmp_feat_res6 = -1;
|
|
static int hf_lmp_feat_res7 = -1;
|
|
static int hf_lmp_feat_res8 = -1;
|
|
static int hf_lmp_feat_extfeat = -1;
|
|
static int hf_lmp_featuresext = -1;
|
|
static int hf_lmp_efeat_ssp = -1;
|
|
static int hf_lmp_efeat_lesup = -1;
|
|
static int hf_lmp_efeat_lebredr = -1;
|
|
static int hf_lmp_efeat_sch = -1;
|
|
static int hf_lmp_efeat_csbma = -1;
|
|
static int hf_lmp_efeat_csbsl = -1;
|
|
static int hf_lmp_efeat_syntr = -1;
|
|
static int hf_lmp_efeat_synsc = -1;
|
|
static int hf_lmp_efeat_inqresnote = -1;
|
|
static int hf_lmp_efeat_genintsc = -1;
|
|
static int hf_lmp_efeat_ccadj = -1;
|
|
static int hf_lmp_efeat_res0 = -1;
|
|
static int hf_lmp_efeat_scc = -1;
|
|
static int hf_lmp_efeat_ping = -1;
|
|
static int hf_lmp_efeat_res1 = -1;
|
|
static int hf_lmp_efeat_trnud = -1;
|
|
static int hf_lmp_efeat_sam = -1;
|
|
static int hf_lmp_fpage = -1;
|
|
static int hf_lmp_htime = -1;
|
|
static int hf_lmp_hinst = -1;
|
|
static int hf_lmp_hopmode = -1;
|
|
static int hf_lmp_iocaps = -1;
|
|
static int hf_lmp_jitter = -1;
|
|
static int hf_lmp_key = -1;
|
|
static int hf_lmp_keysz = -1;
|
|
static int hf_lmp_ksmask = -1;
|
|
static int hf_lmp_ltaddr1 = -1;
|
|
static int hf_lmp_ltaddr2 = -1;
|
|
static int hf_lmp_ltaddr3 = -1;
|
|
static int hf_lmp_ltaddr4 = -1;
|
|
static int hf_lmp_ltaddr5 = -1;
|
|
static int hf_lmp_ltaddr6 = -1;
|
|
static int hf_lmp_ltaddr7 = -1;
|
|
static int hf_lmp_maccess = -1;
|
|
static int hf_lmp_maxslots = -1;
|
|
static int hf_lmp_maxsp = -1;
|
|
static int hf_lmp_maxss = -1;
|
|
static int hf_lmp_minsmt = -1;
|
|
static int hf_lmp_naccslots = -1;
|
|
static int hf_lmp_namefrag = -1;
|
|
static int hf_lmp_namelen = -1;
|
|
static int hf_lmp_nameoffset = -1;
|
|
static int hf_lmp_nb = -1;
|
|
static int hf_lmp_nbc = -1;
|
|
static int hf_lmp_nbsleep = -1;
|
|
static int hf_lmp_negstate = -1;
|
|
static int hf_lmp_nonce = -1;
|
|
static int hf_lmp_nottype = -1;
|
|
static int hf_lmp_npoll = -1;
|
|
static int hf_lmp_oobauthdata = -1;
|
|
static int hf_lmp_op = -1;
|
|
static int hf_lmp_opinre = -1;
|
|
static int hf_lmp_pagesch = -1;
|
|
static int hf_lmp_pcmode = -1;
|
|
static int hf_lmp_pkttype = -1;
|
|
static int hf_lmp_pkttypetbl = -1;
|
|
static int hf_lmp_pmaddr = -1;
|
|
static int hf_lmp_pmaddr1 = -1;
|
|
static int hf_lmp_pmaddr2 = -1;
|
|
static int hf_lmp_pmaddr3 = -1;
|
|
static int hf_lmp_pmaddr4 = -1;
|
|
static int hf_lmp_pmaddr5 = -1;
|
|
static int hf_lmp_pmaddr6 = -1;
|
|
static int hf_lmp_pmaddr7 = -1;
|
|
static int hf_lmp_pollintvl = -1;
|
|
static int hf_lmp_pollper = -1;
|
|
static int hf_lmp_pssettings = -1;
|
|
static int hf_lmp_pwradjreq = -1;
|
|
static int hf_lmp_pwradjres = -1;
|
|
static int hf_lmp_pwradj_8dpsk = -1;
|
|
static int hf_lmp_pwradj_dqpsk = -1;
|
|
static int hf_lmp_pwradj_gfsk = -1;
|
|
static int hf_lmp_rand = -1;
|
|
static int hf_lmp_rate = -1;
|
|
static int hf_lmp_rate_fec = -1;
|
|
static int hf_lmp_rate_size = -1;
|
|
static int hf_lmp_rate_type = -1;
|
|
static int hf_lmp_rate_edrsize = -1;
|
|
static int hf_lmp_rxfreq = -1;
|
|
static int hf_lmp_scohdl = -1;
|
|
static int hf_lmp_scopkt = -1;
|
|
static int hf_lmp_slotoffset = -1;
|
|
static int hf_lmp_sniffatt = -1;
|
|
static int hf_lmp_sniffsi = -1;
|
|
static int hf_lmp_sniffto = -1;
|
|
static int hf_lmp_subversnr = -1;
|
|
static int hf_lmp_suptimeout = -1;
|
|
static int hf_lmp_swinst = -1;
|
|
static int hf_lmp_taccess = -1;
|
|
static int hf_lmp_tb = -1;
|
|
static int hf_lmp_tesco = -1;
|
|
static int hf_lmp_testlen = -1;
|
|
static int hf_lmp_testscen = -1;
|
|
static int hf_lmp_tid = -1;
|
|
static int hf_lmp_timectrl = -1;
|
|
static int hf_lmp_time_change = -1;
|
|
static int hf_lmp_time_init = -1;
|
|
static int hf_lmp_time_accwin = -1;
|
|
static int hf_lmp_tsco = -1;
|
|
static int hf_lmp_tsniff = -1;
|
|
static int hf_lmp_txfreq = -1;
|
|
static int hf_lmp_versnr = -1;
|
|
static int hf_lmp_wesco = -1;
|
|
|
|
/* supported features page 0 (standard p. 528) */
|
|
static const int *features_fields[] = {
|
|
&hf_lmp_feat_3slot,
|
|
&hf_lmp_feat_5slot,
|
|
&hf_lmp_feat_enc,
|
|
&hf_lmp_feat_slotoff,
|
|
&hf_lmp_feat_timacc,
|
|
&hf_lmp_feat_rolesw,
|
|
&hf_lmp_feat_holdmo,
|
|
&hf_lmp_feat_sniffmo,
|
|
&hf_lmp_feat_res0,
|
|
&hf_lmp_feat_pwrctlreq,
|
|
&hf_lmp_feat_cqddr,
|
|
&hf_lmp_feat_sco,
|
|
&hf_lmp_feat_hv2,
|
|
&hf_lmp_feat_hv3,
|
|
&hf_lmp_feat_mulaw,
|
|
&hf_lmp_feat_alaw,
|
|
&hf_lmp_feat_cvsd,
|
|
&hf_lmp_feat_pagneg,
|
|
&hf_lmp_feat_pwrctl,
|
|
&hf_lmp_feat_transsync,
|
|
&hf_lmp_feat_flowctl1,
|
|
&hf_lmp_feat_flowctl2,
|
|
&hf_lmp_feat_flowctl3,
|
|
&hf_lmp_feat_bcenc,
|
|
&hf_lmp_feat_res1,
|
|
&hf_lmp_feat_acl2,
|
|
&hf_lmp_feat_acl3,
|
|
&hf_lmp_feat_eninq,
|
|
&hf_lmp_feat_intinq,
|
|
&hf_lmp_feat_intpag,
|
|
&hf_lmp_feat_rssiinq,
|
|
&hf_lmp_feat_ev3,
|
|
&hf_lmp_feat_ev4,
|
|
&hf_lmp_feat_ev5,
|
|
&hf_lmp_feat_res2,
|
|
&hf_lmp_feat_afhcapsl,
|
|
&hf_lmp_feat_afhclasl,
|
|
&hf_lmp_feat_bredrnotsup,
|
|
&hf_lmp_feat_lesup,
|
|
&hf_lmp_feat_3slotenh,
|
|
&hf_lmp_feat_5slotenh,
|
|
&hf_lmp_feat_sniffsubr,
|
|
&hf_lmp_feat_pauseenc,
|
|
&hf_lmp_feat_afhcapma,
|
|
&hf_lmp_feat_afhclama,
|
|
&hf_lmp_feat_esco2,
|
|
&hf_lmp_feat_esco3,
|
|
&hf_lmp_feat_3slotenhesco,
|
|
&hf_lmp_feat_extinqres,
|
|
&hf_lmp_feat_simlebredr,
|
|
&hf_lmp_feat_res3,
|
|
&hf_lmp_feat_ssp,
|
|
&hf_lmp_feat_enpdu,
|
|
&hf_lmp_feat_edr,
|
|
&hf_lmp_feat_nonflush,
|
|
&hf_lmp_feat_res4,
|
|
&hf_lmp_feat_lstimche,
|
|
&hf_lmp_feat_inqtxpwr,
|
|
&hf_lmp_feat_enhpwr,
|
|
&hf_lmp_feat_res5,
|
|
&hf_lmp_feat_res6,
|
|
&hf_lmp_feat_res7,
|
|
&hf_lmp_feat_res8,
|
|
&hf_lmp_feat_extfeat,
|
|
NULL};
|
|
|
|
/* supported features page 1+2 (standard p. 530) */
|
|
static const int *extfeatures1_fields[] = {
|
|
|
|
&hf_lmp_efeat_ssp,
|
|
&hf_lmp_efeat_lesup,
|
|
&hf_lmp_efeat_lebredr,
|
|
&hf_lmp_efeat_sch,
|
|
NULL};
|
|
|
|
static const int *extfeatures2_fields[] = {
|
|
&hf_lmp_efeat_csbma,
|
|
&hf_lmp_efeat_csbsl,
|
|
&hf_lmp_efeat_syntr,
|
|
&hf_lmp_efeat_synsc,
|
|
&hf_lmp_efeat_inqresnote,
|
|
&hf_lmp_efeat_genintsc,
|
|
&hf_lmp_efeat_ccadj,
|
|
&hf_lmp_efeat_res0,
|
|
&hf_lmp_efeat_scc,
|
|
&hf_lmp_efeat_ping,
|
|
&hf_lmp_efeat_res1,
|
|
&hf_lmp_efeat_trnud,
|
|
&hf_lmp_efeat_sam,
|
|
NULL};
|
|
|
|
/* timing control flags */
|
|
static const int *timectrl_fields[] = {
|
|
&hf_lmp_time_change,
|
|
&hf_lmp_time_init,
|
|
&hf_lmp_time_accwin,
|
|
/* bits 3-7 reserved */
|
|
NULL};
|
|
|
|
static const true_false_string time_change = {
|
|
"timing change",
|
|
"no timing change"};
|
|
|
|
static const true_false_string time_init = {
|
|
"use initialization 2",
|
|
"use initialization 1"};
|
|
|
|
static const true_false_string time_accwin = {
|
|
"no access window",
|
|
"access window"};
|
|
|
|
static const true_false_string fec = {
|
|
"do not use FEC",
|
|
"use FEC"};
|
|
|
|
static const true_false_string tid = {
|
|
"transaction initiated by slave",
|
|
"transaction initiated by master"};
|
|
|
|
/* short LMP opcodes */
|
|
static const value_string opcode[] = {
|
|
{LMP_VSC, "LMP_Broadcom_BPCS"},
|
|
{LMP_NAME_REQ, "LMP_name_req"},
|
|
{LMP_NAME_RES, "LMP_name_res"},
|
|
{LMP_ACCEPTED, "LMP_accepted"},
|
|
{LMP_NOT_ACCEPTED, "LMP_not_accepted"},
|
|
{LMP_CLKOFFSET_REQ, "LMP_clkoffset_req"},
|
|
{LMP_CLKOFFSET_RES, "LMP_clkoffset_res"},
|
|
{LMP_DETACH, "LMP_detach"},
|
|
{LMP_IN_RAND, "LMP_in_rand"},
|
|
{LMP_COMB_KEY, "LMP_comb_key"},
|
|
{LMP_UNIT_KEY, "LMP_unit_key"},
|
|
{LMP_AU_RAND, "LMP_au_rand"},
|
|
{LMP_SRES, "LMP_sres"},
|
|
{LMP_TEMP_RAND, "LMP_temp_rand"},
|
|
{LMP_TEMP_KEY, "LMP_temp_key"},
|
|
{LMP_ENCRYPTION_MODE_REQ, "LMP_encryption_mode_req"},
|
|
{LMP_ENCRYPTION_KEY_SIZE_REQ, "LMP_encryption_key_size_req"},
|
|
{LMP_START_ENCRYPTION_REQ, "LMP_start_encryption_req"},
|
|
{LMP_STOP_ENCRYPTION_REQ, "LMP_stop_encryption_req"},
|
|
{LMP_SWITCH_REQ, "LMP_switch_req"},
|
|
{LMP_HOLD, "LMP_hold"},
|
|
{LMP_HOLD_REQ, "LMP_hold_req"},
|
|
{LMP_SNIFF_REQ, "LMP_sniff_req"},
|
|
{LMP_UNSNIFF_REQ, "LMP_unsniff_req"},
|
|
{LMP_PARK_REQ, "LMP_park_req"},
|
|
{LMP_SET_BROADCAST_SCAN_WINDOW, "LMP_set_broadcast_scan_window"},
|
|
{LMP_MODIFY_BEACON, "LMP_modify_beacon"},
|
|
{LMP_UNPARK_BD_ADDR_REQ, "LMP_unpark_BD_ADDR_req"},
|
|
{LMP_UNPARK_PM_ADDR_REQ, "LMP_unpark_PM_ADDR_req"},
|
|
{LMP_INCR_POWER_REQ, "LMP_incr_power_req"},
|
|
{LMP_DECR_POWER_REQ, "LMP_decr_power_req"},
|
|
{LMP_MAX_POWER, "LMP_max_power"},
|
|
{LMP_MIN_POWER, "LMP_min_power"},
|
|
{LMP_AUTO_RATE, "LMP_auto_rate"},
|
|
{LMP_PREFERRED_RATE, "LMP_preferred_rate"},
|
|
{LMP_VERSION_REQ, "LMP_version_req"},
|
|
{LMP_VERSION_RES, "LMP_version_res"},
|
|
{LMP_FEATURES_REQ, "LMP_features_req"},
|
|
{LMP_FEATURES_RES, "LMP_features_res"},
|
|
{LMP_QUALITY_OF_SERVICE, "LMP_quality_of_service"},
|
|
{LMP_QUALITY_OF_SERVICE_REQ, "LMP_quality_of_service_req"},
|
|
{LMP_SCO_LINK_REQ, "LMP_SCO_link_req"},
|
|
{LMP_REMOVE_SCO_LINK_REQ, "LMP_remove_SCO_link_req"},
|
|
{LMP_MAX_SLOT, "LMP_max_slot"},
|
|
{LMP_MAX_SLOT_REQ, "LMP_max_slot_req"},
|
|
{LMP_TIMING_ACCURACY_REQ, "LMP_timing_accuracy_req"},
|
|
{LMP_TIMING_ACCURACY_RES, "LMP_timing_accuracy_res"},
|
|
{LMP_SETUP_COMPLETE, "LMP_setup_complete"},
|
|
{LMP_USE_SEMI_PERMANENT_KEY, "LMP_use_semi_permanent_key"},
|
|
{LMP_HOST_CONNECTION_REQ, "LMP_host_connection_req"},
|
|
{LMP_SLOT_OFFSET, "LMP_slot_offset"},
|
|
{LMP_PAGE_MODE_REQ, "LMP_page_mode_req"},
|
|
{LMP_PAGE_SCAN_MODE_REQ, "LMP_page_scan_mode_req"},
|
|
{LMP_SUPERVISION_TIMEOUT, "LMP_supervision_timeout"},
|
|
{LMP_TEST_ACTIVATE, "LMP_test_activate"},
|
|
{LMP_TEST_CONTROL, "LMP_test_control"},
|
|
{LMP_ENCRYPTION_KEY_SIZE_MASK_REQ, "LMP_encryption_key_size_mask_req"},
|
|
{LMP_ENCRYPTION_KEY_SIZE_MASK_RES, "LMP_encryption_key_size_mask_res"},
|
|
{LMP_SET_AFH, "LMP_set_AFH"},
|
|
{LMP_ENCAPSULATED_HEADER, "LMP_encapsulated_header"},
|
|
{LMP_ENCAPSULATED_PAYLOAD, "LMP_encapsulated_payload"},
|
|
{LMP_SIMPLE_PAIRING_CONFIRM, "LMP_Simple_Pairing_Confirm"},
|
|
{LMP_SIMPLE_PAIRING_NUMBER, "LMP_Simple_Pairing_Number"},
|
|
{LMP_DHKEY_CHECK, "LMP_DHkey_Check"},
|
|
{LMP_ESCAPE_1, "Escape 1"},
|
|
{LMP_ESCAPE_2, "Escape 2"},
|
|
{LMP_ESCAPE_3, "Escape 3"},
|
|
{LMP_ESCAPE_4, "Escape 4"},
|
|
{0, NULL}};
|
|
|
|
/* extended LMP opcodes */
|
|
static const value_string ext_opcode[] = {
|
|
{LMP_ACCEPTED_EXT, "LMP_accepted_ext"},
|
|
{LMP_NOT_ACCEPTED_EXT, "LMP_not_accepted_ext"},
|
|
{LMP_FEATURES_REQ_EXT, "LMP_features_req_ext"},
|
|
{LMP_FEATURES_RES_EXT, "LMP_features_res_ext"},
|
|
{LMP_PACKET_TYPE_TABLE_REQ, "LMP_packet_type_table_req"},
|
|
{LMP_ESCO_LINK_REQ, "LMP_eSCO_link_req"},
|
|
{LMP_REMOVE_ESCO_LINK_REQ, "LMP_remove_eSCO_link_req"},
|
|
{LMP_CHANNEL_CLASSIFICATION_REQ, "LMP_channel_classification_req"},
|
|
{LMP_CHANNEL_CLASSIFICATION, "LMP_channel_classification"},
|
|
{LMP_SNIFF_SUBRATING_REQ, "LMP_sniff_subrating_req"},
|
|
{LMP_SNIFF_SUBRATING_RES, "LMP_sniff_subrating_res"},
|
|
{LMP_PAUSE_ENCRYPTION_REQ, "LMP_pause_encryption_req"},
|
|
{LMP_RESUME_ENCRYPTION_REQ, "LMP_resume_encryption_req"},
|
|
{LMP_IO_CAPABILITY_REQ, "LMP_IO_Capability_req"},
|
|
{LMP_IO_CAPABILITY_RES, "LMP_IO_Capability_res"},
|
|
{LMP_NUMERIC_COMPARISON_FAILED, "LMP_numeric_comparison_failed"},
|
|
{LMP_PASSKEY_FAILED, "LMP_passkey_failed"},
|
|
{LMP_OOB_FAILED, "LMP_oob_failed"},
|
|
{LMP_KEYPRESS_NOTIFICATION, "LMP_keypress_notification"},
|
|
{LMP_POWER_CONTROL_REQ, "LMP_power_control_req"},
|
|
{LMP_POWER_CONTROL_RES, "LMP_power_control_res"},
|
|
{LMP_PING_REQ, "LMP_ping_req"},
|
|
{LMP_PING_RES, "LMP_ping_res"},
|
|
{0, NULL}};
|
|
|
|
/* LMP error codes */
|
|
static const value_string error_code[] = {
|
|
{0x00, "Success"},
|
|
{0x01, "Unknown HCI Command"},
|
|
{0x02, "Unknown Connection Identifier"},
|
|
{0x03, "Hardware Failure"},
|
|
{0x04, "Page Timeout"},
|
|
{0x05, "Authentication Failure"},
|
|
{0x06, "PIN or Key Missing"},
|
|
{0x07, "Memory Capacity Exceeded"},
|
|
{0x08, "Connection Timeout"},
|
|
{0x09, "Connection Limit Exceeded"},
|
|
{0x0A, "Synchronous Connection Limit To A Device Exceeded"},
|
|
{0x0B, "ACL Connection Already Exists"},
|
|
{0x0C, "Command Disallowed"},
|
|
{0x0D, "Connection Rejected due to Limited Resources"},
|
|
{0x0E, "Connection Rejected Due To Security Reasons"},
|
|
{0x0F, "Connection Rejected due to Unacceptable BD_ADDR"},
|
|
{0x10, "Connection Accept Timeout Exceeded"},
|
|
{0x11, "Unsupported Feature or Parameter Value"},
|
|
{0x12, "Invalid HCI Command Parameters"},
|
|
{0x13, "Remote User Terminated Connection"},
|
|
{0x14, "Remote Device Terminated Connection due to Low Resources"},
|
|
{0x15, "Remote Device Terminated Connection due to Power Off"},
|
|
{0x16, "Connection Terminated By Local Host"},
|
|
{0x17, "Repeated Attempts"},
|
|
{0x18, "Pairing Not Allowed"},
|
|
{0x19, "Unknown LMP PDU"},
|
|
{0x1A, "Unsupported Remote Feature / Unsupported LMP Feature"},
|
|
{0x1B, "SCO Offset Rejected"},
|
|
{0x1C, "SCO Interval Rejected"},
|
|
{0x1D, "SCO Air Mode Rejected"},
|
|
{0x1E, "Invalid LMP Parameters"},
|
|
{0x1F, "Unspecified Error"},
|
|
{0x20, "Unsupported LMP Parameter Value"},
|
|
{0x21, "Role Change Not Allowed"},
|
|
{0x22, "LMP Response Timeout"},
|
|
{0x23, "LMP Error Transaction Collision"},
|
|
{0x24, "LMP PDU Not Allowed"},
|
|
{0x25, "Encryption Mode Not Acceptable"},
|
|
{0x26, "Link Key Can Not be Changed"},
|
|
{0x27, "Requested QoS Not Supported"},
|
|
{0x28, "Instant Passed"},
|
|
{0x29, "Pairing With Unit Key Not Supported"},
|
|
{0x2A, "Different Transaction Collision"},
|
|
{0x2B, "Reserved"},
|
|
{0x2C, "QoS Unacceptable Parameter"},
|
|
{0x2D, "QoS Rejected"},
|
|
{0x2E, "Channel Classification Not Supported"},
|
|
{0x2F, "Insufficient Security"},
|
|
{0x30, "Parameter Out Of Mandatory Range"},
|
|
{0x31, "Reserved"},
|
|
{0x32, "Role Switch Pending"},
|
|
{0x33, "Reserved"},
|
|
{0x34, "Reserved Slot Violation"},
|
|
{0x35, "Role Switch Failed"},
|
|
{0x36, "Extended Inquiry Response Too Large"},
|
|
{0x37, "Secure Simple Pairing Not Supported By Host."},
|
|
{0x38, "Host Busy - Pairing"},
|
|
{0x39, "Connection Rejected due to No Suitable Channel Found"},
|
|
{0, NULL}};
|
|
|
|
static const value_string encryption_mode[] = {
|
|
{0, "no encryption"},
|
|
{1, "encryption"},
|
|
{2, "encryption"},
|
|
/* 3 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string access_scheme[] = {
|
|
{0, "polling technique"},
|
|
/* 1 - 15 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string packet_size[] = {
|
|
{0, "no packet-size preference available"},
|
|
{1, "use 1-slot packets"},
|
|
{2, "use 3-slot packets"},
|
|
{3, "use 5-slot packets"},
|
|
{0, NULL}};
|
|
|
|
static const value_string edr_type[] = {
|
|
{0, "use DM1 packets"},
|
|
{1, "use 2 Mbps packets"},
|
|
{2, "use 3 Mbps packets"},
|
|
/* 3 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string versnr[] = {
|
|
{0, "Bluetooth Core Specification 1.0b"},
|
|
{1, "Bluetooth Core Specification 1.1"},
|
|
{2, "Bluetooth Core Specification 1.2"},
|
|
{3, "Bluetooth Core Specification 2.0 + EDR"},
|
|
{4, "Bluetooth Core Specification 2.1 + EDR"},
|
|
{5, "Bluetooth Core Specification 3.0 + HS"},
|
|
{6, "Bluetooth Core Specification 4.0"},
|
|
{7, "Bluetooth Core Specification 4.1"},
|
|
{8, "Bluetooth Core Specification 4.2"},
|
|
{9, "Bluetooth Core Specification 5.0"},
|
|
{10, "Bluetooth Core Specification 5.1"},
|
|
{11, "Bluetooth Core Specification 5.2"},
|
|
/* 12 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string compid[] = {
|
|
{0, "Ericsson Technology Licensing"},
|
|
{1, "Nokia Mobile Phones"},
|
|
{2, "Intel Corp."},
|
|
{3, "IBM Corp."},
|
|
{4, "Toshiba Corp."},
|
|
{5, "3Com"},
|
|
{6, "Microsoft"},
|
|
{7, "Lucent"},
|
|
{8, "Motorola"},
|
|
{9, "Infineon Technologies AG"},
|
|
{10, "Cambridge Silicon Radio"},
|
|
{11, "Silicon Wave"},
|
|
{12, "Digianswer A/S"},
|
|
{13, "Texas Instruments Inc."},
|
|
{14, "Parthus Technologies Inc."},
|
|
{15, "Broadcom Corporation"},
|
|
{16, "Mitel Semiconductor"},
|
|
{17, "Widcomm, Inc."},
|
|
{18, "Zeevo, Inc."},
|
|
{19, "Atmel Corporation"},
|
|
{20, "Mitsubishi Electric Corporation"},
|
|
{21, "RTX Telecom A/S"},
|
|
{22, "KC Technology Inc."},
|
|
{23, "Newlogic"},
|
|
{24, "Transilica, Inc."},
|
|
{25, "Rohde & Schwarz GmbH & Co. KG"},
|
|
{26, "TTPCom Limited"},
|
|
{27, "Signia Technologies, Inc."},
|
|
{28, "Conexant Systems Inc."},
|
|
{29, "Qualcomm"},
|
|
{30, "Inventel"},
|
|
{31, "AVM Berlin"},
|
|
{32, "BandSpeed, Inc."},
|
|
{33, "Mansella Ltd"},
|
|
{34, "NEC Corporation"},
|
|
{35, "WavePlus Technology Co., Ltd."},
|
|
{36, "Alcatel"},
|
|
{37, "Philips Semiconductors"},
|
|
{38, "C Technologies"},
|
|
{39, "Open Interface"},
|
|
{40, "R F Micro Devices"},
|
|
{41, "Hitachi Ltd"},
|
|
{42, "Symbol Technologies, Inc."},
|
|
{43, "Tenovis"},
|
|
{44, "Macronix International Co. Ltd."},
|
|
{45, "GCT Semiconductor"},
|
|
{46, "Norwood Systems"},
|
|
{47, "MewTel Technology Inc."},
|
|
{48, "ST Microelectronics"},
|
|
{49, "Synopsys"},
|
|
{50, "Red-M (Communications) Ltd"},
|
|
{51, "Commil Ltd"},
|
|
{52, "Computer Access Technology Corporation (CATC)"},
|
|
{53, "Eclipse (HQ Espana) S.L."},
|
|
{54, "Renesas Technology Corp."},
|
|
{55, "Mobilian Corporation"},
|
|
{56, "Terax"},
|
|
{57, "Integrated System Solution Corp."},
|
|
{58, "Matsushita Electric Industrial Co., Ltd."},
|
|
{59, "Gennum Corporation"},
|
|
{60, "Research In Motion"},
|
|
{61, "IPextreme, Inc."},
|
|
{62, "Systems and Chips, Inc"},
|
|
{63, "Bluetooth SIG, Inc"},
|
|
{64, "Seiko Epson Corporation"},
|
|
{65, "Integrated Silicon Solution Taiwan, Inc."},
|
|
{66, "CONWISE Technology Corporation Ltd"},
|
|
{67, "PARROT SA"},
|
|
{68, "Socket Mobile"},
|
|
{69, "Atheros Communications, Inc."},
|
|
{70, "MediaTek, Inc."},
|
|
{71, "Bluegiga (tentative)"},
|
|
{72, "Marvell Technology Group Ltd."},
|
|
{73, "3DSP Corporation"},
|
|
{74, "Accel Semiconductor Ltd."},
|
|
{75, "Continental Automotive Systems"},
|
|
{76, "Apple, Inc."},
|
|
{77, "Staccato Communications, Inc."},
|
|
{78, "Avago Technologies"},
|
|
{79, "APT Ltd."},
|
|
{80, "SiRF Technology, Inc."},
|
|
{81, "Tzero Technologies, Inc."},
|
|
{82, "J&M Corporation"},
|
|
{83, "Free2move AB"},
|
|
{84, "3DiJoyCorporation"},
|
|
{85, "Plantronics,Inc."},
|
|
{86, "SonyEricssonMobileCommunications"},
|
|
{87, "HarmanInternationalIndustries,Inc."},
|
|
{88, "Vizio,Inc."},
|
|
{89, "NordicSemiconductorASA"},
|
|
{90, "EMMicroelectronic-MarinSA"},
|
|
{91, "RalinkTechnologyCorporation"},
|
|
{92, "BelkinInternational,Inc."},
|
|
{93, "RealtekSemiconductorCorporation"},
|
|
{94, "StonestreetOne,LLC"},
|
|
{95, "Wicentric,Inc."},
|
|
{96, "RivieraWavesS.A.S"},
|
|
{97, "RDAMicroelectronics"},
|
|
{98, "GibsonGuitars"},
|
|
{99, "MiCommandInc."},
|
|
{100, "BandXIInternational,LLC"},
|
|
{101, "Hewlett-PackardCompany"},
|
|
{102, "9SolutionsOy"},
|
|
{103, "GNNetcomA/S"},
|
|
{104, "GeneralMotors"},
|
|
{105, "A&DEngineering,Inc."},
|
|
{106, "MindTreeLtd."},
|
|
{107, "PolarElectroOY"},
|
|
{108, "BeautifulEnterpriseCo.,Ltd."},
|
|
{109, "BriarTek,Inc"},
|
|
{110, "SummitDataCommunications,Inc."},
|
|
{111, "SoundID"},
|
|
{112, "Monster,LLC"},
|
|
{113, "connectBlueAB"},
|
|
{114, "ShangHaiSuperSmartElectronicsCo.Ltd."},
|
|
{115, "GroupSenseLtd."},
|
|
{116, "Zomm,LLC"},
|
|
{117, "SamsungElectronicsCo.Ltd."},
|
|
{118, "CreativeTechnologyLtd."},
|
|
{119, "LairdTechnologies"},
|
|
{120, "Nike,Inc."},
|
|
{121, "lesswireAG"},
|
|
{122, "MStarSemiconductor,Inc."},
|
|
{123, "HanlynnTechnologies"},
|
|
{124, "A&RCambridge"},
|
|
{125, "SeersTechnologyCo.,Ltd."},
|
|
{126, "SportsTrackingTechnologiesLtd."},
|
|
{127, "AutonetMobile"},
|
|
{128, "DeLormePublishingCompany,Inc."},
|
|
{129, "WuXiVimicro"},
|
|
{130, "SennheiserCommunicationsA/S"},
|
|
{131, "TimeKeepingSystems,Inc."},
|
|
{132, "LudusHelsinkiLtd."},
|
|
{133, "BlueRadios,Inc."},
|
|
{134, "EquinuxAG"},
|
|
{135, "GarminInternational,Inc."},
|
|
{136, "Ecotest"},
|
|
{137, "GNReSoundA/S"},
|
|
{138, "Jawbone"},
|
|
{139, "TopconPositioningSystems,LLC"},
|
|
{140, "GimbalInc.(formerlyQualcommLabs,Inc.andQualcommRetailSolutions,Inc.)"},
|
|
{141, "ZscanSoftware"},
|
|
{142, "QuinticCorp"},
|
|
{143, "TelitWirelessSolutionsGmbH(formerlyStollmannE+VGmbH)"},
|
|
{144, "FunaiElectricCo.,Ltd."},
|
|
{145, "AdvancedPANMOBILsystemsGmbH&Co.KG"},
|
|
{146, "ThinkOptics,Inc."},
|
|
{147, "UniversalElectronics,Inc."},
|
|
{148, "AirohaTechnologyCorp."},
|
|
{149, "NECLighting,Ltd."},
|
|
{150, "ODMTechnology,Inc."},
|
|
{151, "ConnecteDeviceLtd."},
|
|
{152, "zero1.tvGmbH"},
|
|
{153, "i.TechDynamicGlobalDistributionLtd."},
|
|
{154, "Alpwise"},
|
|
{155, "JiangsuToppowerAutomotiveElectronicsCo.,Ltd."},
|
|
{156, "Colorfy,Inc."},
|
|
{157, "GeoforceInc."},
|
|
{158, "BoseCorporation"},
|
|
{159, "SuuntoOy"},
|
|
{160, "KensingtonComputerProductsGroup"},
|
|
{161, "SR-Medizinelektronik"},
|
|
{162, "VertuCorporationLimited"},
|
|
{163, "MetaWatchLtd."},
|
|
{164, "LINAKA/S"},
|
|
{165, "OTLDynamicsLLC"},
|
|
{166, "PandaOceanInc."},
|
|
{167, "VisteonCorporation"},
|
|
{168, "ARPDevicesLimited"},
|
|
{169, "MagnetiMarelliS.p.A"},
|
|
{170, "CAENRFIDsrl"},
|
|
{171, "Ingenieur-SystemgruppeZahnGmbH"},
|
|
{172, "GreenThrottleGames"},
|
|
{173, "PeterSystemtechnikGmbH"},
|
|
{174, "OmegawaveOy"},
|
|
{175, "Cinetix"},
|
|
{176, "PassifSemiconductorCorp"},
|
|
{177, "SarisCyclingGroup,Inc"},
|
|
{178, "BekeyA/S"},
|
|
{179, "ClarinoxTechnologiesPty.Ltd."},
|
|
{180, "BDETechnologyCo.,Ltd."},
|
|
{181, "SwirlNetworks"},
|
|
{182, "Mesointernational"},
|
|
{183, "TreLabLtd"},
|
|
{184, "QualcommInnovationCenter,Inc.(QuIC)"},
|
|
{185, "JohnsonControls,Inc."},
|
|
{186, "StarkeyLaboratoriesInc."},
|
|
{187, "S-PowerElectronicsLimited"},
|
|
{188, "AceSensorInc"},
|
|
{189, "AplixCorporation"},
|
|
{190, "AAMPofAmerica"},
|
|
{191, "StalmartTechnologyLimited"},
|
|
{192, "AMICCOMElectronicsCorporation"},
|
|
{193, "ShenzhenExcelsecuDataTechnologyCo.,Ltd"},
|
|
{194, "GeneqInc."},
|
|
{195, "adidasAG"},
|
|
{196, "LGElectronics"},
|
|
{197, "OnsetComputerCorporation"},
|
|
{198, "SelflyBV"},
|
|
{199, "QuuppaOy."},
|
|
{200, "GeLoInc"},
|
|
{201, "Evluma"},
|
|
{202, "MC10"},
|
|
{203, "BinauricSE"},
|
|
{204, "BeatsElectronics"},
|
|
{205, "MicrochipTechnologyInc."},
|
|
{206, "ElgatoSystemsGmbH"},
|
|
{207, "ARCHOSSA"},
|
|
{208, "Dexcom,Inc."},
|
|
{209, "PolarElectroEuropeB.V."},
|
|
{210, "DialogSemiconductorB.V."},
|
|
{211, "TaixingbangTechnology(HK)Co,.LTD."},
|
|
{212, "Kawantech"},
|
|
{213, "AustcoCommunicationSystems"},
|
|
{214, "TimexGroupUSA,Inc."},
|
|
{215, "QualcommTechnologies,Inc."},
|
|
{216, "QualcommConnectedExperiences,Inc."},
|
|
{217, "VoyetraTurtleBeach"},
|
|
{218, "txtrGmbH"},
|
|
{219, "Biosentronics"},
|
|
{220, "Procter&Gamble"},
|
|
{221, "HosidenCorporation"},
|
|
{222, "MuzikLLC"},
|
|
{223, "MisfitWearablesCorp"},
|
|
{224, "Google"},
|
|
{225, "DanlersLtd"},
|
|
{226, "SemilinkInc"},
|
|
{227, "inMusicBrands,Inc"},
|
|
{228, "L.S.ResearchInc."},
|
|
{229, "EdenSoftwareConsultantsLtd."},
|
|
{230, "Freshtemp"},
|
|
{231, "KSTechnologies"},
|
|
{232, "ACTSTechnologies"},
|
|
{233, "VtrackSystems"},
|
|
{234, "Nielsen-KellermanCompany"},
|
|
{235, "ServerTechnologyInc."},
|
|
{236, "BioResearchAssociates"},
|
|
{237, "JollyLogic,LLC"},
|
|
{238, "AboveAverageOutcomes,Inc."},
|
|
{239, "BitsplittersGmbH"},
|
|
{240, "PayPal,Inc."},
|
|
{241, "WitronTechnologyLimited"},
|
|
{242, "MorseProjectInc."},
|
|
{243, "KentDisplaysInc."},
|
|
{244, "NautilusInc."},
|
|
{245, "SmartifierOy"},
|
|
{246, "ElcometerLimited"},
|
|
{247, "VSNTechnologies,Inc."},
|
|
{248, "AceUniCorp.,Ltd."},
|
|
{249, "StickNFind"},
|
|
{250, "CrystalCodeAB"},
|
|
{251, "KOUKAAMa.s."},
|
|
{252, "DelphiCorporation"},
|
|
{253, "ValenceTechLimited"},
|
|
{254, "StanleyBlackandDecker"},
|
|
{255, "TypoProducts,LLC"},
|
|
{256, "TomTomInternationalBV"},
|
|
{257, "Fugoo,Inc."},
|
|
{258, "KeiserCorporation"},
|
|
{259, "Bang&OlufsenA/S"},
|
|
{260, "PLUSLocationSystemsPtyLtd"},
|
|
{261, "UbiquitousComputingTechnologyCorporation"},
|
|
{262, "InnovativeYachtterSolutions"},
|
|
{263, "WilliamDemantHoldingA/S"},
|
|
{264, "ChiconyElectronicsCo.,Ltd."},
|
|
{265, "AtusBV"},
|
|
{266, "CodegateLtd"},
|
|
{267, "ERi,Inc"},
|
|
{268, "TransducersDirect,LLC"},
|
|
{269, "FujitsuTenLImited"},
|
|
{270, "AudiAG"},
|
|
{271, "HiSiliconTechnologiesCol,Ltd."},
|
|
{272, "NipponSeikiCo.,Ltd."},
|
|
{273, "SteelseriesApS"},
|
|
{274, "VisyblInc."},
|
|
{275, "OpenbrainTechnologies,Co.,Ltd."},
|
|
{276, "Xensr"},
|
|
{277, "e.solutions"},
|
|
{278, "10AKTechnologies"},
|
|
{279, "WimotoTechnologiesInc"},
|
|
{280, "RadiusNetworks,Inc."},
|
|
{281, "WizeTechnologyCo.,Ltd."},
|
|
{282, "QualcommLabs,Inc."},
|
|
{283, "HewlettPackardEnterprise"},
|
|
{284, "Baidu"},
|
|
{285, "ArendiAG"},
|
|
{286, "SkodaAutoa.s."},
|
|
{287, "VolkswagenAG"},
|
|
{288, "PorscheAG"},
|
|
{289, "SinoWealthElectronicLtd."},
|
|
{290, "AirTurn,Inc."},
|
|
{291, "Kinsa,Inc"},
|
|
{292, "HIDGlobal"},
|
|
{293, "SEATes"},
|
|
{294, "PrometheanLtd."},
|
|
{295, "SaluticaAlliedSolutions"},
|
|
{296, "GPSIGroupPtyLtd"},
|
|
{297, "NimbleDevicesOy"},
|
|
{298, "ChangzhouYongseInfotechCo.,Ltd."},
|
|
{299, "SportIQ"},
|
|
{300, "TEMECInstrumentsB.V."},
|
|
{301, "SonyCorporation"},
|
|
{302, "ASSAABLOY"},
|
|
{303, "ClarionCo.Inc."},
|
|
{304, "WarehouseInnovations"},
|
|
{305, "CypressSemiconductor"},
|
|
{306, "MADSInc"},
|
|
{307, "BlueMaestroLimited"},
|
|
{308, "ResolutionProducts,Ltd."},
|
|
{309, "AirewareLLC"},
|
|
{310, "Silvair,Inc."},
|
|
{311, "PrestigioPlazaLtd."},
|
|
{312, "NTEOInc."},
|
|
{313, "FocusSystemsCorporation"},
|
|
{314, "TencentHoldingsLtd."},
|
|
{315, "Allegion"},
|
|
{316, "MurataManufacturingCo.,Ltd."},
|
|
{317, "WirelessWERX"},
|
|
{318, "Nod,Inc."},
|
|
{319, "B&BManufacturingCompany"},
|
|
{320, "AlpineElectronics(China)Co.,Ltd"},
|
|
{321, "FedExServices"},
|
|
{322, "GrapeSystemsInc."},
|
|
{323, "BkonConnect"},
|
|
{324, "LintechGmbH"},
|
|
{325, "NovatelWireless"},
|
|
{326, "Ciright"},
|
|
{327, "MightyCast,Inc."},
|
|
{328, "AmbimatElectronics"},
|
|
{329, "PerytonsLtd."},
|
|
{330, "TivoliAudio,LLC"},
|
|
{331, "MasterLock"},
|
|
{332, "Mesh-NetLtd"},
|
|
{333, "HUIZHOUDESAYSVAUTOMOTIVECO.,LTD."},
|
|
{334, "Tangerine,Inc."},
|
|
{335, "B&WGroupLtd."},
|
|
{336, "PioneerCorporation"},
|
|
{337, "OnBeep"},
|
|
{338, "VernierSoftware&Technology"},
|
|
{339, "ROLErgo"},
|
|
{340, "PebbleTechnology"},
|
|
{341, "NETATMO"},
|
|
{342, "AccumulateAB"},
|
|
{343, "AnhuiHuamiInformationTechnologyCo.,Ltd."},
|
|
{344, "Inmites.r.o."},
|
|
{345, "ChefSteps,Inc."},
|
|
{346, "micasAG"},
|
|
{347, "BiomedicalResearchLtd."},
|
|
{348, "PitiusTecS.L."},
|
|
{349, "Estimote,Inc."},
|
|
{350, "UnikeyTechnologies,Inc."},
|
|
{351, "TimerCapCo."},
|
|
{352, "AwoX"},
|
|
{353, "yikes"},
|
|
{354, "MADSGlobalNZLtd."},
|
|
{355, "PCHInternational"},
|
|
{356, "QingdaoYeelinkInformationTechnologyCo.,Ltd."},
|
|
{357, "MilwaukeeTool(FormallyMilwaukeeElectricTools)"},
|
|
{358, "MISHIKPteLtd"},
|
|
{359, "AscensiaDiabetesCareUSInc."},
|
|
{360, "SpiceboxLLC"},
|
|
{361, "emberlight"},
|
|
{362, "Cooper-AtkinsCorporation"},
|
|
{363, "Qblinks"},
|
|
{364, "MYSPHERA"},
|
|
{365, "LifeScanInc"},
|
|
{366, "VolanticAB"},
|
|
{367, "PodoLabs,Inc"},
|
|
{368, "RocheDiabetesCareAG"},
|
|
{369, "AmazonFulfillmentService"},
|
|
{370, "ConnovateTechnologyPrivateLimited"},
|
|
{371, "Kocomojo,LLC"},
|
|
{372, "EverykeyInc."},
|
|
{373, "DynamicControls"},
|
|
{374, "SentriLock"},
|
|
{375, "I-SYSTinc."},
|
|
{376, "CASIOCOMPUTERCO.,LTD."},
|
|
{377, "LAPISSemiconductorCo.,Ltd."},
|
|
{378, "Telemonitor,Inc."},
|
|
{379, "taskitGmbH"},
|
|
{380, "DaimlerAG"},
|
|
{381, "BatAndCat"},
|
|
{382, "BluDotzLtd"},
|
|
{383, "XTelWirelessApS"},
|
|
{384, "GigasetCommunicationsGmbH"},
|
|
{385, "GeckoHealthInnovations,Inc."},
|
|
{386, "HOPUbiquitous"},
|
|
{387, "WaltDisney"},
|
|
{388, "Nectar"},
|
|
{389, "bel'appsLLC"},
|
|
{390, "CORELightingLtd"},
|
|
{391, "SeraphimSenseLtd"},
|
|
{392, "UnicoRBC"},
|
|
{393, "PhysicalEnterprisesInc."},
|
|
{394, "AbleTrendTechnologyLimited"},
|
|
{395, "KonicaMinolta,Inc."},
|
|
{396, "WiloSE"},
|
|
{397, "ExtronDesignServices"},
|
|
{398, "Fitbit,Inc."},
|
|
{399, "FirefliesSystems"},
|
|
{400, "IntellettoTechnologiesInc."},
|
|
{401, "FDKCORPORATION"},
|
|
{402, "Cloudleaf,Inc"},
|
|
{403, "MavericAutomationLLC"},
|
|
{404, "AcousticStreamCorporation"},
|
|
{405, "Zuli"},
|
|
{406, "PaxtonAccessLtd"},
|
|
{407, "WiSilicaInc."},
|
|
{408, "VENGITKorlatoltFelelosseguTarsasag"},
|
|
{409, "SALTOSYSTEMSS.L."},
|
|
{410, "TRONForum(formerlyT-EngineForum)"},
|
|
{411, "CUBETECHs.r.o."},
|
|
{412, "CokiyaIncorporated"},
|
|
{413, "CVSHealth"},
|
|
{414, "Ceruus"},
|
|
{415, "StrainstallLtd"},
|
|
{416, "ChannelEnterprises(HK)Ltd."},
|
|
{417, "FIAMM"},
|
|
{418, "GIGALANE.CO.,LTD"},
|
|
{419, "EROAD"},
|
|
{420, "MineSafetyAppliances"},
|
|
{421, "IconHealthandFitness"},
|
|
{422, "WilleEngineering(formelyasAsandooGmbH)"},
|
|
{423, "ENERGOUSCORPORATION"},
|
|
{424, "Taobao"},
|
|
{425, "CanonInc."},
|
|
{426, "GeophysicalTechnologyInc."},
|
|
{427, "Facebook,Inc."},
|
|
{428, "TrividiaHealth,Inc."},
|
|
{429, "FlightSafetyInternational"},
|
|
{430, "EarlensCorporation"},
|
|
{431, "SunriseMicroDevices,Inc."},
|
|
{432, "StarMicronicsCo.,Ltd."},
|
|
{433, "NetizensSp.zo.o."},
|
|
{434, "NymiInc."},
|
|
{435, "Nytec,Inc."},
|
|
{436, "TrineoSp.zo.o."},
|
|
{437, "NestLabsInc."},
|
|
{438, "LMTechnologiesLtd"},
|
|
{439, "GeneralElectricCompany"},
|
|
{440, "i+D3S.L."},
|
|
{441, "HANAMicron"},
|
|
{442, "StagesCyclingLLC"},
|
|
{443, "CochlearBoneAnchoredSolutionsAB"},
|
|
{444, "SenionLabAB"},
|
|
{445, "SyszoneCo.,Ltd"},
|
|
{446, "PulsateMobileLtd."},
|
|
{447, "HongKongHunterSunElectronicLimited"},
|
|
{448, "pironexGmbH"},
|
|
{449, "BRADATECHCorp."},
|
|
{450, "TransenergooilAG"},
|
|
{451, "Bunch"},
|
|
{452, "DMEMicroelectronics"},
|
|
{453, "BitcrazeAB"},
|
|
{454, "HASWAREInc."},
|
|
{455, "AbiogenixInc."},
|
|
{456, "Poly-ControlApS"},
|
|
{457, "Avi-on"},
|
|
{458, "LaerdalMedicalAS"},
|
|
{459, "FetchMyPet"},
|
|
{460, "SamLabsLtd."},
|
|
{461, "ChengduSynwingTechnologyLtd"},
|
|
{462, "HOUWASYSTEMDESIGN,k.k."},
|
|
{463, "BSH"},
|
|
{464, "PrimusInterParesLtd"},
|
|
{465, "AugustHome,Inc"},
|
|
{466, "GillElectronics"},
|
|
{467, "SkyWaveDesign"},
|
|
{468, "NewlabS.r.l."},
|
|
{469, "ELADsrl"},
|
|
{470, "G-wearablesinc."},
|
|
{471, "SquadroneSystemsInc."},
|
|
{472, "CodeCorporation"},
|
|
{473, "SavantSystemsLLC"},
|
|
{474, "LogitechInternationalSA"},
|
|
{475, "InnblueConsulting"},
|
|
{476, "iParkingLtd."},
|
|
{477, "KoninklijkePhilipsElectronicsN.V."},
|
|
{478, "MinelabElectronicsPtyLimited"},
|
|
{479, "BisonGroupLtd."},
|
|
{480, "WidexA/S"},
|
|
{481, "JollaLtd"},
|
|
{482, "Lectronix,Inc."},
|
|
{483, "CaterpillarInc"},
|
|
{484, "FreedomInnovations"},
|
|
{485, "DynamicDevicesLtd"},
|
|
{486, "TechnologySolutions(UK)Ltd"},
|
|
{487, "IPSGroupInc."},
|
|
{488, "STIR"},
|
|
{489, "Sano,Inc."},
|
|
{490, "AdvancedApplicationDesign,Inc."},
|
|
{491, "AutoMapLLC"},
|
|
{492, "SpreadtrumCommunicationsShanghaiLtd"},
|
|
{493, "CuteCircuitLTD"},
|
|
{494, "ValeoService"},
|
|
{495, "FullpowerTechnologies,Inc."},
|
|
{496, "KloudNation"},
|
|
{497, "ZebraTechnologiesCorporation"},
|
|
{498, "Itron,Inc."},
|
|
{499, "TheUniversityofTokyo"},
|
|
{500, "UTCFireandSecurity"},
|
|
{501, "CoolWebthingsLimited"},
|
|
{502, "DJOGlobal"},
|
|
{503, "GellinerLimited"},
|
|
{504, "Anyka(Guangzhou)MicroelectronicsTechnologyCo,LTD"},
|
|
{505, "MedtronicInc."},
|
|
{506, "GozioInc."},
|
|
{507, "FormLifting,LLC"},
|
|
{508, "WahooFitness,LLC"},
|
|
{509, "KontaktMicro-LocationSp.zo.o."},
|
|
{510, "RadioSystemsCorporation"},
|
|
{511, "FreescaleSemiconductor,Inc."},
|
|
{512, "VerifoneSystemsPteLtd.TaiwanBranch"},
|
|
{513, "ARTiming"},
|
|
{514, "RigadoLLC"},
|
|
{515, "KemppiOy"},
|
|
{516, "TapcentiveInc."},
|
|
{517, "SmartboticsInc."},
|
|
{518, "OtterProducts,LLC"},
|
|
{519, "STEMPInc."},
|
|
{520, "LumiGeekLLC"},
|
|
{521, "InvisionHeartInc."},
|
|
{522, "MacnicaInc."},
|
|
{523, "JaguarLandRoverLimited"},
|
|
{524, "CoroWareTechnologies,Inc"},
|
|
{525, "SimploTechnologyCo.,LTD"},
|
|
{526, "OmronHealthcareCo.,LTD"},
|
|
{527, "ComoduleGMBH"},
|
|
{528, "ikeGPS"},
|
|
{529, "TelinkSemiconductorCo.Ltd"},
|
|
{530, "InterplanCo.,Ltd"},
|
|
{531, "WylerAG"},
|
|
{532, "IKMultimediaProductionsrl"},
|
|
{533, "LukotonExperienceOy"},
|
|
{534, "MTILtd"},
|
|
{535, "Tech4home,Lda"},
|
|
{536, "HiotechAB"},
|
|
{537, "DOTTLimited"},
|
|
{538, "BlueSpeckLabs,LLC"},
|
|
{539, "CiscoSystems,Inc"},
|
|
{540, "MobicommInc"},
|
|
{541, "Edamic"},
|
|
{542, "Goodnet,Ltd"},
|
|
{543, "LusterLeafProductsInc"},
|
|
{544, "ManusMachinaBV"},
|
|
{545, "MobiquityNetworksInc"},
|
|
{546, "PraxisDynamics"},
|
|
{547, "PhilipMorrisProductsS.A."},
|
|
{548, "ComarchSA"},
|
|
{549, "NestlNespressoS.A."},
|
|
{550, "MerliniaA/S"},
|
|
{551, "LifeBEAMTechnologies"},
|
|
{552, "TwocanoesLabs,LLC"},
|
|
{553, "MuovertiLimited"},
|
|
{554, "StamerMusikanlagenGMBH"},
|
|
{555, "TeslaMotors"},
|
|
{556, "PharynksCorporation"},
|
|
{557, "Lupine"},
|
|
{558, "SiemensAG"},
|
|
{559, "Huami(Shanghai)CultureCommunicationCO.,LTD"},
|
|
{560, "FosterElectricCompany,Ltd"},
|
|
{561, "ETASA"},
|
|
{562, "x-SensoSolutionsKft"},
|
|
{563, "ShenzhenSuLongCommunicationLtd"},
|
|
{564, "FengFan(BeiJing)TechnologyCo,Ltd"},
|
|
{565, "QrioInc"},
|
|
{566, "PitpatpetLtd"},
|
|
{567, "MSHelis.r.l."},
|
|
{568, "Trakm8Ltd"},
|
|
{569, "JINCO,Ltd"},
|
|
{570, "AlatechTehnology"},
|
|
{571, "BeijingCarePulseElectronicTechnologyCo,Ltd"},
|
|
{572, "Awarepoint"},
|
|
{573, "ViCentraB.V."},
|
|
{574, "RavenIndustries"},
|
|
{575, "WaveWareTechnologiesInc."},
|
|
{576, "ArgenoxTechnologies"},
|
|
{577, "BragiGmbH"},
|
|
{578, "16LabInc"},
|
|
{579, "MasimoCorp"},
|
|
{580, "IoteraInc"},
|
|
{581, "Endress+Hauser"},
|
|
{582, "ACKmeNetworks,Inc."},
|
|
{583, "FiftyThreeInc."},
|
|
{584, "ParkerHannifinCorp"},
|
|
{585, "TranscranialLtd"},
|
|
{586, "UwatecAG"},
|
|
{587, "OrlanLLC"},
|
|
{588, "BlueCloverDevices"},
|
|
{589, "M-WaySolutionsGmbH"},
|
|
{590, "MicrotronicsEngineeringGmbH"},
|
|
{591, "SchneiderSchreibgerteGmbH"},
|
|
{592, "SapphireCircuitsLLC"},
|
|
{593, "LumoBodytechInc."},
|
|
{594, "UKCTechnosolution"},
|
|
{595, "XicatoInc."},
|
|
{596, "Playbrush"},
|
|
{597, "DaiNipponPrintingCo.,Ltd."},
|
|
{598, "G24PowerLimited"},
|
|
{599, "AdBabbleLocalCommerceInc."},
|
|
{600, "DevialetSA"},
|
|
{601, "ALTYOR"},
|
|
{602, "UniversityofAppliedSciencesValais/HauteEcoleValaisanne"},
|
|
{603, "FiveInteractive,LLCdbaZendo"},
|
|
{604, "NetEaseHangzhouNetworkco.Ltd."},
|
|
{605, "LexmarkInternationalInc."},
|
|
{606, "FlukeCorporation"},
|
|
{607, "YardarmTechnologies"},
|
|
{608, "SensaRx"},
|
|
{609, "SECVREGmbH"},
|
|
{610, "GlacialRidgeTechnologies"},
|
|
{611, "Identiv,Inc."},
|
|
{612, "DDS,Inc."},
|
|
{613, "SMKCorporation"},
|
|
{614, "SchawbelTechnologiesLLC"},
|
|
{615, "XMISystemsSA"},
|
|
{616, "Cerevo"},
|
|
{617, "TorroxGmbH&CoKG"},
|
|
{618, "Gemalto"},
|
|
{619, "DEKAResearch&DevelopmentCorp."},
|
|
{620, "DomsterTadeuszSzydlowski"},
|
|
{621, "TechnogymSPA"},
|
|
{622, "FLEURBAEYBVBA"},
|
|
{623, "AptcodeSolutions"},
|
|
{624, "LSIADLTechnology"},
|
|
{625, "AnimasCorp"},
|
|
{626, "AlpsElectricCo.,Ltd."},
|
|
{627, "OCEASOFT"},
|
|
{628, "MotsaiResearch"},
|
|
{629, "Geotab"},
|
|
{630, "E.G.O.Elektro-GertebauGmbH"},
|
|
{631, "bewhereinc"},
|
|
{632, "JohnsonOutdoorsInc"},
|
|
{633, "steuteSchaltgerateGmbH&Co.KG"},
|
|
{634, "Ekominiinc."},
|
|
{635, "DEFAAS"},
|
|
{636, "AseptikaLtd"},
|
|
{637, "HUAWEITechnologiesCo.,Ltd.()"},
|
|
{638, "HabitAware,LLC"},
|
|
{639, "ruwidoaustriagmbh"},
|
|
{640, "ITECcorporation"},
|
|
{641, "StoneL"},
|
|
{642, "SonovaAG"},
|
|
{643, "MavenMachines,Inc."},
|
|
{644, "SynapseElectronics"},
|
|
{645, "StandardInnovationInc."},
|
|
{646, "RFCode,Inc."},
|
|
{647, "WallyVenturesS.L."},
|
|
{648, "WillowbankElectronicsLtd"},
|
|
{649, "SKTelecom"},
|
|
{650, "JetroAS"},
|
|
{651, "CodeGearsLTD"},
|
|
{652, "NANOLINKAPS"},
|
|
{653, "IF,LLC"},
|
|
{654, "RFDigitalCorp"},
|
|
{655, "Church&DwightCo.,Inc"},
|
|
{656, "MultibitOy"},
|
|
{657, "CliniCloudInc"},
|
|
{658, "SwiftSensors"},
|
|
{659, "BlueBite"},
|
|
{660, "ELIASGmbH"},
|
|
{661, "SivantosGmbH"},
|
|
{662, "Petzl"},
|
|
{663, "stormpowerltd"},
|
|
{664, "EISSTLtd"},
|
|
{665, "InexessTechnologySimmaKG"},
|
|
{666, "Currant,Inc."},
|
|
{667, "C2Development,Inc."},
|
|
{668, "BlueSkyScientific,LLC"},
|
|
{669, "ALOTTAZSLABS,LLC"},
|
|
{670, "Kupsonspol.sr.o."},
|
|
{671, "AreusEngineeringGmbH"},
|
|
{672, "ImpossibleCameraGmbH"},
|
|
{673, "InventureTrackSystems"},
|
|
{674, "LockedUp"},
|
|
{675, "Itude"},
|
|
{676, "PacificLockCompany"},
|
|
{677, "TendyronCorporation()"},
|
|
{678, "RobertBoschGmbH"},
|
|
{679, "IlluxtroninternationalB.V."},
|
|
{680, "miSportLtd."},
|
|
{681, "Chargelib"},
|
|
{682, "DopplerLab"},
|
|
{683, "BBPOSLimited"},
|
|
{684, "RTBElektronikGmbH&Co.KG"},
|
|
{685, "RxNetworks,Inc."},
|
|
{686, "WeatherFlow,Inc."},
|
|
{687, "TechnicolorUSAInc."},
|
|
{688, "Bestechnic(Shanghai),Ltd"},
|
|
{689, "RadenInc"},
|
|
{690, "JouZenOy"},
|
|
{691, "CLABERS.P.A."},
|
|
{692, "Hyginex,Inc."},
|
|
{693, "HANSHINELECTRICRAILWAYCO.,LTD."},
|
|
{694, "SchneiderElectric"},
|
|
{695, "OortTechnologiesLLC"},
|
|
{696, "ChronoTherapeutics"},
|
|
{697, "RinnaiCorporation"},
|
|
{698, "SwissprimeTechnologiesAG"},
|
|
{699, "Koha.,Co.Ltd"},
|
|
{700, "GenevacLtd"},
|
|
{701, "Chemtronics"},
|
|
{702, "SeguroTechnologySp.zo.o."},
|
|
{703, "RedbirdFlightSimulations"},
|
|
{704, "DashRobotics"},
|
|
{705, "LINECorporation"},
|
|
{706, "GuillemotCorporation"},
|
|
{707, "TechtronicPowerToolsTechnologyLimited"},
|
|
{708, "WilsonSportingGoods"},
|
|
{709, "Lenovo(Singapore)PteLtd.()"},
|
|
{710, "AyatanSensors"},
|
|
{711, "ElectronicsTomorrowLimited"},
|
|
{712, "VASCODataSecurityInternational,Inc."},
|
|
{713, "PayRangeInc."},
|
|
{714, "ABOVSemiconductor"},
|
|
{715, "AINA-WirelessInc."},
|
|
{716, "EijkelkampSoil&Water"},
|
|
{717, "BMAergonomicsb.v."},
|
|
{718, "TevaBrandedPharmaceuticalProductsR&D,Inc."},
|
|
{719, "Anima"},
|
|
{720, "3M"},
|
|
{721, "EmpaticaSrl"},
|
|
{722, "Afero,Inc."},
|
|
{723, "PowercastCorporation"},
|
|
{724, "SecuyouApS"},
|
|
{725, "OMRONCorporation"},
|
|
{726, "SendSolutions"},
|
|
{727, "NIPPONSYSTEMWARECO.,LTD."},
|
|
{728, "Neosfar"},
|
|
{729, "FlieglAgrartechnikGmbH"},
|
|
{730, "Gilvader"},
|
|
{731, "DigiInternationalInc(R)"},
|
|
{732, "DeWalchTechnologies,Inc."},
|
|
{733, "FlintRehabilitationDevices,LLC"},
|
|
{734, "SamsungSDSCo.,Ltd."},
|
|
{735, "BlurProductDevelopment"},
|
|
{736, "UniversityofMichigan"},
|
|
{737, "VictronEnergyBV"},
|
|
{738, "NTTdocomo"},
|
|
{739, "CarmanahTechnologiesCorp."},
|
|
{740, "BytestormLtd."},
|
|
{741, "EspressifIncorporated(())"},
|
|
{742, "Unwire"},
|
|
{743, "ConnectedYard,Inc."},
|
|
{744, "AmericanMusicEnvironments"},
|
|
{745, "SensogramTechnologies,Inc."},
|
|
{746, "FujitsuLimited"},
|
|
{747, "ArdicTechnology"},
|
|
{748, "DeltaSystems,Inc"},
|
|
{749, "HTCCorporation"},
|
|
{750, "CitizenHoldingsCo.,Ltd."},
|
|
{751, "SMART-INNOVATION.inc"},
|
|
{752, "BlackratSoftware"},
|
|
{753, "TheIdeaCave,LLC"},
|
|
{754, "GoPro,Inc."},
|
|
{755, "AuthAir,Inc"},
|
|
{756, "Vensi,Inc."},
|
|
{757, "IndagemTechLLC"},
|
|
{758, "IntemoTechnologies"},
|
|
{759, "DreamVisionsco.,Ltd."},
|
|
{760, "RunteqOyLtd"},
|
|
{761, "IMAGINATIONTECHNOLOGIESLTD"},
|
|
{762, "CoSTARTEchnologies"},
|
|
{763, "ClariusMobileHealthCorp."},
|
|
{764, "ShanghaiFrequenMicroelectronicsCo.,Ltd."},
|
|
{765, "Uwanna,Inc."},
|
|
{766, "LierdaScience&TechnologyGroupCo.,Ltd."},
|
|
{767, "SiliconLaboratories"},
|
|
{768, "WorldMotoInc."},
|
|
{769, "GiatecScientificInc."},
|
|
{770, "LoopDevices,Inc"},
|
|
{771, "IACAelectronique"},
|
|
{772, "ProxyTechnologies,Inc."},
|
|
{773, "SwippApS"},
|
|
{774, "LifeLaboratoryInc."},
|
|
{775, "FUJIINDUSTRIALCO.,LTD."},
|
|
{776, "Surefire,LLC"},
|
|
{777, "DolbyLabs"},
|
|
{778, "Ellisys"},
|
|
{779, "MagnitudeLightingConverters"},
|
|
{780, "HiltiAG"},
|
|
{781, "DevdataS.r.l."},
|
|
{782, "Deviceworx"},
|
|
{783, "ShortcutLabs"},
|
|
{784, "SGLItaliaS.r.l."},
|
|
{785, "PEEQDATA"},
|
|
{786, "DucereTechnologiesPvtLtd"},
|
|
{787, "DiveNav,Inc."},
|
|
{788, "RIIGAISp.zo.o."},
|
|
{789, "ThermoFisherScientific"},
|
|
{790, "AGMeasurematicsPvt.Ltd."},
|
|
{791, "CHUOElectronicsCO.,LTD."},
|
|
{792, "AspentaInternational"},
|
|
{793, "EugsterFrismagAG"},
|
|
{794, "AmberwirelessGmbH"},
|
|
{795, "HQInc"},
|
|
{796, "LabSensorSolutions"},
|
|
{797, "EnterlabApS"},
|
|
{798, "Eyefi,Inc."},
|
|
{799, "MetaSystemS.p.A."},
|
|
{800, "SONOELECTRONICS.CO.,LTD"},
|
|
{801, "Jewelbots"},
|
|
{802, "CompumedicsLimited"},
|
|
{803, "RotorBikeComponents"},
|
|
{804, "Astro,Inc."},
|
|
{805, "AmotusSolutions"},
|
|
{806, "HealthwearTechnologies(Changzhou)Ltd"},
|
|
{807, "EssexElectronics"},
|
|
{808, "GrundfosA/S"},
|
|
{809, "Eargo,Inc."},
|
|
{810, "ElectronicDesignLab"},
|
|
{811, "ESYLUX"},
|
|
{812, "NIPPONSMT.CO.,Ltd"},
|
|
{813, "BMinnovationsGmbH"},
|
|
{814, "indoormap"},
|
|
{815, "OttoQInc"},
|
|
{816, "NorthPoleEngineering"},
|
|
{817, "3flaresTechnologiesInc."},
|
|
{818, "ElectrocompanietA.S."},
|
|
{819, "Mul-T-Lock"},
|
|
{820, "CorentiumAS"},
|
|
{821, "EnlightedInc"},
|
|
{822, "GISTIC"},
|
|
{823, "AJP2Holdings,LLC"},
|
|
{824, "COBIGmbH"},
|
|
{825, "BlueSkyScientific,LLC"},
|
|
{826, "Appception,Inc."},
|
|
{827, "CourtneyThorneLimited"},
|
|
{828, "Virtuosys"},
|
|
{829, "TPVTechnologyLimited"},
|
|
{830, "MonitraSA"},
|
|
{831, "AutomationComponents,Inc."},
|
|
{832, "Letsenses.r.l."},
|
|
{833, "EtesianTechnologiesLLC"},
|
|
{834, "GERTECBRASILLTDA."},
|
|
{835, "DrekkerDevelopmentPty.Ltd."},
|
|
{836, "WhirlInc"},
|
|
{837, "LocusPositioning"},
|
|
{838, "AcuityBrandsLighting,Inc"},
|
|
{839, "PreventBiometrics"},
|
|
{840, "Arioneo"},
|
|
{841, "VersaMe"},
|
|
{842, "Vaddio"},
|
|
{843, "LibratoneA/S"},
|
|
{844, "HMElectronics,Inc."},
|
|
{845, "TASERInternational,Inc."},
|
|
{846, "SafeTrustInc."},
|
|
{847, "HeartlandPaymentSystems"},
|
|
{848, "BitstrataSystemsInc."},
|
|
{849, "PiepsGmbH"},
|
|
{850, "iRiding(Xiamen)TechnologyCo.,Ltd."},
|
|
{851, "AlphaAudiotronics,Inc."},
|
|
{852, "TOPPANFORMSCO.,LTD."},
|
|
{853, "SigmaDesigns,Inc."},
|
|
{854, "SpectrumBrands,Inc."},
|
|
{855, "PolymapWireless"},
|
|
{856, "MagniWareLtd."},
|
|
{857, "NovotecMedicalGmbH"},
|
|
{858, "MedicomInnovationPartnera/s"},
|
|
{859, "MatrixInc."},
|
|
{860, "EatonCorporation"},
|
|
{861, "KYS"},
|
|
{862, "NayaHealth,Inc."},
|
|
{863, "Acromag"},
|
|
{864, "InsuletCorporation"},
|
|
{865, "WellinksInc."},
|
|
{866, "ONSemiconductor"},
|
|
{867, "FREELAPSA"},
|
|
{868, "FaveroElectronicsSrl"},
|
|
{869, "BioMechSensorLLC"},
|
|
{870, "BOLTTSportstechnologiesPrivatelimited"},
|
|
{871, "SapheInternational"},
|
|
{872, "MetormoteAB"},
|
|
{873, "littleBits"},
|
|
{874, "SetPointMedical"},
|
|
{875, "BRControlsProductsBV"},
|
|
{876, "Zipcar"},
|
|
{877, "AirBoltPtyLtd"},
|
|
{878, "KeepTruckinInc"},
|
|
{879, "Motiv,Inc."},
|
|
{880, "WazombiLabsO"},
|
|
{881, "ORBCOMM"},
|
|
{882, "NixieLabs,Inc."},
|
|
{883, "AppNearMeLtd"},
|
|
{884, "HolmanIndustries"},
|
|
{885, "ExpainAS"},
|
|
{886, "ElectronicTemperatureInstrumentsLtd"},
|
|
{887, "PlejdAB"},
|
|
{888, "PropellerHealth"},
|
|
{889, "ShenzheniMCOElectronicTechnologyCo.,Ltd"},
|
|
{890, "Algoria"},
|
|
{891, "ApptionLabsInc."},
|
|
{892, "CronologicsCorporation"},
|
|
{893, "MICRODIALtd."},
|
|
{894, "lulabytesS.L."},
|
|
{895, "NestecS.A."},
|
|
{896, "LLC\"MEGA-Fservice\""},
|
|
{897, "SharpCorporation"},
|
|
{898, "PrecisionOutcomesLtd"},
|
|
{899, "KronosIncorporated"},
|
|
{900, "OCOSMOSCo.,Ltd."},
|
|
{901, "EmbeddedElectronicSolutionsLtd.dbae2Solutions"},
|
|
{902, "AtericaInc."},
|
|
{903, "BluStorPMC,Inc."},
|
|
{904, "KapschTrafficComAB"},
|
|
{905, "ActiveBluCorporation"},
|
|
{906, "KohlerMiraLimited"},
|
|
{907, "Noke"},
|
|
{908, "AppionInc."},
|
|
{909, "ResmedLtd"},
|
|
{910, "CrownstoneB.V."},
|
|
{911, "XiaomiInc."},
|
|
{912, "INFOTECHs.r.o."},
|
|
{913, "ThingsquareAB"},
|
|
{914, "T&D"},
|
|
{915, "LAVAZZAS.p.A."},
|
|
{916, "NetclearanceSystems,Inc."},
|
|
{917, "SDATAWAY"},
|
|
{918, "BLOKSGmbH"},
|
|
{919, "LEGOSystemA/S"},
|
|
{920, "ThetatronicsLtd"},
|
|
{921, "NikonCorporation"},
|
|
{922, "NeST"},
|
|
{923, "SouthSiliconValleyMicroelectronics"},
|
|
{924, "ALEInternational"},
|
|
{925, "CareViewCommunications,Inc."},
|
|
{926, "SchoolBoardLimited"},
|
|
{927, "MolexCorporation"},
|
|
{928, "IVTWirelessLimited"},
|
|
{929, "AlpineLabsLLC"},
|
|
{930, "CanduraInstruments"},
|
|
{931, "SmartMovtTechnologyCo.,Ltd"},
|
|
{932, "TokenZeroLtd"},
|
|
{933, "ACECADEnterpriseCo.,Ltd.(ACECAD)"},
|
|
{934, "Medela,Inc"},
|
|
{935, "AeroScout"},
|
|
{936, "EsrilleInc."},
|
|
{937, "THINKERLYSRL"},
|
|
{938, "ExonSp.zo.o."},
|
|
{939, "MeizuTechnologyCo.,Ltd."},
|
|
{940, "SmabloLTD"},
|
|
{941, "XiQ"},
|
|
{942, "AllswellInc."},
|
|
{943, "Comm-N-SenseCorpDBAVerigo"},
|
|
{944, "VIBRADORMGmbH"},
|
|
{945, "OtodataWirelessNetworkInc."},
|
|
{946, "PropagationSystemsLimited"},
|
|
{947, "MidwestInstruments&Controls"},
|
|
{948, "AlphaNodus,inc."},
|
|
{949, "petPOMM,Inc"},
|
|
{950, "Mattel"},
|
|
{951, "AirblyInc."},
|
|
{952, "A-SafeLimited"},
|
|
{953, "FREDERIQUECONSTANTSA"},
|
|
{954, "MaxscendMicroelectronicsCompanyLimited"},
|
|
{955, "AbbottDiabetesCare"},
|
|
{956, "ASBBankLtd"},
|
|
{957, "amadas"},
|
|
{958, "AppliedScience,Inc."},
|
|
{959, "iLumiSolutionsInc."},
|
|
{960, "ArchSystemsInc."},
|
|
{961, "EmberTechnologies,Inc."},
|
|
{962, "SnapchatInc"},
|
|
{963, "CasambiTechnologiesOy"},
|
|
{964, "PicoTechnologyInc."},
|
|
{965, "St.JudeMedical,Inc."},
|
|
{966, "Intricon"},
|
|
{967, "StructuralHealthSystems,Inc."},
|
|
{968, "AvvelInternational"},
|
|
{969, "GallagherGroup"},
|
|
{970, "In2thingsAutomationPvt.Ltd."},
|
|
{971, "SYSDEVSrl"},
|
|
{972, "VonkilTechnologiesLtd"},
|
|
{973, "WyndTechnologies,Inc."},
|
|
{974, "CONTRINEXS.A."},
|
|
{975, "MIRA,Inc."},
|
|
{976, "WatteamLtd"},
|
|
{977, "DensityInc."},
|
|
{978, "IOTPotIndiaPrivateLimited"},
|
|
{979, "SigmaConnectivityAB"},
|
|
{980, "PEGPEREGOSPA"},
|
|
{981, "WyzelinkSystemsInc."},
|
|
{982, "YotaDevicesLTD"},
|
|
{983, "FINSECUR"},
|
|
{984, "Zen-MeLabsLtd"},
|
|
{985, "3IWareCo.,Ltd."},
|
|
{986, "EnOceanGmbH"},
|
|
{987, "Instabeat,Inc"},
|
|
{988, "NimaLabs"},
|
|
{989, "AndreasStihlAG&Co.KG"},
|
|
{990, "NathanRhoadesLLC"},
|
|
{991, "GrobTechnologies,LLC"},
|
|
{992, "Actions(Zhuhai)TechnologyCo.,Limited"},
|
|
{993, "SPDDevelopmentCompanyLtd"},
|
|
{994, "SensoanOy"},
|
|
{995, "QualcommLifeInc"},
|
|
{996, "Chip-ingAG"},
|
|
{997, "ffly4u"},
|
|
{998, "IoTInstrumentsOy"},
|
|
{999, "TRUEFitnessTechnology"},
|
|
{1000, "ReinerKartengeraeteGmbH&Co.KG."},
|
|
{1001, "SHENZHENLEMONJOYTECHNOLOGYCO.,LTD."},
|
|
{1002, "HelloInc."},
|
|
{1003, "EvollveInc."},
|
|
{1004, "JigowattsInc."},
|
|
{1005, "BASICMICRO.COM,INC."},
|
|
{1006, "CUBETECHNOLOGIES"},
|
|
{1007, "foolographyGmbH"},
|
|
{1008, "CLINK"},
|
|
{1009, "HestanSmartCookingInc."},
|
|
{1010, "WindowMasterA/S"},
|
|
{1011, "FlowscapeAB"},
|
|
{1012, "PALTechnologiesLtd"},
|
|
{1013, "WHERE,Inc."},
|
|
{1014, "ItonTechnologyCorp."},
|
|
{1015, "OwlLabsInc."},
|
|
{1016, "RockfordCorp."},
|
|
{1017, "BeconTechnologiesCo.,Ltd."},
|
|
{1018, "VyassoftTechnologiesInc"},
|
|
{1019, "NoxMedical"},
|
|
{1020, "Kimberly-Clark"},
|
|
{1021, "TrimbleNavigationLtd."},
|
|
{1022, "Littelfuse"},
|
|
{1023, "Withings"},
|
|
{1024, "i-developerITBeratungUG"},
|
|
{1025, ""},
|
|
{1026, "SearsHoldingsCorporation"},
|
|
{1027, "GantnerElectronicGmbH"},
|
|
{1028, "AuthomateInc"},
|
|
{1029, "VertexInternational,Inc."},
|
|
{1030, "Airtago"},
|
|
{1031, "SwissAudioSA"},
|
|
{1032, "ToGetHomeInc."},
|
|
{1033, "AXIS"},
|
|
{1034, "Openmatics"},
|
|
{1035, "JanaCareInc."},
|
|
{1036, "SenixCorporation"},
|
|
{1037, "NorthStarBatteryCompany,LLC"},
|
|
{1038, "SKF(U.K.)Limited"},
|
|
{1039, "CO-AXTechnology,Inc."},
|
|
{1040, "FenderMusicalInstruments"},
|
|
{1041, "LuidiaInc"},
|
|
{1042, "SEFAM"},
|
|
{1043, "WirelessCablesInc"},
|
|
{1044, "LightningProtectionInternationalPtyLtd"},
|
|
{1045, "UberTechnologiesInc"},
|
|
{1046, "SODAGmbH"},
|
|
{1047, "FatigueScience"},
|
|
{1048, "AlpineElectronicsInc."},
|
|
{1049, "NovalogyLTD"},
|
|
{1050, "FridayLabsLimited"},
|
|
{1051, "OrthoAccelTechnologies"},
|
|
{1052, "WaterGuru,Inc."},
|
|
{1053, "BenningElektrotechnikundElektronikGmbH&Co.KG"},
|
|
{1054, "DellComputerCorporation"},
|
|
{1055, "KopinCorporation"},
|
|
{1056, "TecBakeryGmbH"},
|
|
{1057, "BackboneLabs,Inc."},
|
|
{1058, "DELSEYSA"},
|
|
{1059, "ChargifiLimited"},
|
|
{1060, "TrainesenseLtd."},
|
|
{1061, "UnifySoftwareandSolutionsGmbH&Co.KG"},
|
|
{1062, "HusqvarnaAB"},
|
|
{1063, "Focusfleetandfuelmanagementinc"},
|
|
{1064, "SmallLoop,LLC"},
|
|
{1065, "ProlonInc."},
|
|
{1066, "BDMedical"},
|
|
{1067, "iMicroMedIncorporated"},
|
|
{1068, "TictoN.V."},
|
|
{1069, "MeshtechAS"},
|
|
{1070, "MemCachierInc."},
|
|
{1071, "DanfossA/S"},
|
|
{1072, "SnapStykInc."},
|
|
{1073, "AmwayCorporation"},
|
|
{1074, "SilkLabs,Inc."},
|
|
{1075, "PillsyInc."},
|
|
{1076, "HatchBaby,Inc."},
|
|
{1077, "BlocksWearablesLtd."},
|
|
{1078, "DraysonTechnologies(Europe)Limited"},
|
|
{1079, "eBestIOTInc."},
|
|
{1080, "HelvarLtd"},
|
|
{1081, "RadianceTechnologies"},
|
|
{1082, "NuhearaLimited"},
|
|
{1083, "Appsideco.,ltd."},
|
|
{1084, "DeLaval"},
|
|
{1085, "CoilerCorporation"},
|
|
{1086, "Thermomedics,Inc."},
|
|
{1087, "TentacleSyncGmbH"},
|
|
{1088, "Valencell,Inc."},
|
|
{1089, "iProtoXiOy"},
|
|
{1090, "SECOMCO.,LTD."},
|
|
{1091, "TuckerInternationalLLC"},
|
|
{1092, "MetanateLimited"},
|
|
{1093, "KobianCanadaInc."},
|
|
{1094, "NETGEAR,Inc."},
|
|
{1095, "FabtronicsAustraliaPtyLtd"},
|
|
{1096, "GrandCentrixGmbH"},
|
|
{1097, "1UPUSA.comllc"},
|
|
{1098, "SHIMANOINC."},
|
|
{1099, "NainInc."},
|
|
{1100, "LifeStyleLock,LLC"},
|
|
{1101, "VEGAGrieshaberKG"},
|
|
{1102, "XtravaInc."},
|
|
{1103, "TTSTooltechnicSystemsAG&Co.KG"},
|
|
{1104, "TeenageEngineeringAB"},
|
|
{1105, "TunstallNordicAB"},
|
|
{1106, "SvepDesignCenterAB"},
|
|
{1107, "GreenPeakTechnologiesBV"},
|
|
{1108, "SphinxElectronicsGmbH&CoKG"},
|
|
{1109, "Atomation"},
|
|
{1110, "NemikConsultingInc"},
|
|
{1111, "RFINNOVATION"},
|
|
{1112, "MiniSolutionCo.,Ltd."},
|
|
{1113, "Lumenetix,Inc"},
|
|
{1114, "2048450OntarioInc"},
|
|
{1115, "SPACEEKLTD"},
|
|
{1116, "DeltaTCorporation"},
|
|
{1117, "BostonScientificCorporation"},
|
|
{1118, "Nuviz,Inc."},
|
|
{1119, "RealTimeAutomation,Inc."},
|
|
{1120, "Kolibree"},
|
|
{1121, "vhfelektronikGmbH"},
|
|
{1122, "BonsaiSystemsGmbH"},
|
|
{1123, "FathomSystemsInc."},
|
|
{1124, "Bellman&Symfon"},
|
|
{1125, "InternationalForteGroupLLC"},
|
|
{1126, "CycleLabsSolutionsinc."},
|
|
{1127, "CodenexOy"},
|
|
{1128, "KynesimLtd"},
|
|
{1129, "PalagoAB"},
|
|
{1130, "INSIGMAINC."},
|
|
{1131, "PMDSolutions"},
|
|
{1132, "QingdaoRealtimeTechnologyCo.,Ltd."},
|
|
{1133, "BEGAGantenbrink-LeuchtenKG"},
|
|
{1134, "PamborLtd."},
|
|
{1135, "DevelcoProductsA/S"},
|
|
{1136, "iDesigns.r.l."},
|
|
{1137, "TiVoCorp"},
|
|
{1138, "Control-JPtyLtd"},
|
|
{1139, "Steelcase,Inc."},
|
|
{1140, "iApartmentco.,ltd."},
|
|
{1141, "Icominc."},
|
|
{1142, "OxstrenWearableTechnologiesPrivateLimited"},
|
|
{1143, "BlueSparkTechnologies"},
|
|
{1144, "FarSiteCommunicationsLimited"},
|
|
{1145, "mywerksystemGmbH"},
|
|
{1146, "SinosunTechnologyCo.,Ltd."},
|
|
{1147, "MIYOSHIELECTRONICSCORPORATION"},
|
|
{1148, "POWERMATLTD"},
|
|
{1149, "OcclyLLC"},
|
|
{1150, "OurHubDevIvS"},
|
|
{1151, "Pro-Mark,Inc."},
|
|
{1152, "DynometricsInc."},
|
|
{1153, "QuintraxLimited"},
|
|
{1154, "POSTuningUdoVosshenrichGmbH&Co.KG"},
|
|
{1155, "MultiCareSystemsB.V."},
|
|
{1156, "RevolTechnologiesInc"},
|
|
{1157, "SKIDATAAG"},
|
|
{1158, "DEVTECNOLOGIAINDUSTRIA,COMERCIOEMANUTENCAODEEQUIPAMENTOSLTDA.-ME"},
|
|
{1159, "CentricaConnectedHome"},
|
|
{1160, "AutomotiveDataSolutionsInc"},
|
|
{1161, "IgarashiEngineering"},
|
|
{1162, "TaelekOy"},
|
|
{1163, "CPElectronicsLimited"},
|
|
{1164, "VectronixAG"},
|
|
{1165, "S-LabsSp.zo.o."},
|
|
{1166, "CompanionMedical,Inc."},
|
|
{1167, "BlueKitchenGmbH"},
|
|
{1168, "MattingAB"},
|
|
{1169, "SOREX-WirelessSolutionsGmbH"},
|
|
{1170, "ADCTechnology,Inc."},
|
|
{1171, "LynxemiPteLtd"},
|
|
{1172, "SENNHEISERelectronicGmbH&Co.KG"},
|
|
{1173, "LMTMercerGroup,Inc"},
|
|
{1174, "PolymorphicLabsLLC"},
|
|
{1175, "CochlearLimited"},
|
|
{1176, "METERGroup,Inc.USA"},
|
|
{1177, "RuuviInnovationsLtd."},
|
|
{1178, "SituneAS"},
|
|
{1179, "nVisti,LLC"},
|
|
{1180, "DyOcean"},
|
|
{1181, "Uhlmann&ZacherGmbH"},
|
|
{1182, "AND!XORLLC"},
|
|
{1183, "tictoteAB"},
|
|
{1184, "Vypin,LLC"},
|
|
{1185, "PNISensorCorporation"},
|
|
{1186, "ovrEngineered,LLC"},
|
|
{1187, "GT-tronicsHKLtd"},
|
|
{1188, "HerbertWaldmannGmbH&Co.KG"},
|
|
{1189, "GuangzhouFiiOElectronicsTechnologyCo.,Ltd"},
|
|
{1190, "VinetechCo.,Ltd"},
|
|
{1191, "DallasLogicCorporation"},
|
|
{1192, "BioTex,Inc."},
|
|
{1193, "DISCOVERYSOUNDTECHNOLOGY,LLC"},
|
|
{1194, "LINKIOSAS"},
|
|
{1195, "Harbortronics,Inc."},
|
|
{1196, "UndagridB.V."},
|
|
{1197, "ShureInc"},
|
|
{1198, "ERMElectronicSystemsLTD"},
|
|
{1199, "BIOROWERHandelsagenturGmbH"},
|
|
{1200, "WebaSportundMed.ArtikelGmbH"},
|
|
{1201, "KartographersTechnologiesPvt.Ltd."},
|
|
{1202, "TheShadowontheMoon"},
|
|
{1203, "mobike(HongKong)Limited"},
|
|
{1204, "InuheatGroupAB"},
|
|
{1205, "SwiftronixAB"},
|
|
{1206, "DiagnopticsTechnologies"},
|
|
{1207, "AnalogDevices,Inc."},
|
|
{1208, "SoraaInc."},
|
|
{1209, "CSRBuildingProductsLimited"},
|
|
{1210, "CrestronElectronics,Inc."},
|
|
{1211, "NeateboxLtd"},
|
|
{1212, "DraegerwerkAG&Co.KGaA"},
|
|
{1213, "AlbynMedical"},
|
|
{1214, "AverosFZCO"},
|
|
{1215, "VITInitiative,LLC"},
|
|
{1216, "StatsportsInternational"},
|
|
{1217, "Sospitas,s.r.o."},
|
|
{1218, "DmetProductsCorp."},
|
|
{1219, "MantracourtElectronicsLimited"},
|
|
{1220, "TeAMHutchinsAB"},
|
|
{1221, "SeibertWilliamsGlass,LLC"},
|
|
{1222, "InstaGmbH"},
|
|
{1223, "SvantekSp.zo.o."},
|
|
{1224, "ShanghaiFlycoElectricalApplianceCo.,Ltd."},
|
|
{1225, "ThornwaveLabsInc"},
|
|
{1226, "Steiner-OptikGmbH"},
|
|
{1227, "NovoNordiskA/S"},
|
|
{1228, "EnfluxInc."},
|
|
{1229, "SafetechProductsLLC"},
|
|
{1230, "GOOOLEDS.R.L."},
|
|
{1231, "DOMSicherheitstechnikGmbH&Co.KG"},
|
|
{1232, "OlympusCorporation"},
|
|
{1233, "KTSGmbH"},
|
|
{1234, "AnloqTechnologiesInc."},
|
|
{1235, "Queercon,Inc"},
|
|
{1236, "5thElementLtd"},
|
|
{1237, "GooeeLimited"},
|
|
{1238, "LUGLOCLLC"},
|
|
{1239, "Blincam,Inc."},
|
|
{1240, "FUJIFILMCorporation"},
|
|
{1241, "RandMcNally"},
|
|
{1242, "FranceschiMarinasnc"},
|
|
{1243, "EngineeredAudio,LLC."},
|
|
{1244, "IOTTIVE(OPC)PRIVATELIMITED"},
|
|
{1245, "4MODTechnology"},
|
|
{1246, "LutronElectronicsCo.,Inc."},
|
|
{1247, "Emerson"},
|
|
{1248, "Guardtec,Inc."},
|
|
{1249, "REACTECLIMITED"},
|
|
{1250, "EllieGrid"},
|
|
{1251, "UnderArmour"},
|
|
{1252, "Woodenshark"},
|
|
{1253, "AvackOy"},
|
|
{1254, "SmartSolutionTechnology,Inc."},
|
|
{1255, "REHABTRONICSINC."},
|
|
{1256, "STABILOInternational"},
|
|
{1257, "BuschJaegerElektroGmbH"},
|
|
{1258, "PacificBioscienceLaboratories,Inc"},
|
|
{1259, "BirdHomeAutomationGmbH"},
|
|
{1260, "MotorolaSolutions"},
|
|
{1261, "R9Technology,Inc."},
|
|
{1262, "Auxivia"},
|
|
{1263, "DaisyWorks,Inc"},
|
|
{1264, "KosiLimited"},
|
|
{1265, "ThebenAG"},
|
|
{1266, "InDreamerTechsolPrivateLimited"},
|
|
{1267, "CerevastMedical"},
|
|
{1268, "ZanComputeInc."},
|
|
{1269, "PirelliTyreS.P.A."},
|
|
{1270, "McLearLimited"},
|
|
{1271, "ShenzhenHuidingTechnologyCo.,Ltd."},
|
|
{1272, "ConvergenceSystemsLimited"},
|
|
{1273, "Interactio"},
|
|
{1274, "AndrotecGmbH"},
|
|
{1275, "BenchmarkDrivesGmbH&Co.KG"},
|
|
{1276, "SwingLyncL.L.C."},
|
|
{1277, "TapkeyGmbH"},
|
|
{1278, "WoosimSystemsInc."},
|
|
{1279, "MicrosemiCorporation"},
|
|
{1280, "WiliotLTD."},
|
|
{1281, "PolarisIND"},
|
|
{1282, "Specifi-KaliLLC"},
|
|
{1283, "Locoroll,Inc"},
|
|
{1284, "PHYPLUSInc"},
|
|
{1285, "InplayTechnologiesLLC"},
|
|
{1286, "Hager"},
|
|
{1287, "Yellowcog"},
|
|
{1288, "AxesSystemsp.zo.o."},
|
|
{1289, "myLIFTERInc."},
|
|
{1290, "Shake-onB.V."},
|
|
{1291, "VibrissaInc."},
|
|
{1292, "OSRAMGmbH"},
|
|
{1293, "TRSystemsGmbH"},
|
|
{1294, "YichipMicroelectronics(Hangzhou)Co.,Ltd."},
|
|
{1295, "FoundationEngineeringLLC"},
|
|
{1296, "UNI-ELECTRONICS,INC."},
|
|
{1297, "BrookfieldEquinoxLLC"},
|
|
{1298, "SoprodSA"},
|
|
{1299, "9974091CanadaInc."},
|
|
{1300, "FIBROGmbH"},
|
|
{1301, "RBControlsCo.,Ltd."},
|
|
{1302, "Footmarks"},
|
|
{1303, "AmtronicSverigeAB(formerlyAmcoreAB)"},
|
|
{1304, "MAMORIO.inc"},
|
|
{1305, "TytoLifeLLC"},
|
|
{1306, "LeicaCameraAG"},
|
|
{1307, "AngeeTechnologiesLtd."},
|
|
{1308, "EDPS"},
|
|
{1309, "OFFLineCo.,Ltd."},
|
|
{1310, "DetectBlueLimited"},
|
|
{1311, "SetecPtyLtd"},
|
|
{1312, "TargetCorporation"},
|
|
{1313, "IAICorporation"},
|
|
{1314, "NSTech,Inc."},
|
|
{1315, "MTGCo.,Ltd."},
|
|
{1316, "HangzhouiMagicTechnologyCo.,Ltd"},
|
|
{1317, "HONGKONGNANOICTECHNOLOGIESCO.,LIMITED"},
|
|
{1318, "HoneywellInternationalInc."},
|
|
{1319, "AlbrechtJUNG"},
|
|
{1320, "LuneraLightingInc."},
|
|
{1321, "LumenUAB"},
|
|
{1322, "KeynesControlsLtd"},
|
|
{1323, "NovartisAG"},
|
|
{1324, "GeosatisSA"},
|
|
{1325, "EXFO,Inc."},
|
|
{1326, "LEDVANCEGmbH"},
|
|
{1327, "CenterIDCorp."},
|
|
{1328, "Adolene,Inc."},
|
|
{1329, "D&MHoldingsInc."},
|
|
{1330, "CRESCOWireless,Inc."},
|
|
{1331, "NuraOperationsPtyLtd"},
|
|
{1332, "Frontiergadget,Inc."},
|
|
{1333, "SmartComponentTechnologiesLimited"},
|
|
{1334, "ZTRControlSystemsLLC"},
|
|
{1335, "MetaLogicsCorporation"},
|
|
{1336, "MedelaAG"},
|
|
{1337, "OPPLELightingCo.,Ltd"},
|
|
{1338, "SavitechCorp.,"},
|
|
{1339, "prodigy"},
|
|
{1340, "ScreenovateTechnologiesLtd"},
|
|
{1341, "TESASA"},
|
|
{1342, "CLIM8LIMITED"},
|
|
{1343, "SilergyCorp"},
|
|
{1344, "SilverPlus,Inc"},
|
|
{1345, "Sharknetsrl"},
|
|
{1346, "MistSystems,Inc."},
|
|
{1347, "MIWALOCKCO.,Ltd"},
|
|
{1348, "OrthoSensor,Inc."},
|
|
{1349, "CandyHooverGroups.r.l"},
|
|
{1350, "ApexarTechnologiesS.A."},
|
|
{1351, "LOGICDATAd.o.o."},
|
|
{1352, "KnickElektronischeMessgeraeteGmbH&Co.KG"},
|
|
{1353, "SmartTechnologiesandInvestmentLimited"},
|
|
{1354, "LinoughInc."},
|
|
{1355, "AdvancedElectronicDesigns,Inc."},
|
|
{1356, "CarefreeScottFetzerCoInc"},
|
|
{1357, "Sensome"},
|
|
{1358, "FORTRONIKstoritved.o.o."},
|
|
{1359, "Sinnoz"},
|
|
{1360, "VersaNetworks,Inc."},
|
|
{1361, "Sylero"},
|
|
{1362, "AvempaceSARL"},
|
|
{1363, "NintendoCo.,Ltd."},
|
|
{1364, "NationalInstruments"},
|
|
{1365, "KROHNEMesstechnikGmbH"},
|
|
{1366, "OtodynamicsLtd"},
|
|
{1367, "ArwinTechnologyLimited"},
|
|
{1368, "benegear,inc."},
|
|
{1369, "NewconOptik"},
|
|
{1370, "CANDYHOUSE,Inc."},
|
|
{1371, "FRANKLINTECHNOLOGYINC"},
|
|
{1372, "Lely"},
|
|
{1373, "ValveCorporation"},
|
|
{1374, "HekatronVertriebsGmbH"},
|
|
{1375, "PROTECHS.A.S.DIGIRARDIANDREA&C."},
|
|
{1376, "SaritaCareTechAPS(formerlySaritaCareTechIVS)"},
|
|
{1377, "FinderS.p.A."},
|
|
{1378, "ThalmicLabsInc."},
|
|
{1379, "SteinelVertriebGmbH"},
|
|
{1380, "BeghelliSpa"},
|
|
{1381, "BeijingSmartspaceTechnologiesInc."},
|
|
{1382, "CORETRANSPORTTECHNOLOGIESNZLIMITED"},
|
|
{1383, "XiamenEveresportsGoodsCo.,Ltd"},
|
|
{1384, "BodyportInc."},
|
|
{1385, "AudionicsSystem,INC."},
|
|
{1386, "FlipnaviCo.,Ltd."},
|
|
{1387, "RionCo.,Ltd."},
|
|
{1388, "LongRangeSystems,LLC"},
|
|
{1389, "RedmondIndustrialGroupLLC"},
|
|
{1390, "VIZPININC."},
|
|
{1391, "BikeFinderAS"},
|
|
{1392, "ConsumerSleepSolutionsLLC"},
|
|
{1393, "PSIKICK,INC."},
|
|
{1394, "AntTail.com"},
|
|
{1395, "LightingScienceGroupCorp."},
|
|
{1396, "AFFORDABLEELECTRONICSINC"},
|
|
{1397, "IntegralMemroyPlc"},
|
|
{1398, "Globalstar,Inc."},
|
|
{1399, "TrueWearables,Inc."},
|
|
{1400, "WellingtonDriveTechnologiesLtd"},
|
|
{1401, "EnsembleTechPrivateLimited"},
|
|
{1402, "OMNIRemotes"},
|
|
{1403, "DuracellU.S.OperationsInc."},
|
|
{1404, "ToorTechnologiesLLC"},
|
|
{1405, "InstinctPerformance"},
|
|
{1406, "Beco,Inc"},
|
|
{1407, "ScufGamingInternational,LLC"},
|
|
{1408, "ARANZMedicalLimited"},
|
|
{1409, "LYSTECHNOLOGIESLTD"},
|
|
{1410, "BreakwallAnalytics,LLC"},
|
|
{1411, "CodeBlueCommunications"},
|
|
{1412, "GiraGiersiepenGmbH&Co.KG"},
|
|
{1413, "HearingLabTechnology"},
|
|
{1414, "LEGRAND"},
|
|
{1415, "DerichsGmbH"},
|
|
{1416, "ALT-TEKNIKLLC"},
|
|
{1417, "StarTechnologies"},
|
|
{1418, "STARTTODAYCO.,LTD."},
|
|
{1419, "MaximIntegratedProducts"},
|
|
{1420, "MERCKKommanditgesellschaftaufAktien"},
|
|
{1421, "JungheinrichAktiengesellschaft"},
|
|
{1422, "OculusVR,LLC"},
|
|
{1423, "HENDONSEMICONDUCTORSPTYLTD"},
|
|
{1424, "Pur3Ltd"},
|
|
{1425, "ViasatGroupS.p.A."},
|
|
{1426, "IZITHERM"},
|
|
{1427, "SpauldingClinicalResearch"},
|
|
{1428, "KohlerCompany"},
|
|
{1429, "InorProcessAB"},
|
|
{1430, "MySmartBlinds"},
|
|
{1431, "RadioPulseInc"},
|
|
{1432, "rapitagGmbH"},
|
|
{1433, "Lazlo326,LLC."},
|
|
{1434, "TeledyneLecroy,Inc."},
|
|
{1435, "DataflowSystemsLimited"},
|
|
{1436, "MacrogigaElectronics"},
|
|
{1437, "TandemDiabetesCare"},
|
|
{1438, "Polycom,Inc."},
|
|
{1439, "Fisher&PaykelHealthcare"},
|
|
{1440, "RCPSoftwareOy"},
|
|
{1441, "ShanghaiXiaoyiTechnologyCo.,Ltd."},
|
|
{1442, "ADHERIUM(NZ)LIMITED"},
|
|
{1443, "AxiomwareSystemsIncorporated"},
|
|
{1444, "O.E.M.Controls,Inc."},
|
|
{1445, "KiirooBV"},
|
|
{1446, "TeleconMobileLimited"},
|
|
{1447, "SonosInc"},
|
|
{1448, "TomAllebrandiConsulting"},
|
|
{1449, "Monidor"},
|
|
{1450, "TramexLimited"},
|
|
{1451, "NofenceAS"},
|
|
{1452, "GoerTekDynaudioCo.,Ltd."},
|
|
{1453, "INIA"},
|
|
{1454, "CARMATEMFG.CO.,LTD"},
|
|
{1455, "ONvocal"},
|
|
{1456, "NewTecGmbH"},
|
|
{1457, "MedallionInstrumentationSystems"},
|
|
{1458, "CARELINDUSTRIESS.P.A."},
|
|
{1459, "ParabitSystems,Inc."},
|
|
{1460, "WhiteHorseScientificltd"},
|
|
{1461, "verisilicon"},
|
|
{1462, "ElecsIndustryCo.,Ltd."},
|
|
{1463, "BeijingPineconeElectronicsCo.,Ltd."},
|
|
{1464, "AmbystomaLabsInc."},
|
|
{1465, "SuzhouPairlinkNetworkTechnology"},
|
|
{1466, "igloohome"},
|
|
{1467, "OxfordMetricsplc"},
|
|
{1468, "LevitonMfg.Co.,Inc."},
|
|
{1469, "ULCRoboticsInc."},
|
|
{1470, "RFIDGlobalbySoftworkSrL"},
|
|
{1471, "Real-World-SystemsCorporation"},
|
|
{1472, "NaluMedical,Inc."},
|
|
{1473, "P.I.Engineering"},
|
|
{1474, "GroteIndustries"},
|
|
{1475, "Runtime,Inc."},
|
|
{1476, "Codecoupsp.zo.o.sp.k."},
|
|
{1477, "SELVEGmbH&Co.KG"},
|
|
{1478, "SmartAnimalTrainingSystems,LLC"},
|
|
{1479, "LippertComponents,INC"},
|
|
{1480, "SOMFYSAS"},
|
|
{1481, "TBSElectronicsB.V."},
|
|
{1482, "MHLCustomInc"},
|
|
{1483, "LucentWearLLC"},
|
|
{1484, "WATTSELECTRONICS"},
|
|
{1485, "RJBrandsLLC"},
|
|
{1486, "V-ZUGLtd"},
|
|
{1487, "BiowatchSA"},
|
|
{1488, "AnovaAppliedElectronics"},
|
|
{1489, "LindabAB"},
|
|
{1490, "frogblueTECHNOLOGYGmbH"},
|
|
{1491, "AcurableLimited"},
|
|
{1492, "LAMPLIGHTCo.,Ltd."},
|
|
{1493, "TEGAM,Inc."},
|
|
{1494, "ZhuhaiJielitechnologyCo.,Ltd"},
|
|
{1495, "modum.ioAG"},
|
|
{1496, "FarmJennyLLC"},
|
|
{1497, "ToyoElectronicsCorporation"},
|
|
{1498, "AppliedNeuralResearchCorp"},
|
|
{1499, "AvidIdentificationSystems,Inc."},
|
|
{1500, "PetronicsInc."},
|
|
{1501, "essentimGmbH"},
|
|
{1502, "QTMedicalINC."},
|
|
{1503, "VIRTUALCLINIC.DIRECTLIMITED"},
|
|
{1504, "ViperDesignLLC"},
|
|
{1505, "Human,Incorporated"},
|
|
{1506, "stAPPtronicsGmbH"},
|
|
{1507, "ElementalMachines,Inc."},
|
|
{1508, "TaiyoYudenCo.,Ltd"},
|
|
{1509, "INEOENERGY&SYSTEMS"},
|
|
{1510, "MotionInstrumentsInc."},
|
|
{1511, "PressurePro"},
|
|
{1512, "COWBOY"},
|
|
{1513, "iconmobileGmbH"},
|
|
{1514, "ACS-Control-SystemGmbH"},
|
|
{1515, "BayerischeMotorenWerkeAG"},
|
|
{1516, "GycomSvenskaAB"},
|
|
{1517, "FujiXeroxCo.,Ltd"},
|
|
{1518, "GlideInc."},
|
|
{1519, "SIKOMAS"},
|
|
{1520, "beken"},
|
|
{1521, "TheLinuxFoundation"},
|
|
{1522, "TryandECO.,LTD."},
|
|
{1523, "SeeScan"},
|
|
{1524, "Clearity,LLC"},
|
|
{1525, "GSTAG"},
|
|
{1526, "DPTechnics"},
|
|
{1527, "TRACMO,INC."},
|
|
{1528, "AnkiInc."},
|
|
{1529, "HagleitnerHygieneInternationalGmbH"},
|
|
{1530, "KonamiSportsLifeCo.,Ltd."},
|
|
{1531, "ArbletInc."},
|
|
{1532, "MasbandoGmbH"},
|
|
{1533, "Innoseis"},
|
|
{1534, "Niko"},
|
|
{1535, "WellnomicsLtd"},
|
|
{1536, "iRobotCorporation"},
|
|
{1537, "SchraderElectronics"},
|
|
{1538, "GeberitInternationalAG"},
|
|
{1539, "FourthEvolutionInc"},
|
|
{1540, "Cell2JackLLC"},
|
|
{1541, "FMWelectronicFuttereru.Maier-WolfOHG"},
|
|
{1542, "JohnDeere"},
|
|
{1543, "RookeryTechnologyLtd"},
|
|
{1544, "KeySafe-Cloud"},
|
|
{1545, "BUCHILabortechnikAG"},
|
|
{1546, "IQAirAG"},
|
|
{1547, "TriaxTechnologiesInc"},
|
|
{1548, "VuzixCorporation"},
|
|
{1549, "TDKCorporation"},
|
|
{1550, "BlueairAB"},
|
|
{1551, "SignifyNetherlands"},
|
|
{1552, "ADHGUARDIANUSALLC"},
|
|
{1553, "BeurerGmbH"},
|
|
{1554, "PlayfinityAS"},
|
|
{1555, "HansDinslageGmbH"},
|
|
{1556, "OnAssetIntelligence,Inc."},
|
|
{1557, "INTERACTIONCorporation"},
|
|
{1558, "OS42UG(haftungsbeschraenkt)"},
|
|
{1559, "WIZCONNECTEDCOMPANYLIMITED"},
|
|
{1560, "Audio-TechnicaCorporation"},
|
|
{1561, "SixGuysLabs,s.r.o."},
|
|
{1562, "R.W.BeckettCorporation"},
|
|
{1563, "silextechnology,inc."},
|
|
{1564, "UnivationsLimited"},
|
|
{1565, "SENSInnovationApS"},
|
|
{1566, "DiamondKinetics,Inc."},
|
|
{1567, "PhrameInc."},
|
|
{1568, "ForciotOy"},
|
|
{1569, "Noordungd.o.o."},
|
|
{1570, "BeamLabs,LLC"},
|
|
{1571, "PhiladelphiaScientific(U.K.)Limited"},
|
|
{1572, "BiovotionAG"},
|
|
{1573, "SquarePanda,Inc."},
|
|
{1574, "Amplifico"},
|
|
{1575, "WEGS.A."},
|
|
{1576, "EnstoOy"},
|
|
{1577, "PHONEPEPVTLTD"},
|
|
{1578, "LunaticoAstronomiaSL"},
|
|
{1579, "MinebeaMitsumiInc."},
|
|
{1580, "ASPionGmbH"},
|
|
{1581, "Vossloh-SchwabeDeutschlandGmbH"},
|
|
{1582, "Procept"},
|
|
{1583, "ONKYOCorporation"},
|
|
{1584, "AsthreaD.O.O."},
|
|
{1585, "FortioriDesignLLC"},
|
|
{1586, "HugoMullerGmbH&CoKG"},
|
|
{1587, "WangiLaiPLT"},
|
|
{1588, "FanstelCorp"},
|
|
{1589, "Crookwood"},
|
|
{1590, "ELECTRONICAINTEGRALDESONIDOS.A."},
|
|
{1591, "GiPInnovationToolsGmbH"},
|
|
{1592, "LXSOLUTIONSPTYLIMITED"},
|
|
{1593, "ShenzhenMinewTechnologiesCo.,Ltd."},
|
|
{1594, "ProlojikLimited"},
|
|
{1595, "KromekGroupPlc"},
|
|
{1596, "ContecMedicalSystemsCo.,Ltd."},
|
|
{1597, "XradioTechnologyCo.,Ltd."},
|
|
{1598, "TheIndoorLab,LLC"},
|
|
{1599, "LDLTECHNOLOGY"},
|
|
{1600, "Parkifi"},
|
|
{1601, "RevenueCollectionSystemsFRANCESAS"},
|
|
{1602, "BluetrumTechnologyCo.,Ltd"},
|
|
{1603, "makitacorporation"},
|
|
{1604, "ApogeeInstruments"},
|
|
{1605, "BM3"},
|
|
{1606, "SGVGroupHoldingGmbH&Co.KG"},
|
|
{1607, "MED-EL"},
|
|
{1608, "UltuneTechnologies"},
|
|
{1609, "RyeexTechnologyCo.,Ltd."},
|
|
{1610, "OpenResearchInstitute,Inc."},
|
|
{1611, "Scale-Tec,Ltd"},
|
|
{1612, "ZumtobelGroupAG"},
|
|
{1613, "iLOQOy"},
|
|
{1614, "KRUXWorksTechnologiesPrivateLimited"},
|
|
{1615, "DigitalMatterPtyLtd"},
|
|
{1616, "Coravin,Inc."},
|
|
{1617, "StasisLabs,Inc."},
|
|
{1618, "ITZInnovations-undTechnologiezentrumGmbH"},
|
|
{1619, "MeggittSA"},
|
|
{1620, "LedlenserGmbH&Co.KG"},
|
|
{1621, "RenishawPLC"},
|
|
{1622, "ZhuHaiAdvanProTechnologyCompanyLimited"},
|
|
{1623, "MeshtronixLimited"},
|
|
{1624, "PayexNorgeAS"},
|
|
{1625, "UnSeenTechnologiesOy"},
|
|
{1626, "ZoundIndustriesInternationalAB"},
|
|
{1627, "SesamSolutionsBV"},
|
|
{1628, "PixArtImagingInc."},
|
|
{1629, "PanduitCorp."},
|
|
{1630, "AloAB"},
|
|
{1631, "RicohCompanyLtd"},
|
|
{1632, "RTCIndustries,Inc."},
|
|
{1633, "ModeLightingLimited"},
|
|
{1634, "ParticleIndustries,Inc."},
|
|
{1635, "AdvancedTelemetrySystems,Inc."},
|
|
{1636, "RHATECHNOLOGIESLTD"},
|
|
{1637, "PureInternationalLimited"},
|
|
{1638, "WTOWerkzeug-EinrichtungenGmbH"},
|
|
{1639, "SparkTechnologyLabsInc."},
|
|
{1640, "BlebTechnologysrl"},
|
|
{1641, "LivanovaUSA,Inc."},
|
|
{1642, "BradyWorldwideInc."},
|
|
{1643, "DewertOkinGmbH"},
|
|
{1644, "ZtoveApS"},
|
|
{1645, "VensoEcoSolutionsAB"},
|
|
{1646, "EurotronikKranjd.o.o."},
|
|
{1647, "HugTechnologyLtd"},
|
|
{1648, "GemaSwitzerlandGmbH"},
|
|
{1649, "BuzzProductsLtd."},
|
|
{1650, "Kopi"},
|
|
{1651, "InnovaIdeasLimited"},
|
|
{1652, "BeSpoon"},
|
|
{1653, "DecoEnterprises,Inc."},
|
|
{1654, "ExpaiSolutionsPrivateLimited"},
|
|
{1655, "InnovationFirst,Inc."},
|
|
{1656, "SABIKOffshoreGmbH"},
|
|
{1657, "4iiiiInnovationsInc."},
|
|
{1658, "TheEnergyConservatory,Inc."},
|
|
{1659, "I.FARM,INC."},
|
|
{1660, "Tile,Inc."},
|
|
{1661, "FormAthleticaInc."},
|
|
{1662, "MbientLabInc"},
|
|
{1663, "NETGRIDS.N.C.DIBISSOLIMATTEO,CAMPOREALESIMONE,TOGNETTIFEDERICO"},
|
|
{1664, "MannkindCorporation"},
|
|
{1665, "TradeFIDESa.s."},
|
|
{1666, "PhotronLimited"},
|
|
{1667, "EltakoGmbH"},
|
|
{1668, "Dermalapps,LLC"},
|
|
{1669, "GreenwaldIndustries"},
|
|
{1670, "inQsCo.,Ltd."},
|
|
{1671, "CherryGmbH"},
|
|
{1672, "AmstedDigitalSolutionsInc."},
|
|
{1673, "Tacxb.v."},
|
|
{1674, "RaytacCorporation"},
|
|
{1675, "JiangsuTeranovoTechCo.,Ltd."},
|
|
{1676, "ChangzhouSoundDragonElectronicsandAcousticsCo.,Ltd"},
|
|
{1677, "JetBeepInc."},
|
|
{1678, "RazerInc."},
|
|
{1679, "JRMGroupLimited"},
|
|
{1680, "EccrineSystems,Inc."},
|
|
{1681, "CuriePointAB"},
|
|
{1682, "GeorgFischerAG"},
|
|
{1683, "Hach-Danaher"},
|
|
{1684, "T&ALaboratoriesLLC"},
|
|
{1685, "KokiHoldingsCo.,Ltd."},
|
|
{1686, "GunakarPrivateLimited"},
|
|
{1687, "StemcoProductsInc"},
|
|
{1688, "WoodITSecurity,LLC"},
|
|
{1689, "RandomLabSAS"},
|
|
{1690, "Adero,Inc.(formerlyasTrackR,Inc.)"},
|
|
{1691, "DragonchipLimited"},
|
|
{1692, "NoomiAB"},
|
|
{1693, "VakarosLLC"},
|
|
{1694, "DeltaElectronics,Inc."},
|
|
{1695, "FlowMotionTechnologiesAS"},
|
|
{1696, "OBIQLocationTechnologyInc."},
|
|
{1697, "CardoSystems,Ltd"},
|
|
{1698, "GlobalworxGmbH"},
|
|
{1699, "Nymbus,LLC"},
|
|
{1700, "SanyoTechnoSolutionsTottoriCo.,Ltd."},
|
|
{1701, "TEKZITELPTYLTD"},
|
|
{1702, "RoambeeCorporation"},
|
|
{1703, "ChipseaTechnologies(ShenZhen)Corp."},
|
|
{1704, "GDMideaAir-ConditioningEquipmentCo.,Ltd."},
|
|
{1705, "SoundmaxElectronicsLimited"},
|
|
{1706, "ProdualOy"},
|
|
{1707, "HMSIndustrialNetworksAB"},
|
|
{1708, "IngchipsTechnologyCo.,Ltd."},
|
|
{1709, "InnovaSeaSystemsInc."},
|
|
{1710, "SenseQInc."},
|
|
{1711, "ShoofTechnologies"},
|
|
{1712, "BRKBrands,Inc."},
|
|
{1713, "SimpliSafe,Inc."},
|
|
{1714, "TussockInnovation2013Limited"},
|
|
{1715, "TheHablabApS"},
|
|
{1716, "SencilionOy"},
|
|
{1717, "WabilogicLtd."},
|
|
{1718, "SociometricSolutions,Inc."},
|
|
{1719, "iCOGNIZEGmbH"},
|
|
{1720, "ShadeCraft,Inc"},
|
|
{1721, "BeflexInc."},
|
|
{1722, "BeaconzoneLtd"},
|
|
{1723, "LeaftronixAnalogicSolutionsPrivateLimited"},
|
|
{1724, "TWSSrl"},
|
|
{1725, "ABBOy"},
|
|
{1726, "HitSeedOy"},
|
|
{1727, "DelcomProductsInc."},
|
|
{1728, "CAMES.p.A."},
|
|
{1729, "Alarm.comHoldings,Inc"},
|
|
{1730, "MeasurlogicInc."},
|
|
{1731, "KingIElectronics.Co.,Ltd"},
|
|
{1732, "DreamLabsGmbH"},
|
|
{1733, "UrbanCompass,Inc"},
|
|
{1734, "SimmTronicLimited"},
|
|
{1735, "SomatixInc"},
|
|
{1736, "Storz&BickelGmbH&Co.KG"},
|
|
{1737, "MYLAPSB.V."},
|
|
{1738, "ShenzhenZhongguangInfotechTechnologyDevelopmentCo.,Ltd"},
|
|
{1739, "Dyeware,LLC"},
|
|
{1740, "DongguanSmartActionTechnologyCo.,Ltd."},
|
|
{1741, "DIGCorporation"},
|
|
{1742, "FIOR&GENTZ"},
|
|
{1743, "BelpartsN.V."},
|
|
{1744, "EtekcityCorporation"},
|
|
{1745, "MeyerSoundLaboratories,Incorporated"},
|
|
{1746, "CeoTronicsAG"},
|
|
{1747, "TriTeqLockandSecurity,LLC"},
|
|
{1748, "DYNAKODETECHNOLOGYPRIVATELIMITED"},
|
|
{1749, "SensirionAG"},
|
|
{1750, "JCTHealthcarePtyLtd"},
|
|
{1751, "FUBAAutomotiveElectronicsGmbH"},
|
|
{1752, "AWCompany"},
|
|
{1753, "ShanghaiMountainViewSiliconCo.,Ltd."},
|
|
{1754, "ZliideTechnologiesApS"},
|
|
{1755, "AutomaticLabs,Inc."},
|
|
{1756, "IndustrialNetworkControls,LLC"},
|
|
{1757, "IntellithingsLtd."},
|
|
{1758, "Navcast,Inc."},
|
|
{1759, "HubbellLighting,Inc."},
|
|
{1760, "Avaya"},
|
|
{1761, "MilestoneAVTechnologiesLLC"},
|
|
{1762, "AlangoTechnologiesLtd"},
|
|
{1763, "SpinlockLtd"},
|
|
{1764, "Aluna"},
|
|
{1765, "OPTEXCO.,LTD."},
|
|
{1766, "NIHONDENGYOKOUSAKU"},
|
|
{1767, "VELUXA/S"},
|
|
{1768, "AlmendoTechnologiesGmbH"},
|
|
{1769, "ZmartfunElectronics,Inc."},
|
|
{1770, "SafeLineSwedenAB"},
|
|
{1771, "HoustonRadarLLC"},
|
|
{1772, "Sigur"},
|
|
{1773, "JNeadesLtd"},
|
|
{1774, "AvantisSystemsLimited"},
|
|
{1775, "ALCARECo.,Ltd."},
|
|
{1776, "ChargyTechnologies,SL"},
|
|
{1777, "ShibutaniCo.,Ltd."},
|
|
{1778, "TrapperDataAB"},
|
|
{1779, "AlfredInternationalInc."},
|
|
{1780, "NearFieldSolutionsLtd"},
|
|
{1781, "VigilTechnologiesInc."},
|
|
{1782, "VituloPlusBV"},
|
|
{1783, "WILKASchliesstechnikGmbH"},
|
|
{1784, "BodyPlusTechnologyCo.,Ltd"},
|
|
{1785, "happybrushGmbH"},
|
|
{1786, "EnequiAB"},
|
|
{1787, "SartoriusAG"},
|
|
{1788, "TomCommunicationIndustrialCo.,Ltd."},
|
|
{1789, "ESSEmbeddedSystemSolutionsInc."},
|
|
{1790, "MahrGmbH"},
|
|
{1791, "RedpineSignalsInc"},
|
|
{1792, "TraqFreqLLC"},
|
|
{1793, "PAFERSTECH"},
|
|
{1794, "Akcijusabiedriba\"SAFTEHNIKA\""},
|
|
{1795, "BeijingJingdongCenturyTradingCo.,Ltd."},
|
|
{1796, "JBXDesignsInc."},
|
|
{1797, "ABElectrolux"},
|
|
{1798, "WernhervonBraunCenterforASdvancedResearch"},
|
|
{1799, "EssityHygieneandHealthAktiebolag"},
|
|
{1800, "BeInteractiveCo.,Ltd"},
|
|
{1801, "CarewearCorp."},
|
|
{1802, "HufHlsbeck&FrstGmbH&Co.KG"},
|
|
{1803, "ElementProducts,Inc."},
|
|
{1804, "BeijingWinnerMicroelectronicsCo.,Ltd"},
|
|
{1805, "SmartSnuggPtyLtd"},
|
|
{1806, "FiveCoSarl"},
|
|
{1807, "CaliforniaThingsInc."},
|
|
{1808, "AudiodoAB"},
|
|
{1809, "ABAXAS"},
|
|
{1810, "BullGroupCompanyLimited"},
|
|
{1811, "RespiriLimited"},
|
|
{1812, "MindPeaceSafetyLLC"},
|
|
{1813, "VgyanSolutions"},
|
|
{1814, "Altonics"},
|
|
{1815, "iQsquareBV"},
|
|
{1816, "IDIBAIXenginneering"},
|
|
{1817, "ECSG"},
|
|
{1818, "REVSMARTWEARABLEHKCOLTD"},
|
|
{1819, "Precor"},
|
|
{1820, "F5Sports,Inc"},
|
|
/* 1821 - 65534 reserved */
|
|
{65535, "test"},
|
|
{0, NULL}};
|
|
|
|
static const value_string sco_packet[] = {
|
|
{0, "HV1"},
|
|
{1, "HV2"},
|
|
{2, "HV3"},
|
|
/* 3 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string air_mode[] = {
|
|
{0, "mu-law log"},
|
|
{1, "A-law log"},
|
|
{2, "CVSD"},
|
|
{3, "transparent data"},
|
|
/* 4 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string paging_scheme[] = {
|
|
{0, "mandatory scheme"},
|
|
/* 1 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string paging_scheme_settings[] = {
|
|
/* for mandatory scheme: */
|
|
{0, "R0"},
|
|
{1, "R1"},
|
|
{2, "R2"},
|
|
/* 3 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string afh_mode[] = {
|
|
{0, "AFH disabled"},
|
|
{1, "AFH enabled"},
|
|
/* 2 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string features_page[] = {
|
|
{0, "standard features"},
|
|
{1, "extended features 64-67"},
|
|
{2, "extended features 128-140"},
|
|
/* 3 - 255 other feature pages */
|
|
{0, NULL}};
|
|
|
|
static const value_string packet_type_table[] = {
|
|
{0, "1 Mbps only"},
|
|
{1, "2/3 Mbps"},
|
|
/* 2 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string negotiation_state[] = {
|
|
{0, "Initiate negotiation"},
|
|
{1, "The latest received set of negotiable parameters were possible but these parameters are preferred."},
|
|
{2, "The latest received set of negotiable parameters would cause a reserved slot violation."},
|
|
{3, "The latest received set of negotiable parameters would cause a latency violation."},
|
|
{4, "The latest received set of negotiable parameters are not supported."},
|
|
/* 5 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string afh_reporting_mode[] = {
|
|
{0, "AFH reporting disabled"},
|
|
{1, "AFH reporting enabled"},
|
|
/* 2 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string io_capabilities[] = {
|
|
{0, "Display Only"},
|
|
{1, "Display Yes/No"},
|
|
{2, "Keyboard Only"},
|
|
{3, "No Input/No Output"},
|
|
/* 4 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string oob_auth_data[] = {
|
|
{0, "No OOB Authentication Data received"},
|
|
{1, "OOB Authentication Data received"},
|
|
/* 2 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string auth_requirements[] = {
|
|
{0x00, "MITM Protection Not Required - No Bonding"},
|
|
{0x01, "MITM Protection Required - No Bonding"},
|
|
{0x02, "MITM Protection Not Required - Dedicated Bonding"},
|
|
{0x03, "MITM Protection Required - Dedicated Bonding"},
|
|
{0x04, "MITM Protection Not Required - General Bonding"},
|
|
{0x05, "MITM Protection Required - General Bonding"},
|
|
/* 0x06 - 0xff reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string power_adjust_req[] = {
|
|
{0, "decrement power one step"},
|
|
{1, "increment power one step"},
|
|
{2, "increase to maximum power"},
|
|
/* 3 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string power_adjust_res[] = {
|
|
{0, "not supported"},
|
|
{1, "changed one step (not min or max)"},
|
|
{2, "max power"},
|
|
{3, "min power"},
|
|
/* 4 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string test_scenario[] = {
|
|
{0, "Pause Test Mode"},
|
|
{1, "Transmitter test - 0 pattern"},
|
|
{2, "Transmitter test - 1 pattern"},
|
|
{3, "Transmitter test - 1010 pattern"},
|
|
{4, "Pseudorandom bit sequence"},
|
|
{5, "Closed Loop Back - ACL packets"},
|
|
{6, "Closed Loop Back - Synchronous packets"},
|
|
{7, "ACL Packets without whitening"},
|
|
{8, "Synchronous Packets without whitening"},
|
|
{9, "Transmitter test - 1111 0000 pattern"},
|
|
/* 10 - 254 reserved */
|
|
{255, "Exit Test Mode"},
|
|
{0, NULL}};
|
|
|
|
static const value_string hopping_mode[] = {
|
|
{0, "RX/TX on single frequency"},
|
|
{1, "Normal hopping"},
|
|
/* 2 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string power_control_mode[] = {
|
|
{0, "fixed TX output power"},
|
|
{1, "adaptive power control"},
|
|
/* 2 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string esco_packet_type[] = {
|
|
{0x00, "NULL/POLL"},
|
|
{0x07, "EV3"},
|
|
{0x0C, "EV4"},
|
|
{0x0D, "EV5"},
|
|
{0x26, "2-EV3"},
|
|
{0x2C, "2-EV5"},
|
|
{0x37, "3-EV3"},
|
|
{0x3D, "3-EV5"},
|
|
/* other values reserved */
|
|
{0, NULL}};
|
|
|
|
static const value_string notification_value[] = {
|
|
{0, "passkey entry started"},
|
|
{1, "passkey digit entered"},
|
|
{2, "passkey digit erased"},
|
|
{3, "passkey cleared"},
|
|
{4, "passkey entry completed"},
|
|
/* 5 - 255 reserved */
|
|
{0, NULL}};
|
|
|
|
/* initialize the subtree pointers */
|
|
static gint ett_lmp = -1;
|
|
static gint ett_lmp_pwradjres = -1;
|
|
static gint ett_lmp_rate = -1;
|
|
static gint ett_lmp_timectrl = -1;
|
|
static gint ett_lmp_features = -1;
|
|
static gint ett_lmp_featuresext = -1;
|
|
|
|
/* LMP PDUs with short opcodes */
|
|
void dissect_vsc(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
/* TODO implement Broadcom VSC opcodes here:
|
|
* 0: Features Request
|
|
* 1: Features Response
|
|
* 0 and 1: Features: 0x%02X%02X%02X%02X
|
|
* 2: Not Accept
|
|
* Rejection BPCS Opcode: 0x%02X
|
|
* Rejection Error Code: 0x%02X
|
|
* 3: BFC Suspend
|
|
* 4: BFC Resume Request
|
|
* if receive direction:
|
|
* BFC Resume Response (instead)
|
|
* BFC Link State: 0x%02X
|
|
* BFC Stack State: 0x%02X
|
|
* BFC Reserved: 0x%02X\
|
|
* 5: BFC Accept
|
|
* BPCS Accepted Opcode: 0x%02X
|
|
*
|
|
*/
|
|
}
|
|
|
|
void dissect_name_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_nameoffset, tvb, offset, 1, ENC_NA);
|
|
}
|
|
|
|
void dissect_name_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_nameoffset, tvb, offset, 1, ENC_NA);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_namelen, tvb, offset, 1, ENC_NA);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_namefrag, tvb, offset, 14, ENC_ASCII | ENC_NA);
|
|
}
|
|
|
|
void dissect_accepted(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_opinre, tvb, offset, 1, ENC_NA);
|
|
}
|
|
|
|
void dissect_not_accepted(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 3);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_opinre, tvb, offset, 1, ENC_NA);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA);
|
|
}
|
|
|
|
void dissect_clkoffset_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 1);
|
|
}
|
|
|
|
void dissect_clkoffset_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 3);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_clkoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_detach(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA);
|
|
}
|
|
|
|
void dissect_in_rand(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA);
|
|
}
|
|
|
|
void dissect_comb_key(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA);
|
|
}
|
|
|
|
void dissect_unit_key(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_key, tvb, offset, 16, ENC_NA);
|
|
}
|
|
|
|
void dissect_au_rand(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA);
|
|
}
|
|
|
|
void dissect_sres(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 5);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 4);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_authres, tvb, offset, 4, ENC_NA);
|
|
}
|
|
|
|
void dissect_temp_rand(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA);
|
|
}
|
|
|
|
void dissect_temp_key(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_key, tvb, offset, 16, ENC_NA);
|
|
}
|
|
|
|
void dissect_encryption_mode_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_cryptmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_encryption_key_size_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
proto_tree_add_item(tree, hf_lmp_keysz, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
int ret = tvb_get_guint8(tvb, offset);
|
|
DISSECTOR_ASSERT(ret >= 7);
|
|
}
|
|
|
|
void dissect_start_encryption_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_rand, tvb, offset, 16, ENC_NA);
|
|
}
|
|
|
|
void dissect_stop_encryption_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 1);
|
|
}
|
|
|
|
void dissect_switch_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 5);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 4);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_swinst, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_hold(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 7);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 6);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_htime, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_hinst, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_hold_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 7);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 6);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_htime, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_hinst, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_sniff_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 10);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 9);
|
|
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
|
|
ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_dsniff, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_tsniff, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_sniffatt, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_sniffto, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_unsniff_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 1);
|
|
}
|
|
|
|
void dissect_park_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
|
|
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
|
|
ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_tb, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_nb, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_deltab, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pmaddr, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_araddr, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_nbsleep, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_dbsleep, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_daccess, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_taccess, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_naccslots, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_npoll, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_maccess, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
proto_tree_add_item(tree, hf_lmp_accscheme, tvb, offset, 1, ENC_NA);
|
|
}
|
|
|
|
void dissect_set_broadcast_scan_window(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
int db_present;
|
|
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
|
|
ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
|
|
|
|
/* bit0 of timing control flags indicates presence of db */
|
|
db_present = tvb_get_guint8(tvb, offset) & 0x01;
|
|
offset += 1;
|
|
|
|
if (db_present)
|
|
{
|
|
DISSECTOR_ASSERT(len == 6);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 4);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
}
|
|
else
|
|
{
|
|
DISSECTOR_ASSERT(len == 4);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
|
|
}
|
|
|
|
proto_tree_add_item(tree, hf_lmp_bsw, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_modify_beacon(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
int db_present;
|
|
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
|
|
ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
|
|
|
|
/* bit0 of timing control flags indicates presence of db */
|
|
db_present = tvb_get_guint8(tvb, offset) & 0x01;
|
|
offset += 1;
|
|
|
|
if (db_present)
|
|
{
|
|
DISSECTOR_ASSERT(len == 13);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 11);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
}
|
|
else
|
|
{
|
|
DISSECTOR_ASSERT(len == 11);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 9);
|
|
}
|
|
|
|
proto_tree_add_item(tree, hf_lmp_tb, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_nb, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_deltab, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_daccess, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_taccess, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_naccslots, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_npoll, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_maccess, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
proto_tree_add_item(tree, hf_lmp_accscheme, tvb, offset, 1, ENC_NA);
|
|
}
|
|
|
|
void dissect_unpark_bd_addr_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
int db_present;
|
|
proto_item;
|
|
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
|
|
ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
|
|
|
|
/* bit0 of timing control flags indicates presence of db */
|
|
db_present = tvb_get_guint8(tvb, offset) & 0x01;
|
|
offset += 1;
|
|
|
|
if (db_present)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 15);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
}
|
|
else
|
|
{
|
|
DISSECTOR_ASSERT(len == 15);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 13);
|
|
}
|
|
|
|
proto_tree_add_item(tree, hf_lmp_ltaddr1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
proto_tree_add_item(tree, hf_lmp_ltaddr2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_bdaddr1, tvb, offset, 6, ENC_LITTLE_ENDIAN);
|
|
offset += 6;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_bdaddr2, tvb, offset, 6, ENC_LITTLE_ENDIAN);
|
|
offset += 6;
|
|
}
|
|
|
|
void dissect_unpark_pm_addr_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
int db_present;
|
|
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
|
|
ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
|
|
|
|
/* bit0 of timing control flags indicates presence of db */
|
|
db_present = tvb_get_guint8(tvb, offset) & 0x01;
|
|
offset += 1;
|
|
|
|
if (db_present)
|
|
{
|
|
DISSECTOR_ASSERT(len == 15);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 13);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_db, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
}
|
|
else
|
|
{
|
|
DISSECTOR_ASSERT(len == 13);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 11);
|
|
}
|
|
|
|
proto_tree_add_item(tree, hf_lmp_ltaddr1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
proto_tree_add_item(tree, hf_lmp_ltaddr2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pmaddr1, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pmaddr2, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_ltaddr3, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
proto_tree_add_item(tree, hf_lmp_ltaddr4, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pmaddr3, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pmaddr4, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_ltaddr5, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
proto_tree_add_item(tree, hf_lmp_ltaddr6, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pmaddr5, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pmaddr6, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_ltaddr7, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pmaddr7, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_incr_power_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
|
|
/* skipping one byte "for future use" */
|
|
}
|
|
|
|
void dissect_decr_power_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
|
|
/* skipping one byte "for future use" */
|
|
}
|
|
|
|
void dissect_max_power(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 1);
|
|
}
|
|
|
|
void dissect_min_power(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 1);
|
|
}
|
|
|
|
void dissect_auto_rate(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 1);
|
|
}
|
|
|
|
void dissect_preferred_rate(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
proto_item *rate_item;
|
|
proto_tree *rate_tree;
|
|
|
|
DISSECTOR_ASSERT(len == 2);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
rate_item = proto_tree_add_item(tree, hf_lmp_rate, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
rate_tree = proto_item_add_subtree(rate_item, ett_lmp_rate);
|
|
|
|
proto_tree_add_item(rate_tree, hf_lmp_rate_fec, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
proto_tree_add_item(rate_tree, hf_lmp_rate_size, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
proto_tree_add_item(rate_tree, hf_lmp_rate_type, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
proto_tree_add_item(rate_tree, hf_lmp_rate_edrsize, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_version_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 6);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 5);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_versnr, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_compid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_subversnr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_version_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 6);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 5);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_versnr, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_compid, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_subversnr, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_features_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 9);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 8);
|
|
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_features,
|
|
ett_lmp_features, features_fields, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_features_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 9);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 8);
|
|
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_features,
|
|
ett_lmp_features, features_fields, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_quality_of_service(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 4);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pollintvl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_nbc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_quality_of_service_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 4);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pollintvl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_nbc, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_sco_link_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 7);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 6);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_scohdl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
|
|
ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_dsco, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_tsco, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_scopkt, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_airmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_remove_sco_link_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 3);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_scohdl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA);
|
|
}
|
|
|
|
void dissect_max_slot(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_maxslots, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_max_slot_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_maxslots, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_timing_accuracy_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 1);
|
|
}
|
|
|
|
void dissect_timing_accuracy_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 3);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_drift, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_jitter, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_setup_complete(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 1);
|
|
}
|
|
|
|
void dissect_use_semi_permanent_key(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 1);
|
|
}
|
|
|
|
void dissect_host_connection_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 1);
|
|
}
|
|
|
|
void dissect_slot_offset(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 9);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 8);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_slotoffset, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_bdaddr, tvb, offset, 6, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_page_mode_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 3);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pagesch, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pssettings, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_page_scan_mode_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 3);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pagesch, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pssettings, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_supervision_timeout(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 3);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_suptimeout, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_test_activate(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 1);
|
|
}
|
|
|
|
void dissect_test_control(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 10);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 9);
|
|
|
|
proto_tree_add_uint(tree, hf_lmp_testscen, tvb, offset, 1, tvb_get_guint8(tvb, offset) ^ 0x55);
|
|
offset += 1;
|
|
|
|
proto_tree_add_uint(tree, hf_lmp_hopmode, tvb, offset, 1, tvb_get_guint8(tvb, offset) ^ 0x55);
|
|
offset += 1;
|
|
|
|
proto_tree_add_uint(tree, hf_lmp_txfreq, tvb, offset, 1, (tvb_get_guint8(tvb, offset) ^ 0x55) + 2402); //MHz
|
|
offset += 1;
|
|
|
|
proto_tree_add_uint(tree, hf_lmp_rxfreq, tvb, offset, 1, (tvb_get_guint8(tvb, offset) ^ 0x55) + 2402);
|
|
offset += 1;
|
|
|
|
proto_tree_add_uint(tree, hf_lmp_pcmode, tvb, offset, 1, tvb_get_guint8(tvb, offset) ^ 0x55);
|
|
offset += 1;
|
|
|
|
proto_tree_add_uint(tree, hf_lmp_pollper, tvb, offset, 1, (tvb_get_guint8(tvb, offset) ^ 0x55) * 1.25); //ms
|
|
offset += 1;
|
|
|
|
proto_tree_add_uint(tree, hf_lmp_pkttype, tvb, offset, 1, tvb_get_guint8(tvb, offset) ^ 0x55);
|
|
offset += 1;
|
|
|
|
proto_tree_add_uint(tree, hf_lmp_testlen, tvb, offset, 2, tvb_get_bits16(tvb, offset * 8, 16, ENC_LITTLE_ENDIAN) ^ 0x5555);
|
|
}
|
|
|
|
void dissect_encryption_key_size_mask_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 1);
|
|
}
|
|
|
|
void dissect_encryption_key_size_mask_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 3);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_ksmask, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_set_afh(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 16);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 15);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_afhinst, tvb, offset, 4, ENC_LITTLE_ENDIAN);
|
|
offset += 4;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_afhmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_afhchmap, tvb, offset, 10, ENC_NA);
|
|
}
|
|
|
|
void dissect_encapsulated_header(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 4);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_encmaj, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_encmin, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_enclen, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_encapsulated_payload(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_encdata, tvb, offset, 16, ENC_NA);
|
|
}
|
|
|
|
void dissect_simple_pairing_confirm(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_commit, tvb, offset, 16, ENC_NA);
|
|
}
|
|
|
|
void dissect_simple_pairing_number(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_nonce, tvb, offset, 16, ENC_NA);
|
|
}
|
|
|
|
void dissect_dhkey_check(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 17);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 16);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_confirm, tvb, offset, 16, ENC_NA);
|
|
}
|
|
|
|
/* LMP PDUs with extended opcodes */
|
|
|
|
void dissect_accepted_ext(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 4);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_opinre, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_eopinre, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_not_accepted_ext(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 5);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_opinre, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_eopinre, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA);
|
|
}
|
|
|
|
void dissect_features_req_ext(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
int feat_page = 0;
|
|
|
|
DISSECTOR_ASSERT(len == 12);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 10);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_fpage, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
feat_page = tvb_get_guint8(tvb, offset);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_maxsp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
if (feat_page == 1)
|
|
{
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_featuresext,
|
|
ett_lmp_featuresext, extfeatures1_fields, ENC_LITTLE_ENDIAN);
|
|
}
|
|
else
|
|
{
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_featuresext,
|
|
ett_lmp_featuresext, extfeatures2_fields, ENC_LITTLE_ENDIAN);
|
|
}
|
|
}
|
|
|
|
void dissect_features_res_ext(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
int feat_page = 0;
|
|
DISSECTOR_ASSERT(len == 12);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 10);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_fpage, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
feat_page = tvb_get_guint8(tvb, offset);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_maxsp, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
if (feat_page == 1)
|
|
{
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_featuresext,
|
|
ett_lmp_featuresext, extfeatures1_fields, ENC_LITTLE_ENDIAN);
|
|
}
|
|
else
|
|
{
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_featuresext,
|
|
ett_lmp_featuresext, extfeatures2_fields, ENC_LITTLE_ENDIAN);
|
|
}
|
|
}
|
|
|
|
void dissect_packet_type_table_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 3);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pkttypetbl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_esco_link_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 16);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 14);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_escohdl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_escoltaddr, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_bitmask(tree, tvb, offset, hf_lmp_timectrl,
|
|
ett_lmp_timectrl, timectrl_fields, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_desco, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_tesco, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_wesco, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_escotypems, tvb, offset, 1, ENC_NA);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_escotypesm, tvb, offset, 1, ENC_NA);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_escolenms, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_escolensm, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_airmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_negstate, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_remove_esco_link_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 4);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 2);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_escohdl, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_err, tvb, offset, 1, ENC_NA);
|
|
}
|
|
|
|
void dissect_channel_classification_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 7);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 5);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_afhrptmode, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_afhminintvl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_afhmaxintvl, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_channel_classification(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 12);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 10);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_afhclass, tvb, offset, 10, ENC_NA);
|
|
}
|
|
|
|
void dissect_sniff_subrating_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 9);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 7);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_maxss, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_minsmt, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_sniffsi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_sniff_subrating_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 9);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 7);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_maxss, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_minsmt, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
offset += 2;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_sniffsi, tvb, offset, 2, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_pause_encryption_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
}
|
|
|
|
void dissect_resume_encryption_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
}
|
|
|
|
void dissect_io_capability_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 5);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_iocaps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_oobauthdata, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_authreqs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_io_capability_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 5);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 3);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_iocaps, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_oobauthdata, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
proto_tree_add_item(tree, hf_lmp_authreqs, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_numeric_comparison_failed(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
}
|
|
|
|
void dissect_passkey_failed(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
}
|
|
|
|
void dissect_oob_failed(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
}
|
|
|
|
void dissect_keypress_notification(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 3);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_nottype, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_power_control_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 3);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
proto_tree_add_item(tree, hf_lmp_pwradjreq, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_power_control_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
proto_item *pa_item;
|
|
proto_tree *pa_tree;
|
|
|
|
DISSECTOR_ASSERT(len == 3);
|
|
DISSECTOR_ASSERT(tvb_reported_length_remaining(tvb, offset) >= 1);
|
|
|
|
pa_item = proto_tree_add_item(tree, hf_lmp_pwradjres, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
pa_tree = proto_item_add_subtree(pa_item, ett_lmp_pwradjres);
|
|
|
|
proto_tree_add_item(pa_tree, hf_lmp_pwradj_gfsk, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
proto_tree_add_item(pa_tree, hf_lmp_pwradj_dqpsk, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
proto_tree_add_item(pa_tree, hf_lmp_pwradj_8dpsk, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
}
|
|
|
|
void dissect_ping_req(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
}
|
|
|
|
void dissect_ping_res(proto_tree *tree, tvbuff_t *tvb, int offset, int len)
|
|
{
|
|
DISSECTOR_ASSERT(len == 2);
|
|
}
|
|
|
|
/* Link Manager Protocol */
|
|
static int
|
|
dissect_btbrlmp(tvbuff_t *tvb, packet_info *pinfo, proto_tree *tree)
|
|
{
|
|
proto_item *lmp_item;
|
|
proto_tree *lmp_tree;
|
|
int offset;
|
|
int len;
|
|
int op; /* opcode */
|
|
int eop; /* extended opcode */
|
|
|
|
// struct timespec start_time;
|
|
// struct timespec end_time;
|
|
// clock_gettime(CLOCK_MONOTONIC, &start_time);
|
|
|
|
offset = 0;
|
|
len = tvb_reported_length(tvb);
|
|
|
|
DISSECTOR_ASSERT(len >= 1);
|
|
|
|
/* make entries in protocol column and info column on summary display */
|
|
col_set_str(pinfo->cinfo, COL_PROTOCOL, "LMP");
|
|
|
|
/* clear the info column first just in case of type fetching failure. */
|
|
col_clear(pinfo->cinfo, COL_INFO);
|
|
// printf("pinfo->p2p_dir:%d\n",pinfo->p2p_dir);
|
|
switch (pinfo->p2p_dir)
|
|
{
|
|
case P2P_DIR_SENT:
|
|
col_set_str(pinfo->cinfo, COL_INFO, "TX --> ");
|
|
break;
|
|
case P2P_DIR_RECV:
|
|
col_set_str(pinfo->cinfo, COL_INFO, "RX <-- ");
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
|
|
op = tvb_get_guint8(tvb, offset) >> 1;
|
|
|
|
if (op == LMP_ESCAPE_4)
|
|
{
|
|
DISSECTOR_ASSERT(len >= 2);
|
|
|
|
eop = tvb_get_guint8(tvb, offset + 1);
|
|
|
|
col_append_str(pinfo->cinfo, COL_INFO, val_to_str(eop, ext_opcode, "Unknown Extended Opcode (%d)"));
|
|
}
|
|
else
|
|
{
|
|
col_append_str(pinfo->cinfo, COL_INFO, val_to_str(op, opcode, "Unknown Opcode (%d)"));
|
|
}
|
|
|
|
/* see if we are being asked for details */
|
|
if (!tree)
|
|
return tvb_reported_length(tvb);
|
|
|
|
lmp_item = proto_tree_add_item(tree, proto_btbrlmp, tvb, offset, -1, ENC_NA);
|
|
lmp_tree = proto_item_add_subtree(lmp_item, ett_lmp);
|
|
|
|
proto_tree_add_item(lmp_tree, hf_lmp_tid, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
|
|
proto_tree_add_item(lmp_tree, hf_lmp_op, tvb, offset, 1, ENC_LITTLE_ENDIAN);
|
|
offset += 1;
|
|
|
|
switch (op)
|
|
{
|
|
case LMP_NAME_REQ:
|
|
dissect_name_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_NAME_RES:
|
|
dissect_name_res(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_ACCEPTED:
|
|
dissect_accepted(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_NOT_ACCEPTED:
|
|
dissect_not_accepted(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_CLKOFFSET_REQ:
|
|
dissect_clkoffset_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_CLKOFFSET_RES:
|
|
dissect_clkoffset_res(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_DETACH:
|
|
dissect_detach(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_IN_RAND:
|
|
dissect_in_rand(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_COMB_KEY:
|
|
dissect_comb_key(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_UNIT_KEY:
|
|
dissect_unit_key(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_AU_RAND:
|
|
dissect_au_rand(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SRES:
|
|
dissect_sres(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_TEMP_RAND:
|
|
dissect_temp_rand(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_TEMP_KEY:
|
|
dissect_temp_key(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_ENCRYPTION_MODE_REQ:
|
|
dissect_encryption_mode_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_ENCRYPTION_KEY_SIZE_REQ:
|
|
dissect_encryption_key_size_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_START_ENCRYPTION_REQ:
|
|
dissect_start_encryption_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_STOP_ENCRYPTION_REQ:
|
|
dissect_stop_encryption_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SWITCH_REQ:
|
|
dissect_switch_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_HOLD:
|
|
dissect_hold(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_HOLD_REQ:
|
|
dissect_hold_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SNIFF_REQ:
|
|
dissect_sniff_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_UNSNIFF_REQ:
|
|
dissect_unsniff_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_PARK_REQ:
|
|
dissect_park_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SET_BROADCAST_SCAN_WINDOW:
|
|
dissect_set_broadcast_scan_window(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_MODIFY_BEACON:
|
|
dissect_modify_beacon(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_UNPARK_BD_ADDR_REQ:
|
|
dissect_unpark_bd_addr_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_UNPARK_PM_ADDR_REQ:
|
|
dissect_unpark_pm_addr_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_INCR_POWER_REQ:
|
|
dissect_incr_power_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_DECR_POWER_REQ:
|
|
dissect_decr_power_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_MAX_POWER:
|
|
dissect_max_power(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_MIN_POWER:
|
|
dissect_min_power(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_AUTO_RATE:
|
|
dissect_auto_rate(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_PREFERRED_RATE:
|
|
dissect_preferred_rate(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_VERSION_REQ:
|
|
dissect_version_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_VERSION_RES:
|
|
dissect_version_res(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_FEATURES_REQ:
|
|
dissect_features_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_FEATURES_RES:
|
|
dissect_features_res(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_QUALITY_OF_SERVICE:
|
|
dissect_quality_of_service(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_QUALITY_OF_SERVICE_REQ:
|
|
dissect_quality_of_service_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SCO_LINK_REQ:
|
|
dissect_sco_link_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_REMOVE_SCO_LINK_REQ:
|
|
dissect_remove_sco_link_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_MAX_SLOT:
|
|
dissect_max_slot(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_MAX_SLOT_REQ:
|
|
dissect_max_slot_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_TIMING_ACCURACY_REQ:
|
|
dissect_timing_accuracy_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_TIMING_ACCURACY_RES:
|
|
dissect_timing_accuracy_res(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SETUP_COMPLETE:
|
|
dissect_setup_complete(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_USE_SEMI_PERMANENT_KEY:
|
|
dissect_use_semi_permanent_key(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_HOST_CONNECTION_REQ:
|
|
dissect_host_connection_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SLOT_OFFSET:
|
|
dissect_slot_offset(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_PAGE_MODE_REQ:
|
|
dissect_page_mode_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_PAGE_SCAN_MODE_REQ:
|
|
dissect_page_scan_mode_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SUPERVISION_TIMEOUT:
|
|
dissect_supervision_timeout(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_TEST_ACTIVATE:
|
|
dissect_test_activate(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_TEST_CONTROL:
|
|
dissect_test_control(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_ENCRYPTION_KEY_SIZE_MASK_REQ:
|
|
dissect_encryption_key_size_mask_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_ENCRYPTION_KEY_SIZE_MASK_RES:
|
|
dissect_encryption_key_size_mask_res(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SET_AFH:
|
|
dissect_set_afh(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_ENCAPSULATED_HEADER:
|
|
dissect_encapsulated_header(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_ENCAPSULATED_PAYLOAD:
|
|
dissect_encapsulated_payload(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SIMPLE_PAIRING_CONFIRM:
|
|
dissect_simple_pairing_confirm(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SIMPLE_PAIRING_NUMBER:
|
|
dissect_simple_pairing_number(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_DHKEY_CHECK:
|
|
dissect_dhkey_check(lmp_tree, tvb, offset, len);
|
|
break;
|
|
/*
|
|
If the initial 7 bits
|
|
of the opcode have one of the special escape values 124-127 then an
|
|
additional byte of opcode is located in the second byte of the payload
|
|
*/
|
|
case LMP_ESCAPE_1:
|
|
break;
|
|
case LMP_ESCAPE_2:
|
|
break;
|
|
case LMP_ESCAPE_3:
|
|
break;
|
|
case LMP_ESCAPE_4:
|
|
/* extended opcode */
|
|
DISSECTOR_ASSERT(len >= 2);
|
|
proto_tree_add_item(lmp_tree, hf_lmp_eop, tvb, offset, 1, ENC_NA);
|
|
offset += 1;
|
|
|
|
switch (eop)
|
|
{
|
|
case LMP_ACCEPTED_EXT:
|
|
dissect_accepted_ext(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_NOT_ACCEPTED_EXT:
|
|
dissect_not_accepted_ext(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_FEATURES_REQ_EXT:
|
|
dissect_features_req_ext(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_FEATURES_RES_EXT:
|
|
dissect_features_res_ext(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_PACKET_TYPE_TABLE_REQ:
|
|
dissect_packet_type_table_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_ESCO_LINK_REQ:
|
|
dissect_esco_link_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_REMOVE_ESCO_LINK_REQ:
|
|
dissect_remove_esco_link_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_CHANNEL_CLASSIFICATION_REQ:
|
|
dissect_channel_classification_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_CHANNEL_CLASSIFICATION:
|
|
dissect_channel_classification(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SNIFF_SUBRATING_REQ:
|
|
dissect_sniff_subrating_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_SNIFF_SUBRATING_RES:
|
|
dissect_sniff_subrating_res(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_PAUSE_ENCRYPTION_REQ:
|
|
dissect_pause_encryption_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_RESUME_ENCRYPTION_REQ:
|
|
dissect_resume_encryption_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_IO_CAPABILITY_REQ:
|
|
dissect_io_capability_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_IO_CAPABILITY_RES:
|
|
dissect_io_capability_res(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_NUMERIC_COMPARISON_FAILED:
|
|
dissect_numeric_comparison_failed(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_PASSKEY_FAILED:
|
|
dissect_passkey_failed(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_OOB_FAILED:
|
|
dissect_oob_failed(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_KEYPRESS_NOTIFICATION:
|
|
dissect_keypress_notification(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_POWER_CONTROL_REQ:
|
|
dissect_power_control_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_POWER_CONTROL_RES:
|
|
dissect_power_control_res(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_PING_REQ:
|
|
dissect_ping_req(lmp_tree, tvb, offset, len);
|
|
break;
|
|
case LMP_PING_RES:
|
|
dissect_ping_res(lmp_tree, tvb, offset, len);
|
|
break;
|
|
default:
|
|
break;
|
|
}
|
|
default:
|
|
break;
|
|
}
|
|
|
|
// clock_gettime(CLOCK_MONOTONIC, &end_time);
|
|
// long measured_latency_ns = ((end_time.tv_sec - start_time.tv_sec) * 1000000000UL) + (end_time.tv_nsec - start_time.tv_nsec) / 1000;
|
|
// printf("lmp=%ld\n", measured_latency_ns);
|
|
|
|
/* Return the amount of data this dissector was able to dissect */
|
|
return tvb_reported_length(tvb);
|
|
};
|
|
|
|
/* register the protocol with Wireshark */
|
|
void proto_register_btbrlmp(void)
|
|
{
|
|
|
|
/* list of fields */
|
|
static hf_register_info hf[] = {
|
|
{&hf_lmp_accscheme,
|
|
{"Access Scheme", "btbrlmp.accscheme",
|
|
FT_UINT8, BASE_DEC, VALS(access_scheme), 0xf0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_afhchmap,
|
|
{"AFH Channel Map", "btbrlmp.afhchmap",
|
|
/* could break out individual channels but long */
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
"Adaptive Frequency Hopping Channel Map", HFILL}},
|
|
{&hf_lmp_afhclass,
|
|
{"AFH Channel Classification", "btbrlmp.afhclass",
|
|
/* could break out individual channels but long */
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
"Adaptive Frequency Hopping Channel Classification", HFILL}},
|
|
{&hf_lmp_afhinst,
|
|
{"AFH Instant", "btbrlmp.afhinst",
|
|
FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"Adaptive Frequency Hopping Instant (slot)", HFILL}},
|
|
{&hf_lmp_afhmaxintvl,
|
|
{"AFH Max Interval", "btbrlmp.maxintvl",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Adaptive Maximum Interval in slots", HFILL}},
|
|
{&hf_lmp_afhminintvl,
|
|
{"AFH Min Interval", "btbrlmp.minintvl",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Adaptive Minimum Interval in slots", HFILL}},
|
|
{&hf_lmp_afhmode,
|
|
{"AFH Mode", "btbrlmp.afhmode",
|
|
FT_UINT8, BASE_DEC, VALS(afh_mode), 0x0,
|
|
"Adaptive Frequency Hopping Mode", HFILL}},
|
|
{&hf_lmp_afhrptmode,
|
|
{"AFH Reporting Mode", "btbrlmp.afhrptmode",
|
|
FT_UINT8, BASE_DEC, VALS(afh_reporting_mode), 0x0,
|
|
"Adaptive Frequency Hopping Reporting Mode", HFILL}},
|
|
{&hf_lmp_airmode,
|
|
{"Air Mode", "btbrlmp.airmode",
|
|
FT_UINT8, BASE_HEX, VALS(air_mode), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_araddr,
|
|
{"AR_ADDR", "btbrlmp.araddr",
|
|
FT_UINT8, BASE_HEX, NULL, 0xfe,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_authreqs,
|
|
{"Authentication Requirements", "btbrlmp.authreqs",
|
|
FT_UINT8, BASE_HEX, VALS(auth_requirements), 0x00,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_authres,
|
|
{"Authentication Response", "btbrlmp.authres",
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_bdaddr,
|
|
{"BD_ADDR", "btbrlmp.bdaddr",
|
|
FT_UINT64, BASE_HEX, NULL, 0x0000ffffffffffff,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_bdaddr1,
|
|
{"BD_ADDR 1", "btbrlmp.bdaddr",
|
|
FT_UINT64, BASE_HEX, NULL, 0x0000ffffffffffff,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_bdaddr2,
|
|
{"BD_ADDR2", "btbrlmp.bdaddr",
|
|
FT_UINT64, BASE_HEX, NULL, 0x0000ffffffffffff,
|
|
"BD_ADDR 2", HFILL}},
|
|
{&hf_lmp_bsw,
|
|
{"Broadcast Scan Window", "btbrlmp.bsw",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Broadcast Scan Window in slots", HFILL}},
|
|
{&hf_lmp_clkoffset,
|
|
{"Clock Offset", "btbrlmp.clkoffset",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
"Clock Offset in units of 1.25 ms", HFILL}},
|
|
{&hf_lmp_commit,
|
|
{"Commitment Value", "btbrlmp.commit",
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_confirm,
|
|
{"Confirmation Value", "btbrlmp.confirm",
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_compid,
|
|
{"Company ID", "btbrlmp.compid",
|
|
FT_UINT16, BASE_DEC, VALS(compid), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_cryptmode,
|
|
{"Encryption Mode", "btbrlmp.cryptmode",
|
|
FT_UINT8, BASE_DEC, VALS(encryption_mode), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_daccess,
|
|
{"Daccess", "btbrlmp.daccess",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
"Daccess in slots", HFILL}},
|
|
{&hf_lmp_db,
|
|
{"Db", "btbrlmp.db",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Db in slots", HFILL}},
|
|
{&hf_lmp_dbsleep,
|
|
{"Dbsleep", "btbrlmp.dbsleep",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_deltab,
|
|
{"Deltab", "btbrlmp.deltab",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
"Deltab in slots", HFILL}},
|
|
{&hf_lmp_desco,
|
|
{"Desco", "btbrlmp.desco",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
"Desco in slots", HFILL}},
|
|
{&hf_lmp_drift,
|
|
{"Drift", "btbrlmp.drift",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
"Drift in ppm", HFILL}},
|
|
{&hf_lmp_dsco,
|
|
{"Dsco", "btbrlmp.dsco",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
"Dsco in slots", HFILL}},
|
|
{&hf_lmp_dsniff,
|
|
{"Dsniff", "btbrlmp.dsniff",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Dsniff in slots", HFILL}},
|
|
{&hf_lmp_encdata,
|
|
{"Encapsulated Data", "btbrlmp.encdata",
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_enclen,
|
|
{"Encapsulated Length", "btbrlmp.enclen",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_encmaj,
|
|
{"Encapsulated Major Type", "btbrlmp.encmaj",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_encmin,
|
|
{"Encapsulated Minor Type", "btbrlmp.encmin",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_eop,
|
|
{"Extended Opcode", "btbrlmp.eop",
|
|
FT_UINT8, BASE_DEC, VALS(ext_opcode), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_eopinre,
|
|
{"In Response To", "btbrlmp.eopinre",
|
|
FT_UINT8, BASE_DEC, VALS(ext_opcode), 0x0,
|
|
"Extended Opcode this is in response to", HFILL}},
|
|
{&hf_lmp_escolenms,
|
|
{"Packet Length M -> S", "btbrlmp.escolenms",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
"Packet Length in bytes Master to Slave", HFILL}},
|
|
{&hf_lmp_escolensm,
|
|
{"Packet Length S -> M", "btbrlmp.escolensm",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
"Packet Length in bytes Slave to Master", HFILL}},
|
|
{&hf_lmp_escotypems,
|
|
{"eSCO Packet Type M -> S", "btbrlmp.escotypems",
|
|
FT_UINT8, BASE_HEX, VALS(esco_packet_type), 0x0,
|
|
"eSCO Packet Type Master to Slave", HFILL}},
|
|
{&hf_lmp_escotypesm,
|
|
{"eSCO Packet Type S -> M", "btbrlmp.escotypesm",
|
|
FT_UINT8, BASE_HEX, VALS(esco_packet_type), 0x0,
|
|
"eSCO Packet Type Slave to Master", HFILL}},
|
|
{&hf_lmp_err,
|
|
{"Error Code", "btbrlmp.err",
|
|
FT_UINT8, BASE_HEX, VALS(error_code), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_escohdl,
|
|
{"eSCO Handle", "btbrlmp.escohdl",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_escoltaddr,
|
|
{"eSCO LT_ADDR", "btbrlmp.escoltaddr",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
"eSCO Logical Transport Address", HFILL}},
|
|
{&hf_lmp_features,
|
|
{"Features", "btbrlmp.features",
|
|
FT_UINT64, BASE_HEX, NULL, 0x0,
|
|
"Feature Mask", HFILL}},
|
|
{&hf_lmp_feat_3slot,
|
|
{"3 slot packets", "btbrlmp.feat.3slot",
|
|
FT_BOOLEAN, 64, NULL, 0x1,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_5slot,
|
|
{"5 slot packets", "btbrlmp.feat.5slot",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 1,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_enc,
|
|
{"Encryption", "btbrlmp.feat.enc",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 2,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_slotoff,
|
|
{"Slot offset", "btbrlmp.feat.slotoff",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 3,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_timacc,
|
|
{"Timing accuracy", "btbrlmp.feat.timacc",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 4,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_rolesw,
|
|
{"Role switch", "btbrlmp.feat.rolesw",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 5,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_holdmo,
|
|
{"Hold mode", "btbrlmp.feat.holdmo",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 6,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_sniffmo,
|
|
{"Sniff mode", "btbrlmp.feat.sniffmo",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 7,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_res0,
|
|
{"Reserved", "btbrlmp.feat.res0",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 8,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_pwrctlreq,
|
|
{"Power control requests", "btbrlmp.feat.pwrctlreq",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 9,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_cqddr,
|
|
{"Channel quality driven data rate (CQDDR)", "btbrlmp.feat.cqddr",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 10,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_sco,
|
|
{"SCO link", "btbrlmp.feat.sco",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 11,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_hv2,
|
|
{"HV2 packets", "btbrlmp.feat.hv2",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 12,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_hv3,
|
|
{"HV3 packets", "btbrlmp.feat.hv3",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 13,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_mulaw,
|
|
{"u-law log synchronous data", "btbrlmp.feat.mulaw",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 14,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_alaw,
|
|
{"A-law log synchronous data", "btbrlmp.feat.alaw",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 15,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_cvsd,
|
|
{"CVSD synchronous data", "btbrlmp.feat.cvsd",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 16,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_pagneg,
|
|
{"Paging parameter negotiation", "btbrlmp.feat.pagneg",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 17,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_pwrctl,
|
|
{"Power control", "btbrlmp.feat.pwrctl",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 18,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_transsync,
|
|
{"Transparent synchronous data", "btbrlmp.feat.transsync",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 19,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_flowctl1,
|
|
{"Flow control lag (least significant bit)", "btbrlmp.feat.flowctl1",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 20,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_flowctl2,
|
|
{"Flow control lag (middle bit)", "btbrlmp.feat.flowctl2",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 21,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_flowctl3,
|
|
{"Flow control lag (most significant bit)", "btbrlmp.feat.flowctl3",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 22,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_bcenc,
|
|
{"Broadcast Encryption", "btbrlmp.feat.bcenc",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 23,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_res1,
|
|
{"Reserved for future use", "btbrlmp.feat.res1",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 24,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_acl2,
|
|
{"Enhanced Data Rate ACL 2 Mb/s mode", "btbrlmp.feat.acl2",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 25,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_acl3,
|
|
{"Enhanced Data Rate ACL 3 Mb/s mode", "btbrlmp.feat.acl3",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 26,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_eninq,
|
|
{"Enhanced inquiry scan", "btbrlmp.feat.eninq",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 27,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_intinq,
|
|
{"Interlaced inquiry scan", "btbrlmp.feat.intinq",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 28,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_intpag,
|
|
{"Interlaced page scan", "btbrlmp.feat.intpag",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 29,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_rssiinq,
|
|
{"RSSI with inquiry results", "btbrlmp.feat.rssiinq",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 30,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_ev3,
|
|
{"Extended SCO link (EV3 packets)", "btbrlmp.feat.ev3",
|
|
FT_BOOLEAN, 64, NULL, 0x80000000,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_ev4,
|
|
{"EV4 packets", "btbrlmp.feat.ev4",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_ev5,
|
|
{"EV5 packets", "btbrlmp.feat.ev5",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 1,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_res2,
|
|
{"Reserved", "btbrlmp.feat.res2",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 2,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_afhcapsl,
|
|
{"AFH capable slave", "btbrlmp.feat.afhcapsl",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 3,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_afhclasl,
|
|
{"AFH classification slave", "btbrlmp.feat.afhclasl",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 4,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_bredrnotsup,
|
|
{"BR/EDR Not Supported", "btbrlmp.feat.bredrnotsup",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 5,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_lesup,
|
|
{"LE Supported (Controller)", "btbrlmp.feat.lesup",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 6,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_3slotenh,
|
|
{"3-slot Enhanced Data Rate ACL packets", "btbrlmp.feat.3slotenh",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 7,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_5slotenh,
|
|
{"5-slot Enhanced Data Rate ACL packets", "btbrlmp.feat.5slotenh",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 8,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_sniffsubr,
|
|
{"Sniff subrating", "btbrlmp.feat.sniffsubr",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 9,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_pauseenc,
|
|
{"Pause encryption", "btbrlmp.feat.pauseenc",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 10,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_afhcapma,
|
|
{"AFH capable master", "btbrlmp.feat.afhcapma",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 11,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_afhclama,
|
|
{"AFH classification master", "btbrlmp.feat.afhclama",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 12,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_esco2,
|
|
{"Enhanced Data Rate eSCO 2 Mb/s mode", "btbrlmp.feat.esco2",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 13,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_esco3,
|
|
{"Enhanced Data Rate eSCO 3 Mb/s mode", "btbrlmp.feat.esco3",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 14,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_3slotenhesco,
|
|
{"3-slot Enhanced Data Rate eSCO packets", "btbrlmp.feat.3slotenhesco",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 15,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_extinqres,
|
|
{"Extended Inquiry Response", "btbrlmp.feat.extinqres",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 16,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_simlebredr,
|
|
{"Simultaneous LE and BR/EDR to Same Device Capable (Controller)", "btbrlmp.feat.simlebredr",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 17,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_res3,
|
|
{"Reserved", "btbrlmp.feat.res3",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 18,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_ssp,
|
|
{"Secure Simple Pairing", "btbrlmp.feat.ssp",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 19,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_enpdu,
|
|
{"Encapsulated PDU", "btbrlmp.feat.enpdu",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 20,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_edr,
|
|
{"Erroneous Data Reporting", "btbrlmp.feat.edr",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 21,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_nonflush,
|
|
{"Non-flushable Packet Boundary Flag", "btbrlmp.feat.nonflush",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 22,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_res4,
|
|
{"Reserved", "btbrlmp.feat.res4",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 23,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_lstimche,
|
|
{"Link Supervision Timeout Changed Event", "btbrlmp.feat.lstimche",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 24,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_inqtxpwr,
|
|
{"Inquiry TX Power Level", "btbrlmp.feat.inqtxpwr",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 25,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_enhpwr,
|
|
{"Enhanced Power Control", "btbrlmp.feat.enhpwr",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 26,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_res5,
|
|
{"Reserved", "btbrlmp.feat.res5",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 27,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_res6,
|
|
{"Reserved", "btbrlmp.feat.res6",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 28,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_res7,
|
|
{"Reserved", "btbrlmp.feat.res7",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 29,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_res8,
|
|
{"Reserved", "btbrlmp.feat.res8",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 30,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_feat_extfeat,
|
|
{"Extended features", "btbrlmp.feat.extfeat",
|
|
FT_BOOLEAN, 64, NULL, 0x100000000 << 31,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_featuresext,
|
|
{"Extended Features", "btbrlmp.featuresext",
|
|
FT_UINT64, BASE_HEX, NULL, 0x0,
|
|
"Extended Feature Mask", HFILL}},
|
|
/* extended features page 1 */
|
|
{&hf_lmp_efeat_ssp,
|
|
{"Secure Simple Pairing (Host Support)", "btbrlmp.efeat.ssp",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_lesup,
|
|
{"LE Supported (Host)", "btbrlmp.efeat.lesup",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 1,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_lebredr,
|
|
{"Simultaneous LE and BR/EDR to Same Device Capable (Host)", "btbrlmp.efeat.lebredr",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 2,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_sch,
|
|
{"Secure Connections (Host Support)", "btbrlmp.efeat.sch",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 3,
|
|
NULL, HFILL}},
|
|
/* extended features page 2 */
|
|
{&hf_lmp_efeat_csbma,
|
|
{"Connectionless Slave Broadcast - Master Operation", "btbrlmp.efeat.csbma",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_csbsl,
|
|
{"Connectionless Slave Broadcast - Slave Operation", "btbrlmp.efeat.csbsl",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 1,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_syntr,
|
|
{"Synchronization Train", "btbrlmp.efeat.syntr",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 2,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_synsc,
|
|
{"Synchronization Scan", "btbrlmp.efeat.synsc",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 3,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_inqresnote,
|
|
{"Inquiry Response Notification Event", "btbrlmp.efeat.inqresnote",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 4,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_genintsc,
|
|
{"Generalized interlaced scan", "btbrlmp.efeat.genintsc",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 5,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_ccadj,
|
|
{"Coarse Clock Adjustment", "btbrlmp.efeat.ccadj",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 6,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_res0,
|
|
{"Reserved for future use", "btbrlmp.efeat.res0",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 7,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_scc,
|
|
{"Secure Connections (Controller Support)", "btbrlmp.efeat.scc",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 8,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_ping,
|
|
{"Ping", "btbrlmp.efeat.ping",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 9,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_res1,
|
|
{"Reserved for future use", "btbrlmp.efeat.res1",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 10,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_trnud,
|
|
{"Train nudging", "btbrlmp.efeat.trnud",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 11,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_efeat_sam,
|
|
{"Slot Availability Mask", "btbrlmp.efeat.sam",
|
|
FT_BOOLEAN, 64, NULL, 0x1 << 12, //typo in the BT standard defines this as >>10 ...
|
|
NULL, HFILL}},
|
|
{&hf_lmp_fpage,
|
|
{"Features Page", "btbrlmp.fpage",
|
|
FT_UINT8, BASE_DEC, VALS(features_page), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_htime,
|
|
{"Hold Time", "btbrlmp.htime",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Hold Time in slots", HFILL}},
|
|
{&hf_lmp_hinst,
|
|
{"Hold Instant", "btbrlmp.hinst",
|
|
FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"Hold Instant (slot)", HFILL}},
|
|
{&hf_lmp_hopmode,
|
|
{"Hopping Mode", "btbrlmp.hopmode",
|
|
FT_UINT8, BASE_DEC, VALS(hopping_mode), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_iocaps,
|
|
{"IO Capabilities", "btbrlmp.iocaps",
|
|
FT_UINT8, BASE_DEC, VALS(io_capabilities), 0x0,
|
|
"Input/Output Capabilities", HFILL}},
|
|
{&hf_lmp_jitter,
|
|
{"Jitter", "btbrlmp.jitter",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
"Jitter in microseconds", HFILL}},
|
|
{&hf_lmp_key,
|
|
{"Key", "btbrlmp.key",
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_keysz,
|
|
{"Key Size", "btbrlmp.keysz",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
"Key Size in bytes", HFILL}},
|
|
{&hf_lmp_ksmask,
|
|
{"Key Size Mask", "btbrlmp.ksmask",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_ltaddr1,
|
|
{"LT_ADDR 1", "btbrlmp.ltaddr",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0f,
|
|
"Logical Transport Address 1", HFILL}},
|
|
{&hf_lmp_ltaddr2,
|
|
{"LT_ADDR 2", "btbrlmp.ltaddr",
|
|
FT_UINT8, BASE_HEX, NULL, 0xf0,
|
|
"Logical Transport Address 2", HFILL}},
|
|
{&hf_lmp_ltaddr3,
|
|
{"LT_ADDR 3", "btbrlmp.ltaddr",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0f,
|
|
"Logical Transport Address 3", HFILL}},
|
|
{&hf_lmp_ltaddr4,
|
|
{"LT_ADDR 4", "btbrlmp.ltaddr",
|
|
FT_UINT8, BASE_HEX, NULL, 0xf0,
|
|
"Logical Transport Address 4", HFILL}},
|
|
{&hf_lmp_ltaddr5,
|
|
{"LT_ADDR 5", "btbrlmp.ltaddr",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0f,
|
|
"Logical Transport Address 5", HFILL}},
|
|
{&hf_lmp_ltaddr6,
|
|
{"LT_ADDR 6", "btbrlmp.ltaddr",
|
|
FT_UINT8, BASE_HEX, NULL, 0xf0,
|
|
"Logical Transport Address 6", HFILL}},
|
|
{&hf_lmp_ltaddr7,
|
|
{"LT_ADDR 7", "btbrlmp.ltaddr",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0f,
|
|
"Logical Transport Address 7", HFILL}},
|
|
{&hf_lmp_maccess,
|
|
{"Maccess", "btbrlmp.maccess",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0f,
|
|
"Number of access windows", HFILL}},
|
|
{&hf_lmp_maxslots,
|
|
{"Max Slots", "btbrlmp.maxslots",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_maxsp,
|
|
{"Max Supported Page", "btbrlmp.maxsp",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
"Highest extended features page with non-zero bit", HFILL}},
|
|
{&hf_lmp_maxss,
|
|
{"Max Sniff Subrate", "btbrlmp.maxss",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_minsmt,
|
|
{"Min Sniff Mode Timeout", "btbrlmp.minsmt",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Min Sniff Mode Timeout in slots", HFILL}},
|
|
{&hf_lmp_naccslots,
|
|
{"Nacc-slots", "btbrlmp.naccslots",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_namefrag,
|
|
{"Name Fragment", "btbrlmp.namefrag",
|
|
FT_STRING, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_namelen,
|
|
{"Name Length", "btbrlmp.namelen",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
"Name Length in bytes", HFILL}},
|
|
{&hf_lmp_nameoffset,
|
|
{"Name Offset", "btbrlmp.nameoffset",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
"Name Offset in bytes", HFILL}},
|
|
{&hf_lmp_nb,
|
|
{"Nb", "btbrlmp.nb",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_nbc,
|
|
{"Nbc", "btbrlmp.nbc",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_nbsleep,
|
|
{"Nbsleep", "btbrlmp.nbsleep",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_negstate,
|
|
{"Negotiation State", "btbrlmp.negstate",
|
|
FT_UINT8, BASE_DEC, VALS(negotiation_state), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_nonce,
|
|
{"Nonce Value", "btbrlmp.nonce",
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_nottype,
|
|
{"Notification Type", "btbrlmp.nottype",
|
|
FT_UINT8, BASE_DEC, VALS(notification_value), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_npoll,
|
|
{"Npoll", "btbrlmp.npoll",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_oobauthdata,
|
|
{"OOB Authentication Data", "btbrlmp.oobauthdata",
|
|
FT_UINT8, BASE_DEC, VALS(oob_auth_data), 0x00,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_op,
|
|
{"Opcode", "btbrlmp.op",
|
|
FT_UINT8, BASE_DEC, VALS(opcode), 0xfe,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_opinre,
|
|
{"In Response To", "btbrlmp.opinre",
|
|
FT_UINT8, BASE_DEC, VALS(opcode), 0x7f,
|
|
"Opcode this is in response to", HFILL}},
|
|
{&hf_lmp_pagesch,
|
|
{"Paging Scheme", "btbrlmp.pagesch",
|
|
FT_UINT8, BASE_DEC, VALS(paging_scheme), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pcmode,
|
|
{"Power Control Mode", "btbrlmp.pcmode",
|
|
FT_UINT8, BASE_DEC, VALS(power_control_mode), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pkttype,
|
|
{"Packet Type", "btbrlmp.pkttype",
|
|
/* FIXME break out further */
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
"Packet Type", HFILL}},
|
|
{&hf_lmp_pkttypetbl,
|
|
{"Packet Type Table", "btbrlmp.pkttypetbl",
|
|
FT_UINT8, BASE_DEC, VALS(packet_type_table), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pmaddr,
|
|
{"PM_ADDR", "btbrlmp.pmaddr",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pmaddr1,
|
|
{"PM_ADDR 1", "btbrlmp.pmaddr1",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pmaddr2,
|
|
{"PM_ADDR 2", "btbrlmp.pmaddr2",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pmaddr3,
|
|
{"PM_ADDR 3", "btbrlmp.pmaddr3",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pmaddr4,
|
|
{"PM_ADDR 4", "btbrlmp.pmaddr4",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pmaddr5,
|
|
{"PM_ADDR 5", "btbrlmp.pmaddr5",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pmaddr6,
|
|
{"PM_ADDR 6", "btbrlmp.pmaddr6",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pmaddr7,
|
|
{"PM_ADDR 7", "btbrlmp.pmaddr7",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pollintvl,
|
|
{"Poll Interval", "btbrlmp.pollintvl",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Poll Interval in slots", HFILL}},
|
|
{&hf_lmp_pollper,
|
|
{"Poll Period (ms)", "btbrlmp.pollper",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
"Poll Period in units of 1.25 ms", HFILL}},
|
|
{&hf_lmp_pssettings,
|
|
{"Paging Scheme Settings", "btbrlmp.pssettings",
|
|
FT_UINT8, BASE_DEC, VALS(paging_scheme_settings), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pwradjreq,
|
|
{"Power Adjustment Request", "btbrlmp.pwradjreq",
|
|
FT_UINT8, BASE_DEC, VALS(power_adjust_req), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pwradjres,
|
|
{"Power Adjustment Response", "btbrlmp.pwradjres",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_pwradj_8dpsk,
|
|
{"8DPSK", "btbrlmp.pwradj_8dpsk",
|
|
FT_UINT8, BASE_DEC, VALS(power_adjust_res), 0x30,
|
|
"8DPSK Power Adjustment Response", HFILL}},
|
|
{&hf_lmp_pwradj_dqpsk,
|
|
{"DQPSK", "btbrlmp.pwradj_dqpsk",
|
|
FT_UINT8, BASE_DEC, VALS(power_adjust_res), 0x0C,
|
|
"DQPSK Power Adjustment Response", HFILL}},
|
|
{&hf_lmp_pwradj_gfsk,
|
|
{"GFSK", "btbrlmp.pwradj_gfsk",
|
|
FT_UINT8, BASE_DEC, VALS(power_adjust_res), 0x03,
|
|
"GFSK Power Adjustment Response", HFILL}},
|
|
{&hf_lmp_rand,
|
|
{"Random Number", "btbrlmp.rand",
|
|
FT_BYTES, BASE_NONE, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_rate,
|
|
{"Data Rate", "btbrlmp.rate",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_rate_fec,
|
|
{"FEC", "btbrlmp.rate.fec",
|
|
FT_BOOLEAN, BASE_DEC, TFS(&fec), 0x01,
|
|
"Forward Error Correction", HFILL}},
|
|
{&hf_lmp_rate_size,
|
|
{"Packet Size", "btbrlmp.rate.size",
|
|
FT_UINT8, BASE_HEX, VALS(packet_size), 0x06,
|
|
"Basic Rate Packet Size", HFILL}},
|
|
{&hf_lmp_rate_type,
|
|
{"EDR Type", "btbrlmp.rate.type",
|
|
FT_UINT8, BASE_HEX, VALS(edr_type), 0x18,
|
|
"Enhanced Data Rate type", HFILL}},
|
|
{&hf_lmp_rate_edrsize,
|
|
{"EDR Size", "btbrlmp.rate.edrsize",
|
|
FT_UINT8, BASE_HEX, VALS(packet_size), 0x60,
|
|
"Enhanced Data Rate packet size", HFILL}},
|
|
{&hf_lmp_rxfreq,
|
|
{"RX Frequency (MHz)", "btbrlmp.rxfreq",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
"Receive Frequency in MHz above 2402", HFILL}},
|
|
{&hf_lmp_scohdl,
|
|
{"SCO Handle", "btbrlmp.scohdl",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_scopkt,
|
|
{"SCO Packet", "btbrlmp.scopkt",
|
|
FT_UINT8, BASE_DEC, VALS(sco_packet), 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_slotoffset,
|
|
{"Slot Offset", "btbrlmp.slotoffset",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
"Slot Offset in microseconds", HFILL}},
|
|
{&hf_lmp_sniffatt,
|
|
{"Sniff Attempt", "btbrlmp.sniffatt",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Number of receive slots", HFILL}},
|
|
{&hf_lmp_sniffsi,
|
|
{"Sniff Subrating Instant", "btbrlmp.sniffsi",
|
|
FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"Sniff Subrating Instant (slot)", HFILL}},
|
|
{&hf_lmp_sniffto,
|
|
{"Sniff Timeout", "btbrlmp.sniffto",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Number of receive slots", HFILL}},
|
|
{&hf_lmp_subversnr,
|
|
{"SubVersNr", "btbrlmp.subversnr",
|
|
FT_UINT16, BASE_DEC, NULL, 0x0,
|
|
"SubVersion", HFILL}},
|
|
{&hf_lmp_suptimeout,
|
|
{"Supervision Timeout", "btbrlmp.suptimeout",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Supervision Timeout in slots", HFILL}},
|
|
{&hf_lmp_swinst,
|
|
{"Switch Instant", "btbrlmp.swinst",
|
|
FT_UINT32, BASE_HEX, NULL, 0x0,
|
|
"Switch Instant (slot)", HFILL}},
|
|
{&hf_lmp_taccess,
|
|
{"Taccess", "btbrlmp.taccess",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
"Taccess in slots", HFILL}},
|
|
{&hf_lmp_tb,
|
|
{"Tb", "btbrlmp.tb",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Tb in slots", HFILL}},
|
|
{&hf_lmp_tesco,
|
|
{"Tesco", "btbrlmp.tesco",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
"Tesco in slots", HFILL}},
|
|
{&hf_lmp_testlen,
|
|
{"Test Length", "btbrlmp.testlen",
|
|
FT_UINT16, BASE_DEC, NULL, 0x00,
|
|
"Length of test sequence in bytes", HFILL}},
|
|
{&hf_lmp_testscen,
|
|
{"Test Scenario", "btbrlmp.testscen",
|
|
FT_UINT8, BASE_DEC, VALS(test_scenario), 0x00,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_tid,
|
|
{"TID", "btbrlmp.tid",
|
|
FT_BOOLEAN, BASE_DEC, TFS(&tid), 0x01,
|
|
"Transaction ID", HFILL}},
|
|
{&hf_lmp_timectrl,
|
|
{"Timing Control Flags", "btbrlmp.timectrl",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_time_change,
|
|
{"Timing Change", "btbrlmp.time.change",
|
|
FT_BOOLEAN, 8, TFS(&time_change), 0x01,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_time_init,
|
|
{"Initialization", "btbrlmp.time.init",
|
|
FT_BOOLEAN, 8, TFS(&time_init), 0x02,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_time_accwin,
|
|
{"Access Window", "btbrlmp.time.accwin",
|
|
FT_BOOLEAN, 8, TFS(&time_accwin), 0x04,
|
|
NULL, HFILL}},
|
|
{&hf_lmp_tsco,
|
|
{"Tsco", "btbrlmp.tsco",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
"Tsco in slots", HFILL}},
|
|
{&hf_lmp_tsniff,
|
|
{"Tsniff", "btbrlmp.tsniff",
|
|
FT_UINT16, BASE_HEX, NULL, 0x0,
|
|
"Tsniff in slots", HFILL}},
|
|
{&hf_lmp_txfreq,
|
|
{"TX Frequency (MHz)", "btbrlmp.txfreq",
|
|
FT_UINT8, BASE_DEC, NULL, 0x0,
|
|
"Transmit Frequency in MHz above 2402", HFILL}},
|
|
{&hf_lmp_versnr,
|
|
{"VersNr", "btbrlmp.versnr",
|
|
FT_UINT8, BASE_DEC, VALS(versnr), 0x0,
|
|
"Version", HFILL}},
|
|
{&hf_lmp_wesco,
|
|
{"Wesco", "btbrlmp.wesco",
|
|
FT_UINT8, BASE_HEX, NULL, 0x0,
|
|
"Number of slots in retransmission window", HFILL}},
|
|
};
|
|
|
|
/* protocol subtree arrays */
|
|
static gint *ett[] = {
|
|
&ett_lmp,
|
|
&ett_lmp_pwradjres,
|
|
&ett_lmp_rate,
|
|
&ett_lmp_timectrl,
|
|
&ett_lmp_features,
|
|
&ett_lmp_featuresext,
|
|
};
|
|
|
|
/* register the protocol name and description */
|
|
proto_btbrlmp = proto_register_protocol(
|
|
"Bluetooth Link Manager Protocol", /* full name */
|
|
"btlmp", /* short name */
|
|
"btlmp" /* abbreviation (e.g. for filters) */
|
|
);
|
|
|
|
register_dissector("btlmp", dissect_btbrlmp, proto_btbrlmp);
|
|
|
|
/* register the header fields and subtrees used */
|
|
proto_register_field_array(proto_btbrlmp, hf, array_length(hf));
|
|
proto_register_subtree_array(ett, array_length(ett));
|
|
}
|
|
|
|
void proto_reg_handoff_btbrlmp(void)
|
|
{
|
|
}
|
|
|
|
/*
|
|
* Editor modelines - http://www.wireshark.org/tools/modelines.html
|
|
*
|
|
* Local variables:
|
|
* c-basic-offset: 4
|
|
* tab-width: 8
|
|
* indent-tabs-mode: nil
|
|
* End:
|
|
*
|
|
* vi: set shiftwidth=4 tabstop=8 expandtab:
|
|
* :indentSize=4:tabSize=8:noTabs=true:
|
|
*/
|