amiro-os / include / amiro / power / bq24103a.hpp @ a47d64ad
History | View | Annotate | Download (1.081 KB)
1 | 58fe0e0b | Thomas Schöpping | /*
|
---|---|---|---|
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_ */ |