summaryrefslogtreecommitdiff
path: root/lib/hidpp10.h
blob: 0148c13cf288382a3c77e3862c3dbf2567a40811 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/*
 * HID++ 1.0 protocol details.
 *
 * Copyright (C) 2014 Peter Wu <peter@lekensteyn.nl>
 *
 * This program is free software: you can redistribute it and/or modify
 * it under the terms of the GNU General Public License as published by
 * the Free Software Foundation, either version 3 of the License, or
 * (at your option) any later version.
 *
 * This program is distributed in the hope that it will be useful,
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 * GNU General Public License for more details.
 *
 * You should have received a copy of the GNU General Public License
 * along with this program.  If not, see <http://www.gnu.org/licenses/>.
 */

#ifndef HIDPP_10_H
#define HIDPP_10_H
#include <stdint.h>
#include "hidpp.h"

#define SUB_SET_REGISTER        0x80
#define SUB_GET_REGISTER        0x81
#define SUB_SET_LONG_REGISTER   0x82
#define SUB_GET_LONG_REGISTER   0x83
#define SUB_ERROR_MSG           0x8F

#define NOTIF_DEV_DISCONNECT    0x40 /* Device Disconnection */
#define NOTIF_DEV_CONNECT       0x41 /* Device Connection */
#define NOTIF_RECV_LOCK_CHANGE  0x4A /* Unifying Receiver Locking Change information */

#define REG_ENABLED_NOTIFS      0x00
#define REG_CONNECTION_STATE    0x02
/* Device Connection and Disconnection (Pairing) */
#define REG_DEVICE_PAIRING      0xB2
#define REG_DEVICE_ACTIVITY     0xB3
#define REG_PAIRING_INFO        0xB5
#define REG_VERSION_INFO        0xF1 /* undocumented */

/* HID++ 1.0 error codes */
#define HIDPP_ERR_SUCCESS               0x00
#define HIDPP_ERR_INVALID_SUBID         0x01
#define HIDPP_ERR_INVALID_ADDRESS       0x02
#define HIDPP_ERR_INVALID_VALUE         0x03
#define HIDPP_ERR_CONNECT_FAIL          0x04
#define HIDPP_ERR_TOO_MANY_DEVICES      0x05
#define HIDPP_ERR_ALREADY_EXISTS        0x06
#define HIDPP_ERR_BUSY                  0x07
#define HIDPP_ERR_UNKNOWN_DEVICE        0x08
#define HIDPP_ERR_RESOURCE_ERROR        0x09
#define HIDPP_ERR_REQUEST_UNAVAILABLE   0x0A
#define HIDPP_ERR_INVALID_PARAM_VALUE   0x0B
#define HIDPP_ERR_WRONG_PIN_CODE        0x0C

/**
 * Attempts to dispatch a register query.
 *
 * @param fd        File descriptor of the hidraw device.
 * @param msg[in,out] The message to be sent. If a matching response was
 *                  received, then this will contain that response. Otherwise,
 *                  it is unmodified.
 * @param cb        Function that should be called for HID++ notifications. Its
 *                  return value is ignored. The callback must not modify msg.
 * @return 0 on success, a HID++ 1.0 error code otherwise.
 */
int hidpp10_request(int fd, HidppMessage *msg, hidpp_msg_cb_t *cb, void *userdata);

/**
 * Attempts to enable/disable reporting of wireless notifications.
 *
 * @param fd        File descriptor of the hidraw device.
 * @param enabled   Whether wireless notifications should be reported.
 * @return 0 on success, a HID++ 1.0 error code otherwise.
 */
int hidpp10_enable_wireless_notifications(int fd, bool enabled);
#endif