Statistics
| Branch: | Tag: | Revision:

amiro-os / include / amiro / power / bq24103a.hpp @ d1b06e44

History | View | Annotate | Download (1.081 KB)

1
/*
2
 * BQ24103A - Battery Charger
3
 */
4

    
5
#ifndef AMIRO_BQ24103A_H_
6
#define AMIRO_BQ24103A_H_
7

    
8
namespace amiro {
9

    
10
class BaseBQ24103A
11
{
12
public:
13
  BaseBQ24103A()
14
  {}
15

    
16
  virtual ~BaseBQ24103A()
17
  {}
18

    
19
  virtual void enable(const bool en = true) = 0;
20

    
21
  virtual bool isEnabled() const = 0;
22

    
23
  virtual bool isCharging() const = 0;
24
};
25

    
26
template <uintptr_t EN_PadGrp, uint32_t EN_Pad, uintptr_t STAT_PadGrp, uint32_t STAT_Pad>
27
class BQ24103A : public BaseBQ24103A
28
{
29
private:
30
  bool is_enabled;
31

    
32
public:
33
  BQ24103A(const bool enable = false) :
34
    is_enabled(enable)
35
  {
36
    this->enable(enable);
37
  }
38

    
39
  virtual ~BQ24103A()
40
  {}
41

    
42
  void enable(const bool enable = true)
43
  {
44
    // writing to a port is not atomic, thus the system must be locked
45
    chSysLock();
46
    palWritePad((GPIO_TypeDef*)EN_PadGrp, EN_Pad, (enable? PAL_LOW : PAL_HIGH));
47
    this->is_enabled = enable;
48
    chSysUnlock();
49
    return;
50
  }
51

    
52
  bool isEnabled() const
53
  {
54
    return this->is_enabled;
55
  }
56

    
57
  bool isCharging() const
58
  {
59
    return (palReadPad((GPIO_TypeDef*)STAT_PadGrp, STAT_Pad) == PAL_LOW);
60
  }
61
};
62

    
63
}
64

    
65
#endif /* AMIRO_BQ24103A_H_ */