From cc432b761c884a0bd8e9d83db0a4e26109fc08b1 Mon Sep 17 00:00:00 2001 From: chen <15335560115@163.com> Date: 星期五, 08 十一月 2024 15:35:38 +0800 Subject: [PATCH] 安邦手环GPS删除部分无用数据和修改4G波特率9600出厂测试固件 --- keil/include/components/se/src/uart_in_spi.c | 165 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 files changed, 165 insertions(+), 0 deletions(-) diff --git a/keil/include/components/se/src/uart_in_spi.c b/keil/include/components/se/src/uart_in_spi.c new file mode 100644 index 0000000..85f75e0 --- /dev/null +++ b/keil/include/components/se/src/uart_in_spi.c @@ -0,0 +1,165 @@ +/* + * Copyright (c) 2019-2023 Beijing Hanwei Innovation Technology Ltd. Co. and + * its subsidiaries and affiliates (collectly called MKSEMI). + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * 1. Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * + * 2. Redistributions in binary form, except as embedded into an MKSEMI + * integrated circuit in a product or a software update for such product, + * must reproduce the above copyright notice, this list of conditions and + * the following disclaimer in the documentation and/or other materials + * provided with the distribution. + * + * 3. Neither the name of MKSEMI nor the names of its contributors may be used + * to endorse or promote products derived from this software without + * specific prior written permission. + * + * 4. This software, with or without modification, must only be used with a + * MKSEMI integrated circuit. + * + * 5. Any software provided in binary form under this license must not be + * reverse engineered, decompiled, modified and/or disassembled. + * + * THIS SOFTWARE IS PROVIDED BY MKSEMI "AS IS" AND ANY EXPRESS OR IMPLIED + * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF + * MERCHANTABILITY, NONINFRINGEMENT, AND FITNESS FOR A PARTICULAR PURPOSE ARE + * DISCLAIMED. IN NO EVENT SHALL MKSEMI OR CONTRIBUTORS BE LIABLE FOR ANY + * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES + * (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; + * LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND + * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT + * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF + * THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ + +#include <stdio.h> +#include <stdlib.h> +#include <stddef.h> +#include <stdarg.h> +#include <stdbool.h> +#include <errno.h> +#include <string.h> +#include <ctype.h> +#include <stdint.h> +#include "mk_common.h" +#include "mk_uart.h" +#include "uart_in_spi.h" + +// come from uart_example +#define TEST_UART_POLL_MODE 0 +#define TEST_UART_INTERUPT_MODE 1 +#define TEST_UART_DMA_MODE 2 +#define TEST_UART_MODE TEST_UART_POLL_MODE + +#define TEST_PORT_UART UART_ID0 + +/******************************************************************************* + * @Function uart_in_spi_init + * @Parameters None. + * @Returns void. + ******************************************************************************/ +void uart_in_spi_init(void) +{ + struct UART_CFG_T test_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_921600, +#if (TEST_UART_MODE == TEST_UART_POLL_MODE) + .dma_en = false, + .int_rx = false, + .int_tx = false, +#elif (TEST_UART_MODE == TEST_UART_INTERUPT_MODE) + .dma_en = false, + .int_rx = true, + .int_tx = true, +#elif (TEST_UART_MODE == TEST_UART_DMA_MODE) + .dma_en = true, + .int_rx = false, + .int_tx = false, +#endif + }; + + uart_open(TEST_PORT_UART, &test_uart_cfg); + return; +} + +#define TAG_UART_CMD_START_HIGH ((uint8_t)0xf1) +#define TAG_UART_CMS_START_LOW ((uint8_t)0xbc) + +/******************************************************************************* + * + * @Function uart_receive_in_spi + * @Parameters rx_buf - the buffer for receiving the data from UART. + * buf_size - the buffer size + * callback - call back function + * @Returns the data length. + ******************************************************************************/ +int uart_receive_in_spi(uint8_t *rx_buf, uint16_t buf_size, drv_callback_t callback) +{ + int ret; + uint16_t len; + uint8_t tmp_buf[8]; + + do + { + ret = uart_receive(TEST_PORT_UART, tmp_buf, 1, callback); + if ((ret != DRV_OK) || (tmp_buf[0] != TAG_UART_CMD_START_HIGH)) + { + continue; + } + ret = uart_receive(TEST_PORT_UART, tmp_buf + 1, 1, callback); + if ((ret != DRV_OK) || (tmp_buf[1] != TAG_UART_CMS_START_LOW)) + { + continue; + } + ret = uart_receive(TEST_PORT_UART, tmp_buf + 2, 2, callback); + if (ret != DRV_OK) + { + // sofCnt++; + continue; + } + len = (uint16_t)(((uint16_t)tmp_buf[2] << 8) + tmp_buf[3]); + if ((len < 5) || (len > (255 + 5))) + { + continue; + } + else + { + break; + } + } while (1); // (sofCnt < sofMaxCnt); + + ret = uart_receive(TEST_PORT_UART, rx_buf, len, callback); + if (ret != DRV_OK) + { + return ret; + } + else + { + return len; + } +} + +/******************************************************************************* + * + * @Function uart_send_in_spi + * @Parameters tx_buf - the buffer for sending the data from UART. + * len - the data size + * callback - call back function + * @Returns tx status. + ******************************************************************************/ +int uart_send_in_spi(uint8_t *tx_buf, uint16_t len, drv_callback_t callback) +{ + return uart_send(TEST_PORT_UART, tx_buf, len, callback); +} -- Gitblit v1.9.3