1590 lines
64 KiB
C
1590 lines
64 KiB
C
|
#ifndef __HID_H
|
||
|
#define __HID_H
|
||
|
|
||
|
#include <stdbool.h>
|
||
|
|
||
|
#include "bt_types.h"
|
||
|
#include "me_api.h"
|
||
|
#include "sec_api.h"
|
||
|
#include "sdp_api.h"
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID Protocol API layer
|
||
|
*
|
||
|
* The Bluetooth Human Interface Device Profile allows an HID Device
|
||
|
* (such as a keyboard or mouse) to send control and interrupt information
|
||
|
* to an HID host (such as a PC) and vice versa. This API enables an
|
||
|
* application to perform either role of the HID profile.
|
||
|
*/
|
||
|
|
||
|
/****************************************************************************
|
||
|
*
|
||
|
* Constants
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_HOST constant
|
||
|
* Defines the role of the device as a host. HID Host code is included
|
||
|
* if HID_HOST is defined as XA_ENABLED.
|
||
|
*/
|
||
|
#ifndef HID_HOST
|
||
|
#define HID_HOST XA_ENABLED
|
||
|
#endif
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_DEVICE constant
|
||
|
* Defines the role of the device as an HID device. HID Device code is
|
||
|
* included if HID_DEVICE is defined as XA_ENABLED.
|
||
|
*/
|
||
|
#ifndef HID_DEVICE
|
||
|
#define HID_DEVICE XA_ENABLED
|
||
|
#endif
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_NUM_TX_PACKETS constant
|
||
|
* Defines the number of transmit packets available for sending control
|
||
|
* or interrupt data.
|
||
|
*/
|
||
|
#ifndef HID_NUM_TX_PACKETS
|
||
|
#define HID_NUM_TX_PACKETS 5
|
||
|
#endif
|
||
|
|
||
|
#if HID_NUM_TX_PACKETS > 255
|
||
|
#error HID_NUM_TX_PACKETS must not exceed 255
|
||
|
#endif
|
||
|
|
||
|
/****************************************************************************
|
||
|
*
|
||
|
* Types
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidEvent type
|
||
|
*
|
||
|
* All event indications and confirmations are passed to a callback
|
||
|
* function of type HidCallback. The "event" field of the "HidCallbackParms"
|
||
|
* parameter will contain one of the event types below. The "ptrs" field
|
||
|
* will contain information pertinent to each event.
|
||
|
*/
|
||
|
typedef uint8_t HidEvent;
|
||
|
|
||
|
/** A remote device (host or HID device) has requested a connection. During the
|
||
|
* processing of this event, call HID_AcceptConnection or HID_RejectConnection
|
||
|
* to indicate whether the connection should be allowed. The "ptrs.remDev"
|
||
|
* field contains a pointer to the remote device.
|
||
|
*/
|
||
|
#define HIDEVENT_OPEN_IND 1
|
||
|
|
||
|
/** A connection is open. This event can be received as the result of a call to
|
||
|
* HID_AcceptConnection or HID_OpenConnection. When this event has been
|
||
|
* received, the channel is available for sending transactions and interrupts.
|
||
|
* When this event is received in the callback, the "ptrs.remDev" field
|
||
|
* contains a pointer to the remote device.
|
||
|
*/
|
||
|
#define HIDEVENT_OPEN 2
|
||
|
|
||
|
/** The remote device (host or HID device) is closing the connection. Once the
|
||
|
* connection is closed, an HIDEVENT_CLOSED event will be received. When
|
||
|
* this event is received in the callback, the "ptrs.remDev" field contains a
|
||
|
* pointer to the remote device.
|
||
|
*/
|
||
|
#define HIDEVENT_CLOSE_IND 3
|
||
|
|
||
|
/** The connection is closed. This can come as a result of calling
|
||
|
* HID_CloseConnection, if the remote device has closed the connection,
|
||
|
* or if an incoming connection is rejected. Transactions and interrupts
|
||
|
* cannot be sent or received in this state. When this event is received,
|
||
|
* the "ptrs.remDev" field may contain a pointer to the remote device.
|
||
|
*/
|
||
|
#define HIDEVENT_CLOSED 4
|
||
|
|
||
|
#if HID_HOST == XA_ENABLED
|
||
|
/** A query response has been received from the HID device. This event is
|
||
|
* received as the result of a call to HID_HostQueryDevice. The
|
||
|
* "ptrs.queryRsp" field contains a pointer to the query response. This
|
||
|
* structure contains important information about the device. It is possible
|
||
|
* that the query will fail. The "status" field contains a value of
|
||
|
* BT_STATUS_SUCCESS when the query is successful.
|
||
|
*/
|
||
|
#define HIDEVENT_QUERY_CNF 5
|
||
|
#endif
|
||
|
|
||
|
/** A transaction has been received. The "ptrs.trans" field contains a pointer
|
||
|
* to an "HidTransaction" structure. The "type" field of this structure
|
||
|
* defines the type of transaction that has been received. Based on the
|
||
|
* value of the "type" field, the "parm" field of the transaction structure
|
||
|
* will point to the parameters of the transaction. See HidTransactionType for
|
||
|
* more information about the transaction. If the "status" field has a value
|
||
|
* of BT_STATUS_PENDING, then more data is pending on this event and
|
||
|
* subsequent HIDEVENT_TRANSACTION_IND events will be received. When "status"
|
||
|
* has a value of BT_STATUS_SUCCESS, all data from the transaction has been
|
||
|
* received.
|
||
|
*/
|
||
|
#define HIDEVENT_TRANSACTION_IND 6
|
||
|
|
||
|
/** A transaction response has been received. The "ptrs.trans" field contains
|
||
|
* a pointer to a "HidTransaction" structure. The "type" field of the transaction
|
||
|
* structure defines the type of transaction. Based on the value of the "type"
|
||
|
* field, the "parm" field of the transaction structure will point to the
|
||
|
* relevant parameters of the transaction. See HidTransactionType for
|
||
|
* more information about the transaction. If the "status" field has a value
|
||
|
* of BT_STATUS_PENDING, then more data is pending on this event and
|
||
|
* subsequent HIDEVENT_TRANSACTION_RSP events will be received. When "status"
|
||
|
* has a value of BT_STATUS_SUCCESS, all data from the transaction has been
|
||
|
* received.
|
||
|
*/
|
||
|
#define HIDEVENT_TRANSACTION_RSP 7
|
||
|
|
||
|
/** A call to a transaction API has completed. The "ptrs.trans" field contains
|
||
|
* a pointer to the transaction that was sent. When this event is received,
|
||
|
* the transaction structure is now available for reuse. The "status" field
|
||
|
* indicates whether the transaction was sent successfully. If successful, the
|
||
|
* "resultCode" field of the transaction structure is valid and contains the
|
||
|
* result of the transaction.
|
||
|
*/
|
||
|
#define HIDEVENT_TRANSACTION_COMPLETE 8
|
||
|
|
||
|
/** An interrupt was received from the remote Device. The "ptrs.intrData" field
|
||
|
* contains the interrupt data. Interrupt data should be handled in a timely
|
||
|
* manner, because it may be overwritten by subsequent interrupts. If the
|
||
|
* "status" field has a value of BT_STATUS_PENDING, then more interrupt data
|
||
|
* is pending on this event and subsequent HIDEVENT_INTERRUPT events will be
|
||
|
* received. When "status" has a value of BT_STATUS_SUCCESS, all data from the
|
||
|
* interrupt has been received.
|
||
|
*/
|
||
|
#define HIDEVENT_INTERRUPT 9
|
||
|
|
||
|
/** A call to the HID_SendInterrupt API has been sent. The "ptrs.intrData"
|
||
|
* field contains the interrupt data that was sent, and the structure is
|
||
|
* available for reuse.
|
||
|
*/
|
||
|
#define HIDEVENT_INTERRUPT_COMPLETE 10
|
||
|
|
||
|
/* End of HidEvent */
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidTransactionType type
|
||
|
*
|
||
|
* When a transaction is received (request or response), a transaction
|
||
|
* structure is passed to the application to indicate the type of
|
||
|
* transaction and its parameters. The "Type" field of the transaction
|
||
|
* structure will be set to one of the following values, and will indicate
|
||
|
* which parameters are valid.
|
||
|
*/
|
||
|
typedef uint8_t HidTransactionType;
|
||
|
|
||
|
/** A control request has been received. The "parm.control" field of the
|
||
|
* "HidTransaction" structure contains the current control operation. Control
|
||
|
* operations should be executed by the receiving device. The only valid
|
||
|
* operation that can be received by the Host is a
|
||
|
* HID_CTRL_VIRTUAL_CABLE_UNPLUG. All operations can be received by the
|
||
|
* HID Device.
|
||
|
*/
|
||
|
#define HID_TRANS_CONTROL 1
|
||
|
|
||
|
/** A request for a report has been received. The "parm.reportReq" field
|
||
|
* contains the request. The receiving device should respond to a request by
|
||
|
* calling HID_DeviceGetReportRsp. When an input report is requested, the
|
||
|
* device should respond with the instantaneous state of fields in the
|
||
|
* requested input report. When an output report is requested, the device
|
||
|
* should respond with the last output report received on the interrupt
|
||
|
* channel. If no output report has been received, default values should be
|
||
|
* returned. If a feature report is requested, the device should return
|
||
|
* default values or the instantaneous state of the feature report fields.
|
||
|
*/
|
||
|
#define HID_TRANS_GET_REPORT 2
|
||
|
|
||
|
/** A report has been received. The "parm.report" field contains the report.
|
||
|
* Multiple HIDEVENT_TRANSACTION_IND events may be received with report
|
||
|
* data. If the "status" field of the "HidCallbackParms" structure contains
|
||
|
* a value of BT_STATUS_PENDING, more transaction events will be received.
|
||
|
* When a value of BT_STATUS_SUCCESS is received, all report data has been
|
||
|
* received. When all report data has been received, the receiving device
|
||
|
* should respond to this request by calling HID_DeviceSetReportRsp.
|
||
|
*/
|
||
|
#define HID_TRANS_SET_REPORT 3
|
||
|
|
||
|
/** A request for the current protocol has been received. The receiving device
|
||
|
* should respond to this request by calling HID_DeviceGetProtocolRsp.
|
||
|
*/
|
||
|
#define HID_TRANS_GET_PROTOCOL 4
|
||
|
|
||
|
/** A set protocol command has been received. The "parm.protocol" field
|
||
|
* contains the current protocol. The receiving device should respond to this
|
||
|
* request by calling HID_DeviceSetProtocolRsp. If a successful response is
|
||
|
* sent, the device should begin to use the specified protocol.
|
||
|
*/
|
||
|
#define HID_TRANS_SET_PROTOCOL 5
|
||
|
|
||
|
/** A request for the current idle rate has been received. The receiving
|
||
|
* device should respond to this request by calling HID_DeviceGetIdleRsp.
|
||
|
* No parameter is specified.
|
||
|
*/
|
||
|
#define HID_TRANS_GET_IDLE_RATE 6
|
||
|
|
||
|
/** A set idle request has been received. The "parm.idleRate" field contains
|
||
|
* the current idle rate. The device should respond to this request by calling
|
||
|
* HID_DeviceSetIdleRsp. If a successful response is sent, the device
|
||
|
* should begin to use the specified idle rate.
|
||
|
*/
|
||
|
#define HID_TRANS_SET_IDLE_RATE 7
|
||
|
|
||
|
/** A response to a HID_TRANS_GET_REPORT transaction has been received.
|
||
|
* If the "resultCode" field is set to HID_RESULT_SUCCESS, then the
|
||
|
* "parm.report" field contains a pointer to the report data.
|
||
|
* Multiple HIDEVENT_TRANSACTION_IND events may be received with report
|
||
|
* data. If the "status" field of the "HidCallbackParms" structure contains
|
||
|
* a value of BT_STATUS_PENDING, more transaction events will be received.
|
||
|
* When a value of BT_STATUS_SUCCESS is received, all report data has been
|
||
|
* received.
|
||
|
*/
|
||
|
#define HID_TRANS_GET_REPORT_RSP 8
|
||
|
|
||
|
/** A response to a HID_TRANS_SET_REPORT transaction has been received.
|
||
|
* The "resultCode" field contains the results of the transaction.
|
||
|
*/
|
||
|
#define HID_TRANS_SET_REPORT_RSP 9
|
||
|
|
||
|
/** A response to a HID_TRANS_GET_PROTOCOL transaction has been received.
|
||
|
* If the "resultCode" field is set to HID_RESULT_SUCCESS, then the
|
||
|
* "parm.protocol" field contains the current protocol.
|
||
|
*/
|
||
|
#define HID_TRANS_GET_PROTOCOL_RSP 10
|
||
|
|
||
|
/** A response to a HID_TRANS_SET_PROTOCOL transaction has been received.
|
||
|
* The "resultCode" field contains the results of the transaction.
|
||
|
*/
|
||
|
#define HID_TRANS_SET_PROTOCOL_RSP 11
|
||
|
|
||
|
/** A response to a HID_TRANS_GET_IDLE_RATE transaction has been received.
|
||
|
* If the "resultCode" is set to HID_RESULT_SUCCESS, then the
|
||
|
* "parm.idleRate" field contains the current idle rate.
|
||
|
*/
|
||
|
#define HID_TRANS_GET_IDLE_RATE_RSP 12
|
||
|
|
||
|
/** A response to a HID_TRANS_SET_IDLE_RATE transaction has been received.
|
||
|
* The "resultCode" field contains the results of the transaction.
|
||
|
*/
|
||
|
#define HID_TRANS_SET_IDLE_RATE_RSP 13
|
||
|
|
||
|
/* End of HidTransactionType */
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidResultCode type
|
||
|
*
|
||
|
* HID transactions return a status describing the success or failure of the
|
||
|
* transaction. This type describes all the possible result codes.
|
||
|
*/
|
||
|
typedef uint8_t HidResultCode;
|
||
|
|
||
|
#define HID_RESULT_SUCCESS 0
|
||
|
#define HID_RESULT_NOT_READY 1
|
||
|
#define HID_RESULT_INVALID_REPORT_ID 2
|
||
|
#define HID_RESULT_UNSUPPORTED_REQUEST 3
|
||
|
#define HID_RESULT_INVALID_PARAMETER 4
|
||
|
#define HID_RESULT_UNKNOWN 5
|
||
|
#define HID_RESULT_FATAL 6
|
||
|
|
||
|
/* End of HidResultCode */
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidIdleRate type
|
||
|
*
|
||
|
* This type defines the idle rate (required by keyboards).
|
||
|
*/
|
||
|
typedef uint8_t HidIdleRate;
|
||
|
|
||
|
/* End of HidIdleRate */
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidProtocol type
|
||
|
*
|
||
|
* This type defines the HID protocols.
|
||
|
*/
|
||
|
typedef uint8_t HidProtocol;
|
||
|
|
||
|
#define HID_PROTOCOL_REPORT 1
|
||
|
#define HID_PROTOCOL_BOOT 0
|
||
|
|
||
|
/* End of HidProtocol */
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidReportType type
|
||
|
*
|
||
|
* This defines the HID report type.
|
||
|
*/
|
||
|
typedef uint8_t HidReportType;
|
||
|
|
||
|
#define HID_REPORT_OTHER 0
|
||
|
#define HID_REPORT_INPUT 1
|
||
|
#define HID_REPORT_OUTPUT 2
|
||
|
#define HID_REPORT_FEATURE 3
|
||
|
|
||
|
/* End of HidReportType */
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidControl type
|
||
|
*
|
||
|
* This defines the control type.
|
||
|
*/
|
||
|
typedef uint8_t HidControl;
|
||
|
|
||
|
#define HID_CTRL_NOP 0
|
||
|
#define HID_CTRL_HARD_RESET 1
|
||
|
#define HID_CTRL_SOFT_RESET 2
|
||
|
#define HID_CTRL_SUSPEND 3
|
||
|
#define HID_CTRL_EXIT_SUSPEND 4
|
||
|
#define HID_CTRL_VIRTUAL_CABLE_UNPLUG 5
|
||
|
|
||
|
/* End of HidControl */
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidQueryFlags type
|
||
|
*
|
||
|
* These flags are used to determine which values of the SDP query response
|
||
|
* contain valid data (see HidQueryRsp). Some fields may not be supported in
|
||
|
* a particular device. If no flags are set at all, then a valid query has
|
||
|
* not been made.
|
||
|
*/
|
||
|
typedef uint16_t HidQueryFlags;
|
||
|
|
||
|
#define SDPQ_FLAG_DEVICE_RELEASE 0x0001 /* deviceRelease is valid */
|
||
|
#define SDPQ_FLAG_PARSER_VERSION 0x0002 /* parserVersion is valid */
|
||
|
#define SDPQ_FLAG_DEVICE_SUBCLASS 0x0004 /* deviceSubclass is valid */
|
||
|
#define SDPQ_FLAG_COUNTRY_CODE 0x0008 /* countryCode is valid */
|
||
|
#define SDPQ_FLAG_VIRTUAL_CABLE 0x0010 /* virtualCable is valid */
|
||
|
#define SDPQ_FLAG_RECONNECT_INIT 0x0020 /* reconnect is valid */
|
||
|
#define SDPQ_FLAG_DESCRIPTOR_LIST 0x0040 /* descriptorLen and descriptorList
|
||
|
* are valid.
|
||
|
*/
|
||
|
#define SDPQ_FLAG_SDP_DISABLE 0x0080 /* sdpDisable is valid */
|
||
|
#define SDPQ_FLAG_BATTERY_POWER 0x0100 /* batteryPower is valid */
|
||
|
#define SDPQ_FLAG_REMOTE_WAKE 0x0200 /* remoteWakeup is valid */
|
||
|
#define SDPQ_FLAG_PROFILE_VERSION 0x0400 /* profileVersion is valid */
|
||
|
#define SDPQ_FLAG_SUPERV_TIMEOUT 0x0800 /* supervTimeout is valid */
|
||
|
#define SDPQ_FLAG_NORM_CONNECTABLE 0x1000 /* normConnectable is valid */
|
||
|
#define SDPQ_FLAG_BOOT_DEVICE 0x2000 /* bootDevice is valid */
|
||
|
|
||
|
/* End of HidQueryFlags */
|
||
|
|
||
|
/* HID roles */
|
||
|
typedef uint8_t HidRole;
|
||
|
|
||
|
#define HID_ROLE_DEVICE 1
|
||
|
#define HID_ROLE_HOST 2
|
||
|
|
||
|
/* Foreward References */
|
||
|
typedef struct _HidCallbackParms HidCallbackParms;
|
||
|
typedef struct _HidChannel HidChannel;
|
||
|
typedef struct _HidReport HidReport;
|
||
|
typedef struct _HidReportReq HidReportReq;
|
||
|
typedef struct _HidTransaction HidTransaction;
|
||
|
typedef struct _HidInterrupt HidInterrupt;
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidCallback type
|
||
|
*
|
||
|
* Represents a callback function called by HID to indicate events and
|
||
|
* data to the application. The event is targeted to the HID connection
|
||
|
* identified by the "Channel" parameter. Information about the
|
||
|
* event is contained in the "Parms" parameter.
|
||
|
*/
|
||
|
typedef void (*HidCallback)(HidChannel *Channel, HidCallbackParms *Parms);
|
||
|
/* End of HidCallback */
|
||
|
|
||
|
/****************************************************************************
|
||
|
*
|
||
|
* Data Structures
|
||
|
*
|
||
|
****************************************************************************/
|
||
|
#if HID_HOST == XA_ENABLED
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_MAX_DESCRIPTOR_LEN constant
|
||
|
*
|
||
|
* Defines maximum storage set aside on the host for each device's
|
||
|
* descriptor list. This value is only used when HID_HOST is enabled.
|
||
|
*/
|
||
|
#ifndef HID_MAX_DESCRIPTOR_LEN
|
||
|
#define HID_MAX_DESCRIPTOR_LEN 128
|
||
|
#endif
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidQueryRsp structure
|
||
|
*
|
||
|
* This structure contains SDP query data from the device. This structure
|
||
|
* only exists if HID_HOST is defined to be XA_ENABLE. The Host has the
|
||
|
* ability to query a device's SDP entry for important HID information.
|
||
|
* During the query response, that data is passed to the application in
|
||
|
* this structure. The data remains valid until the channel is deregistred.
|
||
|
*/
|
||
|
typedef struct _HidQueryRsp {
|
||
|
HidQueryFlags queryAttemptFlags;/* Defines which fields have been queried
|
||
|
* for already.
|
||
|
*/
|
||
|
|
||
|
HidQueryFlags queryFlags; /* Defines which query field contains
|
||
|
* valid data.
|
||
|
*/
|
||
|
uint16_t deviceRelease; /* Vendor specified device release
|
||
|
* version.
|
||
|
*/
|
||
|
uint16_t parserVersion; /* HID parser version for which this
|
||
|
* device is designed.
|
||
|
*/
|
||
|
uint8_t deviceSubclass; /* Device subclass (minor Class of
|
||
|
* Device).
|
||
|
*/
|
||
|
uint8_t countryCode; /* Country Code
|
||
|
*/
|
||
|
uint8_t virtualCable; /* Virtual Cable relationship is
|
||
|
* supported.
|
||
|
*/
|
||
|
uint8_t reconnect; /* Device initiates reconnect.
|
||
|
*/
|
||
|
uint8_t sdpDisable; /* When TRUE, the device cannot accept
|
||
|
* an SDP query when the control/interrupt
|
||
|
* channels are connected.
|
||
|
*/
|
||
|
uint8_t batteryPower; /* The device runs on battery power.
|
||
|
*/
|
||
|
uint8_t remoteWakeup; /* The device can be awakened remotely.
|
||
|
*/
|
||
|
uint16_t profileVersion; /* Version of the HID profile.
|
||
|
*/
|
||
|
uint16_t supervTimeout; /* Suggested supervision timeout value
|
||
|
* for LMP connections.
|
||
|
*/
|
||
|
uint8_t normConnectable; /* The device is connectable when no
|
||
|
* connection exists.
|
||
|
*/
|
||
|
uint8_t bootDevice; /* Boot protocol support is provided.
|
||
|
*/
|
||
|
uint16_t descriptorLen; /* Length of the HID descriptor list.
|
||
|
*/
|
||
|
|
||
|
/* A list of HID descriptors (report or physical) associated with the
|
||
|
* device. Each element of the list is an SDP data element sequence,
|
||
|
* and therefore has a header of two bytes (0x35, len) which precedes
|
||
|
* each descriptor.
|
||
|
*/
|
||
|
uint8_t descriptorList[HID_MAX_DESCRIPTOR_LEN];
|
||
|
} HidQueryRsp;
|
||
|
#endif
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidCallbackParms structure
|
||
|
*
|
||
|
* Describes a callback event and any data that relates to the event.
|
||
|
* Various fields in the structure may be valid or not, depending
|
||
|
* on the "event" field.
|
||
|
*/
|
||
|
struct _HidCallbackParms {
|
||
|
HidEvent event; /* Type of the HID transport event */
|
||
|
|
||
|
BtStatus status; /* Communication status or error information */
|
||
|
|
||
|
uint16_t len; /* Length of the object pointed to
|
||
|
* by "ptrs"
|
||
|
*/
|
||
|
|
||
|
union {
|
||
|
/* During HIDEVENT_OPEN_IND, HIDEVENT_OPEN or HIDEVENT_CLOSED,
|
||
|
* events, contains the remote device structure.
|
||
|
*/
|
||
|
BtRemoteDevice *remDev;
|
||
|
|
||
|
/* During an HIDEVENT_TRANSACTION and HIDEVENT_TRANSACTION_RSP
|
||
|
* events, contains the transaction type and parameters.
|
||
|
*/
|
||
|
HidTransaction *trans;
|
||
|
|
||
|
/* During HIDEVENT_INTERRUPT and HIDEVENT_INTERRUPT_RSP
|
||
|
* events, contains the interrupt data.
|
||
|
*/
|
||
|
HidInterrupt *intr;
|
||
|
|
||
|
/* During HIDEVENT_QUERY_CNF, contains the SDP query response data.
|
||
|
*/
|
||
|
#if HID_HOST == XA_ENABLED
|
||
|
HidQueryRsp *queryRsp;
|
||
|
#endif
|
||
|
} ptrs;
|
||
|
};
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidChannel structure
|
||
|
*
|
||
|
* This structure is used to identify an HID connection.
|
||
|
*/
|
||
|
struct _HidChannel {
|
||
|
|
||
|
/* Used internally by HID */
|
||
|
ListEntry node;
|
||
|
|
||
|
/* === Internal use only === */
|
||
|
|
||
|
/* State variables */
|
||
|
HidCallback callback;
|
||
|
uint8_t state;
|
||
|
uint8_t flags;
|
||
|
uint8_t conCount;
|
||
|
|
||
|
/* L2CAP variables */
|
||
|
uint16_t ctrlCid;
|
||
|
uint16_t intrCid;
|
||
|
|
||
|
/* Queue of transactions and interrupts */
|
||
|
ListEntry transQueue;
|
||
|
ListEntry intrQueue;
|
||
|
|
||
|
#if HID_DEVICE == XA_ENABLED
|
||
|
/* Transaction for responding with an error */
|
||
|
BtPacket rspPacket;
|
||
|
#endif
|
||
|
/* Role of this end of the HID connection */
|
||
|
HidRole hidRole;
|
||
|
|
||
|
#if HID_HOST == XA_ENABLED
|
||
|
/* SDP query token */
|
||
|
SdpQueryToken sdpQueryToken;
|
||
|
HidQueryRsp queryRsp;
|
||
|
#endif
|
||
|
|
||
|
CmgrHandler cmgrHandler;
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidReport structure
|
||
|
*
|
||
|
* This structure is used to identify an HID report. The "reportType"
|
||
|
* field describes the type of report pointed to by the "data" field.
|
||
|
*/
|
||
|
struct _HidReport {
|
||
|
|
||
|
HidReportType reportType; /* Report type (input, output, or feature) */
|
||
|
uint8_t *data; /* Report data */
|
||
|
uint16_t dataLen; /* Length of the report data */
|
||
|
};
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidReportReq structure
|
||
|
*
|
||
|
* This structure is used to identify an HID report request. The
|
||
|
* "reportType" field describes the type of report pointed to by the "data"
|
||
|
* field.
|
||
|
*/
|
||
|
struct _HidReportReq {
|
||
|
|
||
|
HidReportType reportType; /* Report type (input, output, or feature) */
|
||
|
bool useId; /* Set to TRUE if reportId should be used */
|
||
|
uint8_t reportId; /* The report ID (optional) */
|
||
|
|
||
|
/* Indicates the maximum amount of report data to return. If 0,
|
||
|
* indicates a request to deliver all outstanding data.
|
||
|
*
|
||
|
* Note that in boot mode, this value must be increased by 1 to accomodate
|
||
|
* the length of the Report ID field.
|
||
|
*
|
||
|
* A device that receives a report request with a non-zero buffer size
|
||
|
* should respond with a report no longer than the specified bufferSize,
|
||
|
* truncating if necessary.
|
||
|
*/
|
||
|
uint16_t bufferSize;
|
||
|
};
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidTransaction structure
|
||
|
*
|
||
|
* This structure is used to identify an HID transaction.
|
||
|
*/
|
||
|
struct _HidTransaction {
|
||
|
/* Used internally by HID */
|
||
|
ListEntry node;
|
||
|
|
||
|
/* Contains the HID Result Code */
|
||
|
HidResultCode resultCode;
|
||
|
|
||
|
union {
|
||
|
/* Contains report data */
|
||
|
HidReport *report;
|
||
|
|
||
|
/* Contains a report data request */
|
||
|
HidReportReq *reportReq;
|
||
|
|
||
|
/* Contains the current protocol */
|
||
|
HidProtocol protocol;
|
||
|
|
||
|
/* Contains the idle rate */
|
||
|
HidIdleRate idleRate;
|
||
|
|
||
|
/* Contains the control operation */
|
||
|
HidControl control;
|
||
|
} parm;
|
||
|
|
||
|
HidTransactionType type;
|
||
|
|
||
|
/* === Internal use only === */
|
||
|
uint8_t flags;
|
||
|
uint16_t offset;
|
||
|
};
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HidInterrupt structure
|
||
|
*
|
||
|
* This structure is used to identify an HID interrupt.
|
||
|
*/
|
||
|
struct _HidInterrupt {
|
||
|
/* Used internally by HID */
|
||
|
ListEntry node;
|
||
|
|
||
|
/* Contains a pointer to interrupt data */
|
||
|
uint8_t *data;
|
||
|
|
||
|
/* Contains the length of interrupt data */
|
||
|
uint16_t dataLen;
|
||
|
|
||
|
/* Report type (input, output, or feature) */
|
||
|
HidReportType reportType;
|
||
|
|
||
|
/* === Internal use only === */
|
||
|
uint8_t flags;
|
||
|
uint16_t offset;
|
||
|
};
|
||
|
|
||
|
/* Functions used by macros below */
|
||
|
BtStatus HID_Register(HidChannel *Channel, HidCallback Callback, HidRole Role, BtSecurityParms *secParms,sdp_AttTable_Info_t sdp_AttTable_Info);
|
||
|
BtStatus HID_Deregister(HidChannel *Channel);
|
||
|
BtStatus HID_RespondOpenInd(HidChannel *Channel, bool flag);
|
||
|
BtStatus HID_SendTransaction(HidChannel *Channel, HidTransactionType TranType,
|
||
|
HidTransaction *Trans);
|
||
|
|
||
|
/****************************************************************************
|
||
|
*
|
||
|
* Section: Common Functions
|
||
|
*
|
||
|
****************************************************************************
|
||
|
*
|
||
|
* These functions are used by either the HID Device or HID Host.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_Init()
|
||
|
*
|
||
|
* Initialize HID. This function must be called before calling any other
|
||
|
* HID function. Currently, this function always returns BT_STATUS_SUCCESS,
|
||
|
* but it is good to check the return code as this may change in future
|
||
|
* releases.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* void
|
||
|
*
|
||
|
* Returns:
|
||
|
* TRUE - Initialization successful.
|
||
|
* FALSE - Initialization failed.
|
||
|
*/
|
||
|
bool HID_Init(void);
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_OpenConnection()
|
||
|
*
|
||
|
* Attempts to establish a connection with a remote device (Host or HID
|
||
|
* Device).
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the Channel for this action.
|
||
|
*
|
||
|
* Addr - Bluetooth device address of the remote device.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_FAILED - The request was invalid.
|
||
|
*
|
||
|
* BT_STATUS_PENDING - The request to open the connection was sent.
|
||
|
* If the request is accepted by the remote device, a HIDEVENT_OPEN
|
||
|
* event will be sent to the application. If the connection is
|
||
|
* rejected, a HIDEVENT_CLOSED event will be sent to the application.
|
||
|
*
|
||
|
* BT_STATUS_BUSY - The connection is open or in the process of opening.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only) or the BD_ADDR specified an unknown device.
|
||
|
*
|
||
|
* BT_STATUS_NO_CONNECTION - No ACL connection exists.
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_OpenConnection(HidChannel *Channel, BD_ADDR *Addr);
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_AcceptConnection()
|
||
|
*
|
||
|
* Accepts an incoming connection in response to an HIDEVENT_OPEN_IND
|
||
|
* event. This event occurs when a remote device (Host or HID Device)
|
||
|
* attempts to connect to a registered Host or HID Device. Either this
|
||
|
* function or HID_RejectConnection must be used to respond to the
|
||
|
* connection request.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel that is accepting the connection. This
|
||
|
* channel is provided to the callback function as a parameter during
|
||
|
* the HIDEVENT_OPEN_IND event.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_FAILED - The specified channel did not have a pending
|
||
|
* connection request.
|
||
|
*
|
||
|
* BT_STATUS_PENDING - The accept message will be sent. The application
|
||
|
* will receive an HIDEVENT_OPEN when the accept message has been
|
||
|
* sent and the channel is open.
|
||
|
*
|
||
|
* BT_STATUS_BUSY - A response is already in progress.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_NO_CONNECTION - No ACL connection exists.
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_AcceptConnection(HidChannel *Channel);
|
||
|
#define HID_AcceptConnection(s) HID_RespondOpenInd(s, TRUE)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_RejectConnection()
|
||
|
*
|
||
|
* Rejects an incoming connection in response to an HIDEVENT_OPEN_IND
|
||
|
* event. This event occurs when a remote device (Host or HID Device)
|
||
|
* attempts to connect to a registered Host or HID Device. Either this
|
||
|
* function or HID_AcceptConnection must be used to respond to the
|
||
|
* connection request.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel to be rejected. This channel is
|
||
|
* provided to the callback function as a parameter during the
|
||
|
* HIDEVENT_OPEN_IND event.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_FAILED - The specified channel did not have a pending
|
||
|
* connection request.
|
||
|
*
|
||
|
* BT_STATUS_PENDING - The rejection message has been sent. The application
|
||
|
* will receive an HIDEVENT_CLOSED event when the rejection is
|
||
|
* complete.
|
||
|
*
|
||
|
* BT_STATUS_BUSY - A response is already in progress.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_NO_CONNECTION - No ACL connection exists.
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_RejectConnection(HidChannel *Channel);
|
||
|
#define HID_RejectConnection(s) HID_RespondOpenInd(s, FALSE)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_SendControl()
|
||
|
*
|
||
|
* Sends a control operation to the remote device (Host or HID Device). The
|
||
|
* "parm.control" field of the "Trans" parameter should be initialized with
|
||
|
* the appropriate control operation. A HID device can only send the
|
||
|
* HID_CTRL_VIRTUAL_CABLE_UNPLUG control operation. A Host can send any
|
||
|
* control operation.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the request.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction, which describes the control
|
||
|
* operation.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The request has been queued. If sent successfully,
|
||
|
* an HIDEVENT_TRANSACTION_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS. If the transmission fails, the same event will be
|
||
|
* received with a status specifying the reason. The memory pointed
|
||
|
* to by the Trans parameter must not be modified until the
|
||
|
* transaction is complete.
|
||
|
*
|
||
|
* BT_STATUS_NO_CONNECTION - No connection exists for transmitting.
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_SendControl(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_SendControl(ch, trans) HID_SendTransaction(ch, HID_TRANS_CONTROL, trans)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_SendInterrupt()
|
||
|
*
|
||
|
* Sends an interrupt (report) to the remote device (Host or HID Device).
|
||
|
* The Interrupt parameter should be initialized with the appropriate
|
||
|
* information.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the interrupt.
|
||
|
*
|
||
|
* Interrupt - A pointer to the interrupt structure which describes the
|
||
|
* interrupt data.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The request has been queued. If sent successfully,
|
||
|
* an HIDEVENT_INTERRUPT_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS. If the transmission fails, the same event will be
|
||
|
* received with a status specifying the reason. The memory pointed
|
||
|
* to by the Interrupt parameter must not be modified until the
|
||
|
* transaction is complete.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_NO_CONNECTION - No connection exists for transmitting.
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* BT_STATUS_IN_USE - The channel is already in use (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_SendInterrupt(HidChannel *Channel, HidInterrupt *Interrupt);
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_CloseConnection()
|
||
|
*
|
||
|
* Closes an HID connection between two devices. When the connection
|
||
|
* is closed, the application will receive an HIDEVENT_CLOSED event.
|
||
|
*
|
||
|
* If there are outstanding transactions or interrupts when a connection is
|
||
|
* closed, an event will be received by the application for each one. The
|
||
|
* "status" field for these events will be set to BT_STATUS_NO_CONNECTION.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel connection to be closed. The
|
||
|
* HIDEVENT_CLOSED event indicates that the connection is closed
|
||
|
* and a new connection may be attempted.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The request to close the connection will be sent.
|
||
|
* The application will receive an HIDEVENT_CLOSED event when the
|
||
|
* connection is closed.
|
||
|
*
|
||
|
* BT_STATUS_FAILED - The channel is invalid or could not be
|
||
|
* disconnected.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_NO_CONNECTION - No ACL connection exists on this channel.
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* BT_STATUS_IN_PROGRESS - The channel is already disconnecting
|
||
|
* (XA_ERROR_CHECK Only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_CloseConnection(HidChannel *Channel);
|
||
|
|
||
|
|
||
|
/****************************************************************************
|
||
|
*
|
||
|
* Section: HID Host Functions
|
||
|
*
|
||
|
****************************************************************************
|
||
|
*
|
||
|
* These functions are used only HID Host implementations. HID_HOST must
|
||
|
* be defined to XA_ENABLED to access them.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
|
||
|
#if HID_HOST == XA_ENABLED
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_RegisterHost()
|
||
|
*
|
||
|
* Registers a host for receiving HID connections. When using this function
|
||
|
* the default the profile uses security values when registering the
|
||
|
* security record. For control of the security record, use
|
||
|
* HID_RegisterHostSec().
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Channel structure used by HID to manage the host. The
|
||
|
* application need not initialize this structure. This structure
|
||
|
* is used by HID until HID_DeregisterHost is called.
|
||
|
*
|
||
|
* Callback - Callback function for receiving events related to the
|
||
|
* host.
|
||
|
*
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_SUCCESS - The host was successfully registered.
|
||
|
*
|
||
|
* BT_STATUS_FAILED - The host could not be registered, probably
|
||
|
* because the channel is already in use.
|
||
|
*
|
||
|
* BT_STATUS_BUSY - The protocol (PSM) is already in use.
|
||
|
*
|
||
|
* BT_STATUS_NO_RESOURCES - Could not register the PSM with L2CAP.
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* BT_STATUS_IN_USE - The channel structure is already in use
|
||
|
* (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_RegisterHost(HidChannel *Channel, HidCallback Callback ,sdp_AttTable_Info_t sdp_AttTable_Info);
|
||
|
#define HID_RegisterHost(ch, cb,table_info) HID_Register(ch, cb, HID_ROLE_HOST, 0,table_info)
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_RegisterHostSec()
|
||
|
*
|
||
|
* Registers a host for receiving secured HID connections.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Channel structure used by HID to manage the host. The
|
||
|
* application need not initialize this structure. This structure
|
||
|
* is used by HID until HID_DeregisterHost is called.
|
||
|
*
|
||
|
* Callback - Callback function for receiving events related to the
|
||
|
* host.
|
||
|
*
|
||
|
* secParms - Security parameters used to register the security record
|
||
|
* with the Security Manager in the ME.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_SUCCESS - The host was successfully registered.
|
||
|
*
|
||
|
* BT_STATUS_FAILED - The host could not be registered, probably
|
||
|
* because the channel is already in use.
|
||
|
*
|
||
|
* BT_STATUS_BUSY - The protocol (PSM) is already in use.
|
||
|
*
|
||
|
* BT_STATUS_NO_RESOURCES - Could not register the PSM with L2CAP.
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* BT_STATUS_IN_USE - The channel structure is already in use
|
||
|
* (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_RegisterHostSec(HidChannel *Channel, HidCallback Callback, BtSecurityParms *secParms,sdp_AttTable_Info_t sdp_AttTable_Info);
|
||
|
#define HID_RegisterHostSec(ch, cb, sec,table_info) HID_Register(ch, cb, HID_ROLE_HOST, sec,table_info)
|
||
|
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_DeregisterHost()
|
||
|
*
|
||
|
* Deregisters an HID host channel.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Channel to deregister.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_SUCCESS - The host was successfully deregistered.
|
||
|
*
|
||
|
* BT_STATUS_BUSY - The host has an open channel. The channel
|
||
|
* must be successfully closed with HID_CloseConnection before
|
||
|
* calling this function.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_DeregisterHost(HidChannel *Channel);
|
||
|
#define HID_DeregisterHost(ch) HID_Deregister(ch)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_HostQueryDevice()
|
||
|
*
|
||
|
* Queries the Device for its SDP database entry. The SDP database
|
||
|
* contains information about the device's capabilities. The query
|
||
|
* information will be returned to the application with a
|
||
|
* HIDEVENT_QUERY_CNF event. The query data is parsed and placed
|
||
|
* in memory allocated dynamically. The application can save the
|
||
|
* pointer to the SDP data and reference it as long as the channel
|
||
|
* is still registered. The data is no longer valid when the channel is
|
||
|
* deregistred.
|
||
|
*
|
||
|
* It is possible that the query will fail, because some devices limited
|
||
|
* in memory will not allow an SDP query while the HID channel is open.
|
||
|
* It is suggested that the host query the device before opening a
|
||
|
* connection. After the callback, the "sdpDisable" field of the
|
||
|
* "ptrs.queryRsp" structure tells whether sdp queries are enabled or
|
||
|
* disabled when a HID channel is already open.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the Channel for this action.
|
||
|
*
|
||
|
* Addr - Bluetooth device address of the remote device.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The request to query the SDP entry was sent.
|
||
|
* When a response is received from the device, an HIDEVENT_QUERY_CNF
|
||
|
* event will be received.
|
||
|
*
|
||
|
* BT_STATUS_BUSY - The connection is already in the process of opening.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (SDP, L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_HostQueryDevice(HidChannel *Channel, BD_ADDR *Addr);
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_HostGetReport()
|
||
|
*
|
||
|
* Sends an report request to the HID device. The "parm.reportReq" field
|
||
|
* of the "Trans" parameter should be initialized with the appropriate
|
||
|
* information. Requesting an input report causes the device to respond
|
||
|
* with the instantaneous state of fields in the requested input report.
|
||
|
* Requesting an output report causes the device to respond with the last
|
||
|
* output report received on the interrupt channel. If no output report
|
||
|
* has been received, default values will be returned. Requesting a feature
|
||
|
* report causes the device to return the default values or instantaneous
|
||
|
* state of the feature report fields.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the request.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction structure which describes the
|
||
|
* request.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The request has been queued. If sent successfully,
|
||
|
* at lease one HIDEVENT_TRANSACTION_RSP event will be receive with
|
||
|
* report data. A HIDEVENT_TRANSACTION_COMPLETE event will arrive with
|
||
|
* a "status" of BT_STATUS_SUCCESS upon successful completion.
|
||
|
* If the transmission fails, the same event will be received with a
|
||
|
* status specifying the reason. The memory pointed to by the Trans
|
||
|
* parameter must not be modified until the transaction is complete.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_HostGetReport(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_HostGetReport(ch, trans) HID_SendTransaction(ch, HID_TRANS_GET_REPORT, trans)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_HostSetReport()
|
||
|
*
|
||
|
* Sends a report to the HID device. The "parm.report" field of the "Trans"
|
||
|
* parameter should be initialized with the appropriate report information.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the request.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction, which describes the report.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The request has been queued. If sent successfully,
|
||
|
* an HIDEVENT_TRANSACTION_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS. If the transmission fails, the same event will be
|
||
|
* received with a status specifying the reason. The memory pointed to
|
||
|
* by the Trans parameter must not be modified until the transaction is
|
||
|
* complete.
|
||
|
*
|
||
|
* BT_STATUS_NO_CONNECTION - No connection exists for transmitting.
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_HostSetReport(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_HostSetReport(ch, trans) HID_SendTransaction(ch, HID_TRANS_SET_REPORT, trans)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_HostGetProtocol()
|
||
|
*
|
||
|
* Sends an protocol request to the HID device. It is not necessary to
|
||
|
* initialize the "Trans" parameter.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the request.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction structure.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The request has been queued. If sent successfully,
|
||
|
* an HIDEVENT_TRANSACTION_RSP event will be receive with protocol data.
|
||
|
* An HIDEVENT_TRANSACTION_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS upon successful complete. If the transaction
|
||
|
* fails, the same event will be received with a status specifying the
|
||
|
* reason. The memory pointed to by the Trans parameter must not be
|
||
|
* modified until the transaction is complete.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_HostGetProtocol(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_HostGetProtocol(ch, trans) HID_SendTransaction(ch, HID_TRANS_GET_PROTOCOL, trans)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_HostSetProtocol()
|
||
|
*
|
||
|
* Sends the current protocol to the HID device. The "parm.protocol" field
|
||
|
* of the "Trans" parameter should be initialized with the appropriate
|
||
|
* protocol.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the request.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction, which describes the protocol.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The request has been queued. If sent successfully,
|
||
|
* an HIDEVENT_TRANSACTION_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS. If the transmission fails, the same event will be
|
||
|
* received with a status specifying the reason. The memory pointed to
|
||
|
* by the Trans parameter must not be modified until the transaction is
|
||
|
* complete.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_HostSetProtocol(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_HostSetProtocol(ch, trans) HID_SendTransaction(ch, HID_TRANS_SET_PROTOCOL, trans)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_HostGetIdleRate()
|
||
|
*
|
||
|
* Sends an idle rate status request to the HID device. It is not necessary
|
||
|
* to initialize the "Trans" parameter.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the request.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction structure.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The request has been queued. If sent successfully,
|
||
|
* an HIDEVENT_TRANSACTION_RSP event will be receive with "idleRate" data.
|
||
|
* An HIDEVENT_TRANSACTION_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS upon successful complete. If the transaction
|
||
|
* fails, the same event will be received with a status specifying the
|
||
|
* reason. The memory pointed to by the Trans parameter must not be
|
||
|
* modified until the transaction is complete.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_HostGetIdleRate(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_HostGetIdleRate(ch, trans) HID_SendTransaction(ch, HID_TRANS_GET_IDLE_RATE, trans)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_HostSetIdleRate()
|
||
|
*
|
||
|
* Sends the idle rate to the HID device. The "parm.idleRate" field of the
|
||
|
* "Trans" parameter should be initialized with the appropriate idle rate.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the request.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction, which describes idle rate.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The idle rate has been queued. If sent successfully,
|
||
|
* an HIDEVENT_TRANSACTION_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS. If the transmission fails, the same event will be
|
||
|
* received with a status specifying the reason. The memory pointed to
|
||
|
* by the Trans parameter must not be modified until the transaction is
|
||
|
* complete.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_HostSetIdleRate(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_HostSetIdleRate(ch, trans) HID_SendTransaction(ch, HID_TRANS_SET_IDLE_RATE, trans)
|
||
|
#endif
|
||
|
|
||
|
/****************************************************************************
|
||
|
*
|
||
|
* Section: HID Device Functions
|
||
|
*
|
||
|
****************************************************************************
|
||
|
*
|
||
|
* These functions are used only HID Device implementations. HID_DEVICE must
|
||
|
* be defined to XA_ENABLED to access them.
|
||
|
*
|
||
|
*/
|
||
|
|
||
|
#if HID_DEVICE == XA_ENABLED
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_RegisterDevice()
|
||
|
*
|
||
|
* Registers a device for receiving HID connections. When using this function
|
||
|
* the default the profile uses security values when registering the
|
||
|
* security record. For control of the security record, use
|
||
|
* HID_RegisterDeviceSec().
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Channel structure used by HID to manage the device. The
|
||
|
* application need not initialize this structure. This structure
|
||
|
* is used by HID until HID_DeregisterDevice is called.
|
||
|
*
|
||
|
* Callback - Callback function for receiving events related to the
|
||
|
* device.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_SUCCESS - The device was successfully registered.
|
||
|
*
|
||
|
* BT_STATUS_FAILED - The device could not be registered, probably
|
||
|
* because the channel is already in use.
|
||
|
*
|
||
|
* BT_STATUS_BUSY - The protocol (PSM) is already in use.
|
||
|
*
|
||
|
* BT_STATUS_NO_RESOURCES - Could not register the PSM with L2CAP.
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* BT_STATUS_IN_USE - The channel structure is already in use
|
||
|
* (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_RegisterDevice(HidChannel *Channel, HidCallback Callback,sdp_AttTable_Info_t sdp_AttTable_Info);
|
||
|
#define HID_RegisterDevice(ch, cb,table_info) HID_Register(ch, cb, HID_ROLE_DEVICE, 0,table_info)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_RegisterDeviceSec()
|
||
|
*
|
||
|
* Registers a device for receiving secured HID connections.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Channel structure used by HID to manage the device. The
|
||
|
* application need not initialize this structure. This structure
|
||
|
* is used by HID until HID_DeregisterDevice is called.
|
||
|
*
|
||
|
* Callback - Callback function for receiving events related to the
|
||
|
* device.
|
||
|
*
|
||
|
* secParms - Security parameters used to register the security record
|
||
|
* with the Security Manager in the ME.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_SUCCESS - The device was successfully registered.
|
||
|
*
|
||
|
* BT_STATUS_FAILED - The device could not be registered, probably
|
||
|
* because the channel is already in use.
|
||
|
*
|
||
|
* BT_STATUS_BUSY - The protocol (PSM) is already in use.
|
||
|
*
|
||
|
* BT_STATUS_NO_RESOURCES - Could not register the PSM with L2CAP.
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* BT_STATUS_IN_USE - The channel structure is already in use
|
||
|
* (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_RegisterDeviceSec(HidChannel *Channel, HidCallback Callback, BtSecurityParms *secParm,sdp_AttTable_Info_t sdp_AttTable_Info);
|
||
|
#define HID_RegisterDeviceSec(ch, cb, sec,table_info) HID_Register(ch, cb, HID_ROLE_DEVICE, sec,table_info)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_DeregisterDevice()
|
||
|
*
|
||
|
* Deregisters an HID device channel.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Channel to deregister.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_SUCCESS - The device was successfully deregistered.
|
||
|
*
|
||
|
* BT_STATUS_BUSY - The device has an open channel. The channel
|
||
|
* must be successfully closed with HID_CloseConnection before
|
||
|
* calling this function.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_DeregisterDevice(HidChannel *Channel);
|
||
|
#define HID_DeregisterDevice(ch) HID_Deregister(ch)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_DeviceSetReportRsp()
|
||
|
*
|
||
|
* Sends a confirmation of a report to the HID host. This function is
|
||
|
* called in response to an HIDEVENT_DEVICE_SET_REPORT event. The
|
||
|
* "resultCode" field of the "Trans" parameter should be initialized
|
||
|
* with the appropriate response code.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the response.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction, which describes the result code.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The response has been queued.
|
||
|
* A HIDEVENT_TRANSACTION_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS upon successful transmission. If the transmission
|
||
|
* fails, the same event will be received with a status specifying the
|
||
|
* reason. The memory pointed to by the Trans parameter must not be
|
||
|
* modified until the transaction is complete.
|
||
|
*
|
||
|
* BT_STATUS_PENDING - The response has been queued. If sent successfully,
|
||
|
* an HIDEVENT_SET_REPORT_RSP event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS. If the transmission fails, the same event will be
|
||
|
* received with a status specifying the reason.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_DeviceSetReportRsp(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_DeviceSetReportRsp(ch, trans) HID_SendTransaction(ch, HID_TRANS_SET_REPORT_RSP, trans)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_DeviceGetReportRsp()
|
||
|
*
|
||
|
* Sends a report to the HID host. This function is called in response to
|
||
|
* the HIDEVENT_DEVICE_GET_REPORT event. The "resultCode"
|
||
|
* field of the "Trans" parameter should be initialized with the appropriate
|
||
|
* response code. If "resultCode" is set to HID_RESULT_SUCCESS, then
|
||
|
* the "parm.report" field of the "Trans" parameter should be initialized
|
||
|
* with the appropriate report data.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the report.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction, which describes the report.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The response has been queued.
|
||
|
* A HIDEVENT_TRANSACTION_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS upon successful transmission. If the transmission
|
||
|
* fails, the same event will be received with a status specifying the
|
||
|
* reason. The memory pointed to by the Trans parameter must not be
|
||
|
* modified until the transaction is complete.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_DeviceGetReportRsp(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_DeviceGetReportRsp(ch, trans) HID_SendTransaction(ch, HID_TRANS_GET_REPORT_RSP, trans)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_DeviceSetProtocolRsp()
|
||
|
*
|
||
|
* Sends a confirmation of the protocol to the HID host. This call is made
|
||
|
* in response to the HIDEVENT_DEVICE_SET_PROTOCOL event. The
|
||
|
* "resultCode" field of the "Trans" parameter should be initialized
|
||
|
* with the appropriate response code.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the response.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction, which describes the result code.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The response has been queued.
|
||
|
* A HIDEVENT_TRANSACTION_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS upon successful transmission. If the transmission
|
||
|
* fails, the same event will be received with a status specifying the
|
||
|
* reason. The memory pointed to by the Trans parameter must not be
|
||
|
* modified until the transaction is complete.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_DeviceSetProtocolRsp(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_DeviceSetProtocolRsp(ch, trans) HID_SendTransaction(ch, HID_TRANS_SET_PROTOCOL_RSP, trans)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_DeviceGetProtocolRsp()
|
||
|
*
|
||
|
* Sends a protocol response to the HID host. This function is called in
|
||
|
* response to the HIDEVENT_HOST_GET_PROTOCOL event. The "resultCode"
|
||
|
* field of the "Trans" parameter should be initialized with the appropriate
|
||
|
* response code. If "resultCode" is set to HID_RESULT_SUCCESS, then
|
||
|
* the "parm.protocol" field of the "Trans" parameter should be initialized
|
||
|
* with the appropriate protocol.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the response.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction, which describes the protocol.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The response has been queued.
|
||
|
* A HIDEVENT_TRANSACTION_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS upon successful transmission. If the transmission
|
||
|
* fails, the same event will be received with a status specifying the
|
||
|
* reason. The memory pointed to by the Trans parameter must not be
|
||
|
* modified until the transaction is complete.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_DeviceGetProtocolRsp(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_DeviceGetProtocolRsp(ch, trans) HID_SendTransaction(ch, HID_TRANS_GET_PROTOCOL_RSP, trans)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_DeviceSetIdleRsp()
|
||
|
*
|
||
|
* Sends a confirmation of the idle rate to the HID host. This call is made
|
||
|
* in response to the HIDEVENT_DEVICE_SET_IDLE_RATE event. The
|
||
|
* "resultCode" field of the "Trans" parameter should be initialized
|
||
|
* with the appropriate response code.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the response.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction, which describes the result code.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The response has been queued.
|
||
|
* A HIDEVENT_TRANSACTION_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS upon successful transmission. If the transmission
|
||
|
* fails, the same event will be received with a status specifying the
|
||
|
* reason. The memory pointed to by the Trans parameter must not be
|
||
|
* modified until the transaction is complete.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_DeviceSetIdleRsp(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_DeviceSetIdleRsp(ch, trans) HID_SendTransaction(ch, HID_TRANS_SET_IDLE_RATE_RSP, trans)
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_DeviceGetIdleRsp()
|
||
|
*
|
||
|
* Sends the idle rate to the HID host. This function is called in response
|
||
|
* to the HIDEVENT_HOST_GET_IDLE_RATE event. The "resultCode" field of
|
||
|
* the "Trans" parameter should be initialized with the appropriate response
|
||
|
* code. If "resultCode" is set to HID_RESULT_SUCCESS, then the
|
||
|
* "parm.idleRate" field of the "Trans" parameter should be initialized with
|
||
|
* the appropriate information.
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel on which to send the response.
|
||
|
*
|
||
|
* Trans - A pointer to the transaction, which describes the idle rate.
|
||
|
*
|
||
|
* Returns:
|
||
|
* BT_STATUS_PENDING - The response has been queued.
|
||
|
* A HIDEVENT_TRANSACTION_COMPLETE event will arrive with a "status" of
|
||
|
* BT_STATUS_SUCCESS upon successful transmission. If the transmission
|
||
|
* fails, the same event will be received with a status specifying the
|
||
|
* reason. The memory pointed to by the Trans parameter must not be
|
||
|
* modified until the transaction is complete.
|
||
|
*
|
||
|
* BT_STATUS_NOT_FOUND - The specified channel was not found (XA_ERROR_CHECK
|
||
|
* only).
|
||
|
*
|
||
|
* BT_STATUS_INVALID_PARM - Invalid parameter (XA_ERROR_CHECK only).
|
||
|
*
|
||
|
* Other - It is possible to receive other error codes, depending on the
|
||
|
* lower layer service in use (L2CAP or Management Entity).
|
||
|
*/
|
||
|
BtStatus HID_DeviceGetIdleRsp(HidChannel *Channel, HidTransaction *Trans);
|
||
|
#define HID_DeviceGetIdleRsp(ch, trans) HID_SendTransaction(ch, HID_TRANS_GET_IDLE_RATE_RSP, trans)
|
||
|
#endif
|
||
|
|
||
|
/*---------------------------------------------------------------------------
|
||
|
* HID_IsConnected()
|
||
|
*
|
||
|
* Returns TRUE if the channel is connected, false if it is not;
|
||
|
*
|
||
|
* Parameters:
|
||
|
* Channel - Identifies the channel.
|
||
|
*
|
||
|
* Returns:
|
||
|
* TRUE - The channel is connected.
|
||
|
*
|
||
|
* FALSE - The channel is not connected.
|
||
|
*/
|
||
|
bool HID_IsConnected(HidChannel *Channel);
|
||
|
|
||
|
#endif /* __HID_H */
|
||
|
|
||
|
|