amiro-os / components / bus / i2c / I2CMultiplexer.cpp @ eef47799
History | View | Annotate | Download (1.015 KB)
1 | 58fe0e0b | Thomas Schöpping | #include <amiro/bus/i2c/I2CMultiplexer.hpp> |
---|---|---|---|
2 | |||
3 | namespace amiro {
|
||
4 | |||
5 | I2CMultiplexer:: |
||
6 | I2CMultiplexer(I2CDriver *driver) : |
||
7 | driver(driver) { |
||
8 | |||
9 | #if CH_USE_MUTEXES
|
||
10 | chMtxInit(&this->mutex);
|
||
11 | #else
|
||
12 | chSemInit(&this->semaphore, 1); |
||
13 | #endif /* CH_USE_MUTEXES */ |
||
14 | |||
15 | }; |
||
16 | |||
17 | I2CMultiplexer:: |
||
18 | ~I2CMultiplexer() { |
||
19 | |||
20 | } |
||
21 | |||
22 | i2cflags_t |
||
23 | I2CMultiplexer:: |
||
24 | getErrors() { |
||
25 | |||
26 | return this->driver->getErrors(); |
||
27 | |||
28 | } |
||
29 | |||
30 | msg_t |
||
31 | I2CMultiplexer:: |
||
32 | masterTransmit(const I2CTxParams *params, systime_t timeout) {
|
||
33 | |||
34 | return this->driver->masterTransmit(params, timeout); |
||
35 | |||
36 | } |
||
37 | |||
38 | msg_t |
||
39 | I2CMultiplexer:: |
||
40 | masterReceive(const I2CRxParams *params, systime_t timeout) {
|
||
41 | |||
42 | return this->driver->masterReceive(params, timeout); |
||
43 | |||
44 | } |
||
45 | |||
46 | void
|
||
47 | I2CMultiplexer:: |
||
48 | acquireBus() { |
||
49 | |||
50 | #if CH_USE_MUTEXES
|
||
51 | chMtxLock(&this->mutex);
|
||
52 | #elif CH_USE_SEMAPHORES
|
||
53 | chSemWait(&this->semaphore);
|
||
54 | #endif
|
||
55 | |||
56 | this->driver->acquireBus();
|
||
57 | } |
||
58 | |||
59 | void
|
||
60 | I2CMultiplexer:: |
||
61 | releaseBus() { |
||
62 | |||
63 | this->driver->releaseBus();
|
||
64 | |||
65 | #if CH_USE_MUTEXES
|
||
66 | chMtxUnlock(); |
||
67 | #elif CH_USE_SEMAPHORES
|
||
68 | chSemSignal(&this->semaphore);
|
||
69 | #endif
|
||
70 | |||
71 | } |
||
72 | |||
73 | } /* amiro */ |