amiro-os / devices / PowerManagement / global.hpp @ a47d64ad
History | View | Annotate | Download (6.936 KB)
1 |
#ifndef AMIRO_GLOBAL_HPP_
|
---|---|
2 |
#define AMIRO_GLOBAL_HPP_
|
3 |
|
4 |
#include <hal.h> |
5 |
|
6 |
#include <array> |
7 |
|
8 |
#include <amiro/power/adconverter.hpp> |
9 |
#include <amiro/bus/i2c/HWI2CDriver.hpp> |
10 |
#include <amiro/bus/i2c/VI2CDriver.hpp> |
11 |
#include <amiro/bus/i2c/mux/pca9544.hpp> |
12 |
#include <amiro/proximity/vcnl4020.hpp> |
13 |
#include <amiro/eeprom/at24.hpp> |
14 |
#include <amiro/FileSystemInputOutput/FSIOPowerManagement.hpp> |
15 |
#include <amiro/input/mpr121.hpp> |
16 |
#include <amiro/power/ltc4412.hpp> |
17 |
#include <amiro/power/ina219.hpp> |
18 |
#include <amiro/power/bq27500.hpp> |
19 |
#include <amiro/power/bq24103a.hpp> |
20 |
#include <amiro/power/tps62113.hpp> |
21 |
#include <amiro/bluetooth/bluetooth.hpp> |
22 |
#include <amiro/bluetooth/bluetooth-serial.hpp> |
23 |
#include <amiro/bluetooth/bluetooth-wiimote.hpp> |
24 |
#include <amiro/serial_reset/iwrap_can_mux.hpp> |
25 |
#include <amiro/serial_reset/serial_can_mux.hpp> |
26 |
#include <PowerManagement.h> |
27 |
#include <userthread.h> |
28 |
|
29 |
namespace amiro {
|
30 |
|
31 |
class Global final |
32 |
{ |
33 |
public:
|
34 |
|
35 |
SerialConfig sd1_config{ |
36 |
/* speed */ 115200, |
37 |
/* CR1 register */ 0, |
38 |
/* CR2 register */ 0, |
39 |
/* CR3 register */ 0 |
40 |
}; |
41 |
|
42 |
PWMConfig pwm3_config{ |
43 |
/* frequency [Hz] */ 10000, |
44 |
/* period [ticks] */ 100, |
45 |
/* callback */ NULL, |
46 |
/* channels */ {
|
47 |
{PWM_OUTPUT_DISABLED, NULL},
|
48 |
{PWM_OUTPUT_ACTIVE_HIGH, NULL},
|
49 |
{PWM_OUTPUT_DISABLED, NULL},
|
50 |
{PWM_OUTPUT_DISABLED, NULL}
|
51 |
}, |
52 |
/* CR2 register */ 0, |
53 |
/* break & dead time */ 0 |
54 |
}; |
55 |
|
56 |
I2CConfig i2c1_config{ |
57 |
/* I2C mode */ OPMODE_I2C,
|
58 |
/* frequency */ 100000, |
59 |
/* I2C fast mode duty cycle */ STD_DUTY_CYCLE
|
60 |
}; |
61 |
I2CConfig i2c2_config{ |
62 |
/* I2C mode */ OPMODE_I2C,
|
63 |
/* frequency */ 100000, |
64 |
/* I2C fast mode duty cycle */ STD_DUTY_CYCLE
|
65 |
}; |
66 |
|
67 |
VCNL4020::VCNL4020Config vcnl4020_config{ |
68 |
/* command */ VCNL4020::ALS_EN | VCNL4020::PROX_EN | VCNL4020::SELFTIMED_EN,
|
69 |
/* ambient parameter */ VCNL4020::AMBIENT_RATE_2 | VCNL4020::AMBIENT_AUTO_OFFSET | VCNL4020::AMBIENT_AVG_32,
|
70 |
/* IR LED current [mA] */ 200u, |
71 |
/* proximity rate */ VCNL4020::PROX_RATE_125
|
72 |
}; |
73 |
|
74 |
adcsample_t adc1_buffer[1];
|
75 |
ADCConversionGroup adc1_conversion_group{ |
76 |
/* buffer type */ TRUE, // TRUE=continuous; FALSE=linear |
77 |
/* number of channels */ 1, |
78 |
/* callback function */ NULL, |
79 |
/* error callback */ NULL, |
80 |
/* CR1 */ 0, |
81 |
/* CR2 */ ADC_CR2_SWSTART | ADC_CR2_CONT,
|
82 |
/* SMPR1 */ 0, |
83 |
/* SMPR2 */ ADC_SMPR2_SMP_AN9(ADC_SAMPLE_480),
|
84 |
/* HTR */ ADC_HTR_HT,
|
85 |
/* LTR */ 0, |
86 |
/* SQR1 */ ADC_SQR1_NUM_CH(1), |
87 |
/* SQR2 */ 0, |
88 |
/* SQR3 */ ADC_SQR3_SQ1_N(ADC_CHANNEL_IN9)
|
89 |
}; |
90 |
ADConverter adc1_vsys; |
91 |
|
92 |
HWI2CDriver HW_I2C1; |
93 |
HWI2CDriver HW_I2C2; |
94 |
|
95 |
AT24 at24c01; |
96 |
fileSystemIo::FSIOPowerManagement memory; |
97 |
|
98 |
LTC4412<(uintptr_t)GPIOC, GPIOC_PATH_DC> ltc4412; |
99 |
|
100 |
std::array<INA219::Driver,5> ina219;
|
101 |
|
102 |
std::array<BQ27500::Driver,2> bq27500;
|
103 |
|
104 |
private:
|
105 |
BQ24103A<(uintptr_t)GPIOC, GPIOC_CHARGE_EN1_N, (uintptr_t)GPIOC, GPIOC_CHARGE_STAT1A> bq24103a_p7; |
106 |
BQ24103A<(uintptr_t)GPIOD, GPIOD_CHARGE_EN2_N, (uintptr_t)GPIOB, GPIOB_CHARGE_STAT2A> bq24103a_p8; |
107 |
public:
|
108 |
std::array<BaseBQ24103A*,2> bq24103a;
|
109 |
|
110 |
TPS62113<(uintptr_t)GPIOA, GPIOA_SYS_REG_EN> tps62113_vio18_33_50; |
111 |
TPS62113<(uintptr_t)GPIOB, GPIOB_POWER_EN> tps62113_vsys42; |
112 |
|
113 |
BLUETOOTH wt12; |
114 |
|
115 |
std::array<PCA9544<true>, 2> HW_PCA9544; |
116 |
|
117 |
std::array<VI2CDriver, 4> V_I2C1;
|
118 |
std::array<VI2CDriver, 4> V_I2C2;
|
119 |
|
120 |
std::array<VCNL4020, 8> vcnl4020;
|
121 |
|
122 |
MPR121::MPR121Config mpr121_run_config{ |
123 |
/* global_config */ MPR121::CDT_1 | MPR121::SFI_10 | MPR121::ESI_32 | MPR121::FFI_18 | 16, |
124 |
/* ele_config */ MPR121::CL_ON_ALL | MPR121::ELEPROX_0 | 4, |
125 |
/* auto_config */ MPR121::FFI_18 | MPR121::RETRY_2 | MPR121::BVA_ON_ALL | MPR121::AC_RECONF_EN | MPR121::AC_ENABLE,
|
126 |
/* up_side_limit */ 0x96u, |
127 |
/* low_side_limit */ 0x58u, |
128 |
/* target_level */ 0x68u |
129 |
}; |
130 |
MPR121::MPR121Config mpr121_stdby_config{ |
131 |
/* global_config */ MPR121::CDT_1 | MPR121::SFI_10 | MPR121::ESI_32 | MPR121::FFI_18 | 0, |
132 |
/* ele_config */ MPR121::CL_ON_ALL | MPR121::ELEPROX_0 | 0, /* TODO: hack: turn buttons off for standby */ |
133 |
/* auto_config */ MPR121::FFI_18 | MPR121::RETRY_2 | MPR121::BVA_ON_ALL | MPR121::AC_RECONF_EN | MPR121::AC_ENABLE,
|
134 |
/* up_side_limit */ 0x96u, |
135 |
/* low_side_limit */ 0x58u, |
136 |
/* target_level */ 0x68u |
137 |
}; |
138 |
MPR121 mpr121; |
139 |
|
140 |
IwrapCanMux iwrapcanmux1; |
141 |
SerialCanMux sercanmux1; |
142 |
|
143 |
PowerManagement robot; |
144 |
|
145 |
UserThread userThread; |
146 |
|
147 |
uint8_t shellTermID; |
148 |
|
149 |
public:
|
150 |
Global() : |
151 |
adc1_vsys(ADCD1, adc1_conversion_group, 9000000),
|
152 |
HW_I2C1(&I2CD1), HW_I2C2(&I2CD2), |
153 |
at24c01(0x400u / 0x08u, 0x08u, 500u, &HW_I2C2), |
154 |
memory(at24c01, /*BMSV*/ 1, /*bmsv*/ 2, /*HMV*/ 1, /*hmv*/ 1), |
155 |
ina219{{/* VDD */ INA219::Driver(HW_I2C2, 0x45u), |
156 |
/* VIO 1.8V */ INA219::Driver(HW_I2C1, 0x44u), |
157 |
/* VIO 3.3V */ INA219::Driver(HW_I2C1, 0x40u), |
158 |
/* VIO 4.2V */ INA219::Driver(HW_I2C2, 0x40u), |
159 |
/* VIO 5.0V */ INA219::Driver(HW_I2C2, 0x44u)} |
160 |
}, |
161 |
bq27500{{/* connector P7 */ BQ27500::Driver(HW_I2C2, *GPIOC, GPIOC_GAUGE_BATGD1_N, *GPIOC, GPIOC_GAUGE_BATLOW1),
|
162 |
/* connector P8 */ BQ27500::Driver(HW_I2C1, *GPIOB, GPIOB_GAUGE_BATGD2_N, *GPIOB, GPIOB_GAUGE_BATLOW2)}
|
163 |
}, |
164 |
bq24103a_p7(), bq24103a_p8(), |
165 |
bq24103a{{&bq24103a_p7, |
166 |
&bq24103a_p8} |
167 |
}, |
168 |
tps62113_vio18_33_50(), tps62113_vsys42(), |
169 |
wt12(&UARTD3), |
170 |
HW_PCA9544{{PCA9544<true>(&HW_I2C1, 0x07u), |
171 |
PCA9544<true>(&HW_I2C2, 0x07u)} |
172 |
}, |
173 |
V_I2C1{{VI2CDriver(&HW_PCA9544[0], 0), |
174 |
VI2CDriver(&HW_PCA9544[0], 1), |
175 |
VI2CDriver(&HW_PCA9544[0], 2), |
176 |
VI2CDriver(&HW_PCA9544[0], 3)} |
177 |
}, |
178 |
V_I2C2{{VI2CDriver(&HW_PCA9544[1], 0), |
179 |
VI2CDriver(&HW_PCA9544[1], 1), |
180 |
VI2CDriver(&HW_PCA9544[1], 2), |
181 |
VI2CDriver(&HW_PCA9544[1], 3)} |
182 |
}, |
183 |
vcnl4020{{/* rear left */ VCNL4020(&V_I2C1[1], &vcnl4020_config), |
184 |
/* left side rear */ VCNL4020(&V_I2C1[3], &vcnl4020_config), |
185 |
/* left side front */ VCNL4020(&V_I2C1[2], &vcnl4020_config), |
186 |
/* front left */ VCNL4020(&V_I2C2[0], &vcnl4020_config), |
187 |
/* front right */ VCNL4020(&V_I2C2[1], &vcnl4020_config), |
188 |
/* right side front */ VCNL4020(&V_I2C2[3], &vcnl4020_config), |
189 |
/* right side rear */ VCNL4020(&V_I2C2[2], &vcnl4020_config), |
190 |
/* rear right */ VCNL4020(&V_I2C1[0], &vcnl4020_config)} |
191 |
}, |
192 |
mpr121(&HW_I2C2, 0),
|
193 |
iwrapcanmux1(&SD1, &CAND1, CAN::POWER_MANAGEMENT_ID), |
194 |
sercanmux1(&SD1, &CAND1, CAN::POWER_MANAGEMENT_ID), |
195 |
robot(&CAND1), |
196 |
userThread() |
197 |
{ |
198 |
memset(this->adc1_buffer, 0, sizeof(adc1_buffer)); |
199 |
|
200 |
return;
|
201 |
} |
202 |
|
203 |
~Global() |
204 |
{ |
205 |
return;
|
206 |
} |
207 |
|
208 |
}; |
209 |
|
210 |
} // end of namespace amiro
|
211 |
|
212 |
#endif /* AMIRO_GLOBAL_HPP_ */ |