Statistics
| Branch: | Tag: | Revision:

amiro-os / include / amiro / bus / i2c / I2CMultiplexer.hpp @ d1b06e44

History | View | Annotate | Download (1.07 KB)

1
#ifndef AI2CMULTIPLEXER
2
#define AI2CMULTIPLEXER
3

    
4
#include <ch.hpp>
5
#include <hal.h>
6
#include <amiro/bus/i2c/I2CDriver.hpp>
7

    
8
/**
9
 * @brief   AMiRo
10
 */
11
namespace amiro {
12

    
13
  /**
14
   * @brief   I²C Bus Multiplexer
15
   */
16
  class I2CMultiplexer {
17

    
18
  public:
19

    
20
    I2CMultiplexer(I2CDriver *driver);
21
    virtual ~I2CMultiplexer() = 0;
22

    
23
    virtual i2cflags_t getErrors();
24
    virtual msg_t masterTransmit(const I2CTxParams *params, systime_t timeout = TIME_INFINITE);
25
    virtual msg_t masterReceive(const I2CRxParams *params, systime_t timeout = TIME_INFINITE);
26

    
27
    virtual void acquireBus();
28
    virtual void releaseBus();
29

    
30
    virtual msg_t select(const uint8_t bus_id) = 0;
31
    virtual msg_t deselect() = 0;
32

    
33
  private:
34

    
35
    I2CDriver *driver;
36

    
37
#if I2C_USE_MUTUAL_EXCLUSION || defined(__DOXYGEN__)
38
#if CH_USE_MUTEXES || defined(__DOXYGEN__)
39
    /**
40
    * @brief   Mutex protecting the bus.
41
    */
42
    ::Mutex                     mutex;
43
#elif CH_USE_SEMAPHORES
44
    ::Semaphore                 semaphore;
45
#endif
46
#endif /* I2C_USE_MUTUAL_EXCLUSION */
47

    
48
  };
49

    
50
} /* amiro */
51

    
52
#endif /* AI2CMULTIPLEXER */