80 lines
1.6 KiB
C
80 lines
1.6 KiB
C
#include <string.h>
|
|
#include <wchar.h>
|
|
|
|
#include "geninput/dev-list.h"
|
|
#include "geninput/hid.h"
|
|
|
|
#include "util/log.h"
|
|
#include "util/str.h"
|
|
|
|
wchar_t *hid_ri_init_name(const GUID *class_guid, const char *dev_node)
|
|
{
|
|
struct dev_list devs;
|
|
wchar_t *name;
|
|
|
|
dev_list_init(&devs, class_guid);
|
|
|
|
name = NULL;
|
|
|
|
while (dev_list_next(&devs)) {
|
|
if (_stricmp(dev_list_get_dev_node(&devs), dev_node) == 0) {
|
|
name = wstr_dup(dev_list_get_dev_name(&devs));
|
|
|
|
break;
|
|
}
|
|
}
|
|
|
|
if (name == NULL) {
|
|
/* Shouldn't ever happen, but... */
|
|
name = wstr_dup(L"???");
|
|
}
|
|
|
|
dev_list_fini(&devs);
|
|
|
|
return name;
|
|
}
|
|
|
|
bool hid_ri_get_name(wchar_t *chars, size_t *nchars, const wchar_t *src_chars)
|
|
{
|
|
size_t len;
|
|
|
|
log_assert(nchars != NULL);
|
|
|
|
len = src_chars != NULL ? wcslen(src_chars) + 1 : 0;
|
|
|
|
if (chars == NULL) {
|
|
*nchars = len;
|
|
|
|
return true;
|
|
} else if (*nchars >= len) {
|
|
memcpy(chars, src_chars, len * sizeof(wchar_t));
|
|
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|
|
|
|
bool hid_ri_get_controls(
|
|
struct hid_control *controls,
|
|
size_t *ncontrols,
|
|
const struct hid_control *src_controls,
|
|
size_t src_ncontrols)
|
|
{
|
|
log_assert(ncontrols != NULL);
|
|
|
|
if (controls == NULL) {
|
|
*ncontrols = src_ncontrols;
|
|
|
|
return true;
|
|
} else if (*ncontrols >= src_ncontrols) {
|
|
*ncontrols = src_ncontrols;
|
|
|
|
memcpy(controls, src_controls, src_ncontrols * sizeof(*src_controls));
|
|
|
|
return true;
|
|
} else {
|
|
return false;
|
|
}
|
|
}
|