Skip to content

Commit

Permalink
AP_HAL_ChibiOS: eliminate legacy UART ordering/references
Browse files Browse the repository at this point in the history
SERIAL_ORDER has been around for a few years now and UART_ORDER is
rejected by the hwdef script, so support for UART_ORDER and associated
processing in the hwdef script is removed, along with the order
conversion script.
  • Loading branch information
tpwrules committed Dec 11, 2023
1 parent c190b61 commit 8948024
Show file tree
Hide file tree
Showing 5 changed files with 71 additions and 135 deletions.
62 changes: 31 additions & 31 deletions libraries/AP_HAL_ChibiOS/HAL_ChibiOS_Class.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -45,27 +45,27 @@
#endif

#ifndef HAL_NO_UARTDRIVER
static HAL_UARTA_DRIVER;
static HAL_UARTB_DRIVER;
static HAL_UARTC_DRIVER;
static HAL_UARTD_DRIVER;
static HAL_UARTE_DRIVER;
static HAL_UARTF_DRIVER;
static HAL_UARTG_DRIVER;
static HAL_UARTH_DRIVER;
static HAL_UARTI_DRIVER;
static HAL_UARTJ_DRIVER;
static HAL_SERIAL0_DRIVER;
static HAL_SERIAL1_DRIVER;
static HAL_SERIAL2_DRIVER;
static HAL_SERIAL3_DRIVER;
static HAL_SERIAL4_DRIVER;
static HAL_SERIAL5_DRIVER;
static HAL_SERIAL6_DRIVER;
static HAL_SERIAL7_DRIVER;
static HAL_SERIAL8_DRIVER;
static HAL_SERIAL9_DRIVER;
#else
static Empty::UARTDriver uartADriver;
static Empty::UARTDriver uartBDriver;
static Empty::UARTDriver uartCDriver;
static Empty::UARTDriver uartDDriver;
static Empty::UARTDriver uartEDriver;
static Empty::UARTDriver uartFDriver;
static Empty::UARTDriver uartGDriver;
static Empty::UARTDriver uartHDriver;
static Empty::UARTDriver uartIDriver;
static Empty::UARTDriver uartJDriver;
static Empty::UARTDriver serial0Driver;
static Empty::UARTDriver serial1Driver;
static Empty::UARTDriver serial2Driver;
static Empty::UARTDriver serial3Driver;
static Empty::UARTDriver serial4Driver;
static Empty::UARTDriver serial5Driver;
static Empty::UARTDriver serial6Driver;
static Empty::UARTDriver serial7Driver;
static Empty::UARTDriver serial8Driver;
static Empty::UARTDriver serial9Driver;
#endif

#if HAL_USE_I2C == TRUE && defined(HAL_I2C_DEVICE_LIST)
Expand Down Expand Up @@ -136,16 +136,16 @@ AP_IOMCU iomcu(uart_io);

HAL_ChibiOS::HAL_ChibiOS() :
AP_HAL::HAL(
&uartADriver,
&uartCDriver, // ordering captures the historical use of uartB as SERIAL3
&uartDDriver,
&uartBDriver,
&uartEDriver,
&uartFDriver,
&uartGDriver,
&uartHDriver,
&uartIDriver,
&uartJDriver,
&serial0Driver,
&serial1Driver,
&serial2Driver,
&serial3Driver,
&serial4Driver,
&serial5Driver,
&serial6Driver,
&serial7Driver,
&serial8Driver,
&serial9Driver,
&i2cDeviceManager,
&spiDeviceManager,
#if HAL_USE_WSPI == TRUE && defined(HAL_WSPI_DEVICE_LIST)
Expand All @@ -155,7 +155,7 @@ HAL_ChibiOS::HAL_ChibiOS() :
#endif
&analogIn,
&storageDriver,
&uartADriver,
&serial0Driver,
&gpioDriver,
&rcinDriver,
&rcoutDriver,
Expand Down
14 changes: 7 additions & 7 deletions libraries/AP_HAL_ChibiOS/UARTDriver.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -52,13 +52,13 @@ using namespace ChibiOS;
extern ChibiOS::UARTDriver uart_io;
#endif

const UARTDriver::SerialDef UARTDriver::_serial_tab[] = { HAL_UART_DEVICE_LIST };
const UARTDriver::SerialDef UARTDriver::_serial_tab[] = { HAL_SERIAL_DEVICE_LIST };

// handle for UART handling thread
thread_t* volatile UARTDriver::uart_rx_thread_ctx;

// table to find UARTDrivers from serial number, used for event handling
UARTDriver *UARTDriver::uart_drivers[UART_MAX_DRIVERS];
UARTDriver *UARTDriver::serial_drivers[UART_MAX_DRIVERS];

// event used to wake up waiting thread. This event number is for
// caller threads
Expand Down Expand Up @@ -104,8 +104,8 @@ serial_num(_serial_num),
sdef(_serial_tab[_serial_num]),
_baudrate(57600)
{
osalDbgAssert(serial_num < UART_MAX_DRIVERS, "too many UART drivers");
uart_drivers[serial_num] = this;
osalDbgAssert(serial_num < UART_MAX_DRIVERS, "too many SERIALn drivers");
serial_drivers[serial_num] = this;
}

/*
Expand Down Expand Up @@ -166,11 +166,11 @@ void UARTDriver::uart_rx_thread(void* arg)
hal.scheduler->delay_microseconds(1000);

for (uint8_t i=0; i<UART_MAX_DRIVERS; i++) {
if (uart_drivers[i] == nullptr) {
if (serial_drivers[i] == nullptr) {
continue;
}
if (uart_drivers[i]->_rx_initialised) {
uart_drivers[i]->_rx_timer_tick();
if (serial_drivers[i]->_rx_initialised) {
serial_drivers[i]->_rx_timer_tick();
}
}
}
Expand Down
4 changes: 2 additions & 2 deletions libraries/AP_HAL_ChibiOS/UARTDriver.h
Original file line number Diff line number Diff line change
Expand Up @@ -148,13 +148,13 @@ class ChibiOS::UARTDriver : public AP_HAL::UARTDriver {
static thread_t* volatile uart_rx_thread_ctx;

// table to find UARTDrivers from serial number, used for event handling
static UARTDriver *uart_drivers[UART_MAX_DRIVERS];
static UARTDriver *serial_drivers[UART_MAX_DRIVERS];

// thread used for writing and reading
thread_t* volatile uart_thread_ctx;
char uart_thread_name[6];

// index into uart_drivers table
// index into serial_drivers table
uint8_t serial_num;

uint32_t _baudrate;
Expand Down
89 changes: 31 additions & 58 deletions libraries/AP_HAL_ChibiOS/hwdef/scripts/chibios_hwdef.py
Original file line number Diff line number Diff line change
Expand Up @@ -111,9 +111,6 @@ def __init__(self, bootloader=False, signed_fw=False, outdir=None, hwdef=[], def

self.dma_exclude_pattern = []

# map from uart names to SERIALn numbers
self.uart_serial_num = {}

self.mcu_type = None
self.dual_USB_enabled = False

Expand Down Expand Up @@ -1814,75 +1811,51 @@ def get_extra_bylabel(self, label, name, default=None):
return default
return p.extra_value(name, type=str, default=default)

def get_UART_ORDER(self):
'''get UART_ORDER from SERIAL_ORDER option'''
if self.get_config('UART_ORDER', required=False, aslist=True) is not None:
self.error('Please convert UART_ORDER to SERIAL_ORDER')
serial_order = self.get_config('SERIAL_ORDER', required=False, aslist=True)
if serial_order is None:
return None
if args.bootloader:
# in bootloader SERIAL_ORDER is treated the same as UART_ORDER
return serial_order
map = [0, 3, 1, 2, 4, 5, 6, 7, 8, 9, 10, 11, 12]
while len(serial_order) < 4:
serial_order += ['EMPTY']
uart_order = []
for i in range(len(serial_order)):
uart_order.append(serial_order[map[i]])
self.uart_serial_num[serial_order[i]] = i
return uart_order

def write_UART_config(self, f):
'''write UART config defines'''
uart_list = self.get_UART_ORDER()
if uart_list is None:
serial_list = self.get_config('SERIAL_ORDER', required=False, aslist=True)
if serial_list is None:
return
while len(serial_list) < 3: # enough ports for CrashCatcher UART discovery
serial_list += ['EMPTY']
f.write('\n// UART configuration\n')

# write out which serial ports we actually have
idx = 0
nports = 0
serial_order = self.get_config('SERIAL_ORDER', required=False, aslist=True)
for serial in serial_order:
for idx, serial in enumerate(serial_list):
if serial == 'EMPTY':
f.write('#define HAL_HAVE_SERIAL%u 0\n' % idx)
else:
f.write('#define HAL_HAVE_SERIAL%u 1\n' % idx)
nports = nports + 1
idx += 1
f.write('#define HAL_NUM_SERIAL_PORTS %u\n' % nports)

# write out driver declarations for HAL_ChibOS_Class.cpp
devnames = "ABCDEFGHIJ"
sdev = 0
idx = 0
for dev in uart_list:
for idx, dev in enumerate(serial_list):
if dev == 'EMPTY':
f.write('#define HAL_UART%s_DRIVER Empty::UARTDriver uart%sDriver\n' %
(devnames[idx], devnames[idx]))
f.write('#define HAL_SERIAL%s_DRIVER Empty::UARTDriver serial%sDriver\n' %
(idx, idx))
sdev += 1
else:
f.write(
'#define HAL_UART%s_DRIVER ChibiOS::UARTDriver uart%sDriver(%u)\n'
% (devnames[idx], devnames[idx], sdev))
'#define HAL_SERIAL%s_DRIVER ChibiOS::UARTDriver serial%sDriver(%u)\n'
% (idx, idx, sdev))
sdev += 1
idx += 1
for idx in range(len(uart_list), len(devnames)):
f.write('#define HAL_UART%s_DRIVER Empty::UARTDriver uart%sDriver\n' %
(devnames[idx], devnames[idx]))
for idx in range(len(serial_list), 10):
f.write('#define HAL_SERIAL%s_DRIVER Empty::UARTDriver serial%sDriver\n' %
(idx, idx))

if 'IOMCU_UART' in self.config:
if 'io_firmware.bin' not in self.romfs:
self.error("Need io_firmware.bin in ROMFS for IOMCU")

f.write('#define HAL_WITH_IO_MCU 1\n')
idx = len(uart_list)
f.write('#define HAL_UART_IOMCU_IDX %u\n' % idx)
f.write('#define HAL_UART_IOMCU_IDX %u\n' % len(serial_list))
f.write(
'#define HAL_UART_IO_DRIVER ChibiOS::UARTDriver uart_io(HAL_UART_IOMCU_IDX)\n'
)
uart_list.append(self.config['IOMCU_UART'][0])
serial_list.append(self.config['IOMCU_UART'][0])
f.write('#define HAL_HAVE_SERVO_VOLTAGE 1\n') # make the assumption that IO gurantees servo monitoring
# all IOMCU capable boards have SBUS out
f.write('#define AP_FEATURE_SBUS_OUT 1\n')
Expand All @@ -1897,17 +1870,17 @@ def write_UART_config(self, f):
crash_uart = None

# write config for CrashCatcher UART
if not uart_list[0].startswith('OTG') and not uart_list[0].startswith('EMPTY'):
crash_uart = uart_list[0]
elif not uart_list[2].startswith('OTG') and not uart_list[2].startswith('EMPTY'):
crash_uart = uart_list[2]
if not serial_list[0].startswith('OTG') and not serial_list[0].startswith('EMPTY'):
crash_uart = serial_list[0]
elif not serial_list[2].startswith('OTG') and not serial_list[2].startswith('EMPTY'):
crash_uart = serial_list[2]

if crash_uart is not None and self.get_config('FLASH_SIZE_KB', type=int) >= 2048:
f.write('#define HAL_CRASH_SERIAL_PORT %s\n' % crash_uart)
f.write('#define IRQ_DISABLE_HAL_CRASH_SERIAL_PORT() nvicDisableVector(STM32_%s_NUMBER)\n' % crash_uart)
f.write('#define RCC_RESET_HAL_CRASH_SERIAL_PORT() rccReset%s(); rccEnable%s(true)\n' % (crash_uart, crash_uart))
f.write('#define HAL_CRASH_SERIAL_PORT_CLOCK STM32_%sCLK\n' % crash_uart)
for dev in uart_list:
for num, dev in enumerate(serial_list):
if dev.startswith('UART'):
n = int(dev[4:])
elif dev.startswith('USART'):
Expand All @@ -1926,12 +1899,12 @@ def write_UART_config(self, f):
cts_line = self.make_line(dev + '_CTS')
if rts_line != "0":
have_rts_cts = True
f.write('#define HAL_HAVE_RTSCTS_SERIAL%u\n' % self.uart_serial_num[dev])
f.write('#define HAL_HAVE_RTSCTS_SERIAL%u\n' % num)

if dev.startswith('OTG2'):
f.write(
'#define HAL_%s_CONFIG {(BaseSequentialStream*) &SDU2, 2, true, false, 0, 0, false, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 2}\n' % dev) # noqa
OTG2_index = uart_list.index(dev)
OTG2_index = serial_list.index(dev)
self.dual_USB_enabled = True
elif dev.startswith('OTG'):
f.write(
Expand Down Expand Up @@ -1968,7 +1941,7 @@ def write_UART_config(self, f):
#endif
''' % (OTG2_index, OTG2_index))

f.write('#define HAL_UART_DEVICE_LIST %s\n\n' % ','.join(devlist))
f.write('#define HAL_SERIAL_DEVICE_LIST %s\n\n' % ','.join(devlist))
if not need_uart_driver and not args.bootloader:
f.write('''
#ifndef HAL_USE_SERIAL
Expand All @@ -1984,22 +1957,22 @@ def write_UART_config(self, f):

def write_UART_config_bootloader(self, f):
'''write UART config defines'''
uart_list = self.get_UART_ORDER()
if uart_list is None:
serial_list = self.get_config('SERIAL_ORDER', required=False, aslist=True)
if serial_list is None:
return
f.write('\n// UART configuration\n')
devlist = []
have_uart = False
OTG2_index = None
for u in uart_list:
if u.startswith('OTG2'):
for s in serial_list:
if s.startswith('OTG2'):
devlist.append('(BaseChannel *)&SDU2')
OTG2_index = uart_list.index(u)
elif u.startswith('OTG'):
OTG2_index = serial_list.index(s)
elif s.startswith('OTG'):
devlist.append('(BaseChannel *)&SDU1')
else:
unum = int(u[-1])
devlist.append('(BaseChannel *)&SD%u' % unum)
snum = int(s[-1])
devlist.append('(BaseChannel *)&SD%u' % snum)
have_uart = True
if len(devlist) > 0:
f.write('#define BOOTLOADER_DEV_LIST %s\n' % ','.join(devlist))
Expand Down
37 changes: 0 additions & 37 deletions libraries/AP_HAL_ChibiOS/hwdef/scripts/convert_uart_order.py

This file was deleted.

0 comments on commit 8948024

Please sign in to comment.