65 lines
1.1 KiB
C
65 lines
1.1 KiB
C
|
#ifndef _CODEHANDLER_H_
|
||
|
#define _CODEHANDLER_H_
|
||
|
|
||
|
#include <bluetooth/HCI/btHCI.h>
|
||
|
|
||
|
namespace Bluetooth
|
||
|
{
|
||
|
|
||
|
class CodeHandler {
|
||
|
|
||
|
public:
|
||
|
/*
|
||
|
* TODO: Handler and protocol could be fit in 16 bits 12
|
||
|
* for handler and 4 for the protocol
|
||
|
*/
|
||
|
|
||
|
/*
|
||
|
* Used:
|
||
|
* - From HCI layer to send events to bluetooth server.
|
||
|
* - L2cap lower to dispatch TX packets to HCI Layer informing about connection handle
|
||
|
* - Transport drivers dispatch its data to HCI layer
|
||
|
*
|
||
|
*/
|
||
|
static inline hci_id Device(uint32 code)
|
||
|
{
|
||
|
return ((code & 0xFF) >> 24);
|
||
|
}
|
||
|
|
||
|
|
||
|
static inline void SetDevice(uint32* code, hci_id device)
|
||
|
{
|
||
|
*code = *code | ((device & 0xFF) << 24);
|
||
|
}
|
||
|
|
||
|
|
||
|
static inline uint16 Handler(uint32 code)
|
||
|
{
|
||
|
return ((code & 0xFFFF) >> 0);
|
||
|
}
|
||
|
|
||
|
|
||
|
static void SetHandler(uint32* code, uint16 handler)
|
||
|
{
|
||
|
*code = *code | ((handler & 0xFFFF) << 0);
|
||
|
}
|
||
|
|
||
|
|
||
|
static bt_packet_t Protocol(uint32 code)
|
||
|
{
|
||
|
return (bt_packet_t)((code && 0xFF) >> 16);
|
||
|
}
|
||
|
|
||
|
|
||
|
static void SetProtocol(uint32* code, bt_packet_t protocol)
|
||
|
{
|
||
|
*code = *code | ((protocol & 0xFF) << 16);
|
||
|
}
|
||
|
|
||
|
|
||
|
};
|
||
|
|
||
|
} // namespace
|
||
|
|
||
|
#endif
|