AppleSmartBatteryManager.h [plain text]
#ifndef __AppleSmartBatteryManager__
#define __AppleSmartBatteryManager__
#include <IOKit/IOService.h>
#include <IOKit/smbus/IOSMBusController.h>
#include "AppleSmartBattery.h"
#include "AppleSmartBatteryManagerUserClient.h"
void BattLog(const char *fmt, ...);
class AppleSmartBattery;
class AppleSmartBatteryManagerUserClient;
enum {
kEXDefaultBatterySelector = 0,
kEXManagerSelector = 1
};
enum {
kEXReadWord = 0,
kEXWriteWord = 1,
kEXReadBlock = 2,
kEXWriteBlock = 3,
kEXReadByte = 4,
kEXWriteByte = 5,
kEXSendByte = 6
};
enum {
kEXFlagRetry = 1
};
#define MAX_SMBUS_DATA_SIZE 32
typedef struct {
uint8_t flags;
uint8_t type;
uint8_t batterySelector;
uint8_t address;
uint8_t inByteCount;
uint8_t inBuf[MAX_SMBUS_DATA_SIZE];
} EXSMBUSInputStruct;
typedef struct {
uint32_t status;
uint32_t outByteCount;
uint32_t outBuf[MAX_SMBUS_DATA_SIZE];
} EXSMBUSOutputStruct;
class AppleSmartBatteryManager : public IOService {
friend class AppleSmartBatteryManagerUserClient;
OSDeclareDefaultStructors(AppleSmartBatteryManager)
public:
bool start(IOService *provider);
IOReturn performTransaction(IOSMBusTransaction * transaction,
IOSMBusTransactionCompletion completion = 0,
OSObject * target = 0,
void * reference = 0);
IOReturn setPowerState(unsigned long which, IOService *whom);
IOReturn message(UInt32 type, IOService *provider, void * argument);
void handleFullDischarge(void);
bool requestExclusiveSMBusAccess(bool request);
private:
IOReturn inhibitCharging(int level);
IOReturn disableInflow(int level);
IOReturn setPollingInterval(int milliSeconds);
IOReturn performExternalTransaction(
void *in, void *out, IOByteCount inSize,
IOByteCount *outSize);
IOReturn performExternalTransactionGated(void *arg0, void *arg1,
void *arg2, void *arg3);
void gatedSendCommand(int cmd, int level, IOReturn *ret_code);
bool transactionCompletion(void *ref, IOSMBusTransaction *transaction);
private:
IOSMBusTransaction fTransaction;
IOCommandGate * fBatteryGate;
IOCommandGate * fManagerGate;
IOSMBusController * fProvider;
AppleSmartBattery * fBattery;
bool fExclusiveUserClient;
};
#endif