diff --git a/src/main/io/serial_cli.c b/src/main/io/serial_cli.c index 1515e3c285..06ef58c4a1 100755 --- a/src/main/io/serial_cli.c +++ b/src/main/io/serial_cli.c @@ -998,6 +998,14 @@ static void cliWrite(uint8_t ch); static bool cliDumpPrintf(uint8_t dumpMask, bool equalsDefault, const char *format, ...); static bool cliDefaultPrintf(uint8_t dumpMask, bool equalsDefault, const char *format, ...); +static void cliBreak(const char *str, uint8_t len) +{ + for (int i = 0; i < len; i++) { + cliPrint(str); + } + cliPrint("\r\n"); +} + static void cliPrompt(void) { cliPrint("\r\n# "); @@ -3835,6 +3843,25 @@ static void printResource(uint8_t dumpMask, master_t *defaultConfig) } } +#ifndef CLI_MINIMAL_VERBOSITY +static void resourceCheck(uint8_t resourceIndex, uint8_t index, ioTag_t tag) +{ + for (int r = 0; r < (int)ARRAYLEN(resourceTable); r++) { + for (int i = 0; i < (resourceTable[r].maxIndex == 0 ? 1 : resourceTable[r].maxIndex); i++) { + if (*(resourceTable[r].ptr + i) == tag) { + if (r == resourceIndex && i == index) { + continue; + } + cliPrintf("\r\n* WARNING * %c%d also used by %s", DEFIO_TAG_GPIOID(tag) + 'A', DEFIO_TAG_PIN(tag), ownerNames[resourceTable[r].owner]); + if (resourceTable[r].maxIndex > 0) { + cliPrintf(" %d", RESOURCE_INDEX(i)); + } + } + } + } +} +#endif + static void cliResource(char *cmdline) { int len = strlen(cmdline); @@ -3845,7 +3872,8 @@ static void cliResource(char *cmdline) return; } else if (strncasecmp(cmdline, "list", len) == 0) { #ifndef CLI_MINIMAL_VERBOSITY - cliPrintf("Currently active IO resource assignments:\r\n(reboot to update)\r\n----------------------\r\n"); + cliPrintf("Currently active IO resource assignments:\r\n(reboot to update)\r\n"); + cliBreak("-", 20); #endif for (int i = 0; i < DEFIO_IO_USED_COUNT; i++) { const char* owner; @@ -3859,6 +3887,7 @@ static void cliResource(char *cmdline) } cliPrintf("\r\n\r\nCurrently active DMA:\r\n"); + cliBreak("-", 20); for (int i = 0; i < DMA_MAX_DESCRIPTORS; i++) { const char* owner; owner = ownerNames[dmaGetOwner(i)]; @@ -3913,7 +3942,7 @@ static void cliResource(char *cmdline) if (strlen(pch) > 0) { if (strcasecmp(pch, "NONE") == 0) { *tag = IO_TAG_NONE; - cliPrintf("Resource is freed!"); + cliPrintf("Resource is freed!\r\n"); return; } else { uint8_t port = (*pch) - 'A'; @@ -3926,11 +3955,16 @@ static void cliResource(char *cmdline) pin = atoi(pch); if (pin < 16) { ioRec_t *rec = IO_Rec(IOGetByTag(DEFIO_TAG_MAKE(port, pin))); - if (rec) { + if (rec) { *tag = DEFIO_TAG_MAKE(port, pin); - cliPrintf("Resource is set to %c%02d!", port + 'A', pin); +#ifndef CLI_MINIMAL_VERBOSITY + cliPrintf("Resource is set to %c%02d!\r\n", port + 'A', pin); + resourceCheck(resourceIndex, index, DEFIO_TAG_MAKE(port, pin)); +#else + cliPrintf("Set to %c%02d!", port + 'A', pin); +#endif } else { - cliPrintf("Resource is invalid!"); + cliPrintf("Resource is invalid!\r\n"); } return; }