├── .gitignore ├── Ath3kBT ├── Ath3kBT.cpp ├── Ath3kBT.hpp ├── Info.plist └── fw │ ├── AthrBT_0x01020001.dfu │ ├── AthrBT_0x01020200.dfu │ ├── AthrBT_0x01020201.dfu │ ├── AthrBT_0x11020000.dfu │ ├── AthrBT_0x11020100.dfu │ ├── AthrBT_0x31010000.dfu │ ├── AthrBT_0x31010100.dfu │ ├── AthrBT_0x41020000.dfu │ ├── ramps_0x01020001_26.dfu │ ├── ramps_0x01020200_26.dfu │ ├── ramps_0x01020200_40.dfu │ ├── ramps_0x01020201_26.dfu │ ├── ramps_0x01020201_40.dfu │ ├── ramps_0x11020000_40.dfu │ ├── ramps_0x11020100_40.dfu │ ├── ramps_0x31010000_40.dfu │ ├── ramps_0x31010100_40.dfu │ └── ramps_0x41020000_40.dfu ├── Ath3kBTInjector ├── Ath3kBTInjector.cpp ├── Ath3kBTInjector.hpp └── Info.plist ├── AthBluetoothFirmware.xcodeproj └── project.pbxproj ├── AthBluetoothFirmware ├── AtherosFWService.cpp ├── AtherosFWService.hpp ├── FwData.h ├── HCITool.cpp ├── HCITool.hpp ├── LinuxTypes.h └── fw_gen.sh ├── LICENSE └── README.md /.gitignore: -------------------------------------------------------------------------------- 1 | # Prerequisites 2 | *.d 3 | 4 | # Compiled Object files 5 | *.slo 6 | *.lo 7 | *.o 8 | *.obj 9 | 10 | # Precompiled Headers 11 | *.gch 12 | *.pch 13 | 14 | # Compiled Dynamic libraries 15 | *.so 16 | *.dylib 17 | *.dll 18 | 19 | # Fortran module files 20 | *.mod 21 | *.smod 22 | 23 | # Compiled Static libraries 24 | *.lai 25 | *.la 26 | *.a 27 | *.lib 28 | 29 | # Executables 30 | *.exe 31 | *.out 32 | *.app 33 | 34 | .DS_Store 35 | DerivedData 36 | build 37 | xcuserdata 38 | xcshareddata 39 | project.xcworkspace 40 | AthBluetoothFirmware/FwBinary.cpp 41 | -------------------------------------------------------------------------------- /Ath3kBT/Ath3kBT.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | #include 3 | #include 4 | #include 5 | 6 | #include "Ath3kBT.hpp" 7 | #include "FwData.h" 8 | 9 | enum { kMyOffPowerState = 0, kMyOnPowerState = 1 }; 10 | #define kIOPMPowerOff 0 11 | 12 | static IOPMPowerState myTwoStates[2] = 13 | { 14 | {1, kIOPMPowerOff, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0}, 15 | {1, kIOPMPowerOn, kIOPMPowerOn, kIOPMPowerOn, 0, 0, 0, 0, 0, 0, 0, 0} 16 | }; 17 | 18 | #define super AtherosFWService 19 | OSDefineMetaClassAndStructors(Ath3kBT, AtherosFWService) 20 | 21 | bool Ath3kBT::init(OSDictionary *propTable) 22 | { 23 | IOLog("%s::init\n", DRV_NAME); 24 | return (super::init(propTable)); 25 | } 26 | 27 | IOService* Ath3kBT::probe(IOService *provider, SInt32 *score) 28 | { 29 | IOLog("%s::probe\n", DRV_NAME); 30 | super::probe(provider, score); 31 | return this; 32 | } 33 | 34 | bool Ath3kBT::start(IOService *provider) 35 | { 36 | IOReturn err; 37 | const StandardUSB::ConfigurationDescriptor* cd; 38 | 39 | IOLog("%s::start!\n", DRV_NAME); 40 | m_pUsbDevice = OSDynamicCast(IOUSBHostDevice, provider); 41 | if(!m_pUsbDevice) { 42 | IOLog("%s::start - Provider isn't a USB device!!!\n", DRV_NAME); 43 | return false; 44 | } 45 | 46 | err = m_pUsbDevice->setConfiguration(0); 47 | if (err) { 48 | IOLog("%s::start - failed to reset the device\n", DRV_NAME); 49 | return false; 50 | } 51 | IOLog("%s::start: device reset done\n", DRV_NAME); 52 | 53 | int numconf = 0; 54 | if ((numconf = m_pUsbDevice->getDeviceDescriptor()->bNumConfigurations) < 1) { 55 | IOLog("%s::start - no composite configurations\n", DRV_NAME); 56 | return false; 57 | } 58 | IOLog("%s::start: num configurations %d\n", DRV_NAME, numconf); 59 | 60 | cd = m_pUsbDevice->getConfigurationDescriptor(0); 61 | if (!cd) { 62 | IOLog("%s::start - no config descriptor\n", DRV_NAME); 63 | return false; 64 | } 65 | 66 | if (!m_pUsbDevice->open(this)) { 67 | IOLog("%s::start - unable to open device for configuration\n", DRV_NAME); 68 | return false; 69 | } 70 | 71 | err = m_pUsbDevice->setConfiguration(cd->bConfigurationValue, true); 72 | if (err) { 73 | IOLog("%s::start - unable to set the configuration\n", DRV_NAME); 74 | m_pUsbDevice->close(this); 75 | return false; 76 | } 77 | 78 | USBStatus status; 79 | err = getDeviceStatus(this, &status); 80 | if (err) { 81 | IOLog("%s::start - unable to get device status\n", DRV_NAME); 82 | m_pUsbDevice->close(this); 83 | return false; 84 | } 85 | 86 | IOUSBHostInterface * intf = NULL; 87 | OSIterator* iterator = m_pUsbDevice->getChildIterator(gIOServicePlane); 88 | 89 | if (!iterator) 90 | return false; 91 | 92 | while (OSObject* candidate = iterator->getNextObject()) { 93 | if (IOUSBHostInterface* interface = OSDynamicCast(IOUSBHostInterface, candidate)) { 94 | intf = interface; 95 | break; 96 | } 97 | } 98 | 99 | iterator->release(); 100 | if (!intf) { 101 | IOLog("%s::start - unable to find interface\n", DRV_NAME); 102 | m_pUsbDevice->close(this); 103 | return false; 104 | } 105 | 106 | if (!intf->open(this)) { 107 | IOLog("%s::start - unable to open interface\n", DRV_NAME); 108 | m_pUsbDevice->close(this); 109 | return false; 110 | } 111 | 112 | const StandardUSB::ConfigurationDescriptor *configDescriptor = intf->getConfigurationDescriptor(); 113 | const StandardUSB::InterfaceDescriptor *interfaceDescriptor = intf->getInterfaceDescriptor(); 114 | if (configDescriptor == NULL || interfaceDescriptor == NULL) { 115 | IOLog("%s::start find descriptor NULL\n", DRV_NAME); 116 | return false; 117 | } 118 | const EndpointDescriptor *endpointDescriptor = NULL; 119 | while ((endpointDescriptor = StandardUSB::getNextEndpointDescriptor(configDescriptor, interfaceDescriptor, endpointDescriptor))) { 120 | uint8_t epDirection = StandardUSB::getEndpointDirection(endpointDescriptor); 121 | uint8_t epType = StandardUSB::getEndpointType(endpointDescriptor); 122 | uint8_t epNum = StandardUSB::getEndpointNumber(endpointDescriptor); 123 | if (epDirection == kUSBOut && epType == kUSBBulk && epNum == 2) { 124 | IOLog("%s::start Found Bulk out endpoint!\n", DRV_NAME); 125 | m_pBulkWritePipe = intf->copyPipe(StandardUSB::getEndpointAddress(endpointDescriptor)); 126 | if (m_pBulkWritePipe == NULL) { 127 | IOLog("%s::start copy Bulk pipe fail\n", DRV_NAME); 128 | return false; 129 | } 130 | m_pBulkWritePipe->retain(); 131 | m_pBulkWritePipe->release(); 132 | } 133 | } 134 | 135 | PMinit(); 136 | registerPowerDriver(this, myTwoStates, 2); 137 | provider->joinPMtree(this); 138 | makeUsable(); 139 | 140 | if (!loadPatch()) { 141 | IOLog("%s::start Loading patch file failed\n", DRV_NAME); 142 | goto done; 143 | } 144 | 145 | if (!loadSysCfg()) { 146 | IOLog("%s::start Loading sysconfig file failed\n", DRV_NAME); 147 | goto done; 148 | } 149 | 150 | if (!setNormalMode()) { 151 | IOLog("%s::start Set normal mode failed\n", DRV_NAME); 152 | goto done; 153 | } 154 | 155 | // switchPID(this); 156 | 157 | IOLog("%s: firmware loaded successfully!\n", DRV_NAME); 158 | 159 | err = getDeviceStatus(this, &status); 160 | IOLog("%s::start: device status %d\n", DRV_NAME, (int)status); 161 | 162 | done: 163 | 164 | m_pBulkWritePipe->release(); 165 | intf->close(this); 166 | m_pUsbDevice->close(this); 167 | return true; 168 | } 169 | 170 | void Ath3kBT::stop(IOService *provider) 171 | { 172 | IOLog("%s::stop\n", DRV_NAME); 173 | PMstop(); 174 | super::stop(provider); 175 | } 176 | 177 | void Ath3kBT::free() 178 | { 179 | IOLog("%s::free\n", DRV_NAME); 180 | PMstop(); 181 | super::free(); 182 | } 183 | 184 | IOReturn Ath3kBT::setPowerState(unsigned long powerStateOrdinal, IOService *whatDevice) 185 | { 186 | // IOLog("%s::setPowerState powerStateOrdinal=%lu\n", powerStateOrdinal, DRV_NAME); 187 | return IOPMAckImplied; 188 | } 189 | 190 | 191 | bool Ath3kBT::handleOpen(IOService *forClient, IOOptionBits options, void *arg ) 192 | { 193 | IOLog("%s::handleOpen\n", DRV_NAME); 194 | return super::handleOpen(forClient, options, arg); 195 | } 196 | 197 | void Ath3kBT::handleClose(IOService *forClient, IOOptionBits options ) 198 | { 199 | IOLog("%s::handleClose\n", DRV_NAME); 200 | super::handleClose(forClient, options); 201 | } 202 | 203 | IOReturn Ath3kBT::message(UInt32 type, IOService *provider, void *argument) 204 | { 205 | IOLog("%s::message type: %d\n", DRV_NAME, type); 206 | switch ( type ) { 207 | case kIOMessageServiceIsTerminated: 208 | if (m_pUsbDevice != NULL && m_pUsbDevice->isOpen(this)) { 209 | IOLog("%s::message - service is terminated - closing device\n", DRV_NAME); 210 | } 211 | break; 212 | 213 | case kIOMessageServiceIsSuspended: 214 | case kIOMessageServiceIsResumed: 215 | case kIOMessageServiceIsRequestingClose: 216 | case kIOMessageServiceWasClosed: 217 | case kIOMessageServiceBusyStateChange: 218 | default: 219 | break; 220 | } 221 | 222 | return super::message(type, provider, argument); 223 | } 224 | 225 | bool Ath3kBT::terminate(IOOptionBits options) 226 | { 227 | IOLog("%s::terminate\n", DRV_NAME); 228 | return super::terminate(options); 229 | } 230 | 231 | bool Ath3kBT::finalize(IOOptionBits options) 232 | { 233 | IOLog("%s::finalize\n", DRV_NAME); 234 | return super::finalize(options); 235 | } 236 | 237 | IOReturn Ath3kBT::getDeviceStatus(IOService* forClient, USBStatus *status) 238 | { 239 | uint16_t stat = 0; 240 | StandardUSB::DeviceRequest request; 241 | request.bmRequestType = makeDeviceRequestbmRequestType(kRequestDirectionIn, kRequestTypeStandard, kRequestRecipientDevice); 242 | request.bRequest = kDeviceRequestGetStatus; 243 | request.wValue = 0; 244 | request.wIndex = 0; 245 | request.wLength = sizeof(stat); 246 | uint32_t bytesTransferred = 0; 247 | IOReturn result = m_pUsbDevice->deviceRequest(forClient, request, &stat, bytesTransferred, kUSBHostStandardRequestCompletionTimeout); 248 | *status = stat; 249 | return result; 250 | } 251 | 252 | IOReturn Ath3kBT::getVendorState(IOService *forClient, unsigned char *state) 253 | { 254 | char buf; 255 | StandardUSB::DeviceRequest request; 256 | request.bmRequestType = makeDeviceRequestbmRequestType(kRequestDirectionIn, kRequestTypeVendor, kRequestRecipientDevice); 257 | request.bRequest = ATH3K_GETSTATE; 258 | request.wValue = 0; 259 | request.wIndex = 0; 260 | request.wLength = sizeof(char); 261 | uint32_t bytesTransferred = 0; 262 | IOReturn result = m_pUsbDevice->deviceRequest(forClient, request, &buf, bytesTransferred, kUSBHostStandardRequestCompletionTimeout); 263 | *state = buf; 264 | return result; 265 | } 266 | 267 | IOReturn Ath3kBT::getVendorVersion(IOService *forClient, struct ath3k_version *version) 268 | { 269 | StandardUSB::DeviceRequest request; 270 | request.bmRequestType = makeDeviceRequestbmRequestType(kRequestDirectionIn, kRequestTypeVendor, kRequestRecipientDevice); 271 | request.bRequest = ATH3K_GETVERSION; 272 | request.wValue = 0; 273 | request.wIndex = 0; 274 | request.wLength = sizeof(struct ath3k_version); 275 | uint32_t bytesTransferred = 0; 276 | IOReturn result = m_pUsbDevice->deviceRequest(forClient, request, version, bytesTransferred, kUSBHostStandardRequestCompletionTimeout); 277 | return result; 278 | } 279 | 280 | bool Ath3kBT::switchPID(IOService *forClient) 281 | { 282 | StandardUSB::DeviceRequest request; 283 | request.bmRequestType = makeDeviceRequestbmRequestType(kRequestDirectionIn, kRequestTypeVendor, kRequestRecipientDevice); 284 | request.bRequest = USB_REG_SWITCH_VID_PID; 285 | request.wValue = 0; 286 | request.wIndex = 0; 287 | request.wLength = 0; 288 | uint32_t bytesTransferred = 0; 289 | IOReturn result = m_pUsbDevice->deviceRequest(forClient, request, (void *)NULL, bytesTransferred, kUSBHostStandardRequestCompletionTimeout); 290 | return result; 291 | } 292 | 293 | bool Ath3kBT::setNormalMode() 294 | { 295 | unsigned char fw_state; 296 | bool ret = false; 297 | StandardUSB::DeviceRequest request; 298 | if (getVendorState(this, &fw_state) != kIOReturnSuccess) { 299 | IOLog("%s Can't get state to change to normal mode err\n", DRV_NAME); 300 | return ret; 301 | } 302 | if ((fw_state & ATH3K_MODE_MASK) == ATH3K_NORMAL_MODE) { 303 | IOLog("%s firmware was already in normal mode\n", DRV_NAME); 304 | return true; 305 | } 306 | request.bmRequestType = makeDeviceRequestbmRequestType(kRequestDirectionIn, kRequestTypeVendor, kRequestRecipientDevice); 307 | request.bRequest = ATH3K_SET_NORMAL_MODE; 308 | request.wValue = 0; 309 | request.wIndex = 0; 310 | request.wLength = 0; 311 | uint32_t bytesTransferred = 0; 312 | IOReturn result = m_pUsbDevice->deviceRequest(this, request, (void *)NULL, bytesTransferred, kUSBHostStandardRequestCompletionTimeout); 313 | if (result != kIOReturnSuccess) { 314 | IOLog("%s set normal mode fail\n", DRV_NAME); 315 | return false; 316 | } 317 | return true; 318 | } 319 | 320 | bool Ath3kBT::loadSysCfg() 321 | { 322 | unsigned char fw_state; 323 | char filename[ATH3K_NAME_LEN]; 324 | struct ath3k_version fw_version; 325 | int clk_value; 326 | bool ret = false; 327 | 328 | if (getVendorState(this, &fw_state) != kIOReturnSuccess) { 329 | IOLog("%s Can't get state to change to load configuration err\n", DRV_NAME); 330 | return ret; 331 | } 332 | if (getVendorVersion(this, &fw_version) != kIOReturnSuccess) { 333 | IOLog("%s Can't get version to change to load ram patch err", DRV_NAME); 334 | return ret; 335 | } 336 | switch (fw_version.ref_clock) { 337 | 338 | case ATH3K_XTAL_FREQ_26M: 339 | clk_value = 26; 340 | break; 341 | case ATH3K_XTAL_FREQ_40M: 342 | clk_value = 40; 343 | break; 344 | case ATH3K_XTAL_FREQ_19P2: 345 | clk_value = 19; 346 | break; 347 | default: 348 | clk_value = 0; 349 | break; 350 | } 351 | 352 | snprintf(filename, ATH3K_NAME_LEN, "ramps_0x%08x_%d%s", 353 | __le32_to_cpu(fw_version.rom_version), clk_value, ".dfu"); 354 | 355 | IOLog("%s try to load syscfg file %s\n", DRV_NAME, filename); 356 | 357 | OSData *fwData = getFWDescByName(filename); 358 | 359 | if (fwData == NULL) { 360 | IOLog("%s can not find syscfg file\n", DRV_NAME); 361 | return false; 362 | } 363 | 364 | return loadFwFile(fwData); 365 | } 366 | 367 | bool Ath3kBT::loadPatch() 368 | { 369 | unsigned char fw_state; 370 | char filename[ATH3K_NAME_LEN]; 371 | struct ath3k_version fw_version; 372 | __u32 pt_rom_version, pt_build_version; 373 | bool ret = false; 374 | 375 | if (getVendorState(this, &fw_state) != kIOReturnSuccess) { 376 | IOLog("%s Can't get state to change to load ram patch err\n", DRV_NAME); 377 | return ret; 378 | } 379 | 380 | if (fw_state & ATH3K_PATCH_UPDATE) { 381 | IOLog("%s Patch was already downloaded", DRV_NAME); 382 | return true; 383 | } 384 | 385 | if (getVendorVersion(this, &fw_version) != kIOReturnSuccess) { 386 | IOLog("%s Can't get version to change to load ram patch err", DRV_NAME); 387 | return ret; 388 | } 389 | 390 | snprintf(filename, ATH3K_NAME_LEN, "AthrBT_0x%08x.dfu", 391 | __le32_to_cpu(fw_version.rom_version)); 392 | 393 | IOLog("%s try to load patch rom file %s\n", DRV_NAME, filename); 394 | 395 | OSData *fwData = getFWDescByName(filename); 396 | 397 | if (fwData == NULL) { 398 | IOLog("%s can not find patch rom file\n", DRV_NAME); 399 | return false; 400 | } 401 | pt_rom_version = get_unaligned_le32((char *)fwData->getBytesNoCopy() + 402 | fwData->getLength() - 8); 403 | pt_build_version = get_unaligned_le32((char *)fwData->getBytesNoCopy() + 404 | fwData->getLength() - 4); 405 | 406 | if (pt_rom_version != __le32_to_cpu(fw_version.rom_version) || 407 | pt_build_version <= __le32_to_cpu(fw_version.build_version)) { 408 | IOLog("%s Patch file version did not match with firmware\n", DRV_NAME); 409 | return false; 410 | } 411 | return loadFwFile(fwData); 412 | } 413 | 414 | bool Ath3kBT::loadFwFile(OSData *fwData) 415 | { 416 | int err; 417 | uint32_t bytesTransferred; 418 | int count, size; 419 | 420 | count = fwData->getLength(); 421 | 422 | StandardUSB::DeviceRequest ctlreq; 423 | ctlreq.bmRequestType = USBmakebmRequestType(kRequestDirectionOut, kRequestTypeVendor, kRequestRecipientDevice); 424 | ctlreq.bRequest = ATH3K_DNLOAD; 425 | ctlreq.wValue = 0; 426 | ctlreq.wIndex = 0; 427 | ctlreq.wLength = FW_HDR_SIZE; 428 | 429 | err = m_pUsbDevice->deviceRequest(this, ctlreq, (void *)fwData->getBytesNoCopy(), bytesTransferred, (uint32_t)kUSBHostStandardRequestCompletionTimeout); 430 | 431 | char *buf = (char *)fwData->getBytesNoCopy(); 432 | size = fwData->getLength(); 433 | buf += FW_HDR_SIZE; 434 | size -= FW_HDR_SIZE; 435 | int ii = 1; 436 | while (size) { 437 | int to_send = size < BULK_SIZE ? size : BULK_SIZE; 438 | 439 | char buftmp[BULK_SIZE]; 440 | IOMemoryDescriptor * membuf = IOMemoryDescriptor::withAddress(&buftmp, BULK_SIZE, kIODirectionOut); 441 | if (!membuf) { 442 | IOLog("%s failed to map memory descriptor\n", DRV_NAME); 443 | return false; 444 | } 445 | err = membuf->prepare(); 446 | memcpy(buftmp, buf, to_send); 447 | err = m_pBulkWritePipe->io(membuf, to_send, (IOUSBHostCompletion*)NULL, 0); 448 | membuf->complete(); 449 | membuf->release(); 450 | if (err) { 451 | IOLog("%s failed to write firmware to bulk pipe (err:%d, block:%d, to_send:%d)\n", DRV_NAME, err, ii, to_send); 452 | return false; 453 | } 454 | buf += to_send; 455 | size -= to_send; 456 | ii++; 457 | } 458 | return true; 459 | } 460 | -------------------------------------------------------------------------------- /Ath3kBT/Ath3kBT.hpp: -------------------------------------------------------------------------------- 1 | /* add your code here */ 2 | 3 | #include 4 | #include 5 | #include 6 | 7 | #include "AtherosFWService.hpp" 8 | 9 | #define ATH3K_DNLOAD 0x01 10 | #define ATH3K_GETSTATE 0x05 11 | #define ATH3K_SET_NORMAL_MODE 0x07 12 | #define ATH3K_GETVERSION 0x09 13 | #define USB_REG_SWITCH_VID_PID 0x0a 14 | 15 | #define ATH3K_MODE_MASK 0x3F 16 | #define ATH3K_NORMAL_MODE 0x0E 17 | 18 | #define ATH3K_PATCH_UPDATE 0x80 19 | #define ATH3K_SYSCFG_UPDATE 0x40 20 | 21 | #define FW_HDR_SIZE 20 22 | #define BULK_SIZE 4096 23 | #define ATH3K_XTAL_FREQ_26M 0x00 24 | #define ATH3K_XTAL_FREQ_40M 0x01 25 | #define ATH3K_XTAL_FREQ_19P2 0x02 26 | #define ATH3K_NAME_LEN 0xFF 27 | 28 | struct ath3k_version { 29 | __le32 rom_version; 30 | __le32 build_version; 31 | __le32 ram_version; 32 | __u8 ref_clock; 33 | __u8 reserved[7]; 34 | } __packed; 35 | 36 | #define DRV_NAME "Ath3kBT" 37 | 38 | class Ath3kBT : public AtherosFWService { 39 | OSDeclareDefaultStructors(Ath3kBT) 40 | 41 | public: 42 | virtual bool init(OSDictionary *dictionary = NULL) override; 43 | virtual void free() override; 44 | virtual bool start(IOService *provider) override; 45 | virtual void stop(IOService *provider) override; 46 | virtual IOService * probe(IOService *provider, SInt32 *score) override; 47 | virtual IOReturn setPowerState(unsigned long powerStateOrdinal, IOService *whatDevice) override; 48 | virtual bool handleOpen(IOService *forClient, IOOptionBits options = 0, void *arg = 0 ) override; 49 | virtual void handleClose(IOService *forClient, IOOptionBits options = 0 ) override; 50 | virtual IOReturn message(UInt32 type, IOService *provider, void *argument) override; 51 | virtual bool terminate(IOOptionBits options = 0) override; 52 | virtual bool finalize(IOOptionBits options) override; 53 | 54 | protected: 55 | 56 | bool setNormalMode(); 57 | 58 | bool loadSysCfg(); 59 | 60 | bool loadPatch(); 61 | 62 | bool loadFwFile(OSData *fwData); 63 | 64 | bool switchPID(IOService* forClient); 65 | 66 | IOReturn getVendorState(IOService* forClient, unsigned char *state); 67 | 68 | IOReturn getVendorVersion(IOService* forClient, struct ath3k_version *version); 69 | 70 | IOReturn getDeviceStatus(IOService* forClient, USBStatus *status); 71 | 72 | protected: 73 | IOUSBHostDevice * m_pUsbDevice; 74 | IOUSBHostPipe* m_pBulkWritePipe; 75 | }; 76 | -------------------------------------------------------------------------------- /Ath3kBT/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleExecutable 8 | $(EXECUTABLE_NAME) 9 | CFBundleIdentifier 10 | $(PRODUCT_BUNDLE_IDENTIFIER) 11 | CFBundleInfoDictionaryVersion 12 | 6.0 13 | CFBundleName 14 | $(PRODUCT_NAME) 15 | CFBundlePackageType 16 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 17 | CFBundleShortVersionString 18 | $(MARKETING_VERSION) 19 | CFBundleVersion 20 | $(CURRENT_PROJECT_VERSION) 21 | IOKitPersonalities 22 | 23 | 0489_E036 24 | 25 | CFBundleIdentifier 26 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 27 | IOClass 28 | ${PRODUCT_NAME:rfc1034identifier} 29 | IOMatchCategory 30 | ${PRODUCT_NAME:rfc1034identifier} 31 | IOProbeScore 32 | 4000 33 | IOProviderClass 34 | IOUSBHostDevice 35 | idProduct 36 | 57398 37 | idVendor 38 | 1161 39 | 40 | 0489_E03C 41 | 42 | CFBundleIdentifier 43 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 44 | IOClass 45 | ${PRODUCT_NAME:rfc1034identifier} 46 | IOMatchCategory 47 | ${PRODUCT_NAME:rfc1034identifier} 48 | IOProbeScore 49 | 4000 50 | IOProviderClass 51 | IOUSBHostDevice 52 | idProduct 53 | 57404 54 | idVendor 55 | 1161 56 | 57 | 0489_e04d 58 | 59 | CFBundleIdentifier 60 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 61 | IOClass 62 | ${PRODUCT_NAME:rfc1034identifier} 63 | IOMatchCategory 64 | ${PRODUCT_NAME:rfc1034identifier} 65 | IOProbeScore 66 | 4000 67 | IOProviderClass 68 | IOUSBHostDevice 69 | idProduct 70 | 57421 71 | idVendor 72 | 1161 73 | 74 | 0489_e04e 75 | 76 | CFBundleIdentifier 77 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 78 | IOClass 79 | ${PRODUCT_NAME:rfc1034identifier} 80 | IOMatchCategory 81 | ${PRODUCT_NAME:rfc1034identifier} 82 | IOProbeScore 83 | 4000 84 | IOProviderClass 85 | IOUSBHostDevice 86 | idProduct 87 | 57422 88 | idVendor 89 | 1161 90 | 91 | 0489_e056 92 | 93 | CFBundleIdentifier 94 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 95 | IOClass 96 | ${PRODUCT_NAME:rfc1034identifier} 97 | IOMatchCategory 98 | ${PRODUCT_NAME:rfc1034identifier} 99 | IOProbeScore 100 | 4000 101 | IOProviderClass 102 | IOUSBHostDevice 103 | idProduct 104 | 57430 105 | idVendor 106 | 1161 107 | 108 | 0489_e057 109 | 110 | CFBundleIdentifier 111 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 112 | IOClass 113 | ${PRODUCT_NAME:rfc1034identifier} 114 | IOMatchCategory 115 | ${PRODUCT_NAME:rfc1034identifier} 116 | IOProbeScore 117 | 4000 118 | IOProviderClass 119 | IOUSBHostDevice 120 | idProduct 121 | 57431 122 | idVendor 123 | 1161 124 | 125 | 0489_e05f 126 | 127 | CFBundleIdentifier 128 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 129 | IOClass 130 | ${PRODUCT_NAME:rfc1034identifier} 131 | IOMatchCategory 132 | ${PRODUCT_NAME:rfc1034identifier} 133 | IOProbeScore 134 | 4000 135 | IOProviderClass 136 | IOUSBHostDevice 137 | idProduct 138 | 57439 139 | idVendor 140 | 1161 141 | 142 | 0489_e076 143 | 144 | CFBundleIdentifier 145 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 146 | IOClass 147 | ${PRODUCT_NAME:rfc1034identifier} 148 | IOMatchCategory 149 | ${PRODUCT_NAME:rfc1034identifier} 150 | IOProbeScore 151 | 4000 152 | IOProviderClass 153 | IOUSBHostDevice 154 | idProduct 155 | 57462 156 | idVendor 157 | 1161 158 | 159 | 0489_e078 160 | 161 | CFBundleIdentifier 162 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 163 | IOClass 164 | ${PRODUCT_NAME:rfc1034identifier} 165 | IOMatchCategory 166 | ${PRODUCT_NAME:rfc1034identifier} 167 | IOProbeScore 168 | 4000 169 | IOProviderClass 170 | IOUSBHostDevice 171 | idProduct 172 | 57464 173 | idVendor 174 | 1161 175 | 176 | 0489_e095 177 | 178 | CFBundleIdentifier 179 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 180 | IOClass 181 | ${PRODUCT_NAME:rfc1034identifier} 182 | IOMatchCategory 183 | ${PRODUCT_NAME:rfc1034identifier} 184 | IOProbeScore 185 | 4000 186 | IOProviderClass 187 | IOUSBHostDevice 188 | idProduct 189 | 57493 190 | idVendor 191 | 1161 192 | 193 | 04c5_1330 194 | 195 | CFBundleIdentifier 196 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 197 | IOClass 198 | ${PRODUCT_NAME:rfc1034identifier} 199 | IOMatchCategory 200 | ${PRODUCT_NAME:rfc1034identifier} 201 | IOProbeScore 202 | 4000 203 | IOProviderClass 204 | IOUSBHostDevice 205 | idProduct 206 | 4912 207 | idVendor 208 | 1221 209 | 210 | 04ca_3004 211 | 212 | CFBundleIdentifier 213 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 214 | IOClass 215 | ${PRODUCT_NAME:rfc1034identifier} 216 | IOMatchCategory 217 | ${PRODUCT_NAME:rfc1034identifier} 218 | IOProbeScore 219 | 4000 220 | IOProviderClass 221 | IOUSBHostDevice 222 | idProduct 223 | 12292 224 | idVendor 225 | 1226 226 | 227 | 04ca_3005 228 | 229 | CFBundleIdentifier 230 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 231 | IOClass 232 | ${PRODUCT_NAME:rfc1034identifier} 233 | IOMatchCategory 234 | ${PRODUCT_NAME:rfc1034identifier} 235 | IOProbeScore 236 | 4000 237 | IOProviderClass 238 | IOUSBHostDevice 239 | idProduct 240 | 12293 241 | idVendor 242 | 1226 243 | 244 | 04ca_3006 245 | 246 | CFBundleIdentifier 247 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 248 | IOClass 249 | ${PRODUCT_NAME:rfc1034identifier} 250 | IOMatchCategory 251 | ${PRODUCT_NAME:rfc1034identifier} 252 | IOProbeScore 253 | 4000 254 | IOProviderClass 255 | IOUSBHostDevice 256 | idProduct 257 | 12294 258 | idVendor 259 | 1226 260 | 261 | 04ca_3007 262 | 263 | CFBundleIdentifier 264 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 265 | IOClass 266 | ${PRODUCT_NAME:rfc1034identifier} 267 | IOMatchCategory 268 | ${PRODUCT_NAME:rfc1034identifier} 269 | IOProbeScore 270 | 4000 271 | IOProviderClass 272 | IOUSBHostDevice 273 | idProduct 274 | 12295 275 | idVendor 276 | 1226 277 | 278 | 04ca_3008 279 | 280 | CFBundleIdentifier 281 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 282 | IOClass 283 | ${PRODUCT_NAME:rfc1034identifier} 284 | IOMatchCategory 285 | ${PRODUCT_NAME:rfc1034identifier} 286 | IOProbeScore 287 | 4000 288 | IOProviderClass 289 | IOUSBHostDevice 290 | idProduct 291 | 12296 292 | idVendor 293 | 1226 294 | 295 | 04ca_300b 296 | 297 | CFBundleIdentifier 298 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 299 | IOClass 300 | ${PRODUCT_NAME:rfc1034identifier} 301 | IOMatchCategory 302 | ${PRODUCT_NAME:rfc1034identifier} 303 | IOProbeScore 304 | 4000 305 | IOProviderClass 306 | IOUSBHostDevice 307 | idProduct 308 | 12299 309 | idVendor 310 | 1226 311 | 312 | 04ca_300d 313 | 314 | CFBundleIdentifier 315 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 316 | IOClass 317 | ${PRODUCT_NAME:rfc1034identifier} 318 | IOMatchCategory 319 | ${PRODUCT_NAME:rfc1034identifier} 320 | IOProbeScore 321 | 4000 322 | IOProviderClass 323 | IOUSBHostDevice 324 | idProduct 325 | 12301 326 | idVendor 327 | 1226 328 | 329 | 04ca_300f 330 | 331 | CFBundleIdentifier 332 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 333 | IOClass 334 | ${PRODUCT_NAME:rfc1034identifier} 335 | IOMatchCategory 336 | ${PRODUCT_NAME:rfc1034identifier} 337 | IOProbeScore 338 | 4000 339 | IOProviderClass 340 | IOUSBHostDevice 341 | idProduct 342 | 12303 343 | idVendor 344 | 1226 345 | 346 | 04ca_3010 347 | 348 | CFBundleIdentifier 349 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 350 | IOClass 351 | ${PRODUCT_NAME:rfc1034identifier} 352 | IOMatchCategory 353 | ${PRODUCT_NAME:rfc1034identifier} 354 | IOProbeScore 355 | 4000 356 | IOProviderClass 357 | IOUSBHostDevice 358 | idProduct 359 | 12304 360 | idVendor 361 | 1226 362 | 363 | 04ca_3014 364 | 365 | CFBundleIdentifier 366 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 367 | IOClass 368 | ${PRODUCT_NAME:rfc1034identifier} 369 | IOMatchCategory 370 | ${PRODUCT_NAME:rfc1034identifier} 371 | IOProbeScore 372 | 4000 373 | IOProviderClass 374 | IOUSBHostDevice 375 | idProduct 376 | 12308 377 | idVendor 378 | 1226 379 | 380 | 04ca_3018 381 | 382 | CFBundleIdentifier 383 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 384 | IOClass 385 | ${PRODUCT_NAME:rfc1034identifier} 386 | IOMatchCategory 387 | ${PRODUCT_NAME:rfc1034identifier} 388 | IOProbeScore 389 | 4000 390 | IOProviderClass 391 | IOUSBHostDevice 392 | idProduct 393 | 12312 394 | idVendor 395 | 1226 396 | 397 | 0930_0219 398 | 399 | CFBundleIdentifier 400 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 401 | IOClass 402 | ${PRODUCT_NAME:rfc1034identifier} 403 | IOMatchCategory 404 | ${PRODUCT_NAME:rfc1034identifier} 405 | IOProbeScore 406 | 4000 407 | IOProviderClass 408 | IOUSBHostDevice 409 | idProduct 410 | 537 411 | idVendor 412 | 2352 413 | 414 | 0930_021c 415 | 416 | CFBundleIdentifier 417 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 418 | IOClass 419 | ${PRODUCT_NAME:rfc1034identifier} 420 | IOMatchCategory 421 | ${PRODUCT_NAME:rfc1034identifier} 422 | IOProbeScore 423 | 4000 424 | IOProviderClass 425 | IOUSBHostDevice 426 | idProduct 427 | 540 428 | idVendor 429 | 2352 430 | 431 | 0930_0220 432 | 433 | CFBundleIdentifier 434 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 435 | IOClass 436 | ${PRODUCT_NAME:rfc1034identifier} 437 | IOMatchCategory 438 | ${PRODUCT_NAME:rfc1034identifier} 439 | IOProbeScore 440 | 4000 441 | IOProviderClass 442 | IOUSBHostDevice 443 | idProduct 444 | 544 445 | idVendor 446 | 2352 447 | 448 | 0930_0227 449 | 450 | CFBundleIdentifier 451 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 452 | IOClass 453 | ${PRODUCT_NAME:rfc1034identifier} 454 | IOMatchCategory 455 | ${PRODUCT_NAME:rfc1034identifier} 456 | IOProbeScore 457 | 4000 458 | IOProviderClass 459 | IOUSBHostDevice 460 | idProduct 461 | 551 462 | idVendor 463 | 2352 464 | 465 | 0b05_17d0 466 | 467 | CFBundleIdentifier 468 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 469 | IOClass 470 | ${PRODUCT_NAME:rfc1034identifier} 471 | IOMatchCategory 472 | ${PRODUCT_NAME:rfc1034identifier} 473 | IOProbeScore 474 | 4000 475 | IOProviderClass 476 | IOUSBHostDevice 477 | idProduct 478 | 6096 479 | idVendor 480 | 2821 481 | 482 | 0cF3_0036 483 | 484 | CFBundleIdentifier 485 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 486 | IOClass 487 | ${PRODUCT_NAME:rfc1034identifier} 488 | IOMatchCategory 489 | ${PRODUCT_NAME:rfc1034identifier} 490 | IOProbeScore 491 | 4000 492 | IOProviderClass 493 | IOUSBHostDevice 494 | idProduct 495 | 54 496 | idVendor 497 | 3315 498 | 499 | 0cF3_3004 500 | 501 | CFBundleIdentifier 502 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 503 | IOClass 504 | ${PRODUCT_NAME:rfc1034identifier} 505 | IOMatchCategory 506 | ${PRODUCT_NAME:rfc1034identifier} 507 | IOProbeScore 508 | 4000 509 | IOProviderClass 510 | IOUSBHostDevice 511 | idProduct 512 | 12292 513 | idVendor 514 | 3315 515 | 516 | 0cF3_3008 517 | 518 | CFBundleIdentifier 519 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 520 | IOClass 521 | ${PRODUCT_NAME:rfc1034identifier} 522 | IOMatchCategory 523 | ${PRODUCT_NAME:rfc1034identifier} 524 | IOProbeScore 525 | 4000 526 | IOProviderClass 527 | IOUSBHostDevice 528 | idProduct 529 | 12296 530 | idVendor 531 | 3315 532 | 533 | 0cF3_311D 534 | 535 | CFBundleIdentifier 536 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 537 | IOClass 538 | ${PRODUCT_NAME:rfc1034identifier} 539 | IOMatchCategory 540 | ${PRODUCT_NAME:rfc1034identifier} 541 | IOProbeScore 542 | 4000 543 | IOProviderClass 544 | IOUSBHostDevice 545 | idProduct 546 | 12573 547 | idVendor 548 | 3315 549 | 550 | 0cF3_311E 551 | 552 | CFBundleIdentifier 553 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 554 | IOClass 555 | ${PRODUCT_NAME:rfc1034identifier} 556 | IOMatchCategory 557 | ${PRODUCT_NAME:rfc1034identifier} 558 | IOProbeScore 559 | 4000 560 | IOProviderClass 561 | IOUSBHostDevice 562 | idProduct 563 | 12574 564 | idVendor 565 | 3315 566 | 567 | 0cF3_311F 568 | 569 | CFBundleIdentifier 570 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 571 | IOClass 572 | ${PRODUCT_NAME:rfc1034identifier} 573 | IOMatchCategory 574 | ${PRODUCT_NAME:rfc1034identifier} 575 | IOProbeScore 576 | 4000 577 | IOProviderClass 578 | IOUSBHostDevice 579 | idProduct 580 | 12575 581 | idVendor 582 | 3315 583 | 584 | 0cF3_3121 585 | 586 | CFBundleIdentifier 587 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 588 | IOClass 589 | ${PRODUCT_NAME:rfc1034identifier} 590 | IOMatchCategory 591 | ${PRODUCT_NAME:rfc1034identifier} 592 | IOProbeScore 593 | 4000 594 | IOProviderClass 595 | IOUSBHostDevice 596 | idProduct 597 | 12577 598 | idVendor 599 | 3315 600 | 601 | 0cF3_817a 602 | 603 | CFBundleIdentifier 604 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 605 | IOClass 606 | ${PRODUCT_NAME:rfc1034identifier} 607 | IOMatchCategory 608 | ${PRODUCT_NAME:rfc1034identifier} 609 | IOProbeScore 610 | 4000 611 | IOProviderClass 612 | IOUSBHostDevice 613 | idProduct 614 | 33146 615 | idVendor 616 | 3315 617 | 618 | 0cF3_817b 619 | 620 | CFBundleIdentifier 621 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 622 | IOClass 623 | ${PRODUCT_NAME:rfc1034identifier} 624 | IOMatchCategory 625 | ${PRODUCT_NAME:rfc1034identifier} 626 | IOProbeScore 627 | 4000 628 | IOProviderClass 629 | IOUSBHostDevice 630 | idProduct 631 | 33147 632 | idVendor 633 | 3315 634 | 635 | 0cF3_e003 636 | 637 | CFBundleIdentifier 638 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 639 | IOClass 640 | ${PRODUCT_NAME:rfc1034identifier} 641 | IOMatchCategory 642 | ${PRODUCT_NAME:rfc1034identifier} 643 | IOProbeScore 644 | 4000 645 | IOProviderClass 646 | IOUSBHostDevice 647 | idProduct 648 | 57347 649 | idVendor 650 | 3315 651 | 652 | 0cF3_e004 653 | 654 | CFBundleIdentifier 655 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 656 | IOClass 657 | ${PRODUCT_NAME:rfc1034identifier} 658 | IOMatchCategory 659 | ${PRODUCT_NAME:rfc1034identifier} 660 | IOProbeScore 661 | 4000 662 | IOProviderClass 663 | IOUSBHostDevice 664 | idProduct 665 | 57348 666 | idVendor 667 | 3315 668 | 669 | 0cF3_e005 670 | 671 | CFBundleIdentifier 672 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 673 | IOClass 674 | ${PRODUCT_NAME:rfc1034identifier} 675 | IOMatchCategory 676 | ${PRODUCT_NAME:rfc1034identifier} 677 | IOProbeScore 678 | 4000 679 | IOProviderClass 680 | IOUSBHostDevice 681 | idProduct 682 | 57349 683 | idVendor 684 | 3315 685 | 686 | 0cF3_e006 687 | 688 | CFBundleIdentifier 689 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 690 | IOClass 691 | ${PRODUCT_NAME:rfc1034identifier} 692 | IOMatchCategory 693 | ${PRODUCT_NAME:rfc1034identifier} 694 | IOProbeScore 695 | 4000 696 | IOProviderClass 697 | IOUSBHostDevice 698 | idProduct 699 | 57350 700 | idVendor 701 | 3315 702 | 703 | 13d3_3362 704 | 705 | CFBundleIdentifier 706 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 707 | IOClass 708 | ${PRODUCT_NAME:rfc1034identifier} 709 | IOMatchCategory 710 | ${PRODUCT_NAME:rfc1034identifier} 711 | IOProbeScore 712 | 4000 713 | IOProviderClass 714 | IOUSBHostDevice 715 | idProduct 716 | 13154 717 | idVendor 718 | 5075 719 | 720 | 13d3_3375 721 | 722 | CFBundleIdentifier 723 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 724 | IOClass 725 | ${PRODUCT_NAME:rfc1034identifier} 726 | IOMatchCategory 727 | ${PRODUCT_NAME:rfc1034identifier} 728 | IOProbeScore 729 | 4000 730 | IOProviderClass 731 | IOUSBHostDevice 732 | idProduct 733 | 13173 734 | idVendor 735 | 5075 736 | 737 | 13d3_3393 738 | 739 | CFBundleIdentifier 740 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 741 | IOClass 742 | ${PRODUCT_NAME:rfc1034identifier} 743 | IOMatchCategory 744 | ${PRODUCT_NAME:rfc1034identifier} 745 | IOProbeScore 746 | 4000 747 | IOProviderClass 748 | IOUSBHostDevice 749 | idProduct 750 | 13203 751 | idVendor 752 | 5075 753 | 754 | 13d3_3395 755 | 756 | CFBundleIdentifier 757 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 758 | IOClass 759 | ${PRODUCT_NAME:rfc1034identifier} 760 | IOMatchCategory 761 | ${PRODUCT_NAME:rfc1034identifier} 762 | IOProbeScore 763 | 4000 764 | IOProviderClass 765 | IOUSBHostDevice 766 | idProduct 767 | 13205 768 | idVendor 769 | 5075 770 | 771 | 13d3_3402 772 | 773 | CFBundleIdentifier 774 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 775 | IOClass 776 | ${PRODUCT_NAME:rfc1034identifier} 777 | IOMatchCategory 778 | ${PRODUCT_NAME:rfc1034identifier} 779 | IOProbeScore 780 | 4000 781 | IOProviderClass 782 | IOUSBHostDevice 783 | idProduct 784 | 13314 785 | idVendor 786 | 5075 787 | 788 | 13d3_3408 789 | 790 | CFBundleIdentifier 791 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 792 | IOClass 793 | ${PRODUCT_NAME:rfc1034identifier} 794 | IOMatchCategory 795 | ${PRODUCT_NAME:rfc1034identifier} 796 | IOProbeScore 797 | 4000 798 | IOProviderClass 799 | IOUSBHostDevice 800 | idProduct 801 | 13320 802 | idVendor 803 | 5075 804 | 805 | 13d3_3423 806 | 807 | CFBundleIdentifier 808 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 809 | IOClass 810 | ${PRODUCT_NAME:rfc1034identifier} 811 | IOMatchCategory 812 | ${PRODUCT_NAME:rfc1034identifier} 813 | IOProbeScore 814 | 4000 815 | IOProviderClass 816 | IOUSBHostDevice 817 | idProduct 818 | 13347 819 | idVendor 820 | 5075 821 | 822 | 13d3_3432 823 | 824 | CFBundleIdentifier 825 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 826 | IOClass 827 | ${PRODUCT_NAME:rfc1034identifier} 828 | IOMatchCategory 829 | ${PRODUCT_NAME:rfc1034identifier} 830 | IOProbeScore 831 | 4000 832 | IOProviderClass 833 | IOUSBHostDevice 834 | idProduct 835 | 13362 836 | idVendor 837 | 5075 838 | 839 | 13d3_3472 840 | 841 | CFBundleIdentifier 842 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 843 | IOClass 844 | ${PRODUCT_NAME:rfc1034identifier} 845 | IOMatchCategory 846 | ${PRODUCT_NAME:rfc1034identifier} 847 | IOProbeScore 848 | 4000 849 | IOProviderClass 850 | IOUSBHostDevice 851 | idProduct 852 | 13426 853 | idVendor 854 | 5075 855 | 856 | 13d3_3474 857 | 858 | CFBundleIdentifier 859 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 860 | IOClass 861 | ${PRODUCT_NAME:rfc1034identifier} 862 | IOMatchCategory 863 | ${PRODUCT_NAME:rfc1034identifier} 864 | IOProbeScore 865 | 4000 866 | IOProviderClass 867 | IOUSBHostDevice 868 | idProduct 869 | 13428 870 | idVendor 871 | 5075 872 | 873 | 13d3_3487 874 | 875 | CFBundleIdentifier 876 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 877 | IOClass 878 | ${PRODUCT_NAME:rfc1034identifier} 879 | IOMatchCategory 880 | ${PRODUCT_NAME:rfc1034identifier} 881 | IOProbeScore 882 | 4000 883 | IOProviderClass 884 | IOUSBHostDevice 885 | idProduct 886 | 13447 887 | idVendor 888 | 5075 889 | 890 | 13d3_3490 891 | 892 | CFBundleIdentifier 893 | com.zxystd.${PRODUCT_NAME:rfc1034identifier} 894 | IOClass 895 | ${PRODUCT_NAME:rfc1034identifier} 896 | IOMatchCategory 897 | ${PRODUCT_NAME:rfc1034identifier} 898 | IOProbeScore 899 | 4000 900 | IOProviderClass 901 | IOUSBHostDevice 902 | idProduct 903 | 13456 904 | idVendor 905 | 5075 906 | 907 | 908 | NSHumanReadableCopyright 909 | Copyright © 2020 zxystd. All rights reserved. 910 | OSBundleLibraries 911 | 912 | com.apple.iokit.IOUSBHostFamily 913 | 1.2 914 | com.apple.kpi.iokit 915 | 16.7 916 | com.apple.kpi.libkern 917 | 16.7 918 | com.apple.kpi.mach 919 | 16.7 920 | 921 | OSBundleRequired 922 | Root 923 | 924 | 925 | -------------------------------------------------------------------------------- /Ath3kBT/fw/AthrBT_0x01020001.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/AthrBT_0x01020001.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/AthrBT_0x01020200.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/AthrBT_0x01020200.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/AthrBT_0x01020201.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/AthrBT_0x01020201.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/AthrBT_0x11020000.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/AthrBT_0x11020000.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/AthrBT_0x11020100.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/AthrBT_0x11020100.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/AthrBT_0x31010000.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/AthrBT_0x31010000.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/AthrBT_0x31010100.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/AthrBT_0x31010100.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/AthrBT_0x41020000.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/AthrBT_0x41020000.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/ramps_0x01020001_26.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/ramps_0x01020001_26.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/ramps_0x01020200_26.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/ramps_0x01020200_26.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/ramps_0x01020200_40.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/ramps_0x01020200_40.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/ramps_0x01020201_26.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/ramps_0x01020201_26.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/ramps_0x01020201_40.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/ramps_0x01020201_40.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/ramps_0x11020000_40.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/ramps_0x11020000_40.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/ramps_0x11020100_40.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/ramps_0x11020100_40.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/ramps_0x31010000_40.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/ramps_0x31010000_40.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/ramps_0x31010100_40.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/ramps_0x31010100_40.dfu -------------------------------------------------------------------------------- /Ath3kBT/fw/ramps_0x41020000_40.dfu: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/zxystd/AthBluetoothFirmware/07690fc1099f514c08511b78793d6fc703cb4cf0/Ath3kBT/fw/ramps_0x41020000_40.dfu -------------------------------------------------------------------------------- /Ath3kBTInjector/Ath3kBTInjector.cpp: -------------------------------------------------------------------------------- 1 | /* add your code here */ 2 | -------------------------------------------------------------------------------- /Ath3kBTInjector/Ath3kBTInjector.hpp: -------------------------------------------------------------------------------- 1 | /* add your code here */ 2 | -------------------------------------------------------------------------------- /Ath3kBTInjector/Info.plist: -------------------------------------------------------------------------------- 1 | 2 | 3 | 4 | 5 | CFBundleDevelopmentRegion 6 | $(DEVELOPMENT_LANGUAGE) 7 | CFBundleIdentifier 8 | $(PRODUCT_BUNDLE_IDENTIFIER) 9 | CFBundleInfoDictionaryVersion 10 | 6.0 11 | CFBundleName 12 | $(PRODUCT_NAME) 13 | CFBundlePackageType 14 | $(PRODUCT_BUNDLE_PACKAGE_TYPE) 15 | CFBundleShortVersionString 16 | $(MARKETING_VERSION) 17 | CFBundleVersion 18 | $(CURRENT_PROJECT_VERSION) 19 | IOKitPersonalities 20 | 21 | 0489_E036 22 | 23 | CFBundleIdentifier 24 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 25 | IOClass 26 | BroadcomBluetoothHostControllerUSBTransport 27 | IOProbeScore 28 | 3000 29 | IOProviderClass 30 | IOUSBHostDevice 31 | idProduct 32 | 57398 33 | idVendor 34 | 1161 35 | 36 | 0489_E03C 37 | 38 | CFBundleIdentifier 39 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 40 | IOClass 41 | BroadcomBluetoothHostControllerUSBTransport 42 | IOProbeScore 43 | 3000 44 | IOProviderClass 45 | IOUSBHostDevice 46 | idProduct 47 | 57404 48 | idVendor 49 | 1161 50 | 51 | 0489_e04d 52 | 53 | CFBundleIdentifier 54 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 55 | IOClass 56 | BroadcomBluetoothHostControllerUSBTransport 57 | IOProbeScore 58 | 3000 59 | IOProviderClass 60 | IOUSBHostDevice 61 | idProduct 62 | 57421 63 | idVendor 64 | 1161 65 | 66 | 0489_e04e 67 | 68 | CFBundleIdentifier 69 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 70 | IOClass 71 | BroadcomBluetoothHostControllerUSBTransport 72 | IOProbeScore 73 | 3000 74 | IOProviderClass 75 | IOUSBHostDevice 76 | idProduct 77 | 57422 78 | idVendor 79 | 1161 80 | 81 | 0489_e056 82 | 83 | CFBundleIdentifier 84 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 85 | IOClass 86 | BroadcomBluetoothHostControllerUSBTransport 87 | IOProbeScore 88 | 3000 89 | IOProviderClass 90 | IOUSBHostDevice 91 | idProduct 92 | 57430 93 | idVendor 94 | 1161 95 | 96 | 0489_e057 97 | 98 | CFBundleIdentifier 99 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 100 | IOClass 101 | BroadcomBluetoothHostControllerUSBTransport 102 | IOProbeScore 103 | 3000 104 | IOProviderClass 105 | IOUSBHostDevice 106 | idProduct 107 | 57431 108 | idVendor 109 | 1161 110 | 111 | 0489_e05f 112 | 113 | CFBundleIdentifier 114 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 115 | IOClass 116 | BroadcomBluetoothHostControllerUSBTransport 117 | IOProbeScore 118 | 3000 119 | IOProviderClass 120 | IOUSBHostDevice 121 | idProduct 122 | 57439 123 | idVendor 124 | 1161 125 | 126 | 0489_e076 127 | 128 | CFBundleIdentifier 129 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 130 | IOClass 131 | BroadcomBluetoothHostControllerUSBTransport 132 | IOProbeScore 133 | 3000 134 | IOProviderClass 135 | IOUSBHostDevice 136 | idProduct 137 | 57462 138 | idVendor 139 | 1161 140 | 141 | 0489_e078 142 | 143 | CFBundleIdentifier 144 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 145 | IOClass 146 | BroadcomBluetoothHostControllerUSBTransport 147 | IOProbeScore 148 | 3000 149 | IOProviderClass 150 | IOUSBHostDevice 151 | idProduct 152 | 57464 153 | idVendor 154 | 1161 155 | 156 | 0489_e095 157 | 158 | CFBundleIdentifier 159 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 160 | IOClass 161 | BroadcomBluetoothHostControllerUSBTransport 162 | IOProbeScore 163 | 3000 164 | IOProviderClass 165 | IOUSBHostDevice 166 | idProduct 167 | 57493 168 | idVendor 169 | 1161 170 | 171 | 04c5_1330 172 | 173 | CFBundleIdentifier 174 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 175 | IOClass 176 | BroadcomBluetoothHostControllerUSBTransport 177 | IOProbeScore 178 | 3000 179 | IOProviderClass 180 | IOUSBHostDevice 181 | idProduct 182 | 4912 183 | idVendor 184 | 1221 185 | 186 | 04ca_3004 187 | 188 | CFBundleIdentifier 189 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 190 | IOClass 191 | BroadcomBluetoothHostControllerUSBTransport 192 | IOProbeScore 193 | 3000 194 | IOProviderClass 195 | IOUSBHostDevice 196 | idProduct 197 | 12292 198 | idVendor 199 | 1226 200 | 201 | 04ca_3005 202 | 203 | CFBundleIdentifier 204 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 205 | IOClass 206 | BroadcomBluetoothHostControllerUSBTransport 207 | IOProbeScore 208 | 3000 209 | IOProviderClass 210 | IOUSBHostDevice 211 | idProduct 212 | 12293 213 | idVendor 214 | 1226 215 | 216 | 04ca_3006 217 | 218 | CFBundleIdentifier 219 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 220 | IOClass 221 | BroadcomBluetoothHostControllerUSBTransport 222 | IOProbeScore 223 | 3000 224 | IOProviderClass 225 | IOUSBHostDevice 226 | idProduct 227 | 12294 228 | idVendor 229 | 1226 230 | 231 | 04ca_3007 232 | 233 | CFBundleIdentifier 234 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 235 | IOClass 236 | BroadcomBluetoothHostControllerUSBTransport 237 | IOProbeScore 238 | 3000 239 | IOProviderClass 240 | IOUSBHostDevice 241 | idProduct 242 | 12295 243 | idVendor 244 | 1226 245 | 246 | 04ca_3008 247 | 248 | CFBundleIdentifier 249 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 250 | IOClass 251 | BroadcomBluetoothHostControllerUSBTransport 252 | IOProbeScore 253 | 3000 254 | IOProviderClass 255 | IOUSBHostDevice 256 | idProduct 257 | 12296 258 | idVendor 259 | 1226 260 | 261 | 04ca_300b 262 | 263 | CFBundleIdentifier 264 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 265 | IOClass 266 | BroadcomBluetoothHostControllerUSBTransport 267 | IOProbeScore 268 | 3000 269 | IOProviderClass 270 | IOUSBHostDevice 271 | idProduct 272 | 12299 273 | idVendor 274 | 1226 275 | 276 | 04ca_300d 277 | 278 | CFBundleIdentifier 279 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 280 | IOClass 281 | BroadcomBluetoothHostControllerUSBTransport 282 | IOProbeScore 283 | 3000 284 | IOProviderClass 285 | IOUSBHostDevice 286 | idProduct 287 | 12301 288 | idVendor 289 | 1226 290 | 291 | 04ca_300f 292 | 293 | CFBundleIdentifier 294 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 295 | IOClass 296 | BroadcomBluetoothHostControllerUSBTransport 297 | IOProbeScore 298 | 3000 299 | IOProviderClass 300 | IOUSBHostDevice 301 | idProduct 302 | 12303 303 | idVendor 304 | 1226 305 | 306 | 04ca_3010 307 | 308 | CFBundleIdentifier 309 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 310 | IOClass 311 | BroadcomBluetoothHostControllerUSBTransport 312 | IOProbeScore 313 | 3000 314 | IOProviderClass 315 | IOUSBHostDevice 316 | idProduct 317 | 12304 318 | idVendor 319 | 1226 320 | 321 | 04ca_3014 322 | 323 | CFBundleIdentifier 324 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 325 | IOClass 326 | BroadcomBluetoothHostControllerUSBTransport 327 | IOProbeScore 328 | 3000 329 | IOProviderClass 330 | IOUSBHostDevice 331 | idProduct 332 | 12308 333 | idVendor 334 | 1226 335 | 336 | 04ca_3018 337 | 338 | CFBundleIdentifier 339 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 340 | IOClass 341 | BroadcomBluetoothHostControllerUSBTransport 342 | IOProbeScore 343 | 3000 344 | IOProviderClass 345 | IOUSBHostDevice 346 | idProduct 347 | 12312 348 | idVendor 349 | 1226 350 | 351 | 0930_0219 352 | 353 | CFBundleIdentifier 354 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 355 | IOClass 356 | BroadcomBluetoothHostControllerUSBTransport 357 | IOProbeScore 358 | 3000 359 | IOProviderClass 360 | IOUSBHostDevice 361 | idProduct 362 | 537 363 | idVendor 364 | 2352 365 | 366 | 0930_021c 367 | 368 | CFBundleIdentifier 369 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 370 | IOClass 371 | BroadcomBluetoothHostControllerUSBTransport 372 | IOProbeScore 373 | 3000 374 | IOProviderClass 375 | IOUSBHostDevice 376 | idProduct 377 | 540 378 | idVendor 379 | 2352 380 | 381 | 0930_0220 382 | 383 | CFBundleIdentifier 384 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 385 | IOClass 386 | BroadcomBluetoothHostControllerUSBTransport 387 | IOProbeScore 388 | 3000 389 | IOProviderClass 390 | IOUSBHostDevice 391 | idProduct 392 | 544 393 | idVendor 394 | 2352 395 | 396 | 0930_0227 397 | 398 | CFBundleIdentifier 399 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 400 | IOClass 401 | BroadcomBluetoothHostControllerUSBTransport 402 | IOProbeScore 403 | 3000 404 | IOProviderClass 405 | IOUSBHostDevice 406 | idProduct 407 | 551 408 | idVendor 409 | 2352 410 | 411 | 0b05_17d0 412 | 413 | CFBundleIdentifier 414 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 415 | IOClass 416 | BroadcomBluetoothHostControllerUSBTransport 417 | IOProbeScore 418 | 3000 419 | IOProviderClass 420 | IOUSBHostDevice 421 | idProduct 422 | 6096 423 | idVendor 424 | 2821 425 | 426 | 0cF3_0036 427 | 428 | CFBundleIdentifier 429 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 430 | IOClass 431 | BroadcomBluetoothHostControllerUSBTransport 432 | IOProbeScore 433 | 3000 434 | IOProviderClass 435 | IOUSBHostDevice 436 | idProduct 437 | 54 438 | idVendor 439 | 3315 440 | 441 | 0cF3_3004 442 | 443 | CFBundleIdentifier 444 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 445 | IOClass 446 | BroadcomBluetoothHostControllerUSBTransport 447 | IOProbeScore 448 | 3000 449 | IOProviderClass 450 | IOUSBHostDevice 451 | idProduct 452 | 12292 453 | idVendor 454 | 3315 455 | 456 | 0cF3_3008 457 | 458 | CFBundleIdentifier 459 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 460 | IOClass 461 | BroadcomBluetoothHostControllerUSBTransport 462 | IOProbeScore 463 | 3000 464 | IOProviderClass 465 | IOUSBHostDevice 466 | idProduct 467 | 12296 468 | idVendor 469 | 3315 470 | 471 | 0cF3_311D 472 | 473 | CFBundleIdentifier 474 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 475 | IOClass 476 | BroadcomBluetoothHostControllerUSBTransport 477 | IOProbeScore 478 | 3000 479 | IOProviderClass 480 | IOUSBHostDevice 481 | idProduct 482 | 12573 483 | idVendor 484 | 3315 485 | 486 | 0cF3_311E 487 | 488 | CFBundleIdentifier 489 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 490 | IOClass 491 | BroadcomBluetoothHostControllerUSBTransport 492 | IOProbeScore 493 | 3000 494 | IOProviderClass 495 | IOUSBHostDevice 496 | idProduct 497 | 12574 498 | idVendor 499 | 3315 500 | 501 | 0cF3_311F 502 | 503 | CFBundleIdentifier 504 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 505 | IOClass 506 | BroadcomBluetoothHostControllerUSBTransport 507 | IOProbeScore 508 | 3000 509 | IOProviderClass 510 | IOUSBHostDevice 511 | idProduct 512 | 12575 513 | idVendor 514 | 3315 515 | 516 | 0cF3_3121 517 | 518 | CFBundleIdentifier 519 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 520 | IOClass 521 | BroadcomBluetoothHostControllerUSBTransport 522 | IOProbeScore 523 | 3000 524 | IOProviderClass 525 | IOUSBHostDevice 526 | idProduct 527 | 12577 528 | idVendor 529 | 3315 530 | 531 | 0cF3_817a 532 | 533 | CFBundleIdentifier 534 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 535 | IOClass 536 | BroadcomBluetoothHostControllerUSBTransport 537 | IOProbeScore 538 | 3000 539 | IOProviderClass 540 | IOUSBHostDevice 541 | idProduct 542 | 33146 543 | idVendor 544 | 3315 545 | 546 | 0cF3_817b 547 | 548 | CFBundleIdentifier 549 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 550 | IOClass 551 | BroadcomBluetoothHostControllerUSBTransport 552 | IOProbeScore 553 | 3000 554 | IOProviderClass 555 | IOUSBHostDevice 556 | idProduct 557 | 33147 558 | idVendor 559 | 3315 560 | 561 | 0cF3_e003 562 | 563 | CFBundleIdentifier 564 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 565 | IOClass 566 | BroadcomBluetoothHostControllerUSBTransport 567 | IOProbeScore 568 | 3000 569 | IOProviderClass 570 | IOUSBHostDevice 571 | idProduct 572 | 57347 573 | idVendor 574 | 3315 575 | 576 | 0cF3_e004 577 | 578 | CFBundleIdentifier 579 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 580 | IOClass 581 | BroadcomBluetoothHostControllerUSBTransport 582 | IOProbeScore 583 | 3000 584 | IOProviderClass 585 | IOUSBHostDevice 586 | idProduct 587 | 57348 588 | idVendor 589 | 3315 590 | 591 | 0cF3_e005 592 | 593 | CFBundleIdentifier 594 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 595 | IOClass 596 | BroadcomBluetoothHostControllerUSBTransport 597 | IOProbeScore 598 | 3000 599 | IOProviderClass 600 | IOUSBHostDevice 601 | idProduct 602 | 57349 603 | idVendor 604 | 3315 605 | 606 | 0cF3_e006 607 | 608 | CFBundleIdentifier 609 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 610 | IOClass 611 | BroadcomBluetoothHostControllerUSBTransport 612 | IOProbeScore 613 | 3000 614 | IOProviderClass 615 | IOUSBHostDevice 616 | idProduct 617 | 57350 618 | idVendor 619 | 3315 620 | 621 | 13d3_3362 622 | 623 | CFBundleIdentifier 624 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 625 | IOClass 626 | BroadcomBluetoothHostControllerUSBTransport 627 | IOProbeScore 628 | 3000 629 | IOProviderClass 630 | IOUSBHostDevice 631 | idProduct 632 | 13154 633 | idVendor 634 | 5075 635 | 636 | 13d3_3375 637 | 638 | CFBundleIdentifier 639 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 640 | IOClass 641 | BroadcomBluetoothHostControllerUSBTransport 642 | IOProbeScore 643 | 3000 644 | IOProviderClass 645 | IOUSBHostDevice 646 | idProduct 647 | 13173 648 | idVendor 649 | 5075 650 | 651 | 13d3_3393 652 | 653 | CFBundleIdentifier 654 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 655 | IOClass 656 | BroadcomBluetoothHostControllerUSBTransport 657 | IOProbeScore 658 | 3000 659 | IOProviderClass 660 | IOUSBHostDevice 661 | idProduct 662 | 13203 663 | idVendor 664 | 5075 665 | 666 | 13d3_3395 667 | 668 | CFBundleIdentifier 669 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 670 | IOClass 671 | BroadcomBluetoothHostControllerUSBTransport 672 | IOProbeScore 673 | 3000 674 | IOProviderClass 675 | IOUSBHostDevice 676 | idProduct 677 | 13205 678 | idVendor 679 | 5075 680 | 681 | 13d3_3402 682 | 683 | CFBundleIdentifier 684 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 685 | IOClass 686 | BroadcomBluetoothHostControllerUSBTransport 687 | IOProbeScore 688 | 3000 689 | IOProviderClass 690 | IOUSBHostDevice 691 | idProduct 692 | 13314 693 | idVendor 694 | 5075 695 | 696 | 13d3_3408 697 | 698 | CFBundleIdentifier 699 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 700 | IOClass 701 | BroadcomBluetoothHostControllerUSBTransport 702 | IOProbeScore 703 | 3000 704 | IOProviderClass 705 | IOUSBHostDevice 706 | idProduct 707 | 13320 708 | idVendor 709 | 5075 710 | 711 | 13d3_3423 712 | 713 | CFBundleIdentifier 714 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 715 | IOClass 716 | BroadcomBluetoothHostControllerUSBTransport 717 | IOProbeScore 718 | 3000 719 | IOProviderClass 720 | IOUSBHostDevice 721 | idProduct 722 | 13347 723 | idVendor 724 | 5075 725 | 726 | 13d3_3432 727 | 728 | CFBundleIdentifier 729 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 730 | IOClass 731 | BroadcomBluetoothHostControllerUSBTransport 732 | IOProbeScore 733 | 3000 734 | IOProviderClass 735 | IOUSBHostDevice 736 | idProduct 737 | 13362 738 | idVendor 739 | 5075 740 | 741 | 13d3_3472 742 | 743 | CFBundleIdentifier 744 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 745 | IOClass 746 | BroadcomBluetoothHostControllerUSBTransport 747 | IOProbeScore 748 | 3000 749 | IOProviderClass 750 | IOUSBHostDevice 751 | idProduct 752 | 13426 753 | idVendor 754 | 5075 755 | 756 | 13d3_3474 757 | 758 | CFBundleIdentifier 759 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 760 | IOClass 761 | BroadcomBluetoothHostControllerUSBTransport 762 | IOProbeScore 763 | 3000 764 | IOProviderClass 765 | IOUSBHostDevice 766 | idProduct 767 | 13428 768 | idVendor 769 | 5075 770 | 771 | 13d3_3487 772 | 773 | CFBundleIdentifier 774 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 775 | IOClass 776 | BroadcomBluetoothHostControllerUSBTransport 777 | IOProbeScore 778 | 3000 779 | IOProviderClass 780 | IOUSBHostDevice 781 | idProduct 782 | 13447 783 | idVendor 784 | 5075 785 | 786 | 13d3_3490 787 | 788 | CFBundleIdentifier 789 | com.apple.iokit.BroadcomBluetoothHostControllerUSBTransport 790 | IOClass 791 | BroadcomBluetoothHostControllerUSBTransport 792 | IOProbeScore 793 | 3000 794 | IOProviderClass 795 | IOUSBHostDevice 796 | idProduct 797 | 13456 798 | idVendor 799 | 5075 800 | 801 | 802 | NSHumanReadableCopyright 803 | Copyright © 2020 zxystd. All rights reserved. 804 | OSBundleLibraries 805 | 806 | OSBundleRequired 807 | Root 808 | 809 | 810 | -------------------------------------------------------------------------------- /AthBluetoothFirmware.xcodeproj/project.pbxproj: -------------------------------------------------------------------------------- 1 | // !$*UTF8*$! 2 | { 3 | archiveVersion = 1; 4 | classes = { 5 | }; 6 | objectVersion = 50; 7 | objects = { 8 | 9 | /* Begin PBXBuildFile section */ 10 | F83335B624E42786002A0A08 /* Ath3kBT.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F83335B524E42786002A0A08 /* Ath3kBT.hpp */; }; 11 | F83335B824E42786002A0A08 /* Ath3kBT.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F83335B724E42786002A0A08 /* Ath3kBT.cpp */; }; 12 | F83335D524E428C1002A0A08 /* LinuxTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = F83335D424E428C1002A0A08 /* LinuxTypes.h */; }; 13 | F83335D724E429F3002A0A08 /* FwData.h in Headers */ = {isa = PBXBuildFile; fileRef = F83335D624E429F3002A0A08 /* FwData.h */; }; 14 | F83335DA24E42C42002A0A08 /* AtherosFWService.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F83335D824E42C42002A0A08 /* AtherosFWService.cpp */; }; 15 | F83335DB24E42C42002A0A08 /* AtherosFWService.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F83335D924E42C42002A0A08 /* AtherosFWService.hpp */; }; 16 | F83335F124E4375B002A0A08 /* FwBinary.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F83335EF24E43745002A0A08 /* FwBinary.cpp */; }; 17 | F83335FA24E43F90002A0A08 /* Ath3kBTInjector.hpp in Headers */ = {isa = PBXBuildFile; fileRef = F83335F924E43F90002A0A08 /* Ath3kBTInjector.hpp */; }; 18 | F83335FC24E43F90002A0A08 /* Ath3kBTInjector.cpp in Sources */ = {isa = PBXBuildFile; fileRef = F83335FB24E43F90002A0A08 /* Ath3kBTInjector.cpp */; }; 19 | /* End PBXBuildFile section */ 20 | 21 | /* Begin PBXContainerItemProxy section */ 22 | F83335E324E43221002A0A08 /* PBXContainerItemProxy */ = { 23 | isa = PBXContainerItemProxy; 24 | containerPortal = F833359424E42617002A0A08 /* Project object */; 25 | proxyType = 1; 26 | remoteGlobalIDString = F83335DF24E43208002A0A08; 27 | remoteInfo = ath3kfwgen; 28 | }; 29 | /* End PBXContainerItemProxy section */ 30 | 31 | /* Begin PBXFileReference section */ 32 | F83335B324E42786002A0A08 /* Ath3kBT.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Ath3kBT.kext; sourceTree = BUILT_PRODUCTS_DIR; }; 33 | F83335B524E42786002A0A08 /* Ath3kBT.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Ath3kBT.hpp; sourceTree = ""; }; 34 | F83335B724E42786002A0A08 /* Ath3kBT.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Ath3kBT.cpp; sourceTree = ""; }; 35 | F83335B924E42786002A0A08 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 36 | F83335BD24E427FE002A0A08 /* HCITool.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = HCITool.cpp; sourceTree = ""; }; 37 | F83335BE24E427FE002A0A08 /* HCITool.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = HCITool.hpp; sourceTree = ""; }; 38 | F83335C224E42849002A0A08 /* AthrBT_0x01020200.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = AthrBT_0x01020200.dfu; sourceTree = ""; }; 39 | F83335C324E42849002A0A08 /* ramps_0x31010000_40.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = ramps_0x31010000_40.dfu; sourceTree = ""; }; 40 | F83335C424E42849002A0A08 /* ramps_0x01020201_40.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = ramps_0x01020201_40.dfu; sourceTree = ""; }; 41 | F83335C524E42849002A0A08 /* ramps_0x01020001_26.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = ramps_0x01020001_26.dfu; sourceTree = ""; }; 42 | F83335C624E42849002A0A08 /* AthrBT_0x31010000.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = AthrBT_0x31010000.dfu; sourceTree = ""; }; 43 | F83335C724E42849002A0A08 /* ramps_0x01020201_26.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = ramps_0x01020201_26.dfu; sourceTree = ""; }; 44 | F83335C824E42849002A0A08 /* ramps_0x11020100_40.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = ramps_0x11020100_40.dfu; sourceTree = ""; }; 45 | F83335C924E42849002A0A08 /* ramps_0x01020200_26.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = ramps_0x01020200_26.dfu; sourceTree = ""; }; 46 | F83335CA24E42849002A0A08 /* AthrBT_0x11020100.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = AthrBT_0x11020100.dfu; sourceTree = ""; }; 47 | F83335CB24E4284A002A0A08 /* AthrBT_0x31010100.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = AthrBT_0x31010100.dfu; sourceTree = ""; }; 48 | F83335CC24E4284A002A0A08 /* ramps_0x11020000_40.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = ramps_0x11020000_40.dfu; sourceTree = ""; }; 49 | F83335CD24E4284A002A0A08 /* ramps_0x41020000_40.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = ramps_0x41020000_40.dfu; sourceTree = ""; }; 50 | F83335CE24E4284A002A0A08 /* AthrBT_0x01020001.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = AthrBT_0x01020001.dfu; sourceTree = ""; }; 51 | F83335CF24E4284A002A0A08 /* AthrBT_0x01020201.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = AthrBT_0x01020201.dfu; sourceTree = ""; }; 52 | F83335D024E4284A002A0A08 /* AthrBT_0x41020000.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = AthrBT_0x41020000.dfu; sourceTree = ""; }; 53 | F83335D124E4284A002A0A08 /* ramps_0x31010100_40.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = ramps_0x31010100_40.dfu; sourceTree = ""; }; 54 | F83335D224E4284A002A0A08 /* AthrBT_0x11020000.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = AthrBT_0x11020000.dfu; sourceTree = ""; }; 55 | F83335D324E4284A002A0A08 /* ramps_0x01020200_40.dfu */ = {isa = PBXFileReference; lastKnownFileType = file; path = ramps_0x01020200_40.dfu; sourceTree = ""; }; 56 | F83335D424E428C1002A0A08 /* LinuxTypes.h */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.c.h; path = LinuxTypes.h; sourceTree = ""; }; 57 | F83335D624E429F3002A0A08 /* FwData.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = FwData.h; sourceTree = ""; }; 58 | F83335D824E42C42002A0A08 /* AtherosFWService.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = AtherosFWService.cpp; sourceTree = ""; }; 59 | F83335D924E42C42002A0A08 /* AtherosFWService.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = AtherosFWService.hpp; sourceTree = ""; }; 60 | F83335DE24E431A4002A0A08 /* fw_gen.sh */ = {isa = PBXFileReference; lastKnownFileType = text.script.sh; path = fw_gen.sh; sourceTree = ""; }; 61 | F83335EF24E43745002A0A08 /* FwBinary.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = FwBinary.cpp; sourceTree = ""; }; 62 | F83335F724E43F90002A0A08 /* Ath3kBTInjector.kext */ = {isa = PBXFileReference; explicitFileType = wrapper.cfbundle; includeInIndex = 0; path = Ath3kBTInjector.kext; sourceTree = BUILT_PRODUCTS_DIR; }; 63 | F83335F924E43F90002A0A08 /* Ath3kBTInjector.hpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.h; path = Ath3kBTInjector.hpp; sourceTree = ""; }; 64 | F83335FB24E43F90002A0A08 /* Ath3kBTInjector.cpp */ = {isa = PBXFileReference; lastKnownFileType = sourcecode.cpp.cpp; path = Ath3kBTInjector.cpp; sourceTree = ""; }; 65 | F83335FD24E43F90002A0A08 /* Info.plist */ = {isa = PBXFileReference; lastKnownFileType = text.plist.xml; path = Info.plist; sourceTree = ""; }; 66 | /* End PBXFileReference section */ 67 | 68 | /* Begin PBXFrameworksBuildPhase section */ 69 | F83335B024E42786002A0A08 /* Frameworks */ = { 70 | isa = PBXFrameworksBuildPhase; 71 | buildActionMask = 2147483647; 72 | files = ( 73 | ); 74 | runOnlyForDeploymentPostprocessing = 0; 75 | }; 76 | F83335F424E43F90002A0A08 /* Frameworks */ = { 77 | isa = PBXFrameworksBuildPhase; 78 | buildActionMask = 2147483647; 79 | files = ( 80 | ); 81 | runOnlyForDeploymentPostprocessing = 0; 82 | }; 83 | /* End PBXFrameworksBuildPhase section */ 84 | 85 | /* Begin PBXGroup section */ 86 | F833359324E42617002A0A08 = { 87 | isa = PBXGroup; 88 | children = ( 89 | F833359F24E42617002A0A08 /* AthBluetoothFirmware */, 90 | F83335B424E42786002A0A08 /* Ath3kBT */, 91 | F83335F824E43F90002A0A08 /* Ath3kBTInjector */, 92 | F833359E24E42617002A0A08 /* Products */, 93 | ); 94 | sourceTree = ""; 95 | }; 96 | F833359E24E42617002A0A08 /* Products */ = { 97 | isa = PBXGroup; 98 | children = ( 99 | F83335B324E42786002A0A08 /* Ath3kBT.kext */, 100 | F83335F724E43F90002A0A08 /* Ath3kBTInjector.kext */, 101 | ); 102 | name = Products; 103 | sourceTree = ""; 104 | }; 105 | F833359F24E42617002A0A08 /* AthBluetoothFirmware */ = { 106 | isa = PBXGroup; 107 | children = ( 108 | F83335EF24E43745002A0A08 /* FwBinary.cpp */, 109 | F83335DE24E431A4002A0A08 /* fw_gen.sh */, 110 | F83335DC24E43163002A0A08 /* util */, 111 | F83335D624E429F3002A0A08 /* FwData.h */, 112 | F83335D824E42C42002A0A08 /* AtherosFWService.cpp */, 113 | F83335D924E42C42002A0A08 /* AtherosFWService.hpp */, 114 | ); 115 | path = AthBluetoothFirmware; 116 | sourceTree = ""; 117 | }; 118 | F83335B424E42786002A0A08 /* Ath3kBT */ = { 119 | isa = PBXGroup; 120 | children = ( 121 | F83335E724E433FD002A0A08 /* fw */, 122 | F83335B524E42786002A0A08 /* Ath3kBT.hpp */, 123 | F83335B724E42786002A0A08 /* Ath3kBT.cpp */, 124 | F83335B924E42786002A0A08 /* Info.plist */, 125 | ); 126 | path = Ath3kBT; 127 | sourceTree = ""; 128 | }; 129 | F83335DC24E43163002A0A08 /* util */ = { 130 | isa = PBXGroup; 131 | children = ( 132 | F83335D424E428C1002A0A08 /* LinuxTypes.h */, 133 | F83335BD24E427FE002A0A08 /* HCITool.cpp */, 134 | F83335BE24E427FE002A0A08 /* HCITool.hpp */, 135 | ); 136 | name = util; 137 | sourceTree = ""; 138 | }; 139 | F83335E724E433FD002A0A08 /* fw */ = { 140 | isa = PBXGroup; 141 | children = ( 142 | F83335CE24E4284A002A0A08 /* AthrBT_0x01020001.dfu */, 143 | F83335C224E42849002A0A08 /* AthrBT_0x01020200.dfu */, 144 | F83335CF24E4284A002A0A08 /* AthrBT_0x01020201.dfu */, 145 | F83335D224E4284A002A0A08 /* AthrBT_0x11020000.dfu */, 146 | F83335CA24E42849002A0A08 /* AthrBT_0x11020100.dfu */, 147 | F83335C624E42849002A0A08 /* AthrBT_0x31010000.dfu */, 148 | F83335CB24E4284A002A0A08 /* AthrBT_0x31010100.dfu */, 149 | F83335D024E4284A002A0A08 /* AthrBT_0x41020000.dfu */, 150 | F83335C524E42849002A0A08 /* ramps_0x01020001_26.dfu */, 151 | F83335C924E42849002A0A08 /* ramps_0x01020200_26.dfu */, 152 | F83335D324E4284A002A0A08 /* ramps_0x01020200_40.dfu */, 153 | F83335C724E42849002A0A08 /* ramps_0x01020201_26.dfu */, 154 | F83335C424E42849002A0A08 /* ramps_0x01020201_40.dfu */, 155 | F83335CC24E4284A002A0A08 /* ramps_0x11020000_40.dfu */, 156 | F83335C824E42849002A0A08 /* ramps_0x11020100_40.dfu */, 157 | F83335C324E42849002A0A08 /* ramps_0x31010000_40.dfu */, 158 | F83335D124E4284A002A0A08 /* ramps_0x31010100_40.dfu */, 159 | F83335CD24E4284A002A0A08 /* ramps_0x41020000_40.dfu */, 160 | ); 161 | path = fw; 162 | sourceTree = ""; 163 | }; 164 | F83335F824E43F90002A0A08 /* Ath3kBTInjector */ = { 165 | isa = PBXGroup; 166 | children = ( 167 | F83335F924E43F90002A0A08 /* Ath3kBTInjector.hpp */, 168 | F83335FB24E43F90002A0A08 /* Ath3kBTInjector.cpp */, 169 | F83335FD24E43F90002A0A08 /* Info.plist */, 170 | ); 171 | path = Ath3kBTInjector; 172 | sourceTree = ""; 173 | }; 174 | /* End PBXGroup section */ 175 | 176 | /* Begin PBXHeadersBuildPhase section */ 177 | F83335AE24E42786002A0A08 /* Headers */ = { 178 | isa = PBXHeadersBuildPhase; 179 | buildActionMask = 2147483647; 180 | files = ( 181 | F83335B624E42786002A0A08 /* Ath3kBT.hpp in Headers */, 182 | F83335D524E428C1002A0A08 /* LinuxTypes.h in Headers */, 183 | F83335DB24E42C42002A0A08 /* AtherosFWService.hpp in Headers */, 184 | F83335D724E429F3002A0A08 /* FwData.h in Headers */, 185 | ); 186 | runOnlyForDeploymentPostprocessing = 0; 187 | }; 188 | F83335F224E43F90002A0A08 /* Headers */ = { 189 | isa = PBXHeadersBuildPhase; 190 | buildActionMask = 2147483647; 191 | files = ( 192 | F83335FA24E43F90002A0A08 /* Ath3kBTInjector.hpp in Headers */, 193 | ); 194 | runOnlyForDeploymentPostprocessing = 0; 195 | }; 196 | /* End PBXHeadersBuildPhase section */ 197 | 198 | /* Begin PBXLegacyTarget section */ 199 | F83335DF24E43208002A0A08 /* ath3kfwgen */ = { 200 | isa = PBXLegacyTarget; 201 | buildArgumentsString = "-P ${PROJECT_DIR}/Ath3kBT/fw/*"; 202 | buildConfigurationList = F83335E024E43208002A0A08 /* Build configuration list for PBXLegacyTarget "ath3kfwgen" */; 203 | buildPhases = ( 204 | ); 205 | buildToolPath = "$(PROJECT_DIR)/AthBluetoothFirmware/fw_gen.sh"; 206 | buildWorkingDirectory = ""; 207 | dependencies = ( 208 | ); 209 | name = ath3kfwgen; 210 | passBuildSettingsInEnvironment = 1; 211 | productName = ath3kfwgen; 212 | }; 213 | /* End PBXLegacyTarget section */ 214 | 215 | /* Begin PBXNativeTarget section */ 216 | F83335B224E42786002A0A08 /* Ath3kBT */ = { 217 | isa = PBXNativeTarget; 218 | buildConfigurationList = F83335BA24E42786002A0A08 /* Build configuration list for PBXNativeTarget "Ath3kBT" */; 219 | buildPhases = ( 220 | F83335AE24E42786002A0A08 /* Headers */, 221 | F83335AF24E42786002A0A08 /* Sources */, 222 | F83335B024E42786002A0A08 /* Frameworks */, 223 | F83335B124E42786002A0A08 /* Resources */, 224 | ); 225 | buildRules = ( 226 | ); 227 | dependencies = ( 228 | F83335E424E43221002A0A08 /* PBXTargetDependency */, 229 | ); 230 | name = Ath3kBT; 231 | productName = Ath3kBT; 232 | productReference = F83335B324E42786002A0A08 /* Ath3kBT.kext */; 233 | productType = "com.apple.product-type.kernel-extension"; 234 | }; 235 | F83335F624E43F90002A0A08 /* Ath3kBTInjector */ = { 236 | isa = PBXNativeTarget; 237 | buildConfigurationList = F83335FE24E43F90002A0A08 /* Build configuration list for PBXNativeTarget "Ath3kBTInjector" */; 238 | buildPhases = ( 239 | F83335F224E43F90002A0A08 /* Headers */, 240 | F83335F324E43F90002A0A08 /* Sources */, 241 | F83335F424E43F90002A0A08 /* Frameworks */, 242 | F83335F524E43F90002A0A08 /* Resources */, 243 | ); 244 | buildRules = ( 245 | ); 246 | dependencies = ( 247 | ); 248 | name = Ath3kBTInjector; 249 | productName = Ath3kBTInjector; 250 | productReference = F83335F724E43F90002A0A08 /* Ath3kBTInjector.kext */; 251 | productType = "com.apple.product-type.kernel-extension"; 252 | }; 253 | /* End PBXNativeTarget section */ 254 | 255 | /* Begin PBXProject section */ 256 | F833359424E42617002A0A08 /* Project object */ = { 257 | isa = PBXProject; 258 | attributes = { 259 | LastUpgradeCheck = 1160; 260 | ORGANIZATIONNAME = zxystd; 261 | TargetAttributes = { 262 | F83335B224E42786002A0A08 = { 263 | CreatedOnToolsVersion = 11.6; 264 | }; 265 | F83335DF24E43208002A0A08 = { 266 | CreatedOnToolsVersion = 11.6; 267 | }; 268 | F83335F624E43F90002A0A08 = { 269 | CreatedOnToolsVersion = 11.6; 270 | }; 271 | }; 272 | }; 273 | buildConfigurationList = F833359724E42617002A0A08 /* Build configuration list for PBXProject "AthBluetoothFirmware" */; 274 | compatibilityVersion = "Xcode 9.3"; 275 | developmentRegion = en; 276 | hasScannedForEncodings = 0; 277 | knownRegions = ( 278 | en, 279 | Base, 280 | ); 281 | mainGroup = F833359324E42617002A0A08; 282 | productRefGroup = F833359E24E42617002A0A08 /* Products */; 283 | projectDirPath = ""; 284 | projectRoot = ""; 285 | targets = ( 286 | F83335B224E42786002A0A08 /* Ath3kBT */, 287 | F83335DF24E43208002A0A08 /* ath3kfwgen */, 288 | F83335F624E43F90002A0A08 /* Ath3kBTInjector */, 289 | ); 290 | }; 291 | /* End PBXProject section */ 292 | 293 | /* Begin PBXResourcesBuildPhase section */ 294 | F83335B124E42786002A0A08 /* Resources */ = { 295 | isa = PBXResourcesBuildPhase; 296 | buildActionMask = 2147483647; 297 | files = ( 298 | ); 299 | runOnlyForDeploymentPostprocessing = 0; 300 | }; 301 | F83335F524E43F90002A0A08 /* Resources */ = { 302 | isa = PBXResourcesBuildPhase; 303 | buildActionMask = 2147483647; 304 | files = ( 305 | ); 306 | runOnlyForDeploymentPostprocessing = 0; 307 | }; 308 | /* End PBXResourcesBuildPhase section */ 309 | 310 | /* Begin PBXSourcesBuildPhase section */ 311 | F83335AF24E42786002A0A08 /* Sources */ = { 312 | isa = PBXSourcesBuildPhase; 313 | buildActionMask = 2147483647; 314 | files = ( 315 | F83335F124E4375B002A0A08 /* FwBinary.cpp in Sources */, 316 | F83335B824E42786002A0A08 /* Ath3kBT.cpp in Sources */, 317 | F83335DA24E42C42002A0A08 /* AtherosFWService.cpp in Sources */, 318 | ); 319 | runOnlyForDeploymentPostprocessing = 0; 320 | }; 321 | F83335F324E43F90002A0A08 /* Sources */ = { 322 | isa = PBXSourcesBuildPhase; 323 | buildActionMask = 2147483647; 324 | files = ( 325 | F83335FC24E43F90002A0A08 /* Ath3kBTInjector.cpp in Sources */, 326 | ); 327 | runOnlyForDeploymentPostprocessing = 0; 328 | }; 329 | /* End PBXSourcesBuildPhase section */ 330 | 331 | /* Begin PBXTargetDependency section */ 332 | F83335E424E43221002A0A08 /* PBXTargetDependency */ = { 333 | isa = PBXTargetDependency; 334 | target = F83335DF24E43208002A0A08 /* ath3kfwgen */; 335 | targetProxy = F83335E324E43221002A0A08 /* PBXContainerItemProxy */; 336 | }; 337 | /* End PBXTargetDependency section */ 338 | 339 | /* Begin XCBuildConfiguration section */ 340 | F83335A524E42617002A0A08 /* Debug */ = { 341 | isa = XCBuildConfiguration; 342 | buildSettings = { 343 | ALWAYS_SEARCH_USER_PATHS = NO; 344 | CLANG_ANALYZER_NONNULL = YES; 345 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 346 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 347 | CLANG_CXX_LIBRARY = "libc++"; 348 | CLANG_ENABLE_MODULES = YES; 349 | CLANG_ENABLE_OBJC_ARC = YES; 350 | CLANG_ENABLE_OBJC_WEAK = YES; 351 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 352 | CLANG_WARN_BOOL_CONVERSION = YES; 353 | CLANG_WARN_COMMA = YES; 354 | CLANG_WARN_CONSTANT_CONVERSION = YES; 355 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 356 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 357 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 358 | CLANG_WARN_EMPTY_BODY = YES; 359 | CLANG_WARN_ENUM_CONVERSION = YES; 360 | CLANG_WARN_INFINITE_RECURSION = YES; 361 | CLANG_WARN_INT_CONVERSION = YES; 362 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 363 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 364 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 365 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 366 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 367 | CLANG_WARN_STRICT_PROTOTYPES = YES; 368 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 369 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 370 | CLANG_WARN_UNREACHABLE_CODE = YES; 371 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 372 | COPY_PHASE_STRIP = NO; 373 | DEBUG_INFORMATION_FORMAT = dwarf; 374 | ENABLE_STRICT_OBJC_MSGSEND = YES; 375 | ENABLE_TESTABILITY = YES; 376 | GCC_C_LANGUAGE_STANDARD = gnu11; 377 | GCC_DYNAMIC_NO_PIC = NO; 378 | GCC_NO_COMMON_BLOCKS = YES; 379 | GCC_OPTIMIZATION_LEVEL = 0; 380 | GCC_PREPROCESSOR_DEFINITIONS = ( 381 | "DEBUG=1", 382 | "$(inherited)", 383 | ); 384 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 385 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 386 | GCC_WARN_UNDECLARED_SELECTOR = YES; 387 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 388 | GCC_WARN_UNUSED_FUNCTION = YES; 389 | GCC_WARN_UNUSED_VARIABLE = YES; 390 | MACOSX_DEPLOYMENT_TARGET = 10.15; 391 | MTL_ENABLE_DEBUG_INFO = INCLUDE_SOURCE; 392 | MTL_FAST_MATH = YES; 393 | ONLY_ACTIVE_ARCH = YES; 394 | SDKROOT = macosx; 395 | }; 396 | name = Debug; 397 | }; 398 | F83335A624E42617002A0A08 /* Release */ = { 399 | isa = XCBuildConfiguration; 400 | buildSettings = { 401 | ALWAYS_SEARCH_USER_PATHS = NO; 402 | CLANG_ANALYZER_NONNULL = YES; 403 | CLANG_ANALYZER_NUMBER_OBJECT_CONVERSION = YES_AGGRESSIVE; 404 | CLANG_CXX_LANGUAGE_STANDARD = "gnu++14"; 405 | CLANG_CXX_LIBRARY = "libc++"; 406 | CLANG_ENABLE_MODULES = YES; 407 | CLANG_ENABLE_OBJC_ARC = YES; 408 | CLANG_ENABLE_OBJC_WEAK = YES; 409 | CLANG_WARN_BLOCK_CAPTURE_AUTORELEASING = YES; 410 | CLANG_WARN_BOOL_CONVERSION = YES; 411 | CLANG_WARN_COMMA = YES; 412 | CLANG_WARN_CONSTANT_CONVERSION = YES; 413 | CLANG_WARN_DEPRECATED_OBJC_IMPLEMENTATIONS = YES; 414 | CLANG_WARN_DIRECT_OBJC_ISA_USAGE = YES_ERROR; 415 | CLANG_WARN_DOCUMENTATION_COMMENTS = YES; 416 | CLANG_WARN_EMPTY_BODY = YES; 417 | CLANG_WARN_ENUM_CONVERSION = YES; 418 | CLANG_WARN_INFINITE_RECURSION = YES; 419 | CLANG_WARN_INT_CONVERSION = YES; 420 | CLANG_WARN_NON_LITERAL_NULL_CONVERSION = YES; 421 | CLANG_WARN_OBJC_IMPLICIT_RETAIN_SELF = YES; 422 | CLANG_WARN_OBJC_LITERAL_CONVERSION = YES; 423 | CLANG_WARN_OBJC_ROOT_CLASS = YES_ERROR; 424 | CLANG_WARN_RANGE_LOOP_ANALYSIS = YES; 425 | CLANG_WARN_STRICT_PROTOTYPES = YES; 426 | CLANG_WARN_SUSPICIOUS_MOVE = YES; 427 | CLANG_WARN_UNGUARDED_AVAILABILITY = YES_AGGRESSIVE; 428 | CLANG_WARN_UNREACHABLE_CODE = YES; 429 | CLANG_WARN__DUPLICATE_METHOD_MATCH = YES; 430 | COPY_PHASE_STRIP = NO; 431 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 432 | ENABLE_NS_ASSERTIONS = NO; 433 | ENABLE_STRICT_OBJC_MSGSEND = YES; 434 | GCC_C_LANGUAGE_STANDARD = gnu11; 435 | GCC_NO_COMMON_BLOCKS = YES; 436 | GCC_WARN_64_TO_32_BIT_CONVERSION = YES; 437 | GCC_WARN_ABOUT_RETURN_TYPE = YES_ERROR; 438 | GCC_WARN_UNDECLARED_SELECTOR = YES; 439 | GCC_WARN_UNINITIALIZED_AUTOS = YES_AGGRESSIVE; 440 | GCC_WARN_UNUSED_FUNCTION = YES; 441 | GCC_WARN_UNUSED_VARIABLE = YES; 442 | MACOSX_DEPLOYMENT_TARGET = 10.15; 443 | MTL_ENABLE_DEBUG_INFO = NO; 444 | MTL_FAST_MATH = YES; 445 | SDKROOT = macosx; 446 | }; 447 | name = Release; 448 | }; 449 | F83335BB24E42786002A0A08 /* Debug */ = { 450 | isa = XCBuildConfiguration; 451 | buildSettings = { 452 | CODE_SIGN_IDENTITY = ""; 453 | CODE_SIGN_STYLE = Manual; 454 | COMBINE_HIDPI_IMAGES = YES; 455 | CURRENT_PROJECT_VERSION = 1.1.0; 456 | DEVELOPMENT_TEAM = ""; 457 | INFOPLIST_FILE = Ath3kBT/Info.plist; 458 | MACOSX_DEPLOYMENT_TARGET = 10.15; 459 | MARKETING_VERSION = 1.1.0; 460 | MODULE_NAME = com.zxystd.Ath3kBT; 461 | MODULE_VERSION = 1.0.0d1; 462 | PRODUCT_BUNDLE_IDENTIFIER = com.zxystd.Ath3kBT; 463 | PRODUCT_NAME = "$(TARGET_NAME)"; 464 | PROVISIONING_PROFILE_SPECIFIER = ""; 465 | SDKROOT = macosx; 466 | WRAPPER_EXTENSION = kext; 467 | }; 468 | name = Debug; 469 | }; 470 | F83335BC24E42786002A0A08 /* Release */ = { 471 | isa = XCBuildConfiguration; 472 | buildSettings = { 473 | CODE_SIGN_IDENTITY = ""; 474 | CODE_SIGN_STYLE = Manual; 475 | COMBINE_HIDPI_IMAGES = YES; 476 | CURRENT_PROJECT_VERSION = 1.1.0; 477 | DEVELOPMENT_TEAM = ""; 478 | INFOPLIST_FILE = Ath3kBT/Info.plist; 479 | MACOSX_DEPLOYMENT_TARGET = 10.15; 480 | MARKETING_VERSION = 1.1.0; 481 | MODULE_NAME = com.zxystd.Ath3kBT; 482 | MODULE_VERSION = 1.0.0d1; 483 | PRODUCT_BUNDLE_IDENTIFIER = com.zxystd.Ath3kBT; 484 | PRODUCT_NAME = "$(TARGET_NAME)"; 485 | PROVISIONING_PROFILE_SPECIFIER = ""; 486 | SDKROOT = macosx; 487 | WRAPPER_EXTENSION = kext; 488 | }; 489 | name = Release; 490 | }; 491 | F83335E124E43208002A0A08 /* Debug */ = { 492 | isa = XCBuildConfiguration; 493 | buildSettings = { 494 | CODE_SIGN_STYLE = Automatic; 495 | DEBUGGING_SYMBOLS = YES; 496 | DEBUG_INFORMATION_FORMAT = dwarf; 497 | GCC_GENERATE_DEBUGGING_SYMBOLS = YES; 498 | GCC_OPTIMIZATION_LEVEL = 0; 499 | OTHER_CFLAGS = ""; 500 | OTHER_LDFLAGS = ""; 501 | PRODUCT_NAME = "$(TARGET_NAME)"; 502 | }; 503 | name = Debug; 504 | }; 505 | F83335E224E43208002A0A08 /* Release */ = { 506 | isa = XCBuildConfiguration; 507 | buildSettings = { 508 | CODE_SIGN_STYLE = Automatic; 509 | DEBUG_INFORMATION_FORMAT = "dwarf-with-dsym"; 510 | OTHER_CFLAGS = ""; 511 | OTHER_LDFLAGS = ""; 512 | PRODUCT_NAME = "$(TARGET_NAME)"; 513 | }; 514 | name = Release; 515 | }; 516 | F83335FF24E43F90002A0A08 /* Debug */ = { 517 | isa = XCBuildConfiguration; 518 | buildSettings = { 519 | CODE_SIGN_IDENTITY = ""; 520 | CODE_SIGN_STYLE = Manual; 521 | COMBINE_HIDPI_IMAGES = YES; 522 | CURRENT_PROJECT_VERSION = 1.0.0; 523 | DEVELOPMENT_TEAM = ""; 524 | INFOPLIST_FILE = Ath3kBTInjector/Info.plist; 525 | MACOSX_DEPLOYMENT_TARGET = 10.15; 526 | MARKETING_VERSION = 1.0.0; 527 | MODULE_NAME = com.zxystd.Ath3kBTInjector; 528 | MODULE_VERSION = 1.0.0d1; 529 | PRODUCT_BUNDLE_IDENTIFIER = com.zxystd.Ath3kBTInjector; 530 | PRODUCT_NAME = "$(TARGET_NAME)"; 531 | PROVISIONING_PROFILE_SPECIFIER = ""; 532 | WRAPPER_EXTENSION = kext; 533 | }; 534 | name = Debug; 535 | }; 536 | F833360024E43F90002A0A08 /* Release */ = { 537 | isa = XCBuildConfiguration; 538 | buildSettings = { 539 | CODE_SIGN_IDENTITY = ""; 540 | CODE_SIGN_STYLE = Manual; 541 | COMBINE_HIDPI_IMAGES = YES; 542 | CURRENT_PROJECT_VERSION = 1.0.0; 543 | DEVELOPMENT_TEAM = ""; 544 | INFOPLIST_FILE = Ath3kBTInjector/Info.plist; 545 | MACOSX_DEPLOYMENT_TARGET = 10.15; 546 | MARKETING_VERSION = 1.0.0; 547 | MODULE_NAME = com.zxystd.Ath3kBTInjector; 548 | MODULE_VERSION = 1.0.0d1; 549 | PRODUCT_BUNDLE_IDENTIFIER = com.zxystd.Ath3kBTInjector; 550 | PRODUCT_NAME = "$(TARGET_NAME)"; 551 | PROVISIONING_PROFILE_SPECIFIER = ""; 552 | WRAPPER_EXTENSION = kext; 553 | }; 554 | name = Release; 555 | }; 556 | /* End XCBuildConfiguration section */ 557 | 558 | /* Begin XCConfigurationList section */ 559 | F833359724E42617002A0A08 /* Build configuration list for PBXProject "AthBluetoothFirmware" */ = { 560 | isa = XCConfigurationList; 561 | buildConfigurations = ( 562 | F83335A524E42617002A0A08 /* Debug */, 563 | F83335A624E42617002A0A08 /* Release */, 564 | ); 565 | defaultConfigurationIsVisible = 0; 566 | defaultConfigurationName = Release; 567 | }; 568 | F83335BA24E42786002A0A08 /* Build configuration list for PBXNativeTarget "Ath3kBT" */ = { 569 | isa = XCConfigurationList; 570 | buildConfigurations = ( 571 | F83335BB24E42786002A0A08 /* Debug */, 572 | F83335BC24E42786002A0A08 /* Release */, 573 | ); 574 | defaultConfigurationIsVisible = 0; 575 | defaultConfigurationName = Release; 576 | }; 577 | F83335E024E43208002A0A08 /* Build configuration list for PBXLegacyTarget "ath3kfwgen" */ = { 578 | isa = XCConfigurationList; 579 | buildConfigurations = ( 580 | F83335E124E43208002A0A08 /* Debug */, 581 | F83335E224E43208002A0A08 /* Release */, 582 | ); 583 | defaultConfigurationIsVisible = 0; 584 | defaultConfigurationName = Release; 585 | }; 586 | F83335FE24E43F90002A0A08 /* Build configuration list for PBXNativeTarget "Ath3kBTInjector" */ = { 587 | isa = XCConfigurationList; 588 | buildConfigurations = ( 589 | F83335FF24E43F90002A0A08 /* Debug */, 590 | F833360024E43F90002A0A08 /* Release */, 591 | ); 592 | defaultConfigurationIsVisible = 0; 593 | defaultConfigurationName = Release; 594 | }; 595 | /* End XCConfigurationList section */ 596 | }; 597 | rootObject = F833359424E42617002A0A08 /* Project object */; 598 | } 599 | -------------------------------------------------------------------------------- /AthBluetoothFirmware/AtherosFWService.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // AtherosFWService.cpp 3 | // Ath3kBT 4 | // 5 | // Created by qcwap on 2020/8/12. 6 | // Copyright © 2020 zxystd. All rights reserved. 7 | // 8 | 9 | #include "AtherosFWService.hpp" 10 | 11 | #define super IOService 12 | OSDefineMetaClassAndStructors(AtherosFWService, IOService) 13 | -------------------------------------------------------------------------------- /AthBluetoothFirmware/AtherosFWService.hpp: -------------------------------------------------------------------------------- 1 | // 2 | // AtherosFWService.hpp 3 | // Ath3kBT 4 | // 5 | // Created by qcwap on 2020/8/12. 6 | // Copyright © 2020 zxystd. All rights reserved. 7 | // 8 | 9 | #include 10 | #include 11 | 12 | #include "LinuxTypes.h" 13 | 14 | #ifndef AtherosFWService_hpp 15 | #define AtherosFWService_hpp 16 | 17 | class AtherosFWService : public IOService { 18 | OSDeclareDefaultStructors(AtherosFWService) 19 | }; 20 | 21 | #endif /* AtherosFWService_hpp */ 22 | -------------------------------------------------------------------------------- /AthBluetoothFirmware/FwData.h: -------------------------------------------------------------------------------- 1 | // 2 | // FwData.h 3 | // AthBluetoothFirmware 4 | // 5 | // Created by qcwap on 2020/8/12. 6 | // 7 | 8 | #ifndef FwData_h 9 | #define FwData_h 10 | 11 | #include 12 | #include 13 | 14 | struct FwDesc { 15 | const char *name; 16 | const unsigned char *var; 17 | const long int size; 18 | }; 19 | 20 | #define IWL_FW(fw_name, fw_var, fw_size) \ 21 | .name = fw_name, .var = fw_var, .size = fw_size 22 | 23 | 24 | extern const struct FwDesc fwList[]; 25 | extern const int fwNumber; 26 | 27 | static inline OSData *getFWDescByName(const char* name) { 28 | for (int i = 0; i < fwNumber; i++) { 29 | if (strcmp(fwList[i].name, name) == 0) { 30 | FwDesc desc = fwList[i]; 31 | return OSData::withBytes(desc.var, desc.size); 32 | } 33 | } 34 | return NULL; 35 | } 36 | 37 | #endif /* FwData_h */ 38 | -------------------------------------------------------------------------------- /AthBluetoothFirmware/HCITool.cpp: -------------------------------------------------------------------------------- 1 | // 2 | // HCITool.cpp 3 | // AthBluetoothFirmware 4 | // 5 | // Created by qcwap on 2020/8/12. 6 | // Copyright © 2020 zxystd. All rights reserved. 7 | // 8 | 9 | #include "HCITool.hpp" 10 | -------------------------------------------------------------------------------- /AthBluetoothFirmware/HCITool.hpp: -------------------------------------------------------------------------------- 1 | // 2 | // HCITool.hpp 3 | // AthBluetoothFirmware 4 | // 5 | // Created by qcwap on 2020/8/12. 6 | // Copyright © 2020 zxystd. All rights reserved. 7 | // 8 | 9 | #ifndef HCITool_hpp 10 | #define HCITool_hpp 11 | 12 | #endif /* HCITool_hpp */ 13 | -------------------------------------------------------------------------------- /AthBluetoothFirmware/LinuxTypes.h: -------------------------------------------------------------------------------- 1 | // 2 | // LinuxTypes.h 3 | // Ath3kBT 4 | // 5 | // Created by qcwap on 2020/8/12. 6 | // Copyright © 2020 zxystd. All rights reserved. 7 | // 8 | 9 | #ifndef LinuxTypes_h 10 | #define LinuxTypes_h 11 | 12 | typedef UInt8 u8; 13 | typedef UInt16 u16; 14 | typedef UInt32 u32; 15 | typedef UInt64 u64; 16 | 17 | typedef u8 __u8; 18 | typedef u16 __u16; 19 | typedef u32 __u32; 20 | typedef u64 __u64; 21 | 22 | typedef SInt16 __be16; 23 | typedef SInt32 __be32; 24 | typedef SInt64 __be64; 25 | typedef SInt16 __le16; 26 | typedef SInt32 __le32; 27 | typedef SInt64 __le64; 28 | 29 | typedef SInt8 s8; 30 | typedef SInt16 s16; 31 | typedef SInt32 s32; 32 | typedef SInt64 s64; 33 | 34 | typedef s8 __s8; 35 | typedef s16 __s16; 36 | typedef s32 __s32; 37 | typedef s64 __s64; 38 | 39 | #define __force 40 | #define __le32_to_cpu(x) ((__force __u32)(__le32)(x)) 41 | 42 | #define ARRAY_SIZE(arr) (sizeof(arr) / sizeof((arr)[0])) 43 | 44 | static inline __u32 __le32_to_cpup(const __le32 *p) 45 | { 46 | return (__force __u32)*p; 47 | } 48 | 49 | static inline u32 get_unaligned_le32(const void *p) 50 | { 51 | return __le32_to_cpup((__le32 *)p); 52 | } 53 | 54 | #endif /* LinuxTypes_h */ 55 | -------------------------------------------------------------------------------- /AthBluetoothFirmware/fw_gen.sh: -------------------------------------------------------------------------------- 1 | #!/bin/sh 2 | 3 | # fw_gen.sh 4 | # AthBluetoothFirmware 5 | # 6 | # Copyright © 2020 钟先耀. All rights reserved. 7 | target_file="${PROJECT_DIR}/AthBluetoothFirmware/FwBinary.cpp" 8 | while [ $# -gt 0 ]; 9 | do 10 | case $1 in 11 | -P) fw_files=$2 12 | shift 13 | ;; 14 | 15 | esac 16 | shift 17 | done 18 | 19 | echo "// itlwm\n\n// Copyright © 2020 钟先耀. All rights reserved." >$target_file 20 | echo "#include \"FwData.h\"">>$target_file 21 | 22 | for fw in $fw_files; do 23 | fw_file_name=`basename $fw` 24 | fw_var_name=${fw_file_name//./_} 25 | fw_var_name=${fw_var_name//-/_} 26 | echo "">>$target_file 27 | echo "const unsigned char ${fw_var_name}[] = {">>$target_file 28 | xxd -i <$fw >>$target_file 29 | echo "};">>$target_file 30 | echo "">>$target_file 31 | echo "const long int ${fw_var_name}_size = sizeof(${fw_var_name});">>$target_file 32 | done 33 | 34 | echo "">>$target_file 35 | 36 | echo "const struct FwDesc fwList[] = {">>$target_file 37 | i=0; 38 | for fw in $fw_files; do 39 | fw_file_name=`basename $fw` 40 | fw_var_name=${fw_file_name//./_} 41 | fw_var_name=${fw_var_name//-/_} 42 | echo "{IWL_FW(\"$fw_file_name\", $fw_var_name, ${fw_var_name}_size)},">>$target_file 43 | let i+=1 44 | done 45 | echo "};">>$target_file 46 | echo "const int fwNumber = $i;">>$target_file 47 | -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | BSD 3-Clause License 2 | 3 | Copyright (c) 2020, zxystd 4 | All rights reserved. 5 | 6 | Redistribution and use in source and binary forms, with or without 7 | modification, are permitted provided that the following conditions are met: 8 | 9 | 1. Redistributions of source code must retain the above copyright notice, this 10 | list of conditions and the following disclaimer. 11 | 12 | 2. Redistributions in binary form must reproduce the above copyright notice, 13 | this list of conditions and the following disclaimer in the documentation 14 | and/or other materials provided with the distribution. 15 | 16 | 3. Neither the name of the copyright holder nor the names of its 17 | contributors may be used to endorse or promote products derived from 18 | this software without specific prior written permission. 19 | 20 | THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" 21 | AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 22 | IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE 23 | DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE 24 | FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 25 | DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR 26 | SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER 27 | CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, 28 | OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE 29 | OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 30 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # AthBluetoothFirmware 2 | Atheros Bluetooth Firmware uploader driver for macOS 3 | --------------------------------------------------------------------------------