linux/net/bluetooth/hidp/hidp.h
<<
>>
Prefs
   1/*
   2   HIDP implementation for Linux Bluetooth stack (BlueZ).
   3   Copyright (C) 2003-2004 Marcel Holtmann <marcel@holtmann.org>
   4
   5   This program is free software; you can redistribute it and/or modify
   6   it under the terms of the GNU General Public License version 2 as
   7   published by the Free Software Foundation;
   8
   9   THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
  10   OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  11   FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT OF THIRD PARTY RIGHTS.
  12   IN NO EVENT SHALL THE COPYRIGHT HOLDER(S) AND AUTHOR(S) BE LIABLE FOR ANY
  13   CLAIM, OR ANY SPECIAL INDIRECT OR CONSEQUENTIAL DAMAGES, OR ANY DAMAGES
  14   WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
  15   ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
  16   OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
  17
  18   ALL LIABILITY, INCLUDING LIABILITY FOR INFRINGEMENT OF ANY PATENTS,
  19   COPYRIGHTS, TRADEMARKS OR OTHER RIGHTS, RELATING TO USE OF THIS
  20   SOFTWARE IS DISCLAIMED.
  21*/
  22
  23#ifndef __HIDP_H
  24#define __HIDP_H
  25
  26#include <linux/types.h>
  27#include <linux/kref.h>
  28#include <net/bluetooth/bluetooth.h>
  29#include <net/bluetooth/l2cap.h>
  30
  31/* HIDP header masks */
  32#define HIDP_HEADER_TRANS_MASK                  0xf0
  33#define HIDP_HEADER_PARAM_MASK                  0x0f
  34
  35/* HIDP transaction types */
  36#define HIDP_TRANS_HANDSHAKE                    0x00
  37#define HIDP_TRANS_HID_CONTROL                  0x10
  38#define HIDP_TRANS_GET_REPORT                   0x40
  39#define HIDP_TRANS_SET_REPORT                   0x50
  40#define HIDP_TRANS_GET_PROTOCOL                 0x60
  41#define HIDP_TRANS_SET_PROTOCOL                 0x70
  42#define HIDP_TRANS_GET_IDLE                     0x80
  43#define HIDP_TRANS_SET_IDLE                     0x90
  44#define HIDP_TRANS_DATA                         0xa0
  45#define HIDP_TRANS_DATC                         0xb0
  46
  47/* HIDP handshake results */
  48#define HIDP_HSHK_SUCCESSFUL                    0x00
  49#define HIDP_HSHK_NOT_READY                     0x01
  50#define HIDP_HSHK_ERR_INVALID_REPORT_ID         0x02
  51#define HIDP_HSHK_ERR_UNSUPPORTED_REQUEST       0x03
  52#define HIDP_HSHK_ERR_INVALID_PARAMETER         0x04
  53#define HIDP_HSHK_ERR_UNKNOWN                   0x0e
  54#define HIDP_HSHK_ERR_FATAL                     0x0f
  55
  56/* HIDP control operation parameters */
  57#define HIDP_CTRL_NOP                           0x00
  58#define HIDP_CTRL_HARD_RESET                    0x01
  59#define HIDP_CTRL_SOFT_RESET                    0x02
  60#define HIDP_CTRL_SUSPEND                       0x03
  61#define HIDP_CTRL_EXIT_SUSPEND                  0x04
  62#define HIDP_CTRL_VIRTUAL_CABLE_UNPLUG          0x05
  63
  64/* HIDP data transaction headers */
  65#define HIDP_DATA_RTYPE_MASK                    0x03
  66#define HIDP_DATA_RSRVD_MASK                    0x0c
  67#define HIDP_DATA_RTYPE_OTHER                   0x00
  68#define HIDP_DATA_RTYPE_INPUT                   0x01
  69#define HIDP_DATA_RTYPE_OUPUT                   0x02
  70#define HIDP_DATA_RTYPE_FEATURE                 0x03
  71
  72/* HIDP protocol header parameters */
  73#define HIDP_PROTO_BOOT                         0x00
  74#define HIDP_PROTO_REPORT                       0x01
  75
  76/* HIDP ioctl defines */
  77#define HIDPCONNADD     _IOW('H', 200, int)
  78#define HIDPCONNDEL     _IOW('H', 201, int)
  79#define HIDPGETCONNLIST _IOR('H', 210, int)
  80#define HIDPGETCONNINFO _IOR('H', 211, int)
  81
  82#define HIDP_VIRTUAL_CABLE_UNPLUG       0
  83#define HIDP_BOOT_PROTOCOL_MODE         1
  84#define HIDP_BLUETOOTH_VENDOR_ID        9
  85#define HIDP_WAITING_FOR_RETURN         10
  86#define HIDP_WAITING_FOR_SEND_ACK       11
  87
  88struct hidp_connadd_req {
  89        int   ctrl_sock;        /* Connected control socket */
  90        int   intr_sock;        /* Connected interrupt socket */
  91        __u16 parser;
  92        __u16 rd_size;
  93        __u8 __user *rd_data;
  94        __u8  country;
  95        __u8  subclass;
  96        __u16 vendor;
  97        __u16 product;
  98        __u16 version;
  99        __u32 flags;
 100        __u32 idle_to;
 101        char  name[128];
 102};
 103
 104struct hidp_conndel_req {
 105        bdaddr_t bdaddr;
 106        __u32    flags;
 107};
 108
 109struct hidp_conninfo {
 110        bdaddr_t bdaddr;
 111        __u32    flags;
 112        __u16    state;
 113        __u16    vendor;
 114        __u16    product;
 115        __u16    version;
 116        char     name[128];
 117};
 118
 119struct hidp_connlist_req {
 120        __u32  cnum;
 121        struct hidp_conninfo __user *ci;
 122};
 123
 124int hidp_connection_add(struct hidp_connadd_req *req, struct socket *ctrl_sock, struct socket *intr_sock);
 125int hidp_connection_del(struct hidp_conndel_req *req);
 126int hidp_get_connlist(struct hidp_connlist_req *req);
 127int hidp_get_conninfo(struct hidp_conninfo *ci);
 128
 129enum hidp_session_state {
 130        HIDP_SESSION_IDLING,
 131        HIDP_SESSION_RUNNING,
 132};
 133
 134/* HIDP session defines */
 135struct hidp_session {
 136        struct list_head list;
 137        struct kref ref;
 138
 139        /* runtime management */
 140        atomic_t state;
 141        wait_queue_head_t state_queue;
 142        atomic_t terminate;
 143        struct task_struct *task;
 144        unsigned long flags;
 145
 146        /* connection management */
 147        bdaddr_t bdaddr;
 148        struct l2cap_conn *conn;
 149        struct l2cap_user user;
 150        struct socket *ctrl_sock;
 151        struct socket *intr_sock;
 152        struct sk_buff_head ctrl_transmit;
 153        struct sk_buff_head intr_transmit;
 154        uint ctrl_mtu;
 155        uint intr_mtu;
 156        unsigned long idle_to;
 157
 158        /* device management */
 159        struct input_dev *input;
 160        struct hid_device *hid;
 161        struct timer_list timer;
 162
 163        /* Report descriptor */
 164        __u8 *rd_data;
 165        uint rd_size;
 166
 167        /* session data */
 168        unsigned char keys[8];
 169        unsigned char leds;
 170
 171        /* Used in hidp_get_raw_report() */
 172        int waiting_report_type; /* HIDP_DATA_RTYPE_* */
 173        int waiting_report_number; /* -1 for not numbered */
 174        struct mutex report_mutex;
 175        struct sk_buff *report_return;
 176        wait_queue_head_t report_queue;
 177
 178        /* Used in hidp_output_raw_report() */
 179        int output_report_success; /* boolean */
 180};
 181
 182/* HIDP init defines */
 183extern int __init hidp_init_sockets(void);
 184extern void __exit hidp_cleanup_sockets(void);
 185
 186#endif /* __HIDP_H */
 187