amiro-os / include / amiro / bluetooth / bluetooth-transport.hpp @ 27d4e1fa
History | View | Annotate | Download (2.311 KB)
1 | 58fe0e0b | Thomas Schöpping | #ifndef _BLUETOOTH_TRANSPORT_H_
|
---|---|---|---|
2 | #define _BLUETOOTH_TRANSPORT_H_
|
||
3 | |||
4 | #include <amiro/bluetooth/bluetooth-descriptor.hpp> |
||
5 | |||
6 | #define BLUETOOTH_TRANSPORT_STORAGE_MAILBOX_SIZE 10 |
||
7 | #define BLUETOOTH_TRANSPORT_TRANSMIT_MAILBOX_SIZE 5 |
||
8 | |||
9 | #define TRANSMIT_COMPLETED_EVENT 1 |
||
10 | |||
11 | #define FRAME_HEADER_SIZE 4 |
||
12 | #define FRAME_TRAILER_SIZE 1 |
||
13 | |||
14 | namespace amiro {
|
||
15 | |||
16 | class BluetoothTransport : public chibios_rt::BaseStaticThread<128>, protected UARTConfig { |
||
17 | public:
|
||
18 | BluetoothTransport(UARTDriver* uart); |
||
19 | |||
20 | chibios_rt::Mailbox* bluetoothTransportGetStorageMailbox(); |
||
21 | chibios_rt::Mailbox* bluetoothTransportGetTransmitMailbox(); |
||
22 | |||
23 | void bluetoothTransportSetReceiveMailbox(uint8_t linkId, chibios_rt::Mailbox* mailbox);
|
||
24 | void bluetoothTransportResetState();
|
||
25 | bool bluetoothTransportIsMuxMode();
|
||
26 | |||
27 | protected:
|
||
28 | virtual msg_t main(void); |
||
29 | |||
30 | virtual void bluetoothTransportTransmitCompleted(); |
||
31 | virtual void bluetoothTransportCharacterReceived(uint16_t c); |
||
32 | virtual void bluetoothTransportReceiveCompleted(); |
||
33 | |||
34 | private:
|
||
35 | static void bluetoothTransportTransmitCompleted_cb(UARTDriver *uart); |
||
36 | static void bluetoothTransportCharacterReceived_cb(UARTDriver *uart, uint16_t c); |
||
37 | static void bluetoothTransportReceiveCompleted_cb(UARTDriver *uart); |
||
38 | |||
39 | UARTDriver *uart; |
||
40 | |||
41 | chibios_rt::Mailbox* receiveMailbox[10];
|
||
42 | chibios_rt::Mailbox storageMailbox; |
||
43 | chibios_rt::Mailbox transmitMailbox; |
||
44 | |||
45 | msg_t storageMailboxBuffer[BLUETOOTH_TRANSPORT_STORAGE_MAILBOX_SIZE]; |
||
46 | msg_t transmitMailboxBuffer[BLUETOOTH_TRANSPORT_TRANSMIT_MAILBOX_SIZE]; |
||
47 | |||
48 | enum BluetoothTransportState {
|
||
49 | BLUETOOTH_TRANSPORT_PLAIN = 0,
|
||
50 | BLUETOOTH_TRANSPORT_HEADER = 1,
|
||
51 | BLUETOOTH_TRANSPORT_DECODE = 2,
|
||
52 | BLUETOOTH_TRANSPORT_PAYLOAD = 3,
|
||
53 | BLUETOOTH_TRANSPORT_TRAILER = 4,
|
||
54 | BLUETOOTH_TRANSPORT_IDLE = 5
|
||
55 | }transmitState, receiveState; |
||
56 | |||
57 | BluetoothDescriptor descriptor[BLUETOOTH_TRANSPORT_STORAGE_MAILBOX_SIZE]; |
||
58 | BluetoothDescriptor *receive; |
||
59 | BluetoothDescriptor *transmit; |
||
60 | |||
61 | size_t rcvlength; |
||
62 | |||
63 | /* These arrays Contain header and trailer */
|
||
64 | uint8_t receiveFrameBuffer[5];
|
||
65 | uint8_t transmitFrameBuffer[5];
|
||
66 | |||
67 | void postReceiveDescriptorI();
|
||
68 | void postTransmitDescriptorI();
|
||
69 | |||
70 | uint8_t* getEncodeHeader(); |
||
71 | uint8_t* getEncodeTailer(); |
||
72 | int decodeHeader();
|
||
73 | }; |
||
74 | } |
||
75 | |||
76 | #endif /* _BLUETOOTH_TRANSPORT_H_ */ |