Skip to content

Commit 3ddb38d

Browse files
authored
Merge pull request #70 from ISSUIUC/new-mk2-pins
MIDAS MK2.1 Port -- final software release v3
2 parents b7b28c5 + 7e20221 commit 3ddb38d

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

49 files changed

+2445
-480
lines changed

MIDAS/lib/ADS7138Q1/ads7138-q1.cpp

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ static AdcRegReadResult adc_reg_read(uint8_t address, uint8_t reg_address) {
2323
WIRE.beginTransmission(address);
2424
WIRE.write(ADC_REG_READ);
2525
WIRE.write(reg_address);
26-
if(!WIRE.endTransmission(true)){
26+
if(WIRE.endTransmission(true) != 0){
2727
return AdcRegReadResult{.value=0, .error=AdcError::I2CError};
2828
}
2929
uint8_t ct = WIRE.requestFrom((int)address, 1, 1);
@@ -39,7 +39,7 @@ static AdcError adc_reg_write(uint8_t address, uint8_t reg_address, uint8_t data
3939
WIRE.write(ADC_REG_WRITE);
4040
WIRE.write(reg_address);
4141
WIRE.write(data);
42-
if(!WIRE.endTransmission(true)){
42+
if(WIRE.endTransmission(true) != 0){
4343
return AdcError::I2CError;
4444
}
4545
return AdcError::NoError;

MIDAS/lib/Adafruit BNO08x/src/Adafruit_BNO08x.cpp

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040

4141
static Adafruit_SPIDevice *spi_dev = NULL; ///< Pointer to SPI bus interface
4242
static int8_t _int_pin;
43-
static GpioAddress _reset_pin(0, 0);
43+
static int _reset_pin;
4444

4545
static Adafruit_I2CDevice *i2c_dev = NULL; ///< Pointer to I2C bus interface
4646
static HardwareSerial *uart_dev = NULL;
@@ -82,7 +82,7 @@ static void hal_hardwareReset(void);
8282
*
8383
* @param reset_pin The arduino pin # connected to the BNO Reset pin
8484
*/
85-
Adafruit_BNO08x::Adafruit_BNO08x(GpioAddress reset_pin) { _reset_pin = reset_pin; }
85+
Adafruit_BNO08x::Adafruit_BNO08x(int reset_pin) { _reset_pin = reset_pin; }
8686

8787
/**
8888
* @brief Destroy the Adafruit_BNO08x::Adafruit_BNO08x object
@@ -626,12 +626,12 @@ static void hal_hardwareReset(void) {
626626
// if (_reset_pin != -1) {
627627
// Serial.println("BNO08x Hardware reset");
628628

629-
gpioPinMode(_reset_pin, OUTPUT);
630-
gpioDigitalWrite(_reset_pin, HIGH);
629+
pinMode(_reset_pin, OUTPUT);
630+
digitalWrite(_reset_pin, HIGH);
631631
delay(10);
632-
gpioDigitalWrite(_reset_pin, LOW);
632+
digitalWrite(_reset_pin, LOW);
633633
delay(10);
634-
gpioDigitalWrite(_reset_pin, HIGH);
634+
digitalWrite(_reset_pin, HIGH);
635635
delay(10);
636636
// }
637637
}

MIDAS/lib/Adafruit BNO08x/src/Adafruit_BNO08x.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,7 +40,7 @@
4040
*/
4141
class Adafruit_BNO08x {
4242
public:
43-
Adafruit_BNO08x(GpioAddress reset_pin);
43+
Adafruit_BNO08x(int reset_pin);
4444
~Adafruit_BNO08x();
4545

4646
bool begin_I2C(uint8_t i2c_addr = BNO08x_I2CADDR_DEFAULT,

MIDAS/lib/TCAL9539/TCAL9539.cpp

Lines changed: 60 additions & 37 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,6 @@
11
#include"TCAL9539.h"
22
#include<Wire.h>
33

4-
#define WIRE Wire
5-
6-
74
static constexpr uint8_t REG_INPUT0 = 0x0;
85
static constexpr uint8_t REG_INPUT1 = 0x1;
96
static constexpr uint8_t REG_OUTPUT0 = 0x2;
@@ -13,24 +10,42 @@ static constexpr uint8_t POLARITY_INVERSION1 = 0x5;
1310
static constexpr uint8_t REG_CONFIG0 = 0x6;
1411
static constexpr uint8_t REG_CONFIG1 = 0x7;
1512

16-
bool TCAL9539Init(){
17-
uint8_t addrs[] = {GPIO0_ADDRESS, GPIO1_ADDRESS, GPIO2_ADDRESS};
13+
TwoWire& tcal_get_wire_by_id(int index) {
14+
if(I2C_BUS_Map[index] == 0) {
15+
return Wire;
16+
} else {
17+
return Wire1;
18+
}
19+
}
1820

19-
for(uint8_t addr : addrs){
20-
Serial.print("Testing ");
21-
Serial.println(addr);
22-
WIRE.beginTransmission(addr);
23-
WIRE.write(REG_OUTPUT0);
24-
if(!WIRE.endTransmission()){
25-
Serial.println("Failed at endTransmission");
21+
bool TCAL9539Init(int reset_pin){
22+
pinMode(reset_pin, OUTPUT);
23+
digitalWrite(reset_pin, HIGH);
24+
delay(1);
25+
digitalWrite(reset_pin, LOW);
26+
delay(1);
27+
digitalWrite(reset_pin, HIGH);
28+
29+
uint8_t addrs[] = {GPIO0_ADDRESS, GPIO1_ADDRESS, GPIO2_ADDRESS};
30+
31+
for(int i = 0; i < std::size(addrs); i++){
32+
TwoWire& wire = tcal_get_wire_by_id(i);
33+
uint8_t addr = addrs[i];
34+
35+
wire.beginTransmission(addr);
36+
wire.write(REG_OUTPUT0);
37+
if(wire.endTransmission() != 0){
38+
Serial.print("Failed at endTransmission ");
39+
Serial.println(addr);
2640
return false;
2741
}
28-
int ct = WIRE.requestFrom(addr, 1);
42+
int ct = wire.requestFrom(addr, 1);
2943
if(ct != 1){
30-
Serial.println("Failed at requestFrom");
44+
Serial.print("Failed at requestFrom ");
45+
Serial.println(addr);
3146
return false;
3247
}
33-
int v = WIRE.read();
48+
int v = wire.read();
3449
//REG_OUTPUT0 is set all ones on power up
3550
if(v != 0xff){
3651
Serial.println("Failed at REG_OUTPUT0");
@@ -44,10 +59,14 @@ static uint8_t pin_state[3][2] = {{0xff,0xff},{0xff,0xff},{0xff,0xff}};
4459
static uint8_t pin_config[3][2] = {{0xff,0xff},{0xff,0xff},{0xff,0xff}};
4560

4661
GpioError gpioDigitalWrite(GpioAddress addr, int mode){
62+
63+
4764
if(!addr.is_valid) {
4865
return GpioError::InvalidPinError;
4966
}
5067

68+
TwoWire& wire = tcal_get_wire_by_id(addr.gpio_id);
69+
5170
uint8_t current_state = pin_state[addr.gpio_id][addr.port_idx];
5271
if(mode == HIGH){
5372
current_state |= (1 << addr.pin_offset);
@@ -57,14 +76,15 @@ GpioError gpioDigitalWrite(GpioAddress addr, int mode){
5776
return GpioError::InvalidModeError;
5877
}
5978

60-
WIRE.beginTransmission(addr.gpio_address);
61-
WIRE.write(REG_OUTPUT0 + addr.port_idx);
62-
WIRE.write(current_state);
79+
wire.beginTransmission(addr.gpio_address);
80+
wire.write(REG_OUTPUT0 + addr.port_idx);
81+
wire.write(current_state);
6382
pin_state[addr.gpio_id][addr.port_idx] = current_state;
64-
if(!WIRE.endTransmission(true)){
83+
int err = 0;
84+
err = wire.endTransmission(true);
85+
if(err != 0){
6586
return GpioError::I2CError;
6687
}
67-
6888
return GpioError::NoError;
6989
}
7090

@@ -73,18 +93,19 @@ GpioReadResult gpioDigitalRead(GpioAddress addr){
7393
return GpioReadResult{.value=LOW,.error=GpioError::InvalidPinError};
7494
}
7595

76-
WIRE.beginTransmission(addr.gpio_address);
77-
WIRE.write(REG_INPUT0 + addr.port_idx);
78-
if(!WIRE.endTransmission(true)){
96+
TwoWire& wire = tcal_get_wire_by_id(addr.gpio_id);
97+
98+
wire.beginTransmission(addr.gpio_address);
99+
wire.write(REG_INPUT0 + addr.port_idx);
100+
if(wire.endTransmission(true) != 0){
79101
return GpioReadResult{.value=LOW,.error=GpioError::I2CError};
80102
}
81-
int ct = WIRE.requestFrom(addr.gpio_address, 1);
103+
int ct = wire.requestFrom(addr.gpio_address, 1);
82104
if(ct != 1){
83105
return GpioReadResult{.value=LOW,.error=GpioError::I2CError};
84106
}
85-
86-
uint8_t val = WIRE.read();
87107

108+
uint8_t val = wire.read();
88109
return GpioReadResult{.value=(val & (1 << addr.pin_offset)) != 0,.error=GpioError::NoError};
89110
}
90111

@@ -93,6 +114,8 @@ GpioError gpioPinMode(GpioAddress addr, int mode){
93114
return GpioError::NoError;
94115
}
95116

117+
TwoWire& wire = tcal_get_wire_by_id(addr.gpio_id);
118+
96119
uint8_t current_state = pin_config[addr.gpio_id][addr.port_idx];
97120

98121
if(mode == INPUT){
@@ -102,20 +125,20 @@ GpioError gpioPinMode(GpioAddress addr, int mode){
102125
} else {
103126
return GpioError::InvalidModeError;
104127
}
128+
129+
GpioError err = gpioDigitalWrite(addr, LOW);
130+
if(err != GpioError::NoError){
131+
return err;
132+
}
105133

106-
GpioError err = gpioDigitalWrite(addr, LOW); //set pin low as default state
107-
// if(err != GpioError::NoError){
108-
// return err;
109-
// }
110-
111-
WIRE.beginTransmission(addr.gpio_address);
112-
WIRE.write(REG_CONFIG0 + addr.port_idx);
113-
WIRE.write(current_state);
134+
//wirezero
135+
wire.beginTransmission(addr.gpio_address);
136+
wire.write(REG_CONFIG0 + addr.port_idx);
137+
wire.write(current_state);
114138
pin_config[addr.gpio_id][addr.port_idx] = current_state;
115139

116-
if(!WIRE.endTransmission(true)){
140+
if(wire.endTransmission(true) != 0){
117141
return GpioError::I2CError;
118142
}
119-
120143
return GpioError::NoError;
121-
}
144+
}

MIDAS/lib/TCAL9539/TCAL9539.h

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
static constexpr uint8_t GPIO0_ADDRESS = 0x74;
55
static constexpr uint8_t GPIO1_ADDRESS = 0x75;
66
static constexpr uint8_t GPIO2_ADDRESS = 0x77;
7+
static constexpr int I2C_BUS_Map[] = {1,0,0};
78

89
static constexpr int GPIO_LOW_BIT_COUNT = 8;
910
static constexpr int GPIO_HIGH_BIT_COUNT = 16;
@@ -52,7 +53,18 @@ struct GpioReadResult {
5253
GpioError error;
5354
};
5455

55-
bool TCAL9539Init();
56+
bool TCAL9539Init(int reset_pin);
57+
58+
/**
59+
* wirenum: decides which wire to use on the GPIO
60+
* pin: which pin to write or read signal from
61+
* mode: the mode of the pin
62+
*
63+
* wire = 0 means we are using our main i2c bus
64+
* wire = 1 means we are using the pyro i2c bus
65+
*/
5666
GpioError gpioPinMode(GpioAddress pin, int mode);
67+
5768
GpioError gpioDigitalWrite(GpioAddress pin, int mode);
69+
5870
GpioReadResult gpioDigitalRead(GpioAddress pin);

MIDAS/platformio.ini

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
[env:mcu_main_sustainer]
22
platform = espressif32
33
board = esp32-s3-devkitc-1
4+
; board = adafruit_feather_esp32s3
45
framework = arduino
56
extra_scripts =
67
pre:extra_script.py
@@ -13,13 +14,14 @@ build_unflags =
1314
-std=gnu++11
1415
lib_deps =
1516
adafruit/Adafruit LIS3MDL@^1.2.1 ; Magnetometer driver
16-
stevemarple/MicroNMEA@^2.0.6 ; NMEA Parsing library (for GPS messages)
17+
sparkfun/SparkFun u-blox GNSS v3@^3.1.8 ; GPS
1718

1819
build_src_filter = +<*> -<silsim/> +<hardware/> -<hilsim>
1920

2021
[env:mcu_main_booster]
2122
platform = espressif32
2223
board = esp32-s3-devkitc-1
24+
; board = adafruit_feather_esp32s3
2325
framework = arduino
2426
extra_scripts =
2527
pre:extra_script.py
@@ -32,13 +34,13 @@ build_unflags =
3234
-std=gnu++11
3335
lib_deps =
3436
adafruit/Adafruit LIS3MDL@^1.2.1 ; Magnetometer driver
35-
stevemarple/MicroNMEA@^2.0.6 ; NMEA Parsing library (for GPS messages)
37+
sparkfun/SparkFun u-blox GNSS v3@^3.1.8 ; GPS
3638

3739
build_src_filter = +<*> -<silsim/> +<hardware/> -<hilsim>
3840

3941
[env:mcu_hilsim_sustainer]
4042
platform = espressif32
41-
board = esp32-s3-devkitc-1
43+
board = adafruit_feather_esp32s3
4244
framework = arduino
4345
extra_scripts =
4446
pre:extra_script.py
@@ -53,7 +55,7 @@ build_unflags =
5355

5456
[env:mcu_hilsim_booster]
5557
platform = espressif32
56-
board = esp32-s3-devkitc-1
58+
board = adafruit_feather_esp32s3
5759
framework = arduino
5860
extra_scripts =
5961
pre:extra_script.py

0 commit comments

Comments
 (0)