openmohaa/code/gamespy/Voice2/gvDevice.c

115 lines
2.1 KiB
C
Raw Permalink Normal View History

2023-02-04 21:00:01 +01:00
#include "gvDevice.h"
/***********
** DEVICE **
***********/
GVIDevice * gviNewDevice(GVDeviceID deviceID, GVHardwareType hardwareType, GVDeviceType types, int dataSize)
{
GVIDevice * device;
device = (GVIDevice *)gsimalloc(sizeof(GVIDevice));
if(!device)
return NULL;
memset(device, 0, sizeof(GVIDevice));
memcpy(&device->m_deviceID, &deviceID, sizeof(GVDeviceID));
device->m_hardwareType = hardwareType;
device->m_types = types;
device->m_data = gsimalloc((unsigned int)dataSize);
if(!device->m_data)
{
gsifree(device);
return NULL;
}
memset(device->m_data, 0, (unsigned int)dataSize);
return device;
}
void gviFreeDevice(GVIDevice * device)
{
gsifree(device->m_data);
gsifree(device);
}
void gviDeviceUnplugged(GVIDevice * device)
{
// if they don't have a callback, we can't free the device without them knowing
if(!device->m_unpluggedCallback)
return;
// let them know it was unplugged...
device->m_unpluggedCallback(device);
// ...then free the device
device->m_methods.m_freeDevice(device);
}
/****************
** DEVICE LIST **
****************/
static int gviFindDeviceIndex(GVIDeviceList devices, GVIDevice * device)
{
int len;
int i;
assert(devices);
len = ArrayLength(devices);
for(i = 0 ; i < len ; i++)
{
if(device == gviGetDevice(devices, i))
return i;
}
return -1;
}
GVIDeviceList gviNewDeviceList(ArrayElementFreeFn elemFreeFn)
{
return ArrayNew(sizeof(GVIDevice *), 2, elemFreeFn);
}
void gviFreeDeviceList(GVIDeviceList devices)
{
assert(devices);
ArrayFree(devices);
}
void gviAppendDeviceToList(GVIDeviceList devices, GVIDevice * device)
{
assert(devices);
ArrayAppend(devices, &device);
}
void gviDeleteDeviceFromList(GVIDeviceList devices, GVIDevice * device)
{
int index;
assert(devices);
// find the device
index = gviFindDeviceIndex(devices, device);
if(index == -1)
return;
// delete it from the array
ArrayDeleteAt(devices, index);
}
int gviGetNumDevices(GVIDeviceList devices)
{
assert(devices);
return ArrayLength(devices);
}
GVIDevice * gviGetDevice(GVIDeviceList devices, int index)
{
assert(devices);
return *(GVIDevice **)ArrayNth(devices, index);
}