amiro-os / devices / PowerManagement / global.hpp @ e404e6c0
History | View | Annotate | Download (6.936 KB)
1 | 58fe0e0b | Thomas Schöpping | #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 | b4885314 | Thomas Schöpping | /* frequency */ 100000, |
59 | /* I2C fast mode duty cycle */ STD_DUTY_CYCLE
|
||
60 | 58fe0e0b | Thomas Schöpping | }; |
61 | I2CConfig i2c2_config{ |
||
62 | /* I2C mode */ OPMODE_I2C,
|
||
63 | b4885314 | Thomas Schöpping | /* frequency */ 100000, |
64 | /* I2C fast mode duty cycle */ STD_DUTY_CYCLE
|
||
65 | 58fe0e0b | Thomas Schöpping | }; |
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 | b4885314 | Thomas Schöpping | /* proximity rate */ VCNL4020::PROX_RATE_125
|
72 | 58fe0e0b | Thomas Schöpping | }; |
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_ */ |