Skip to content

Navigation Menu

Sign in
Appearance settings

Search code, repositories, users, issues, pull requests...

Provide feedback

We read every piece of feedback, and take your input very seriously.

Saved searches

Use saved searches to filter your results more quickly

Appearance settings

Commit 0d0d27f

Browse filesBrowse files
Extend bus types and structure for Peripheral Manager (espressif#8888)
* Extended bus types for peripheral manager * add extra_type to peripheral manager * Fix function call * Fix check for no extra_type * Add extra_type for SD and ETH CS pin * added bus_num and bus_channel to pin structure * update printPerimanInfo with new fields * replaced setting bus to INIT with DetachPin call * add defines for extra attributes * use new required parameters in perimanSetPinBus * function rename * removed duplicate define * Update print format --------- Co-authored-by: Rodrigo Garcia <rodrigo.garcia@espressif.com>
1 parent 600f359 commit 0d0d27f
Copy full SHA for 0d0d27f
Expand file treeCollapse file tree

22 files changed

+404
-217
lines changed

‎cores/esp32/Arduino.h

Copy file name to clipboardExpand all lines: cores/esp32/Arduino.h
+1Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@
3939

4040
#include "stdlib_noniso.h"
4141
#include "binary.h"
42+
#include "extra_attr.h"
4243

4344
#define PI 3.1415926535897932384626433832795
4445
#define HALF_PI 1.5707963267948966192313216916398

‎cores/esp32/HWCDC.cpp

Copy file name to clipboardExpand all lines: cores/esp32/HWCDC.cpp
+5-5Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -181,8 +181,8 @@ bool HWCDC::deinit(void * busptr)
181181
running = true;
182182
// Setting USB D+ D- pins
183183
bool retCode = true;
184-
retCode &= perimanSetPinBus(USB_DM_GPIO_NUM, ESP32_BUS_TYPE_INIT, NULL);
185-
retCode &= perimanSetPinBus(USB_DP_GPIO_NUM, ESP32_BUS_TYPE_INIT, NULL);
184+
retCode &= perimanClearPinBus(USB_DM_GPIO_NUM);
185+
retCode &= perimanClearPinBus(USB_DP_GPIO_NUM);
186186
if (retCode) {
187187
// Force the host to re-enumerate (BUS_RESET)
188188
pinMode(USB_DM_GPIO_NUM, OUTPUT_OPEN_DRAIN);
@@ -220,10 +220,10 @@ void HWCDC::begin(unsigned long baud)
220220
end();
221221
return;
222222
}
223-
if (perimanSetBusDeinit(ESP32_BUS_TYPE_USB, HWCDC::deinit)) {
223+
if (perimanSetBusDeinit(ESP32_BUS_TYPE_USB_DM, HWCDC::deinit) && perimanSetBusDeinit(ESP32_BUS_TYPE_USB_DP, HWCDC::deinit)) {
224224
// Setting USB D+ D- pins
225-
perimanSetPinBus(USB_DM_GPIO_NUM, ESP32_BUS_TYPE_USB, (void *) this);
226-
perimanSetPinBus(USB_DP_GPIO_NUM, ESP32_BUS_TYPE_USB, (void *) this);
225+
perimanSetPinBus(USB_DM_GPIO_NUM, ESP32_BUS_TYPE_USB_DM, (void *) this, -1, -1);
226+
perimanSetPinBus(USB_DP_GPIO_NUM, ESP32_BUS_TYPE_USB_DP, (void *) this, -1, -1);
227227
} else {
228228
log_e("Serial JTAG Pins can't be set into Peripheral Manager.");
229229
}

‎cores/esp32/chip-debug-report.cpp

Copy file name to clipboardExpand all lines: cores/esp32/chip-debug-report.cpp
+19-2Lines changed: 19 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -242,6 +242,8 @@ static void printBoardInfo(void){
242242
static void printPerimanInfo(void){
243243
chip_report_printf("GPIO Info:\n");
244244
chip_report_printf("------------------------------------------\n");
245+
chip_report_printf(" GPIO : BUS_TYPE[bus/unit][chan]\n");
246+
chip_report_printf(" -------------------------------------- \n");
245247
for(uint8_t i = 0; i < SOC_GPIO_PIN_COUNT; i++){
246248
if(!perimanPinIsValid(i)){
247249
continue;//invalid pin
@@ -250,8 +252,23 @@ static void printPerimanInfo(void){
250252
if(type == ESP32_BUS_TYPE_INIT){
251253
continue;//unused pin
252254
}
253-
chip_report_printf(" %17u : ", i);
254-
chip_report_printf("%s\n", perimanGetTypeName(type));
255+
const char* extra_type = perimanGetPinBusExtraType(i);
256+
chip_report_printf(" %4u : ", i);
257+
if(extra_type){
258+
chip_report_printf("%s", extra_type);
259+
}
260+
else {
261+
chip_report_printf("%s", perimanGetTypeName(type));
262+
}
263+
int8_t bus_number = perimanGetPinBusNum(i);
264+
if (bus_number != -1){
265+
chip_report_printf("[%u]", bus_number);
266+
}
267+
int8_t bus_channel = perimanGetPinBusChannel(i);
268+
if (bus_channel != -1){
269+
chip_report_printf("[%u]", bus_channel);
270+
}
271+
chip_report_printf("\n");
255272
}
256273
}
257274

‎cores/esp32/esp32-hal-adc.c

Copy file name to clipboardExpand all lines: cores/esp32/esp32-hal-adc.c
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -221,7 +221,7 @@ esp_err_t __analogInit(uint8_t pin, adc_channel_t channel, adc_unit_t adc_unit){
221221
}
222222
}
223223

224-
if(!perimanSetPinBus(pin, ESP32_BUS_TYPE_ADC_ONESHOT, (void *)(pin+1))){
224+
if(!perimanSetPinBus(pin, ESP32_BUS_TYPE_ADC_ONESHOT, (void *)(pin+1), adc_unit, channel)){
225225
adcDetachBus((void *)(pin+1));
226226
return err;
227227
}
@@ -396,7 +396,7 @@ static bool adcContinuousDetachBus(void * adc_unit_number){
396396
int io_pin;
397397
adc_oneshot_channel_to_io(adc_unit, channel, &io_pin);
398398
if(perimanGetPinBusType(io_pin) == ESP32_BUS_TYPE_ADC_CONT){
399-
if(!perimanSetPinBus(io_pin, ESP32_BUS_TYPE_INIT, NULL)){
399+
if(!perimanClearPinBus(io_pin)){
400400
return false;
401401
}
402402
}
@@ -497,7 +497,7 @@ bool analogContinuous(uint8_t pins[], size_t pins_count, uint32_t conversions_pe
497497
//Set periman deinit function and reset all pins to init state.
498498
perimanSetBusDeinit(ESP32_BUS_TYPE_ADC_CONT, adcContinuousDetachBus);
499499
for(int j = 0; j < pins_count; j++){
500-
if(!perimanSetPinBus(pins[j], ESP32_BUS_TYPE_INIT, NULL)){
500+
if(!perimanClearPinBus(pins[j])){
501501
return false;
502502
}
503503
}
@@ -571,7 +571,7 @@ bool analogContinuous(uint8_t pins[], size_t pins_count, uint32_t conversions_pe
571571
}
572572

573573
for(int k = 0; k < pins_count; k++){
574-
if(!perimanSetPinBus(pins[k], ESP32_BUS_TYPE_ADC_CONT, (void *)(adc_unit+1))){
574+
if(!perimanSetPinBus(pins[k], ESP32_BUS_TYPE_ADC_CONT, (void *)(adc_unit+1), adc_unit, channel[k])){
575575
log_e("perimanSetPinBus to ADC Continuous failed!");
576576
adcContinuousDetachBus((void *)(adc_unit+1));
577577
return false;

‎cores/esp32/esp32-hal-dac.c

Copy file name to clipboardExpand all lines: cores/esp32/esp32-hal-dac.c
+3-3Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ bool __dacWrite(uint8_t pin, uint8_t value)
3232
dac_oneshot_handle_t bus = (dac_oneshot_handle_t)perimanGetPinBus(pin, ESP32_BUS_TYPE_DAC_ONESHOT);
3333
if(bus == NULL){
3434
perimanSetBusDeinit(ESP32_BUS_TYPE_DAC_ONESHOT, dacDetachBus);
35-
if(!perimanSetPinBus(pin, ESP32_BUS_TYPE_INIT, NULL)){
35+
if(!perimanClearPinBus(pin)){
3636
return false;
3737
}
3838
dac_channel_t channel = (pin == DAC_CHAN0_GPIO_NUM)?DAC_CHAN_0:DAC_CHAN_1;
@@ -44,7 +44,7 @@ bool __dacWrite(uint8_t pin, uint8_t value)
4444
log_e("dac_oneshot_new_channel failed with error: %d", err);
4545
return false;
4646
}
47-
if(!perimanSetPinBus(pin, ESP32_BUS_TYPE_DAC_ONESHOT, (void *)bus)){
47+
if(!perimanSetPinBus(pin, ESP32_BUS_TYPE_DAC_ONESHOT, (void *)bus, -1, channel)){
4848
dacDetachBus((void *)bus);
4949
return false;
5050
}
@@ -67,7 +67,7 @@ bool __dacDisable(uint8_t pin)
6767
void * bus = perimanGetPinBus(pin, ESP32_BUS_TYPE_DAC_ONESHOT);
6868
if(bus != NULL){
6969
// will call dacDetachBus
70-
return perimanSetPinBus(pin, ESP32_BUS_TYPE_INIT, NULL);
70+
return perimanClearPinBus(pin);
7171
} else {
7272
log_e("pin %u is not attached to DAC", pin);
7373
}

‎cores/esp32/esp32-hal-gpio.c

Copy file name to clipboardExpand all lines: cores/esp32/esp32-hal-gpio.c
+2-2Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -110,7 +110,7 @@ extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
110110

111111
if(perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) == NULL){
112112
perimanSetBusDeinit(ESP32_BUS_TYPE_GPIO, gpioDetachBus);
113-
if(!perimanSetPinBus(pin, ESP32_BUS_TYPE_INIT, NULL)){
113+
if(!perimanClearPinBus(pin)){
114114
log_e("Deinit of previous bus failed");
115115
return;
116116
}
@@ -144,7 +144,7 @@ extern void ARDUINO_ISR_ATTR __pinMode(uint8_t pin, uint8_t mode)
144144
return;
145145
}
146146
if(perimanGetPinBus(pin, ESP32_BUS_TYPE_GPIO) == NULL){
147-
if(!perimanSetPinBus(pin, ESP32_BUS_TYPE_GPIO, (void *)(pin+1))){
147+
if(!perimanSetPinBus(pin, ESP32_BUS_TYPE_GPIO, (void *)(pin+1), -1, -1)){
148148
//gpioDetachBus((void *)(pin+1));
149149
return;
150150
}

‎cores/esp32/esp32-hal-i2c-slave.c

Copy file name to clipboardExpand all lines: cores/esp32/esp32-hal-i2c-slave.c
+7-5Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -235,8 +235,10 @@ esp_err_t i2cSlaveInit(uint8_t num, int sda, int scl, uint16_t slaveID, uint32_t
235235
frequency = 1000000;
236236
}
237237

238-
perimanSetBusDeinit(ESP32_BUS_TYPE_I2C_SLAVE, i2cSlaveDetachBus);
239-
if(!perimanSetPinBus(sda, ESP32_BUS_TYPE_INIT, NULL) || !perimanSetPinBus(scl, ESP32_BUS_TYPE_INIT, NULL)){
238+
perimanSetBusDeinit(ESP32_BUS_TYPE_I2C_SLAVE_SDA, i2cSlaveDetachBus);
239+
perimanSetBusDeinit(ESP32_BUS_TYPE_I2C_SLAVE_SCL, i2cSlaveDetachBus);
240+
241+
if(!perimanClearPinBus(sda) || !perimanClearPinBus(scl)){
240242
return false;
241243
}
242244

@@ -353,7 +355,7 @@ esp_err_t i2cSlaveInit(uint8_t num, int sda, int scl, uint16_t slaveID, uint32_t
353355
i2c_ll_slave_enable_rx_it(i2c->dev);
354356
i2c_ll_set_stretch(i2c->dev, 0x3FF);
355357
i2c_ll_update(i2c->dev);
356-
if(!perimanSetPinBus(sda, ESP32_BUS_TYPE_I2C_SLAVE, (void *)(i2c->num+1)) || !perimanSetPinBus(scl, ESP32_BUS_TYPE_I2C_SLAVE, (void *)(i2c->num+1))){
358+
if(!perimanSetPinBus(sda, ESP32_BUS_TYPE_I2C_SLAVE_SDA, (void *)(i2c->num+1), i2c->num, -1) || !perimanSetPinBus(scl, ESP32_BUS_TYPE_I2C_SLAVE_SCL, (void *)(i2c->num+1), i2c->num, -1)){
357359
i2cSlaveDetachBus((void *)(i2c->num+1));
358360
ret = ESP_FAIL;
359361
}
@@ -383,8 +385,8 @@ esp_err_t i2cSlaveDeinit(uint8_t num){
383385
int scl = i2c->scl;
384386
int sda = i2c->sda;
385387
i2c_slave_free_resources(i2c);
386-
perimanSetPinBus(scl, ESP32_BUS_TYPE_INIT, NULL);
387-
perimanSetPinBus(sda, ESP32_BUS_TYPE_INIT, NULL);
388+
perimanClearPinBus(scl);
389+
perimanClearPinBus(sda);
388390
I2C_SLAVE_MUTEX_UNLOCK();
389391
return ESP_OK;
390392
}

‎cores/esp32/esp32-hal-i2c.c

Copy file name to clipboardExpand all lines: cores/esp32/esp32-hal-i2c.c
+7-5Lines changed: 7 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -98,8 +98,10 @@ esp_err_t i2cInit(uint8_t i2c_num, int8_t sda, int8_t scl, uint32_t frequency){
9898
frequency = 1000000UL;
9999
}
100100

101-
perimanSetBusDeinit(ESP32_BUS_TYPE_I2C_MASTER, i2cDetachBus);
102-
if(!perimanSetPinBus(sda, ESP32_BUS_TYPE_INIT, NULL) || !perimanSetPinBus(scl, ESP32_BUS_TYPE_INIT, NULL)){
101+
perimanSetBusDeinit(ESP32_BUS_TYPE_I2C_MASTER_SDA, i2cDetachBus);
102+
perimanSetBusDeinit(ESP32_BUS_TYPE_I2C_MASTER_SCL, i2cDetachBus);
103+
104+
if(!perimanClearPinBus(sda) || !perimanClearPinBus(scl)){
103105
return false;
104106
}
105107

@@ -128,7 +130,7 @@ esp_err_t i2cInit(uint8_t i2c_num, int8_t sda, int8_t scl, uint32_t frequency){
128130
bus[i2c_num].sda = sda;
129131
//Clock Stretching Timeout: 20b:esp32, 5b:esp32-c3, 24b:esp32-s2
130132
i2c_set_timeout((i2c_port_t)i2c_num, I2C_LL_MAX_TIMEOUT);
131-
if(!perimanSetPinBus(sda, ESP32_BUS_TYPE_I2C_MASTER, (void *)(i2c_num+1)) || !perimanSetPinBus(scl, ESP32_BUS_TYPE_I2C_MASTER, (void *)(i2c_num+1))){
133+
if(!perimanSetPinBus(sda, ESP32_BUS_TYPE_I2C_MASTER_SDA, (void *)(i2c_num+1), i2c_num, -1) || !perimanSetPinBus(scl, ESP32_BUS_TYPE_I2C_MASTER_SCL, (void *)(i2c_num+1), i2c_num, -1)){
132134
i2cDetachBus((void *)(i2c_num+1));
133135
return false;
134136
}
@@ -159,8 +161,8 @@ esp_err_t i2cDeinit(uint8_t i2c_num){
159161
err = i2c_driver_delete((i2c_port_t)i2c_num);
160162
if(err == ESP_OK){
161163
bus[i2c_num].initialized = false;
162-
perimanSetPinBus(bus[i2c_num].scl, ESP32_BUS_TYPE_INIT, NULL);
163-
perimanSetPinBus(bus[i2c_num].sda, ESP32_BUS_TYPE_INIT, NULL);
164+
perimanClearPinBus(bus[i2c_num].scl);
165+
perimanClearPinBus(bus[i2c_num].sda);
164166
bus[i2c_num].scl = -1;
165167
bus[i2c_num].sda = -1;
166168
}

‎cores/esp32/esp32-hal-ledc.c

Copy file name to clipboardExpand all lines: cores/esp32/esp32-hal-ledc.c
+4-4Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution)
6767

6868
perimanSetBusDeinit(ESP32_BUS_TYPE_LEDC, ledcDetachBus);
6969
ledc_channel_handle_t *bus = (ledc_channel_handle_t*)perimanGetPinBus(pin, ESP32_BUS_TYPE_LEDC);
70-
if(bus != NULL && !perimanSetPinBus(pin, ESP32_BUS_TYPE_INIT, NULL)){
70+
if(bus != NULL && !perimanClearPinBus(pin)){
7171
return false;
7272
}
7373

@@ -110,7 +110,7 @@ bool ledcAttach(uint8_t pin, uint32_t freq, uint8_t resolution)
110110
#endif
111111
ledc_handle.used_channels |= 1UL << channel;
112112

113-
if(!perimanSetPinBus(pin, ESP32_BUS_TYPE_LEDC, (void *)handle)){
113+
if(!perimanSetPinBus(pin, ESP32_BUS_TYPE_LEDC, (void *)handle, group, channel)){
114114
ledcDetachBus((void *)handle);
115115
return false;
116116
}
@@ -216,7 +216,7 @@ bool ledcDetach(uint8_t pin)
216216
ledc_channel_handle_t *bus = (ledc_channel_handle_t*)perimanGetPinBus(pin, ESP32_BUS_TYPE_LEDC);
217217
if(bus != NULL){
218218
// will call ledcDetachBus
219-
return perimanSetPinBus(pin, ESP32_BUS_TYPE_INIT, NULL);
219+
return perimanClearPinBus(pin);
220220
} else {
221221
log_e("pin %u is not attached to LEDC", pin);
222222
}
@@ -360,7 +360,7 @@ void analogWrite(uint8_t pin, int value) {
360360
// Use ledc hardware for internal pins
361361
if (pin < SOC_GPIO_PIN_COUNT) {
362362
ledc_channel_handle_t *bus = (ledc_channel_handle_t*)perimanGetPinBus(pin, ESP32_BUS_TYPE_LEDC);
363-
if(bus == NULL && perimanSetPinBus(pin, ESP32_BUS_TYPE_INIT, NULL)){
363+
if(bus == NULL && perimanClearPinBus(pin)){
364364
if(ledcAttach(pin, analog_frequency, analog_resolution) == 0){
365365
log_e("analogWrite setup failed (freq = %u, resolution = %u). Try setting different resolution or frequency");
366366
return;

0 commit comments

Comments
0 (0)
Morty Proxy This is a proxified and sanitized view of the page, visit original site.