1#ifndef _CODEHANDLER_H_
2#define _CODEHANDLER_H_
3
4#include <bluetooth/HCI/btHCI.h>
5
6namespace Bluetooth
7{
8
9class CodeHandler {
10
11public:
12	/*
13	 * TODO: Handler and protocol could be fit in 16 bits 12
14	 * for handler and 4 for the protocol
15	 */
16
17	/*
18	 * Used:
19	 * - From HCI layer to send events to bluetooth server.
20	 * - L2cap lower to dispatch TX packets to HCI Layer
21	 * - informing about connection handle
22	 * - Transport drivers dispatch its data to HCI layer
23	 *
24	 */
25	static hci_id Device(uint32 code)
26	{
27		return ((code & 0xFF000000) >> 24);
28	}
29
30
31	static void SetDevice(uint32* code, hci_id device)
32	{
33		*code = *code | ((device & 0xFF) << 24);
34	}
35
36
37	static uint16 Handler(uint32 code)
38	{
39		return ((code & 0xFFFF) >> 0);
40	}
41
42
43	static void SetHandler(uint32* code, uint16 handler)
44	{
45		*code = *code | ((handler & 0xFFFF) << 0);
46	}
47
48
49	static bt_packet_t Protocol(uint32 code)
50	{
51		return (bt_packet_t)((code & 0xFF0000) >> 16);
52	}
53
54
55	static void SetProtocol(uint32* code, bt_packet_t protocol)
56	{
57		*code = *code | ((protocol & 0xFF) << 16);
58	}
59
60
61};
62
63
64} // namespace
65
66
67#endif
68