#include "UtilityRoutines.h"
kern_return_t doCommand(io_connect_t con, unsigned char commandID, void *inputData, unsigned long inputDataSize, void *outputData, size_t *outputDataSize)
{
kern_return_t err = KERN_SUCCESS;
IrDACommandPtr command = NULL;
command = (IrDACommandPtr)malloc (inputDataSize + sizeof (unsigned char));
if (!command)
return KERN_FAILURE;
command->commandID = commandID;
if ((inputData != NULL) && (inputDataSize != 0))
memcpy(command->data, inputData, inputDataSize);
err = IOConnectCallStructMethod(
con,
0,
(char *) command,
inputDataSize+sizeof(unsigned char),
(char *) outputData,
outputDataSize);
free (command);
return err;
}
io_object_t getInterfaceWithName(mach_port_t masterPort, char *className)
{
kern_return_t kr;
io_iterator_t ite;
io_object_t obj = 0;
kr = IORegistryCreateIterator(masterPort, kIOServicePlane, true, &ite);
if (kr != kIOReturnSuccess) {
printf("IORegistryCreateIterator() error %08lx\n", (unsigned long)kr);
return 0;
}
while ((obj = IOIteratorNext(ite))) {
if (IOObjectConformsTo(obj, (char *) className)) {
break;
}
else {
io_name_t name;
kern_return_t rc;
rc = IOObjectGetClass(obj, name);
}
IOObjectRelease(obj);
obj = 0;
}
IOObjectRelease(ite);
return obj;
}