amiro-os / devices / PowerManagement / global.hpp @ 58fe0e0b
History | View | Annotate | Download (6.944 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 | /* frequency */ 200000, |
||
| 59 | /* I2C fast mode duty cycle */ FAST_DUTY_CYCLE_2
|
||
| 60 | }; |
||
| 61 | I2CConfig i2c2_config{
|
||
| 62 | /* I2C mode */ OPMODE_I2C,
|
||
| 63 | /* frequency */ 200000, |
||
| 64 | /* I2C fast mode duty cycle */ FAST_DUTY_CYCLE_2
|
||
| 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_7_8125
|
||
| 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_ */ |