keil/include/drivers/mk_trace.c
@@ -205,8 +205,7 @@
};
const static char *module_name[TRACE_MODULE_NUM] = {"[MAC]",  "[PHY]", "[DRV]",  "[APP]", "[UWB]", "[UCI]",  "[TEST]",
        "[BOOT]", "[OS]",  "[FIRA]", "[CCC]", "[SE]",  "[SCP03]"
                                                   };
                                                    "[BOOT]", "[OS]",  "[FIRA]", "[CCC]", "[SE]",  "[SCP03]"};
const static char *level_tag[TRACE_LEVEL_NUM] = {
    "[ERROR]",
@@ -297,20 +296,19 @@
    {
        enum UART_DEV_T trace_uart = (trace_handle.port == TRACE_PORT_UART0) ? UART_ID0 : UART_ID1;
        struct UART_CFG_T trace_uart_cfg = {.parity = UART_PARITY_NONE,
            .stop = UART_STOP_BITS_1,
             .data = UART_DATA_BITS_8,
              .flow = UART_FLOW_CONTROL_NONE,
               .rx_level = UART_RXFIFO_CHAR_1,
                .tx_level = UART_TXFIFO_EMPTY,
                 .baud = baud_rate,
                                            .stop = UART_STOP_BITS_1,
                                            .data = UART_DATA_BITS_8,
                                            .flow = UART_FLOW_CONTROL_NONE,
                                            .rx_level = UART_RXFIFO_CHAR_1,
                                            .tx_level = UART_TXFIFO_EMPTY,
                                            .baud = baud_rate,
#ifdef TRACE_BLOCKING
                  .dma_en = false,
                                            .dma_en = false,
#else
                  .dma_en = true,
                                            .dma_en = true,
#endif
                   .int_rx = false,
                    .int_tx = false
        };
                                            .int_rx = false,
                                            .int_tx = false};
        ret = uart_open(trace_uart, &trace_uart_cfg);
@@ -570,65 +568,65 @@
        enum UART_DEV_T trace_uart = (trace_handle.port == TRACE_PORT_UART0) ? UART_ID0 : UART_ID1;
        switch (trace_handle.console_fsm)
        {
        case CONSOLE_RX_HEADER:
        {
            if (trace_handle.rx_buf[POS_PREAMBLE] == CONSOLE_CMD)
            case CONSOLE_RX_HEADER:
            {
                payload_len = (uint16_t)(trace_handle.rx_buf[POS_LENGTH + 1] << 8) + trace_handle.rx_buf[POS_LENGTH];
                trace_handle.console_fsm = CONSOLE_RX_PAYLOAD;
                uart_receive(trace_uart, &trace_handle.rx_buf[POS_ID], payload_len, console_receive_callback);
            }
            else if (trace_handle.rx_buf[1] == CONSOLE_CMD)
            {
                trace_handle.rx_buf[POS_PREAMBLE] = CONSOLE_CMD;
                trace_handle.rx_buf[1] = trace_handle.rx_buf[2];
                uart_receive(trace_uart, &trace_handle.rx_buf[2], 1, console_receive_callback);
            }
            else if (trace_handle.rx_buf[2] == CONSOLE_CMD)
            {
                trace_handle.rx_buf[POS_PREAMBLE] = CONSOLE_CMD;
                uart_receive(trace_uart, &trace_handle.rx_buf[1], 2, console_receive_callback);
            }
            else
            {
                uart_receive(trace_uart, &trace_handle.rx_buf[POS_PREAMBLE], LEN_HEADER, console_receive_callback);
            }
            break;
        }
        case CONSOLE_RX_PAYLOAD:
        {
            // check crc
            payload_len = (uint16_t)(trace_handle.rx_buf[POS_LENGTH + 1] << 8) + trace_handle.rx_buf[POS_LENGTH];
            uint16_t crc_frame =
                (uint16_t)(trace_handle.rx_buf[payload_len + LEN_HEADER - LEN_CRC + 1] << 8) + trace_handle.rx_buf[payload_len + LEN_HEADER - LEN_CRC];
            uint16_t crc_cal = crc16(&trace_handle.rx_buf[0], payload_len + LEN_HEADER - LEN_CRC);
            if (crc_frame == crc_cal)
            {
                uint16_t id = (uint16_t)(trace_handle.rx_buf[POS_ID + 1] << 8) + trace_handle.rx_buf[POS_ID];
                // packet process
                if (console_cmd_handler_list[id].function)
                if (trace_handle.rx_buf[POS_PREAMBLE] == CONSOLE_CMD)
                {
                    console_cmd_handler_list[id].function(&trace_handle.rx_buf[POS_DATA], payload_len - LEN_CRC - LEN_ID);
                    payload_len = (uint16_t)(trace_handle.rx_buf[POS_LENGTH + 1] << 8) + trace_handle.rx_buf[POS_LENGTH];
                    trace_handle.console_fsm = CONSOLE_RX_PAYLOAD;
                    uart_receive(trace_uart, &trace_handle.rx_buf[POS_ID], payload_len, console_receive_callback);
                }
                else if (trace_handle.rx_buf[1] == CONSOLE_CMD)
                {
                    trace_handle.rx_buf[POS_PREAMBLE] = CONSOLE_CMD;
                    trace_handle.rx_buf[1] = trace_handle.rx_buf[2];
                    uart_receive(trace_uart, &trace_handle.rx_buf[2], 1, console_receive_callback);
                }
                else if (trace_handle.rx_buf[2] == CONSOLE_CMD)
                {
                    trace_handle.rx_buf[POS_PREAMBLE] = CONSOLE_CMD;
                    uart_receive(trace_uart, &trace_handle.rx_buf[1], 2, console_receive_callback);
                }
                else
                {
                    LOG_ERROR(TRACE_MODULE_DRIVER, "Console CMD ID %04x Function is Null\r\n", id);
                    uart_receive(trace_uart, &trace_handle.rx_buf[POS_PREAMBLE], LEN_HEADER, console_receive_callback);
                }
                break;
            }
            else
            {
                LOG_ERROR(TRACE_MODULE_DRIVER, "Console CRC Error %04x %04x\r\n", crc_cal, crc_frame);
            }
            trace_handle.console_fsm = CONSOLE_RX_HEADER;
            uart_receive(trace_uart, &trace_handle.rx_buf[0], LEN_HEADER, console_receive_callback);
            break;
        }
        default:
            break;
            case CONSOLE_RX_PAYLOAD:
            {
                // check crc
                payload_len = (uint16_t)(trace_handle.rx_buf[POS_LENGTH + 1] << 8) + trace_handle.rx_buf[POS_LENGTH];
                uint16_t crc_frame =
                    (uint16_t)(trace_handle.rx_buf[payload_len + LEN_HEADER - LEN_CRC + 1] << 8) + trace_handle.rx_buf[payload_len + LEN_HEADER - LEN_CRC];
                uint16_t crc_cal = crc16(&trace_handle.rx_buf[0], payload_len + LEN_HEADER - LEN_CRC);
                if (crc_frame == crc_cal)
                {
                    uint16_t id = (uint16_t)(trace_handle.rx_buf[POS_ID + 1] << 8) + trace_handle.rx_buf[POS_ID];
                    // packet process
                    if (console_cmd_handler_list[id].function)
                    {
                        console_cmd_handler_list[id].function(&trace_handle.rx_buf[POS_DATA], payload_len - LEN_CRC - LEN_ID);
                    }
                    else
                    {
                        LOG_ERROR(TRACE_MODULE_DRIVER, "Console CMD ID %04x Function is Null\r\n", id);
                    }
                }
                else
                {
                    LOG_ERROR(TRACE_MODULE_DRIVER, "Console CRC Error %04x %04x\r\n", crc_cal, crc_frame);
                }
                trace_handle.console_fsm = CONSOLE_RX_HEADER;
                uart_receive(trace_uart, &trace_handle.rx_buf[0], LEN_HEADER, console_receive_callback);
                break;
            }
            default:
                break;
        }
    }
}
@@ -727,15 +725,15 @@
        while (1)
        {
            if (NumDigits > 1u)
            {   // User specified a min number of digits to print? => Make sure we loop at least that often, before
                // checking anything else (> 1 check avoids problems with NumDigits being signed / unsigned)
            { // User specified a min number of digits to print? => Make sure we loop at least that often, before
              // checking anything else (> 1 check avoids problems with NumDigits being signed / unsigned)
                NumDigits--;
            }
            else
            {
                Div = v / Digit;
                if (Div < Base)
                {   // Is our divider big enough to extract the highest digit from value? => Done
                { // Is our divider big enough to extract the highest digit from value? => Done
                    break;
                }
            }
@@ -901,25 +899,25 @@
                c = *fmt;
                switch (c)
                {
                case '-':
                    FormatFlags |= FORMAT_FLAG_LEFT_JUSTIFY;
                    fmt++;
                    break;
                case '0':
                    FormatFlags |= FORMAT_FLAG_PAD_ZERO;
                    fmt++;
                    break;
                case '+':
                    FormatFlags |= FORMAT_FLAG_PRINT_SIGN;
                    fmt++;
                    break;
                case '#':
                    FormatFlags |= FORMAT_FLAG_ALTERNATE;
                    fmt++;
                    break;
                default:
                    v = 0;
                    break;
                    case '-':
                        FormatFlags |= FORMAT_FLAG_LEFT_JUSTIFY;
                        fmt++;
                        break;
                    case '0':
                        FormatFlags |= FORMAT_FLAG_PAD_ZERO;
                        fmt++;
                        break;
                    case '+':
                        FormatFlags |= FORMAT_FLAG_PRINT_SIGN;
                        fmt++;
                        break;
                    case '#':
                        FormatFlags |= FORMAT_FLAG_ALTERNATE;
                        fmt++;
                        break;
                    default:
                        v = 0;
                        break;
                }
            } while (v);
            //
@@ -977,65 +975,65 @@
            //
            switch (c)
            {
            case 'c':
            {
                char c0;
                v = va_arg(args, int);
                c0 = (char)v;
                _StoreChar(&BufferDesc, c0);
                break;
            }
            case 'd':
                v = va_arg(args, int);
                _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags);
                break;
            case 'u':
                v = va_arg(args, int);
                _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags);
                break;
            case 'x':
            case 'X':
                v = va_arg(args, int);
                _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags);
                break;
            case 's':
            {
                const char *s = va_arg(args, const char *);
                do
                case 'c':
                {
                    c = *s;
                    s++;
                    if (c == '\0')
                    char c0;
                    v = va_arg(args, int);
                    c0 = (char)v;
                    _StoreChar(&BufferDesc, c0);
                    break;
                }
                case 'd':
                    v = va_arg(args, int);
                    _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags);
                    break;
                case 'u':
                    v = va_arg(args, int);
                    _PrintUnsigned(&BufferDesc, (unsigned)v, 10u, NumDigits, FieldWidth, FormatFlags);
                    break;
                case 'x':
                case 'X':
                    v = va_arg(args, int);
                    _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, NumDigits, FieldWidth, FormatFlags);
                    break;
                case 's':
                {
                    const char *s = va_arg(args, const char *);
                    do
                    {
                        break;
                    }
                    _StoreChar(&BufferDesc, c);
                } while (BufferDesc.ReturnValue >= 0);
            }
            break;
            case 'f':
            case 'F':
            {
                float fv = (float)va_arg(args, double);
                if (fv < 0)
                    _StoreChar(&BufferDesc, '-');
                v = abs((int)fv);
                _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags);
                _StoreChar(&BufferDesc, '.');
                v = abs((int)(fv * 1000000));
                v = v % 1000000;
                _PrintInt(&BufferDesc, v, 10u, 6, FieldWidth, FormatFlags);
            }
            break;
            case 'p':
                v = va_arg(args, int);
                _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u);
                        c = *s;
                        s++;
                        if (c == '\0')
                        {
                            break;
                        }
                        _StoreChar(&BufferDesc, c);
                    } while (BufferDesc.ReturnValue >= 0);
                }
                break;
            case '%':
                _StoreChar(&BufferDesc, '%');
                case 'f':
                case 'F':
                {
                    float fv = (float)va_arg(args, double);
                    if (fv < 0)
                        _StoreChar(&BufferDesc, '-');
                    v = abs((int)fv);
                    _PrintInt(&BufferDesc, v, 10u, NumDigits, FieldWidth, FormatFlags);
                    _StoreChar(&BufferDesc, '.');
                    v = abs((int)(fv * 1000000));
                    v = v % 1000000;
                    _PrintInt(&BufferDesc, v, 10u, 6, FieldWidth, FormatFlags);
                }
                break;
            default:
                break;
                case 'p':
                    v = va_arg(args, int);
                    _PrintUnsigned(&BufferDesc, (unsigned)v, 16u, 8u, 8u, 0u);
                    break;
                case '%':
                    _StoreChar(&BufferDesc, '%');
                    break;
                default:
                    break;
            }
            fmt++;
        }
@@ -1198,7 +1196,7 @@
    j = 3;
    while (*p != '\0')
    {   // fill begin at recdBuf[3]
    { // fill begin at recdBuf[3]
        if (*p != '%')
        {
            p++;
@@ -1212,82 +1210,82 @@
        switch (*++p)
        {
        case 's':
        {
            recdBuf[j++] = 0;
            dataBits |= 1 << 2 * var_count++;
        }
        break;
        case 'c':
        case 'd':
        {
            it = va_arg(aq, int);
            if (it > 0x7FFF)
            case 's':
            {
                *(recdBuf + j++) = 0xff;
                *(recdBuf + j++) = 0x7f;
                dataBits |= 2 << 2 * var_count++;
            }
            if (it < 256)
            {   // 1byte
                recdBuf[j++] = (char)it;
                recdBuf[j++] = 0;
                dataBits |= 1 << 2 * var_count++;
            }
            else
            {   // 2byte
                *(recdBuf + j++) = it & 0xff;
                *(recdBuf + j++) = it >> 8 & 0xff;
                dataBits |= 2 << 2 * var_count++;
            }
        }
        break;
        case 'x':
        case 'X':
        case 'u':
        {
            it = va_arg(aq, int);
            if (it > 0xFFFF)
            break;
            case 'c':
            case 'd':
            {
                *(recdBuf + j++) = 0xff;
                *(recdBuf + j++) = 0xff;
                dataBits |= 2 << 2 * var_count++;
            }
                it = va_arg(aq, int);
                if (it > 0x7FFF)
                {
                    *(recdBuf + j++) = 0xff;
                    *(recdBuf + j++) = 0x7f;
                    dataBits |= 2 << 2 * var_count++;
                }
            if (it < 0x100) //<0xFF
            {   // 1byte
                recdBuf[j++] = (char)it;
                dataBits |= 1 << 2 * var_count++;
                if (it < 256)
                { // 1byte
                    recdBuf[j++] = (char)it;
                    dataBits |= 1 << 2 * var_count++;
                }
                else
                { // 2byte
                    *(recdBuf + j++) = it & 0xff;
                    *(recdBuf + j++) = it >> 8 & 0xff;
                    dataBits |= 2 << 2 * var_count++;
                }
            }
            else
            {   // 2byte
                *(recdBuf + j++) = it & 0xff;
                *(recdBuf + j++) = it >> 8 & 0xff;
                dataBits |= 2 << 2 * var_count++;
            }
        }
        break;
        case 'f':
        {
            dd = va_arg(aq, double);
            if (dd > 3.4e38)
            break;
            case 'x':
            case 'X':
            case 'u':
            {
                *(recdBuf + j++) = 0xff;
                *(recdBuf + j++) = 0xff;
                *(recdBuf + j++) = 0xff;
                *(recdBuf + j++) = 0xff;
                dataBits |= 3 << 2 * var_count++;
                it = va_arg(aq, int);
                if (it > 0xFFFF)
                {
                    *(recdBuf + j++) = 0xff;
                    *(recdBuf + j++) = 0xff;
                    dataBits |= 2 << 2 * var_count++;
                }
                if (it < 0x100) //<0xFF
                {               // 1byte
                    recdBuf[j++] = (char)it;
                    dataBits |= 1 << 2 * var_count++;
                }
                else
                { // 2byte
                    *(recdBuf + j++) = it & 0xff;
                    *(recdBuf + j++) = it >> 8 & 0xff;
                    dataBits |= 2 << 2 * var_count++;
                }
            }
            else
            break;
            case 'f':
            {
                *(recdBuf + j++) = (unsigned int)dd & 0xff;
                *(recdBuf + j++) = (unsigned int)dd >> 8 & 0xff;
                *(recdBuf + j++) = (unsigned int)dd >> 16 & 0xff;
                *(recdBuf + j++) = (unsigned int)dd >> 24 & 0xff;
                dataBits |= 3 << 2 * var_count++;
                dd = va_arg(aq, double);
                if (dd > 3.4e38)
                {
                    *(recdBuf + j++) = 0xff;
                    *(recdBuf + j++) = 0xff;
                    *(recdBuf + j++) = 0xff;
                    *(recdBuf + j++) = 0xff;
                    dataBits |= 3 << 2 * var_count++;
                }
                else
                {
                    *(recdBuf + j++) = (unsigned int)dd & 0xff;
                    *(recdBuf + j++) = (unsigned int)dd >> 8 & 0xff;
                    *(recdBuf + j++) = (unsigned int)dd >> 16 & 0xff;
                    *(recdBuf + j++) = (unsigned int)dd >> 24 & 0xff;
                    dataBits |= 3 << 2 * var_count++;
                }
            }
        }
        break;
            break;
        }
        p++;
    }
@@ -1589,8 +1587,8 @@
#if defined(__CC_ARM)
#else
__ASM volatile("mov %0, sp" : "=r"(sp));
__ASM volatile("mov %0, lr" : "=r"(lr));
    __ASM volatile("mov %0, sp" : "=r"(sp));
    __ASM volatile("mov %0, lr" : "=r"(lr));
#endif
    // Parameters