Files
QualcommWireless/QualcommWireless/QualcommWireless.hpp
T
2026-10-15 18:07:10 +02:00

52 lines
1.5 KiB
C++

#ifndef _QUALCOMMWIRELESS_HPP
#define _QUALCOMMWIRELESS_HPP
#pragma clang diagnostic push
#pragma clang diagnostic ignored "-Wdeprecated-declarations"
#include <IOKit/IOService.h>
#include <IOKit/usb/IOUSBHostDevice.h>
#include <IOKit/usb/IOUSBHostInterface.h>
#include <IOKit/usb/IOUSBHostPipe.h>
#include <IOKit/IOBufferMemoryDescriptor.h>
#define QCA_GET_TARGET_VERSION 0x09
#define QCA_CHECK_STATUS 0x05
#define QCA_DFU_DOWNLOAD 0x01
#define QCA_DFU_PACKET_LEN 4096
struct qca_version {
uint32_t rom_version;
uint32_t patch_version;
uint32_t ram_version;
uint8_t chip_id;
uint8_t platform_id;
uint16_t flag;
uint8_t reserved[4];
} __attribute__((packed));
class QualcommWireless : public IOService {
OSDeclareDefaultStructors(QualcommWireless)
private:
IOUSBHostDevice *fDevice;
IOUSBHostInterface *fInterface;
IOUSBHostPipe *fBulkOutPipe;
IOUSBHostPipe *fIntrInPipe;
IOBufferMemoryDescriptor *fBulkBuffer;
uint8_t checkStatus(void);
bool queryTargetVersion(struct qca_version *verOut);
bool downloadFirmware(const uint8_t *data, size_t size, size_t hdrSize);
bool sendHciReset(void);
public:
virtual bool init(OSDictionary *dictionary = 0) override;
virtual void free(void) override;
virtual IOService *probe(IOService *provider, SInt32 *score) override;
virtual bool start(IOService *provider) override;
virtual void stop(IOService *provider) override;
};
#endif