3 * BlueZ - Bluetooth protocol stack for Linux
5 * Copyright (C) 2000-2001 Qualcomm Incorporated
6 * Copyright (C) 2002-2003 Maxim Krasnyansky <maxk@qualcomm.com>
7 * Copyright (C) 2002-2010 Marcel Holtmann <marcel@holtmann.org>
10 * This program is free software; you can redistribute it and/or modify
11 * it under the terms of the GNU General Public License as published by
12 * the Free Software Foundation; either version 2 of the License, or
13 * (at your option) any later version.
15 * This program is distributed in the hope that it will be useful,
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 * GNU General Public License for more details.
20 * You should have received a copy of the GNU General Public License
21 * along with this program; if not, write to the Free Software
22 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
36 #include <sys/socket.h>
38 #include "bluetooth.h"
41 void baswap(bdaddr_t *dst, const bdaddr_t *src)
43 register unsigned char *d = (unsigned char *) dst;
44 register const unsigned char *s = (const unsigned char *) src;
47 for (i = 0; i < 6; i++)
51 char *batostr(const bdaddr_t *ba)
53 char *str = bt_malloc(18);
57 sprintf(str, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
58 ba->b[0], ba->b[1], ba->b[2],
59 ba->b[3], ba->b[4], ba->b[5]);
64 bdaddr_t *strtoba(const char *str)
67 bdaddr_t *ba = bt_malloc(sizeof(*ba));
77 int ba2str(const bdaddr_t *ba, char *str)
79 return sprintf(str, "%2.2X:%2.2X:%2.2X:%2.2X:%2.2X:%2.2X",
80 ba->b[5], ba->b[4], ba->b[3], ba->b[2], ba->b[1], ba->b[0]);
83 int str2ba(const char *str, bdaddr_t *ba)
88 memset(ba, 0, sizeof(*ba));
92 for (i = 5; i >= 0; i--, str += 3)
93 ba->b[i] = strtol(str, NULL, 16);
98 int ba2oui(const bdaddr_t *ba, char *str)
100 return sprintf(str, "%2.2X-%2.2X-%2.2X", ba->b[5], ba->b[4], ba->b[3]);
103 int bachk(const char *str)
108 if (strlen(str) != 17)
112 if (!isxdigit(*str++))
115 if (!isxdigit(*str++))
128 int baprintf(const char *format, ...)
133 va_start(ap, format);
134 len = vprintf(format, ap);
140 int bafprintf(FILE *stream, const char *format, ...)
145 va_start(ap, format);
146 len = vfprintf(stream, format, ap);
152 int basprintf(char *str, const char *format, ...)
157 va_start(ap, format);
158 len = vsnprintf(str, (~0U) >> 1, format, ap);
164 int basnprintf(char *str, size_t size, const char *format, ...)
169 va_start(ap, format);
170 len = vsnprintf(str, size, format, ap);
176 void *bt_malloc(size_t size)
181 void bt_free(void *ptr)
186 /* Bluetooth error codes to Unix errno mapping */
187 int bt_error(uint16_t code)
192 case HCI_UNKNOWN_COMMAND:
194 case HCI_NO_CONNECTION:
196 case HCI_HARDWARE_FAILURE:
198 case HCI_PAGE_TIMEOUT:
200 case HCI_AUTHENTICATION_FAILURE:
202 case HCI_PIN_OR_KEY_MISSING:
204 case HCI_MEMORY_FULL:
206 case HCI_CONNECTION_TIMEOUT:
208 case HCI_MAX_NUMBER_OF_CONNECTIONS:
209 case HCI_MAX_NUMBER_OF_SCO_CONNECTIONS:
211 case HCI_ACL_CONNECTION_EXISTS:
213 case HCI_COMMAND_DISALLOWED:
214 case HCI_TRANSACTION_COLLISION:
215 case HCI_ROLE_SWITCH_PENDING:
217 case HCI_REJECTED_LIMITED_RESOURCES:
218 case HCI_REJECTED_PERSONAL:
219 case HCI_QOS_REJECTED:
221 case HCI_HOST_TIMEOUT:
223 case HCI_UNSUPPORTED_FEATURE:
224 case HCI_QOS_NOT_SUPPORTED:
225 case HCI_PAIRING_NOT_SUPPORTED:
226 case HCI_CLASSIFICATION_NOT_SUPPORTED:
227 case HCI_UNSUPPORTED_LMP_PARAMETER_VALUE:
228 case HCI_PARAMETER_OUT_OF_RANGE:
229 case HCI_QOS_UNACCEPTABLE_PARAMETER:
231 case HCI_INVALID_PARAMETERS:
232 case HCI_SLOT_VIOLATION:
234 case HCI_OE_USER_ENDED_CONNECTION:
235 case HCI_OE_LOW_RESOURCES:
236 case HCI_OE_POWER_OFF:
238 case HCI_CONNECTION_TERMINATED:
240 case HCI_REPEATED_ATTEMPTS:
242 case HCI_REJECTED_SECURITY:
243 case HCI_PAIRING_NOT_ALLOWED:
244 case HCI_INSUFFICIENT_SECURITY:
246 case HCI_UNSUPPORTED_REMOTE_FEATURE:
247 return EPROTONOSUPPORT;
248 case HCI_SCO_OFFSET_REJECTED:
250 case HCI_UNKNOWN_LMP_PDU:
251 case HCI_INVALID_LMP_PARAMETERS:
252 case HCI_LMP_ERROR_TRANSACTION_COLLISION:
253 case HCI_LMP_PDU_NOT_ALLOWED:
254 case HCI_ENCRYPTION_MODE_NOT_ACCEPTED:
261 const char *bt_compidtostr(int compid)
265 return "Ericsson Technology Licensing";
267 return "Nokia Mobile Phones";
269 return "Intel Corp.";
273 return "Toshiba Corp.";
283 return "Infineon Technologies AG";
285 return "Cambridge Silicon Radio";
287 return "Silicon Wave";
289 return "Digianswer A/S";
291 return "Texas Instruments Inc.";
293 return "Ceva, Inc. (formerly Parthus Technologies, Inc.)";
295 return "Broadcom Corporation";
297 return "Mitel Semiconductor";
299 return "Widcomm, Inc";
301 return "Zeevo, Inc.";
303 return "Atmel Corporation";
305 return "Mitsubishi Electric Corporation";
307 return "RTX Telecom A/S";
309 return "KC Technology Inc.";
313 return "Transilica, Inc.";
315 return "Rohde & Schwarz GmbH & Co. KG";
317 return "TTPCom Limited";
319 return "Signia Technologies, Inc.";
321 return "Conexant Systems Inc.";
329 return "BandSpeed, Inc.";
331 return "Mansella Ltd";
333 return "NEC Corporation";
335 return "WavePlus Technology Co., Ltd.";
339 return "NXP Semiconductors (formerly Philips Semiconductors)";
341 return "C Technologies";
343 return "Open Interface";
345 return "R F Micro Devices";
347 return "Hitachi Ltd";
349 return "Symbol Technologies, Inc.";
353 return "Macronix International Co. Ltd.";
355 return "GCT Semiconductor";
357 return "Norwood Systems";
359 return "MewTel Technology Inc.";
361 return "ST Microelectronics";
365 return "Red-M (Communications) Ltd";
369 return "Computer Access Technology Corporation (CATC)";
371 return "Eclipse (HQ Espana) S.L.";
373 return "Renesas Electronics Corporation";
375 return "Mobilian Corporation";
379 return "Integrated System Solution Corp.";
381 return "Matsushita Electric Industrial Co., Ltd.";
383 return "Gennum Corporation";
385 return "BlackBerry Limited (formerly Research In Motion)";
387 return "IPextreme, Inc.";
389 return "Systems and Chips, Inc.";
391 return "Bluetooth SIG, Inc.";
393 return "Seiko Epson Corporation";
395 return "Integrated Silicon Solution Taiwan, Inc.";
397 return "CONWISE Technology Corporation Ltd";
401 return "Socket Mobile";
403 return "Atheros Communications, Inc.";
405 return "MediaTek, Inc.";
409 return "Marvell Technology Group Ltd.";
411 return "3DSP Corporation";
413 return "Accel Semiconductor Ltd.";
415 return "Continental Automotive Systems";
417 return "Apple, Inc.";
419 return "Staccato Communications, Inc.";
421 return "Avago Technologies";
423 return "APT Licensing Ltd.";
425 return "SiRF Technology";
427 return "Tzero Technologies, Inc.";
429 return "J&M Corporation";
431 return "Free2move AB";
433 return "3DiJoy Corporation";
435 return "Plantronics, Inc.";
437 return "Sony Ericsson Mobile Communications";
439 return "Harman International Industries, Inc.";
441 return "Vizio, Inc.";
443 return "Nordic Semiconductor ASA";
445 return "EM Microelectronic-Marin SA";
447 return "Ralink Technology Corporation";
449 return "Belkin International, Inc.";
451 return "Realtek Semiconductor Corporation";
453 return "Stonestreet One, LLC";
455 return "Wicentric, Inc.";
457 return "RivieraWaves S.A.S";
459 return "RDA Microelectronics";
461 return "Gibson Guitars";
463 return "MiCommand Inc.";
465 return "Band XI International, LLC";
467 return "Hewlett-Packard Company";
469 return "9Solutions Oy";
471 return "GN Netcom A/S";
473 return "General Motors";
475 return "A&D Engineering, Inc.";
477 return "MindTree Ltd.";
479 return "Polar Electro OY";
481 return "Beautiful Enterprise Co., Ltd.";
483 return "BriarTek, Inc.";
485 return "Summit Data Communications, Inc.";
489 return "Monster, LLC";
491 return "connectBlue AB";
493 return "ShangHai Super Smart Electronics Co. Ltd.";
495 return "Group Sense Ltd.";
499 return "Samsung Electronics Co. Ltd.";
501 return "Creative Technology Ltd.";
503 return "Laird Technologies";
507 return "lesswire AG";
509 return "MStar Semiconductor, Inc.";
511 return "Hanlynn Technologies";
513 return "A & R Cambridge";
515 return "Seers Technology Co. Ltd";
517 return "Sports Tracking Technologies Ltd.";
519 return "Autonet Mobile";
521 return "DeLorme Publishing Company, Inc.";
523 return "WuXi Vimicro";
525 return "Sennheiser Communications A/S";
527 return "TimeKeeping Systems, Inc.";
529 return "Ludus Helsinki Ltd.";
531 return "BlueRadios, Inc.";
535 return "Garmin International, Inc.";
539 return "GN ReSound A/S";
543 return "Topcorn Positioning Systems, LLC";
545 return "Gimbal Inc. (formerly Qualcomm Labs, Inc. and Qualcomm Retail Solutions, Inc.)";
547 return "Zscan Software";
549 return "Quintic Corp.";
551 return "Stollman E+V GmbH";
553 return "Funai Electric Co., Ltd.";
555 return "Advanced PANMOBIL Systems GmbH & Co. KG";
557 return "ThinkOptics, Inc.";
559 return "Universal Electronics, Inc.";
561 return "Airoha Technology Corp.";
563 return "NEC Lighting, Ltd.";
565 return "ODM Technology, Inc.";
567 return "ConnecteDevice Ltd.";
569 return "zer01.tv GmbH";
571 return "i.Tech Dynamic Global Distribution Ltd.";
575 return "Jiangsu Toppower Automotive Electronics Co., Ltd.";
577 return "Colorfy, Inc.";
579 return "Geoforce Inc.";
581 return "Bose Corporation";
585 return "Kensington Computer Products Group";
587 return "SR-Medizinelektronik";
589 return "Vertu Corporation Limited";
591 return "Meta Watch Ltd.";
595 return "OTL Dynamics LLC";
597 return "Panda Ocean Inc.";
599 return "Visteon Corporation";
601 return "ARP Devices Limited";
603 return "Magneti Marelli S.p.A";
605 return "CAEN RFID srl";
607 return "Ingenieur-Systemgruppe Zahn GmbH";
609 return "Green Throttle Games";
611 return "Peter Systemtechnik GmbH";
613 return "Omegawave Oy";
617 return "Passif Semiconductor Corp";
619 return "Saris Cycling Group, Inc";
623 return "Clarinox Technologies Pty. Ltd.";
625 return "BDE Technology Co., Ltd.";
627 return "Swirl Networks";
629 return "Meso international";
633 return "Qualcomm Innovation Center, Inc. (QuIC)";
635 return "Johnson Controls, Inc.";
637 return "Starkey Laboratories Inc.";
639 return "S-Power Electronics Limited";
641 return "Ace Sensor Inc";
643 return "Aplix Corporation";
645 return "AAMP of America";
647 return "Stalmart Technology Limited";
649 return "AMICCOM Electronics Corporation";
651 return "Shenzhen Excelsecu Data Technology Co.,Ltd";
657 return "LG Electronics";
659 return "Onset Computer Corporation";
671 return "Binauric SE";
673 return "Beats Electronics";
675 return "Microchip Technology Inc.";
677 return "Elgato Systems GmbH";
681 return "Dexcom, Inc.";
683 return "Polar Electro Europe B.V.";
685 return "Dialog Semiconductor B.V.";
687 return "Taixingbang Technology (HK) Co,. LTD.";
691 return "Austco Communication Systems";
693 return "Timex Group USA, Inc.";
695 return "Qualcomm Technologies, Inc.";
697 return "Qualcomm Connected Experiences, Inc.";
699 return "Voyetra Turtle Beach";
703 return "Biosentronics";
705 return "Procter & Gamble";
707 return "Hosiden Corporation";
711 return "Misfit Wearables Corp";
715 return "Danlers Ltd";
717 return "Semilink Inc";
719 return "inMusic Brands, Inc";
721 return "L.S. Research Inc.";
723 return "Eden Software Consultants Ltd.";
727 return "KS Technologies";
729 return "ACTS Technologies";
731 return "Vtrack Systems";
733 return "Nielsen-Kellerman Company";
735 return "Server Technology, Inc.";
737 return "BioResearch Associates";
739 return "Jolly Logic, LLC";
741 return "Above Average Outcomes, Inc.";
743 return "Bitsplitters GmbH";
745 return "PayPal, Inc.";
747 return "Witron Technology Limited";
749 return "Aether Things Inc. (formerly Morse Project Inc.)";
751 return "Kent Displays Inc.";
753 return "Nautilus Inc.";
755 return "Smartifier Oy";
757 return "Elcometer Limited";
759 return "VSN Technologies Inc.";
761 return "AceUni Corp., Ltd.";
765 return "Crystal Code AB";
767 return "KOUKAAM a.s.";
769 return "Delphi Corporation";
771 return "ValenceTech Limited";
775 return "Typo Products, LLC";
777 return "TomTom International BV";
781 return "Keiser Corporation";
783 return "Bang & Olufsen A/S";
785 return "PLUS Locations Systems Pty Ltd";
787 return "Ubiquitous Computing Technology Corporation";
789 return "Innovative Yachtter Solutions";
791 return "William Demant Holding A/S";
793 return "Chicony Electronics Co., Ltd.";
797 return "Codegate Ltd.";
801 return "Transducers Direct, LLC";
803 return "Fujitsu Ten Limited";
807 return "HiSilicon Technologies Co., Ltd.";
809 return "Nippon Seiki Co., Ltd.";
811 return "Steelseries ApS";
813 return "vyzybl Inc.";
815 return "Openbrain Technologies, Co., Ltd.";
819 return "e.solutions";
821 return "1OAK Technologies";
823 return "Wimoto Technologies Inc";
825 return "Radius Networks, Inc.";
827 return "Wize Technology Co., Ltd.";
829 return "Qualcomm Labs, Inc.";
831 return "Aruba Networks";
837 return "Skoda Auto a.s.";
839 return "Volkswagon AG";
843 return "Sino Wealth Electronic Ltd.";
845 return "AirTurn, Inc.";
847 return "Kinsa, Inc.";
853 return "Promethean Ltd.";
855 return "Salutica Allied Solutions";
857 return "GPSI Group Pty Ltd";
859 return "Nimble Devices Oy";
861 return "Changzhou Yongse Infotech Co., Ltd";
865 return "TEMEC Instruments B.V.";
867 return "Sony Corporation";
871 return "Clarion Co., Ltd.";
873 return "Warehouse Innovations";
875 return "Cypress Semiconductor Corporation";
879 return "Blue Maestro Limited";
881 return "Resolution Products, Inc.";
883 return "Airewear LLC";
885 return "Seed Labs, Inc. (formerly ETC sp. z.o.o.)";
887 return "Prestigio Plaza Ltd.";
891 return "Focus Systems Corporation";
893 return "Tencent Holdings Limited";
897 return "Murata Manufacuring Co., Ltd.";
899 return "WirelessWERX";
903 return "B&B Manufacturing Company";
905 return "Alpine Electronics (China) Co., Ltd";
907 return "FedEx Services";
909 return "Grape Systems Inc.";
911 return "Bkon Connect";
913 return "Lintech GmbH";
915 return "Novatel Wireless";
919 return "Mighty Cast, Inc.";
921 return "Ambimat Electronics";
923 return "Perytons Ltd.";
925 return "Tivoli Audio, LLC";
927 return "Master Lock";
929 return "Mesh-Net Ltd";
931 return "Huizhou Desay SV Automotive CO., LTD.";
933 return "Tangerine, Inc.";
935 return "B&W Group Ltd.";
937 return "Pioneer Corporation";
941 return "Vernier Software & Technology";
945 return "Pebble Technology";
949 return "Accumulate AB";
951 return "Anhui Huami Information Technology Co., Ltd.";
953 return "Inmite s.r.o.";
955 return "ChefSteps, Inc.";
959 return "Biomedical Research Ltd.";
961 return "Pitius Tec S.L.";
963 return "Estimote, Inc.";
965 return "Unikey Technologies, Inc.";
967 return "Timer Cap Co.";
973 return "MADSGlobal NZ Ltd.";
975 return "PCH International";
977 return "Qingdao Yeelink Information Technology Co., Ltd.";
979 return "Milwaukee Tool (formerly Milwaukee Electric Tools)";
981 return "MISHIK Pte Ltd";
983 return "Bayer HealthCare";
985 return "Spicebox LLC";
989 return "Cooper-Atkins Corporation";
995 return "LifeScan Inc";
997 return "Volantic AB";
999 return "Podo Labs, Inc";
1001 return "Roche Diabetes Care AG";
1003 return "Amazon Fulfillment Service";
1005 return "Connovate Technology Private Limited";
1007 return "Kocomojo, LLC";
1009 return "Everykey LLC";
1011 return "Dynamic Controls";
1013 return "SentriLock";
1015 return "I-SYST inc.";
1017 return "CASIO COMPUTER CO., LTD.";
1019 return "LAPIS Semiconductor Co., Ltd.";
1021 return "Telemonitor, Inc.";
1023 return "taskit GmbH";
1025 return "Daimler AG";
1029 return "BluDotz Ltd";
1033 return "Gigaset Communications GmbH";
1035 return "Gecko Health Innovations, Inc.";
1037 return "HOP Ubiquitous";
1039 return "To Be Assigned";
1043 return "bel'apps LLC";
1045 return "CORE Lighting Ltd";
1047 return "Seraphim Sense Ltd";
1051 return "Physical Enterprises Inc.";
1053 return "Able Trend Technology Limited";
1055 return "Konica Minolta, Inc.";
1059 return "Extron Design Services";
1061 return "Fitbit, Inc.";
1063 return "Fireflies Systems";
1065 return "Intelletto Technologies Inc.";
1067 return "FDK CORPORATION";
1069 return "Cloudleaf, Inc";
1071 return "Maveric Automation LLC";
1073 return "Acoustic Stream Corporation";
1077 return "Paxton Access Ltd";
1079 return "WiSilica Inc";
1081 return "Vengit Limited";
1083 return "SALTO SYSTEMS S.L.";
1085 return "T-Engine Forum";
1087 return "CUBETECH s.r.o.";
1089 return "Cokiya Incorporated";
1091 return "CVS Health";
1095 return "Strainstall Ltd";
1097 return "Channel Enterprises (HK) Ltd.";
1101 return "GIGALANE.CO.,LTD";
1105 return "Mine Safety Appliances";
1107 return "Icon Health and Fitness";
1109 return "Asandoo GmbH";
1111 return "ENERGOUS CORPORATION";
1115 return "Canon Inc.";
1117 return "Geophysical Technology Inc.";
1119 return "Facebook, Inc.";
1121 return "Nipro Diagnostics, Inc.";
1123 return "FlightSafety International";
1125 return "Earlens Corporation";
1127 return "Sunrise Micro Devices, Inc.";
1129 return "Star Micronics Co., Ltd.";
1131 return "Netizens Sp. z o.o.";
1135 return "Nytec, Inc.";
1137 return "Trineo Sp. z o.o.";
1139 return "Nest Labs Inc.";
1141 return "LM Technologies Ltd";
1143 return "General Electric Company";
1147 return "HANA Micron";
1149 return "Stages Cycling LLC";
1151 return "Cochlear Bone Anchored Solutions AB";
1153 return "SenionLab AB";
1155 return "Syszone Co., Ltd";
1157 return "Pulsate Mobile Ltd.";
1159 return "Hong Kong HunterSun Electronic Limited";
1161 return "pironex GmbH";
1163 return "BRADATECH Corp.";
1165 return "Transenergooil AG";
1169 return "DME Microelectronics";
1171 return "Bitcraze AB";
1173 return "HASWARE Inc.";
1175 return "Abiogenix Inc.";
1177 return "Poly-Control ApS";
1181 return "Laerdal Medical AS";
1183 return "Fetch My Pet";
1185 return "Sam Labs Ltd.";
1187 return "Chengdu Synwing Technology Ltd";
1189 return "HOUWA SYSTEM DESIGN, k.k.";
1193 return "Primus Inter Pares Ltd";
1197 return "Gill Electronics";
1199 return "Sky Wave Design";
1201 return "Newlab S.r.l.";
1205 return "G-wearables inc.";
1207 return "Squadrone Systems Inc.";
1209 return "Code Corporation";
1211 return "Savant Systems LLC";
1213 return "Logitech International SA";
1215 return "Innblue Consulting";
1217 return "iParking Ltd.";
1219 return "Koninklijke Philips Electronics N.V.";
1221 return "Minelab Electronics Pty Limited";
1223 return "Bison Group Ltd.";
1229 return "Lectronix, Inc.";
1231 return "Caterpillar Inc";
1233 return "Freedom Innovations";
1235 return "Dynamic Devices Ltd";
1237 return "Technology Solutions (UK) Ltd";
1239 return "IPS Group Inc.";
1245 return "Advanced Application Design, Inc.";
1247 return "AutoMap LLC";
1249 return "Spreadtrum Communications Shanghai Ltd";
1251 return "CuteCircuit LTD";
1253 return "Valeo Service";
1255 return "Fullpower Technologies, Inc.";
1257 return "KloudNation";
1259 return "Zebra Technologies Corporation";
1261 return "Itron, Inc.";
1263 return "The University of Tokyo";
1265 return "UTC Fire and Security";
1267 return "internal use";
1269 return "not assigned";