From 7371b0c6e6ee4025563d08e99e3b5ceb2576879e Mon Sep 17 00:00:00 2001
From: SEEKFREE_BUDING <2289331269@qq.com>
Date: Wed, 24 Jan 2024 10:29:49 +0800
Subject: [PATCH] =?UTF-8?q?V3.2.6=20=20=20=20=20=20=20=20=20=E6=9B=B4?=
=?UTF-8?q?=E6=96=B0=E9=80=90=E9=A3=9E=E5=8A=A9=E6=89=8B=E6=8E=A5=E5=8F=A3?=
=?UTF-8?q?=E5=87=BD=E6=95=B0=20=E8=B0=83=E7=94=A8=E5=88=9D=E5=A7=8B?=
=?UTF-8?q?=E5=8C=96=E6=97=B6=E7=9B=B4=E6=8E=A5=E4=BC=A0=E5=8F=82=E9=80=9A?=
=?UTF-8?q?=E4=BF=A1=E7=B1=BB=20=20=20=20=20=20=20=20=20=E6=9B=B4=E6=96=B0?=
=?UTF-8?q?wifi=20SPI=E9=A9=B1=E5=8A=A8=E6=96=87=E4=BB=B6=20=E6=8F=90?=
=?UTF-8?q?=E9=AB=98=E9=80=9A=E4=BF=A1=E6=95=88=E7=8E=87=20=20=20=20=20=20?=
=?UTF-8?q?=20=20=20=E6=9B=B4=E6=96=B0GPS=E9=A9=B1=E5=8A=A8=E6=96=87?=
=?UTF-8?q?=E4=BB=B6=EF=BC=8C=E6=9B=B4=E5=90=8D=E4=B8=BAGNSS=EF=BC=8C?=
=?UTF-8?q?=E5=85=BC=E5=AE=B9=E6=99=AE=E9=80=9A=E5=AE=9A=E4=BD=8D=E6=A8=A1?=
=?UTF-8?q?=E5=9D=97=E5=8F=8ARTK?=
MIME-Version: 1.0
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: 8bit
---
.../E01_gpio_demo/libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
..._device_gps_tau1201.c => zf_device_gnss.c} | 357 ++--
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
Example/E01_gpio_demo/user/isr.c | 4 +-
.../E02_uart_demo/libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c} | 357 ++--
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
Example/E02_uart_demo/user/isr.c | 4 +-
.../E03_adc_demo/libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c} | 357 ++--
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
Example/E03_adc_demo/user/isr.c | 4 +-
.../E04_pwm_demo/libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
..._device_gps_tau1201.c => zf_device_gnss.c} | 357 ++--
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
Example/E04_pwm_demo/user/isr.c | 4 +-
.../E05_pit_demo/libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c | 620 ++++++
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.c | 541 ------
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
Example/E05_pit_demo/user/isr.c | 4 +-
.../E06_exit_demo/libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c | 620 ++++++
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.c | 541 ------
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
Example/E06_exit_demo/user/isr.c | 4 +-
.../libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c | 620 ++++++
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.c | 541 ------
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
Example/E07_encoder_demo/user/isr.c | 4 +-
.../E08_eeprom_demo/libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c | 620 ++++++
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.c | 541 ------
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
Example/E08_eeprom_demo/user/isr.c | 4 +-
.../E09_timer_demo/libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c | 620 ++++++
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.c | 541 ------
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
Example/E09_timer_demo/user/isr.c | 4 +-
.../libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c | 620 ++++++
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.c | 541 ------
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
Example/E10_printf_debug_log_demo/user/isr.c | 4 +-
.../libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c | 620 ++++++
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.c | 541 ------
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
.../user/isr.c | 4 +-
.../libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c | 620 ++++++
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.c | 541 ------
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
.../user/isr.c | 4 +-
.../libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c | 620 ++++++
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.c | 541 ------
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
Example/E13_dual_core_demo/user/isr.c | 4 +-
.../libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c | 620 ++++++
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.c | 541 ------
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
.../user/isr.c | 4 +-
Example/E15_fft_demo/.cproject | 13 +-
.../E15_fft_demo/libraries/doc/version.txt | 5 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c | 620 ++++++
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.c | 541 ------
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
Example/E15_fft_demo/user/cpu0_main.c | 31 +-
Example/E15_fft_demo/user/isr.c | 4 +-
.../libraries/doc/version.txt | 4 +
.../Configurations/Ifx_Cfg.h | 2 +-
.../libraries/zf_common/zf_common_clock.c | 2 +-
.../libraries/zf_common/zf_common_clock.h | 2 +-
.../libraries/zf_common/zf_common_debug.c | 4 +-
.../libraries/zf_common/zf_common_debug.h | 2 +-
.../libraries/zf_common/zf_common_fifo.c | 22 +-
.../libraries/zf_common/zf_common_fifo.h | 20 +-
.../libraries/zf_common/zf_common_font.c | 2 +-
.../libraries/zf_common/zf_common_font.h | 2 +-
.../libraries/zf_common/zf_common_function.c | 2 +-
.../libraries/zf_common/zf_common_function.h | 2 +-
.../libraries/zf_common/zf_common_headfile.h | 5 +-
.../libraries/zf_common/zf_common_interrupt.c | 2 +-
.../libraries/zf_common/zf_common_interrupt.h | 2 +-
.../libraries/zf_common/zf_common_typedef.h | 2 +-
.../zf_components/seekfree_assistant.c | 102 +-
.../zf_components/seekfree_assistant.h | 186 +-
.../seekfree_assistant_interface.c | 103 +-
.../seekfree_assistant_interface.h | 57 +
.../zf_device/zf_device_absolute_encoder.c | 2 +-
.../zf_device/zf_device_absolute_encoder.h | 2 +-
.../zf_device/zf_device_bluetooth_ch9141.c | 4 +-
.../zf_device/zf_device_bluetooth_ch9141.h | 2 +-
.../libraries/zf_device/zf_device_camera.c | 4 +-
.../libraries/zf_device/zf_device_camera.h | 4 +-
.../libraries/zf_device/zf_device_config.h | 2 +-
.../libraries/zf_device/zf_device_dl1a.c | 2 +-
.../libraries/zf_device/zf_device_dl1a.h | 2 +-
.../libraries/zf_device/zf_device_dl1b.c | 2 +-
.../libraries/zf_device/zf_device_dl1b.h | 2 +-
.../libraries/zf_device/zf_device_gnss.c | 620 ++++++
.../libraries/zf_device/zf_device_gnss.h | 125 ++
.../zf_device/zf_device_gps_tau1201.c | 541 ------
.../zf_device/zf_device_gps_tau1201.h | 117 --
.../libraries/zf_device/zf_device_icm20602.c | 2 +-
.../libraries/zf_device/zf_device_icm20602.h | 2 +-
.../libraries/zf_device/zf_device_imu660ra.c | 2 +-
.../libraries/zf_device/zf_device_imu660ra.h | 2 +-
.../libraries/zf_device/zf_device_imu963ra.c | 2 +-
.../libraries/zf_device/zf_device_imu963ra.h | 2 +-
.../libraries/zf_device/zf_device_ips114.c | 2 +-
.../libraries/zf_device/zf_device_ips114.h | 2 +-
.../libraries/zf_device/zf_device_ips200.c | 2 +-
.../libraries/zf_device/zf_device_ips200.h | 2 +-
.../libraries/zf_device/zf_device_key.c | 2 +-
.../libraries/zf_device/zf_device_key.h | 2 +-
.../libraries/zf_device/zf_device_mpu6050.c | 2 +-
.../libraries/zf_device/zf_device_mpu6050.h | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.c | 2 +-
.../libraries/zf_device/zf_device_mt9v03x.h | 2 +-
.../libraries/zf_device/zf_device_oled.c | 2 +-
.../libraries/zf_device/zf_device_oled.h | 2 +-
.../libraries/zf_device/zf_device_ov7725.c | 2 +-
.../libraries/zf_device/zf_device_ov7725.h | 2 +-
.../libraries/zf_device/zf_device_scc8660.c | 2 +-
.../libraries/zf_device/zf_device_scc8660.h | 2 +-
.../libraries/zf_device/zf_device_tft180.c | 2 +-
.../libraries/zf_device/zf_device_tft180.h | 2 +-
.../libraries/zf_device/zf_device_tsl1401.c | 2 +-
.../libraries/zf_device/zf_device_tsl1401.h | 2 +-
.../libraries/zf_device/zf_device_type.c | 15 +-
.../libraries/zf_device/zf_device_type.h | 3 +-
.../zf_device_virtual_oscilloscope.c | 2 +-
.../zf_device_virtual_oscilloscope.h | 2 +-
.../libraries/zf_device/zf_device_wifi_spi.c | 1678 +++++------------
.../libraries/zf_device/zf_device_wifi_spi.h | 188 +-
.../libraries/zf_device/zf_device_wifi_uart.c | 4 +-
.../libraries/zf_device/zf_device_wifi_uart.h | 2 +-
.../zf_device/zf_device_wireless_uart.c | 4 +-
.../zf_device/zf_device_wireless_uart.h | 10 +-
.../libraries/zf_driver/zf_driver_adc.c | 2 +-
.../libraries/zf_driver/zf_driver_adc.h | 2 +-
.../libraries/zf_driver/zf_driver_delay.c | 2 +-
.../libraries/zf_driver/zf_driver_delay.h | 2 +-
.../libraries/zf_driver/zf_driver_dma.c | 2 +-
.../libraries/zf_driver/zf_driver_dma.h | 2 +-
.../libraries/zf_driver/zf_driver_encoder.c | 2 +-
.../libraries/zf_driver/zf_driver_encoder.h | 2 +-
.../libraries/zf_driver/zf_driver_exti.c | 2 +-
.../libraries/zf_driver/zf_driver_exti.h | 2 +-
.../libraries/zf_driver/zf_driver_flash.c | 2 +-
.../libraries/zf_driver/zf_driver_flash.h | 2 +-
.../libraries/zf_driver/zf_driver_gpio.c | 2 +-
.../libraries/zf_driver/zf_driver_gpio.h | 2 +-
.../libraries/zf_driver/zf_driver_pit.c | 2 +-
.../libraries/zf_driver/zf_driver_pit.h | 2 +-
.../libraries/zf_driver/zf_driver_pwm.c | 2 +-
.../libraries/zf_driver/zf_driver_pwm.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_iic.h | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.c | 2 +-
.../libraries/zf_driver/zf_driver_soft_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_spi.c | 4 +-
.../libraries/zf_driver/zf_driver_spi.h | 2 +-
.../libraries/zf_driver/zf_driver_timer.c | 2 +-
.../libraries/zf_driver/zf_driver_timer.h | 2 +-
.../libraries/zf_driver/zf_driver_uart.c | 2 +-
.../libraries/zf_driver/zf_driver_uart.h | 2 +-
.../user/cpu0_main.c | 2 +-
.../user/cpu1_main.c | 2 +-
Seekfree_TC264_Opensource_Library/user/isr.c | 5 +-
Seekfree_TC264_Opensource_Library/user/isr.h | 2 +-
.../user/isr_config.h | 2 +-
1602 files changed, 25649 insertions(+), 34851 deletions(-)
create mode 100644 Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h
rename Example/E01_gpio_demo/libraries/zf_device/{zf_device_gps_tau1201.c => zf_device_gnss.c} (60%)
create mode 100644 Example/E01_gpio_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h
rename Example/{E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.c => E02_uart_demo/libraries/zf_device/zf_device_gnss.c} (60%)
create mode 100644 Example/E02_uart_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h
rename Example/{E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.c => E03_adc_demo/libraries/zf_device/zf_device_gnss.c} (60%)
create mode 100644 Example/E03_adc_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h
rename Example/E04_pwm_demo/libraries/zf_device/{zf_device_gps_tau1201.c => zf_device_gnss.c} (60%)
create mode 100644 Example/E04_pwm_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h
create mode 100644 Example/E05_pit_demo/libraries/zf_device/zf_device_gnss.c
create mode 100644 Example/E05_pit_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.c
delete mode 100644 Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h
create mode 100644 Example/E06_exit_demo/libraries/zf_device/zf_device_gnss.c
create mode 100644 Example/E06_exit_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.c
delete mode 100644 Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h
create mode 100644 Example/E07_encoder_demo/libraries/zf_device/zf_device_gnss.c
create mode 100644 Example/E07_encoder_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.c
delete mode 100644 Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h
create mode 100644 Example/E08_eeprom_demo/libraries/zf_device/zf_device_gnss.c
create mode 100644 Example/E08_eeprom_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.c
delete mode 100644 Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h
create mode 100644 Example/E09_timer_demo/libraries/zf_device/zf_device_gnss.c
create mode 100644 Example/E09_timer_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.c
delete mode 100644 Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h
create mode 100644 Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gnss.c
create mode 100644 Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.c
delete mode 100644 Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h
create mode 100644 Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gnss.c
create mode 100644 Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.c
delete mode 100644 Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h
create mode 100644 Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gnss.c
create mode 100644 Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.c
delete mode 100644 Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h
create mode 100644 Example/E13_dual_core_demo/libraries/zf_device/zf_device_gnss.c
create mode 100644 Example/E13_dual_core_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.c
delete mode 100644 Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h
create mode 100644 Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gnss.c
create mode 100644 Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.c
delete mode 100644 Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h
create mode 100644 Example/E15_fft_demo/libraries/zf_device/zf_device_gnss.c
create mode 100644 Example/E15_fft_demo/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.c
delete mode 100644 Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.h
create mode 100644 Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h
create mode 100644 Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gnss.c
create mode 100644 Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gnss.h
delete mode 100644 Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.c
delete mode 100644 Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.h
diff --git a/Example/E01_gpio_demo/libraries/doc/version.txt b/Example/E01_gpio_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E01_gpio_demo/libraries/doc/version.txt
+++ b/Example/E01_gpio_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E01_gpio_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E01_gpio_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E01_gpio_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E01_gpio_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_clock.c b/Example/E01_gpio_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_clock.h b/Example/E01_gpio_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_debug.c b/Example/E01_gpio_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_debug.h b/Example/E01_gpio_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_fifo.c b/Example/E01_gpio_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_fifo.h b/Example/E01_gpio_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_font.c b/Example/E01_gpio_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_font.h b/Example/E01_gpio_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_function.c b/Example/E01_gpio_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_function.h b/Example/E01_gpio_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h b/Example/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E01_gpio_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E01_gpio_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_common/zf_common_typedef.h b/Example/E01_gpio_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E01_gpio_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E01_gpio_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E01_gpio_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_config.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_gnss.c
similarity index 60%
rename from Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.c
rename to Example/E01_gpio_demo/libraries/zf_device/zf_device_gnss.c
index da46a99..caf7cd0 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_gnss.c
@@ -21,27 +21,26 @@
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
*
-* 文件名称 zf_device_gps_tau1201
+* 文件名称 zf_device_gnss
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
+* 日期 作者 备注
+* 2023-12-28 pudding first version
********************************************************************************************************************/
-/********************************************************************************************************************
+/*********************************************************************************************************************
* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
********************************************************************************************************************/
#include "math.h"
@@ -50,22 +49,24 @@
#include "zf_driver_delay.h"
#include "zf_driver_uart.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
+#define GNSS_BUFFER_SIZE ( 128 )
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 获取指定 ',' 后面的索引
@@ -94,7 +95,7 @@ static uint8 get_parameter_index (uint8 num, char *str)
}
if(j == num)
{
- len1 = i + 1;
+ len1 = i + 1;
break;
}
}
@@ -121,7 +122,7 @@ static int get_int_number (char *s)
return_value = func_str_to_int(buf);
return return_value;
}
-
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
// 参数说明 *s 字符串
@@ -134,15 +135,15 @@ static float get_float_number (char *s)
uint8 i = 0;
char buf[15];
float return_value = 0;
-
+
i = get_parameter_index(1, s);
i = i - 1;
strncpy(buf, s, i);
buf[i] = 0;
return_value = (float)func_str_to_double(buf);
- return return_value;
+ return return_value;
}
-
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
// 参数说明 *s 字符串
@@ -155,7 +156,7 @@ static double get_double_number (char *s)
uint8 i = 0;
char buf[15];
double return_value = 0;
-
+
i = get_parameter_index(1, s);
i = i - 1;
strncpy(buf, s, i);
@@ -168,13 +169,13 @@ static double get_double_number (char *s)
// 函数简介 世界时间转换为北京时间
// 参数说明 *time 保存的时间
// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
+// 使用示例 utc_to_btc(&gnss->time);
// 备注信息 内部使用
//-------------------------------------------------------------------------------------------------------------------
static void utc_to_btc (gps_time_struct *time)
{
uint8 day_num = 0;
-
+
time->hour = time->hour + 8;
if(23 < time->hour)
{
@@ -197,7 +198,7 @@ static void utc_to_btc (gps_time_struct *time)
day_num = 30;
}
}
-
+
if(time->day > day_num)
{
time->day = 1;
@@ -214,18 +215,18 @@ static void utc_to_btc (gps_time_struct *time)
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 RMC语句解析
// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
+// 参数说明 *gnss 保存解析后的数据
// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
// 备注信息 内部使用
//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
{
uint8 state = 0, temp = 0;
-
+
double latitude = 0; // 纬度
double longitude = 0; // 经度
-
+
double lati_cent_tmp = 0, lati_second_tmp = 0;
double long_cent_tmp = 0, long_second_tmp = 0;
float speed_tmp = 0;
@@ -234,47 +235,50 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
state = buf[get_parameter_index(2, buf)];
- gps->state = 0;
if('A' == state) // 如果数据有效 则解析数据
{
return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
}
// 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
- utc_to_btc(&gps->time);
+ utc_to_btc(&gnss->time);
return return_state;
}
@@ -282,12 +286,12 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 GGA语句解析
// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
+// 参数说明 *gnss 保存解析后的数据
// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
// 备注信息 内部使用
//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
{
uint8 state = 0;
char *buf = line;
@@ -297,11 +301,41 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
if(',' != state)
{
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
return_state = 1;
}
+
+ return return_state;
+}
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
return return_state;
}
@@ -316,7 +350,7 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
+{
const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
double rad_latitude1 = 0;
double rad_latitude2 = 0;
@@ -325,7 +359,7 @@ double get_two_points_distance (double latitude1, double longitude1, double lati
double distance = 0;
double a = 0;
double b = 0;
-
+
rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
rad_latitude2 = ANGLE_TO_RAD(latitude2);
rad_longitude1 = ANGLE_TO_RAD(longitude1);
@@ -335,9 +369,9 @@ double get_two_points_distance (double latitude1, double longitude1, double lati
b = rad_longitude1 - rad_longitude2;
distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
+ distance = distance * EARTH_RADIUS;
- return distance;
+ return distance;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -370,7 +404,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit
// 使用示例 gps_data_parse();
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
+uint8 gnss_data_parse (void)
{
uint8 return_state = 0;
uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
@@ -380,9 +414,9 @@ uint8 gps_data_parse (void)
do
{
- if(GPS_STATE_RECEIVED == gps_rmc_state)
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
{
- gps_rmc_state = GPS_STATE_PARSING;
+ gnss_rmc_state = GPS_STATE_PARSING;
strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
@@ -395,17 +429,17 @@ uint8 gps_data_parse (void)
return_state = 1;
break;
}
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
}
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
{
- gps_gga_state = GPS_STATE_PARSING;
+ gnss_gga_state = GPS_STATE_PARSING;
strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
+
for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
{
bbc_xor_calculation ^= gps_gga_buffer[data_len];
@@ -416,11 +450,32 @@ uint8 gps_data_parse (void)
return_state = 1;
break;
}
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
}
- gps_gga_state = GPS_STATE_RECEIVING;
-
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
}while(0);
return return_state;
}
@@ -433,51 +488,64 @@ uint8 gps_data_parse (void)
// 使用示例 gps_uart_callback();
// 备注信息 此函数需要在串口接收中断内进行调用
//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
+void gnss_uart_callback (void)
{
uint8 temp_gps[6];
uint32 temp_length = 0;
- if(gps_tau1201_state)
+
+
+
+ if(gnss_state)
{
uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
+ while(uart_query_byte(GNSS_UART, &dat))
{
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
}
-
+
if('\n' == dat)
{
// 读取前6个数据 用于判断语句类型
temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
// 根据不同类型将数据拷贝到不同的缓冲区
if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
{
// 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
+ if(GPS_STATE_PARSING != gnss_rmc_state)
{
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
}
}
else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
{
// 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
+ if(GPS_STATE_PARSING != gnss_gga_state)
{
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
}
}
-
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
// 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
+ fifo_clear(&gnss_receiver_fifo);
- gps_tau1201_flag = 1;
+ gnss_flag = 1;
}
}
}
@@ -489,12 +557,12 @@ void gps_uart_callback (void)
// 使用示例 gps_init();
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
+void gnss_init (gps_device_enum gps_device)
{
const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
+
const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
@@ -504,38 +572,49 @@ void gps_init (void)
const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
}
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_gnss.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips114.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips114.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips200.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips200.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_oled.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_oled.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_tft180.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_tft180.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E01_gpio_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E01_gpio_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E01_gpio_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E01_gpio_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E01_gpio_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E01_gpio_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E01_gpio_demo/user/isr.c b/Example/E01_gpio_demo/user/isr.c
index 27171d2..9108ff0 100644
--- a/Example/E01_gpio_demo/user/isr.c
+++ b/Example/E01_gpio_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E02_uart_demo/libraries/doc/version.txt b/Example/E02_uart_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E02_uart_demo/libraries/doc/version.txt
+++ b/Example/E02_uart_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E02_uart_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E02_uart_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E02_uart_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E02_uart_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_clock.c b/Example/E02_uart_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_clock.h b/Example/E02_uart_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_debug.c b/Example/E02_uart_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_debug.h b/Example/E02_uart_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_fifo.c b/Example/E02_uart_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_fifo.h b/Example/E02_uart_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_font.c b/Example/E02_uart_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_font.h b/Example/E02_uart_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_function.c b/Example/E02_uart_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_function.h b/Example/E02_uart_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_headfile.h b/Example/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E02_uart_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E02_uart_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_common/zf_common_typedef.h b/Example/E02_uart_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E02_uart_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E02_uart_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.c b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.h b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E02_uart_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_config.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_gnss.c
similarity index 60%
rename from Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.c
rename to Example/E02_uart_demo/libraries/zf_device/zf_device_gnss.c
index da46a99..caf7cd0 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_gnss.c
@@ -21,27 +21,26 @@
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
*
-* 文件名称 zf_device_gps_tau1201
+* 文件名称 zf_device_gnss
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
+* 日期 作者 备注
+* 2023-12-28 pudding first version
********************************************************************************************************************/
-/********************************************************************************************************************
+/*********************************************************************************************************************
* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
********************************************************************************************************************/
#include "math.h"
@@ -50,22 +49,24 @@
#include "zf_driver_delay.h"
#include "zf_driver_uart.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
+#define GNSS_BUFFER_SIZE ( 128 )
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 获取指定 ',' 后面的索引
@@ -94,7 +95,7 @@ static uint8 get_parameter_index (uint8 num, char *str)
}
if(j == num)
{
- len1 = i + 1;
+ len1 = i + 1;
break;
}
}
@@ -121,7 +122,7 @@ static int get_int_number (char *s)
return_value = func_str_to_int(buf);
return return_value;
}
-
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
// 参数说明 *s 字符串
@@ -134,15 +135,15 @@ static float get_float_number (char *s)
uint8 i = 0;
char buf[15];
float return_value = 0;
-
+
i = get_parameter_index(1, s);
i = i - 1;
strncpy(buf, s, i);
buf[i] = 0;
return_value = (float)func_str_to_double(buf);
- return return_value;
+ return return_value;
}
-
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
// 参数说明 *s 字符串
@@ -155,7 +156,7 @@ static double get_double_number (char *s)
uint8 i = 0;
char buf[15];
double return_value = 0;
-
+
i = get_parameter_index(1, s);
i = i - 1;
strncpy(buf, s, i);
@@ -168,13 +169,13 @@ static double get_double_number (char *s)
// 函数简介 世界时间转换为北京时间
// 参数说明 *time 保存的时间
// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
+// 使用示例 utc_to_btc(&gnss->time);
// 备注信息 内部使用
//-------------------------------------------------------------------------------------------------------------------
static void utc_to_btc (gps_time_struct *time)
{
uint8 day_num = 0;
-
+
time->hour = time->hour + 8;
if(23 < time->hour)
{
@@ -197,7 +198,7 @@ static void utc_to_btc (gps_time_struct *time)
day_num = 30;
}
}
-
+
if(time->day > day_num)
{
time->day = 1;
@@ -214,18 +215,18 @@ static void utc_to_btc (gps_time_struct *time)
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 RMC语句解析
// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
+// 参数说明 *gnss 保存解析后的数据
// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
// 备注信息 内部使用
//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
{
uint8 state = 0, temp = 0;
-
+
double latitude = 0; // 纬度
double longitude = 0; // 经度
-
+
double lati_cent_tmp = 0, lati_second_tmp = 0;
double long_cent_tmp = 0, long_second_tmp = 0;
float speed_tmp = 0;
@@ -234,47 +235,50 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
state = buf[get_parameter_index(2, buf)];
- gps->state = 0;
if('A' == state) // 如果数据有效 则解析数据
{
return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
}
// 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
- utc_to_btc(&gps->time);
+ utc_to_btc(&gnss->time);
return return_state;
}
@@ -282,12 +286,12 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 GGA语句解析
// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
+// 参数说明 *gnss 保存解析后的数据
// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
// 备注信息 内部使用
//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
{
uint8 state = 0;
char *buf = line;
@@ -297,11 +301,41 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
if(',' != state)
{
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
return_state = 1;
}
+
+ return return_state;
+}
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
return return_state;
}
@@ -316,7 +350,7 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
+{
const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
double rad_latitude1 = 0;
double rad_latitude2 = 0;
@@ -325,7 +359,7 @@ double get_two_points_distance (double latitude1, double longitude1, double lati
double distance = 0;
double a = 0;
double b = 0;
-
+
rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
rad_latitude2 = ANGLE_TO_RAD(latitude2);
rad_longitude1 = ANGLE_TO_RAD(longitude1);
@@ -335,9 +369,9 @@ double get_two_points_distance (double latitude1, double longitude1, double lati
b = rad_longitude1 - rad_longitude2;
distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
+ distance = distance * EARTH_RADIUS;
- return distance;
+ return distance;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -370,7 +404,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit
// 使用示例 gps_data_parse();
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
+uint8 gnss_data_parse (void)
{
uint8 return_state = 0;
uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
@@ -380,9 +414,9 @@ uint8 gps_data_parse (void)
do
{
- if(GPS_STATE_RECEIVED == gps_rmc_state)
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
{
- gps_rmc_state = GPS_STATE_PARSING;
+ gnss_rmc_state = GPS_STATE_PARSING;
strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
@@ -395,17 +429,17 @@ uint8 gps_data_parse (void)
return_state = 1;
break;
}
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
}
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
{
- gps_gga_state = GPS_STATE_PARSING;
+ gnss_gga_state = GPS_STATE_PARSING;
strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
+
for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
{
bbc_xor_calculation ^= gps_gga_buffer[data_len];
@@ -416,11 +450,32 @@ uint8 gps_data_parse (void)
return_state = 1;
break;
}
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
}
- gps_gga_state = GPS_STATE_RECEIVING;
-
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
}while(0);
return return_state;
}
@@ -433,51 +488,64 @@ uint8 gps_data_parse (void)
// 使用示例 gps_uart_callback();
// 备注信息 此函数需要在串口接收中断内进行调用
//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
+void gnss_uart_callback (void)
{
uint8 temp_gps[6];
uint32 temp_length = 0;
- if(gps_tau1201_state)
+
+
+
+ if(gnss_state)
{
uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
+ while(uart_query_byte(GNSS_UART, &dat))
{
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
}
-
+
if('\n' == dat)
{
// 读取前6个数据 用于判断语句类型
temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
// 根据不同类型将数据拷贝到不同的缓冲区
if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
{
// 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
+ if(GPS_STATE_PARSING != gnss_rmc_state)
{
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
}
}
else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
{
// 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
+ if(GPS_STATE_PARSING != gnss_gga_state)
{
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
}
}
-
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
// 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
+ fifo_clear(&gnss_receiver_fifo);
- gps_tau1201_flag = 1;
+ gnss_flag = 1;
}
}
}
@@ -489,12 +557,12 @@ void gps_uart_callback (void)
// 使用示例 gps_init();
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
+void gnss_init (gps_device_enum gps_device)
{
const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
+
const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
@@ -504,38 +572,49 @@ void gps_init (void)
const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
}
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_gnss.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_ips114.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_ips114.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_ips200.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_ips200.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_key.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_key.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_oled.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_oled.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_tft180.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_tft180.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_type.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_type.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E02_uart_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E02_uart_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E02_uart_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E02_uart_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E02_uart_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/user/isr.c b/Example/E02_uart_demo/user/isr.c
index 99930e9..9898030 100644
--- a/Example/E02_uart_demo/user/isr.c
+++ b/Example/E02_uart_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E03_adc_demo/libraries/doc/version.txt b/Example/E03_adc_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E03_adc_demo/libraries/doc/version.txt
+++ b/Example/E03_adc_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E03_adc_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E03_adc_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E03_adc_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E03_adc_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_clock.c b/Example/E03_adc_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_clock.h b/Example/E03_adc_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_debug.c b/Example/E03_adc_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_debug.h b/Example/E03_adc_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_fifo.c b/Example/E03_adc_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_fifo.h b/Example/E03_adc_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_font.c b/Example/E03_adc_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_font.h b/Example/E03_adc_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_function.c b/Example/E03_adc_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_function.h b/Example/E03_adc_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_headfile.h b/Example/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E03_adc_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E03_adc_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_common/zf_common_typedef.h b/Example/E03_adc_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E03_adc_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E03_adc_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.c b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.h b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E03_adc_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_config.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_gnss.c
similarity index 60%
rename from Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.c
rename to Example/E03_adc_demo/libraries/zf_device/zf_device_gnss.c
index da46a99..caf7cd0 100644
--- a/Example/E02_uart_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_gnss.c
@@ -21,27 +21,26 @@
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
*
-* 文件名称 zf_device_gps_tau1201
+* 文件名称 zf_device_gnss
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
+* 日期 作者 备注
+* 2023-12-28 pudding first version
********************************************************************************************************************/
-/********************************************************************************************************************
+/*********************************************************************************************************************
* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
********************************************************************************************************************/
#include "math.h"
@@ -50,22 +49,24 @@
#include "zf_driver_delay.h"
#include "zf_driver_uart.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
+#define GNSS_BUFFER_SIZE ( 128 )
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 获取指定 ',' 后面的索引
@@ -94,7 +95,7 @@ static uint8 get_parameter_index (uint8 num, char *str)
}
if(j == num)
{
- len1 = i + 1;
+ len1 = i + 1;
break;
}
}
@@ -121,7 +122,7 @@ static int get_int_number (char *s)
return_value = func_str_to_int(buf);
return return_value;
}
-
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
// 参数说明 *s 字符串
@@ -134,15 +135,15 @@ static float get_float_number (char *s)
uint8 i = 0;
char buf[15];
float return_value = 0;
-
+
i = get_parameter_index(1, s);
i = i - 1;
strncpy(buf, s, i);
buf[i] = 0;
return_value = (float)func_str_to_double(buf);
- return return_value;
+ return return_value;
}
-
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
// 参数说明 *s 字符串
@@ -155,7 +156,7 @@ static double get_double_number (char *s)
uint8 i = 0;
char buf[15];
double return_value = 0;
-
+
i = get_parameter_index(1, s);
i = i - 1;
strncpy(buf, s, i);
@@ -168,13 +169,13 @@ static double get_double_number (char *s)
// 函数简介 世界时间转换为北京时间
// 参数说明 *time 保存的时间
// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
+// 使用示例 utc_to_btc(&gnss->time);
// 备注信息 内部使用
//-------------------------------------------------------------------------------------------------------------------
static void utc_to_btc (gps_time_struct *time)
{
uint8 day_num = 0;
-
+
time->hour = time->hour + 8;
if(23 < time->hour)
{
@@ -197,7 +198,7 @@ static void utc_to_btc (gps_time_struct *time)
day_num = 30;
}
}
-
+
if(time->day > day_num)
{
time->day = 1;
@@ -214,18 +215,18 @@ static void utc_to_btc (gps_time_struct *time)
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 RMC语句解析
// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
+// 参数说明 *gnss 保存解析后的数据
// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
// 备注信息 内部使用
//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
{
uint8 state = 0, temp = 0;
-
+
double latitude = 0; // 纬度
double longitude = 0; // 经度
-
+
double lati_cent_tmp = 0, lati_second_tmp = 0;
double long_cent_tmp = 0, long_second_tmp = 0;
float speed_tmp = 0;
@@ -234,47 +235,50 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
state = buf[get_parameter_index(2, buf)];
- gps->state = 0;
if('A' == state) // 如果数据有效 则解析数据
{
return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
}
// 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
- utc_to_btc(&gps->time);
+ utc_to_btc(&gnss->time);
return return_state;
}
@@ -282,12 +286,12 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 GGA语句解析
// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
+// 参数说明 *gnss 保存解析后的数据
// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
// 备注信息 内部使用
//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
{
uint8 state = 0;
char *buf = line;
@@ -297,11 +301,41 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
if(',' != state)
{
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
return_state = 1;
}
+
+ return return_state;
+}
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
return return_state;
}
@@ -316,7 +350,7 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
+{
const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
double rad_latitude1 = 0;
double rad_latitude2 = 0;
@@ -325,7 +359,7 @@ double get_two_points_distance (double latitude1, double longitude1, double lati
double distance = 0;
double a = 0;
double b = 0;
-
+
rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
rad_latitude2 = ANGLE_TO_RAD(latitude2);
rad_longitude1 = ANGLE_TO_RAD(longitude1);
@@ -335,9 +369,9 @@ double get_two_points_distance (double latitude1, double longitude1, double lati
b = rad_longitude1 - rad_longitude2;
distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
+ distance = distance * EARTH_RADIUS;
- return distance;
+ return distance;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -370,7 +404,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit
// 使用示例 gps_data_parse();
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
+uint8 gnss_data_parse (void)
{
uint8 return_state = 0;
uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
@@ -380,9 +414,9 @@ uint8 gps_data_parse (void)
do
{
- if(GPS_STATE_RECEIVED == gps_rmc_state)
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
{
- gps_rmc_state = GPS_STATE_PARSING;
+ gnss_rmc_state = GPS_STATE_PARSING;
strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
@@ -395,17 +429,17 @@ uint8 gps_data_parse (void)
return_state = 1;
break;
}
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
}
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
{
- gps_gga_state = GPS_STATE_PARSING;
+ gnss_gga_state = GPS_STATE_PARSING;
strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
+
for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
{
bbc_xor_calculation ^= gps_gga_buffer[data_len];
@@ -416,11 +450,32 @@ uint8 gps_data_parse (void)
return_state = 1;
break;
}
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
}
- gps_gga_state = GPS_STATE_RECEIVING;
-
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
}while(0);
return return_state;
}
@@ -433,51 +488,64 @@ uint8 gps_data_parse (void)
// 使用示例 gps_uart_callback();
// 备注信息 此函数需要在串口接收中断内进行调用
//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
+void gnss_uart_callback (void)
{
uint8 temp_gps[6];
uint32 temp_length = 0;
- if(gps_tau1201_state)
+
+
+
+ if(gnss_state)
{
uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
+ while(uart_query_byte(GNSS_UART, &dat))
{
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
}
-
+
if('\n' == dat)
{
// 读取前6个数据 用于判断语句类型
temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
// 根据不同类型将数据拷贝到不同的缓冲区
if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
{
// 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
+ if(GPS_STATE_PARSING != gnss_rmc_state)
{
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
}
}
else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
{
// 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
+ if(GPS_STATE_PARSING != gnss_gga_state)
{
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
}
}
-
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
// 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
+ fifo_clear(&gnss_receiver_fifo);
- gps_tau1201_flag = 1;
+ gnss_flag = 1;
}
}
}
@@ -489,12 +557,12 @@ void gps_uart_callback (void)
// 使用示例 gps_init();
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
+void gnss_init (gps_device_enum gps_device)
{
const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
+
const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
@@ -504,38 +572,49 @@ void gps_init (void)
const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
}
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_gnss.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_ips114.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_ips114.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_ips200.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_ips200.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_key.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_key.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_oled.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_oled.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_tft180.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_tft180.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_type.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_type.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E03_adc_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E03_adc_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E03_adc_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E03_adc_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E03_adc_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E03_adc_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E03_adc_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E03_adc_demo/user/isr.c b/Example/E03_adc_demo/user/isr.c
index 27171d2..9108ff0 100644
--- a/Example/E03_adc_demo/user/isr.c
+++ b/Example/E03_adc_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E04_pwm_demo/libraries/doc/version.txt b/Example/E04_pwm_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E04_pwm_demo/libraries/doc/version.txt
+++ b/Example/E04_pwm_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E04_pwm_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E04_pwm_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E04_pwm_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E04_pwm_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_clock.c b/Example/E04_pwm_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_clock.h b/Example/E04_pwm_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_debug.c b/Example/E04_pwm_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_debug.h b/Example/E04_pwm_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_fifo.c b/Example/E04_pwm_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_fifo.h b/Example/E04_pwm_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_font.c b/Example/E04_pwm_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_font.h b/Example/E04_pwm_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_function.c b/Example/E04_pwm_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_function.h b/Example/E04_pwm_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h b/Example/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E04_pwm_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E04_pwm_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_common/zf_common_typedef.h b/Example/E04_pwm_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E04_pwm_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E04_pwm_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E04_pwm_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_config.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_gnss.c
similarity index 60%
rename from Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.c
rename to Example/E04_pwm_demo/libraries/zf_device/zf_device_gnss.c
index da46a99..caf7cd0 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_gnss.c
@@ -21,27 +21,26 @@
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
*
-* 文件名称 zf_device_gps_tau1201
+* 文件名称 zf_device_gnss
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
+* 日期 作者 备注
+* 2023-12-28 pudding first version
********************************************************************************************************************/
-/********************************************************************************************************************
+/*********************************************************************************************************************
* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
********************************************************************************************************************/
#include "math.h"
@@ -50,22 +49,24 @@
#include "zf_driver_delay.h"
#include "zf_driver_uart.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
+#define GNSS_BUFFER_SIZE ( 128 )
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 获取指定 ',' 后面的索引
@@ -94,7 +95,7 @@ static uint8 get_parameter_index (uint8 num, char *str)
}
if(j == num)
{
- len1 = i + 1;
+ len1 = i + 1;
break;
}
}
@@ -121,7 +122,7 @@ static int get_int_number (char *s)
return_value = func_str_to_int(buf);
return return_value;
}
-
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
// 参数说明 *s 字符串
@@ -134,15 +135,15 @@ static float get_float_number (char *s)
uint8 i = 0;
char buf[15];
float return_value = 0;
-
+
i = get_parameter_index(1, s);
i = i - 1;
strncpy(buf, s, i);
buf[i] = 0;
return_value = (float)func_str_to_double(buf);
- return return_value;
+ return return_value;
}
-
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
// 参数说明 *s 字符串
@@ -155,7 +156,7 @@ static double get_double_number (char *s)
uint8 i = 0;
char buf[15];
double return_value = 0;
-
+
i = get_parameter_index(1, s);
i = i - 1;
strncpy(buf, s, i);
@@ -168,13 +169,13 @@ static double get_double_number (char *s)
// 函数简介 世界时间转换为北京时间
// 参数说明 *time 保存的时间
// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
+// 使用示例 utc_to_btc(&gnss->time);
// 备注信息 内部使用
//-------------------------------------------------------------------------------------------------------------------
static void utc_to_btc (gps_time_struct *time)
{
uint8 day_num = 0;
-
+
time->hour = time->hour + 8;
if(23 < time->hour)
{
@@ -197,7 +198,7 @@ static void utc_to_btc (gps_time_struct *time)
day_num = 30;
}
}
-
+
if(time->day > day_num)
{
time->day = 1;
@@ -214,18 +215,18 @@ static void utc_to_btc (gps_time_struct *time)
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 RMC语句解析
// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
+// 参数说明 *gnss 保存解析后的数据
// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
// 备注信息 内部使用
//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
{
uint8 state = 0, temp = 0;
-
+
double latitude = 0; // 纬度
double longitude = 0; // 经度
-
+
double lati_cent_tmp = 0, lati_second_tmp = 0;
double long_cent_tmp = 0, long_second_tmp = 0;
float speed_tmp = 0;
@@ -234,47 +235,50 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
state = buf[get_parameter_index(2, buf)];
- gps->state = 0;
if('A' == state) // 如果数据有效 则解析数据
{
return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
}
// 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
- utc_to_btc(&gps->time);
+ utc_to_btc(&gnss->time);
return return_state;
}
@@ -282,12 +286,12 @@ static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 GGA语句解析
// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
+// 参数说明 *gnss 保存解析后的数据
// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
// 备注信息 内部使用
//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
{
uint8 state = 0;
char *buf = line;
@@ -297,11 +301,41 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
if(',' != state)
{
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
return_state = 1;
}
+
+ return return_state;
+}
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
return return_state;
}
@@ -316,7 +350,7 @@ static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
+{
const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
double rad_latitude1 = 0;
double rad_latitude2 = 0;
@@ -325,7 +359,7 @@ double get_two_points_distance (double latitude1, double longitude1, double lati
double distance = 0;
double a = 0;
double b = 0;
-
+
rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
rad_latitude2 = ANGLE_TO_RAD(latitude2);
rad_longitude1 = ANGLE_TO_RAD(longitude1);
@@ -335,9 +369,9 @@ double get_two_points_distance (double latitude1, double longitude1, double lati
b = rad_longitude1 - rad_longitude2;
distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
+ distance = distance * EARTH_RADIUS;
- return distance;
+ return distance;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -370,7 +404,7 @@ double get_two_points_azimuth (double latitude1, double longitude1, double latit
// 使用示例 gps_data_parse();
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
+uint8 gnss_data_parse (void)
{
uint8 return_state = 0;
uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
@@ -380,9 +414,9 @@ uint8 gps_data_parse (void)
do
{
- if(GPS_STATE_RECEIVED == gps_rmc_state)
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
{
- gps_rmc_state = GPS_STATE_PARSING;
+ gnss_rmc_state = GPS_STATE_PARSING;
strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
@@ -395,17 +429,17 @@ uint8 gps_data_parse (void)
return_state = 1;
break;
}
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
}
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
{
- gps_gga_state = GPS_STATE_PARSING;
+ gnss_gga_state = GPS_STATE_PARSING;
strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
+
for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
{
bbc_xor_calculation ^= gps_gga_buffer[data_len];
@@ -416,11 +450,32 @@ uint8 gps_data_parse (void)
return_state = 1;
break;
}
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
}
- gps_gga_state = GPS_STATE_RECEIVING;
-
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
}while(0);
return return_state;
}
@@ -433,51 +488,64 @@ uint8 gps_data_parse (void)
// 使用示例 gps_uart_callback();
// 备注信息 此函数需要在串口接收中断内进行调用
//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
+void gnss_uart_callback (void)
{
uint8 temp_gps[6];
uint32 temp_length = 0;
- if(gps_tau1201_state)
+
+
+
+ if(gnss_state)
{
uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
+ while(uart_query_byte(GNSS_UART, &dat))
{
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
}
-
+
if('\n' == dat)
{
// 读取前6个数据 用于判断语句类型
temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
// 根据不同类型将数据拷贝到不同的缓冲区
if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
{
// 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
+ if(GPS_STATE_PARSING != gnss_rmc_state)
{
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
}
}
else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
{
// 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
+ if(GPS_STATE_PARSING != gnss_gga_state)
{
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
}
}
-
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
// 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
+ fifo_clear(&gnss_receiver_fifo);
- gps_tau1201_flag = 1;
+ gnss_flag = 1;
}
}
}
@@ -489,12 +557,12 @@ void gps_uart_callback (void)
// 使用示例 gps_init();
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
+void gnss_init (gps_device_enum gps_device)
{
const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
+
const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
@@ -504,38 +572,49 @@ void gps_init (void)
const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
}
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_gnss.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips114.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips114.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips200.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips200.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_oled.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_oled.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_tft180.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_tft180.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E04_pwm_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E04_pwm_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E04_pwm_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E04_pwm_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E04_pwm_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E04_pwm_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E04_pwm_demo/user/isr.c b/Example/E04_pwm_demo/user/isr.c
index 27171d2..9108ff0 100644
--- a/Example/E04_pwm_demo/user/isr.c
+++ b/Example/E04_pwm_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E05_pit_demo/libraries/doc/version.txt b/Example/E05_pit_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E05_pit_demo/libraries/doc/version.txt
+++ b/Example/E05_pit_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E05_pit_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E05_pit_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E05_pit_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E05_pit_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_clock.c b/Example/E05_pit_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_clock.h b/Example/E05_pit_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_debug.c b/Example/E05_pit_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_debug.h b/Example/E05_pit_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_fifo.c b/Example/E05_pit_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_fifo.h b/Example/E05_pit_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_font.c b/Example/E05_pit_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_font.h b/Example/E05_pit_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_function.c b/Example/E05_pit_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_function.h b/Example/E05_pit_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_headfile.h b/Example/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E05_pit_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E05_pit_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_common/zf_common_typedef.h b/Example/E05_pit_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E05_pit_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E05_pit_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.c b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.h b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E05_pit_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_config.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_gnss.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_gnss.c
new file mode 100644
index 0000000..caf7cd0
--- /dev/null
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_gnss.c
@@ -0,0 +1,620 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "math.h"
+#include "zf_common_function.h"
+#include "zf_common_fifo.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_uart.h"
+
+#include "zf_device_gnss.h"
+
+#define GNSS_BUFFER_SIZE ( 128 )
+
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
+
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
+
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取指定 ',' 后面的索引
+// 参数说明 num 第几个逗号
+// 参数说明 *str 字符串
+// 返回参数 uint8 返回索引
+// 使用示例 get_parameter_index(1, s);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 get_parameter_index (uint8 num, char *str)
+{
+ uint8 i = 0, j = 0;
+ char *temp = strchr(str, '\n');
+ uint8 len = 0, len1 = 0;
+
+ if(NULL != temp)
+ {
+ len = (uint8)((uint32)temp - (uint32)str + 1);
+ }
+
+ for(i = 0; i < len; i ++)
+ {
+ if(',' == str[i])
+ {
+ j ++;
+ }
+ if(j == num)
+ {
+ len1 = i + 1;
+ break;
+ }
+ }
+
+ return len1;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static int get_int_number (char *s)
+{
+ char buf[10];
+ uint8 i = 0;
+ int return_value = 0;
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_int(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static float get_float_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ float return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = (float)func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
+// 参数说明 *s 字符串
+// 返回参数 double 返回数值
+// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static double get_double_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ double return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 世界时间转换为北京时间
+// 参数说明 *time 保存的时间
+// 返回参数 void
+// 使用示例 utc_to_btc(&gnss->time);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static void utc_to_btc (gps_time_struct *time)
+{
+ uint8 day_num = 0;
+
+ time->hour = time->hour + 8;
+ if(23 < time->hour)
+ {
+ time->hour -= 24;
+ time->day += 1;
+
+ if(2 == time->month)
+ {
+ day_num = 28;
+ if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
+ {
+ day_num ++; // 闰月 2月为29天
+ }
+ }
+ else
+ {
+ day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
+ if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
+ {
+ day_num = 30;
+ }
+ }
+
+ if(time->day > day_num)
+ {
+ time->day = 1;
+ time->month ++;
+ if(12 < time->month)
+ {
+ time->month -= 12;
+ time->year ++;
+ }
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 RMC语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0, temp = 0;
+
+ double latitude = 0; // 纬度
+ double longitude = 0; // 经度
+
+ double lati_cent_tmp = 0, lati_second_tmp = 0;
+ double long_cent_tmp = 0, long_second_tmp = 0;
+ float speed_tmp = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state) // 如果数据有效 则解析数据
+ {
+ return_state = 1;
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
+
+ latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
+ longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
+
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
+
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
+
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
+
+ speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
+ }
+
+ // 在定位没有生效前也是有时间数据的,可以直接解析
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ temp = get_parameter_index(9, buf);
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+
+ utc_to_btc(&gnss->time);
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GGA语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if(',' != state)
+ {
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ return_state = 1;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的距离
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回两点距离
+// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
+ double rad_latitude1 = 0;
+ double rad_latitude2 = 0;
+ double rad_longitude1 = 0;
+ double rad_longitude2 = 0;
+ double distance = 0;
+ double a = 0;
+ double b = 0;
+
+ rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
+ rad_latitude2 = ANGLE_TO_RAD(latitude2);
+ rad_longitude1 = ANGLE_TO_RAD(longitude1);
+ rad_longitude2 = ANGLE_TO_RAD(longitude2);
+
+ a = rad_latitude1 - rad_latitude2;
+ b = rad_longitude1 - rad_longitude2;
+
+ distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
+ distance = distance * EARTH_RADIUS;
+
+ return distance;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的方位角
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回方位角(0至360)
+// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ latitude1 = ANGLE_TO_RAD(latitude1);
+ latitude2 = ANGLE_TO_RAD(latitude2);
+ longitude1 = ANGLE_TO_RAD(longitude1);
+ longitude2 = ANGLE_TO_RAD(longitude2);
+
+ double x = sin(longitude2 - longitude1) * cos(latitude2);
+ double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
+ double angle = RAD_TO_ANGLE(atan2(x, y));
+ return ((0 < angle) ? angle : (angle + 360));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 解析GPS数据
+// 参数说明 void
+// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
+// 使用示例 gps_data_parse();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 gnss_data_parse (void)
+{
+ uint8 return_state = 0;
+ uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
+ uint8 bbc_xor_origin = 0;
+ uint8 bbc_xor_calculation = 0;
+ uint32 data_len = 0;
+
+ do
+ {
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+ for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_rmc_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
+ }
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_gga_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
+ }
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
+ }while(0);
+ return return_state;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS串口回调函数
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_uart_callback();
+// 备注信息 此函数需要在串口接收中断内进行调用
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_uart_callback (void)
+{
+ uint8 temp_gps[6];
+ uint32 temp_length = 0;
+
+
+
+
+ if(gnss_state)
+ {
+ uint8 dat;
+ while(uart_query_byte(GNSS_UART, &dat))
+ {
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
+ }
+
+ if('\n' == dat)
+ {
+ // 读取前6个数据 用于判断语句类型
+ temp_length = 6;
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
+ // 根据不同类型将数据拷贝到不同的缓冲区
+ if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
+ // 统一将FIFO清空
+ fifo_clear(&gnss_receiver_fifo);
+
+ gnss_flag = 1;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS初始化
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_init();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_init (gps_device_enum gps_device)
+{
+ const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
+ const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
+ const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
+
+ const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
+ const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
+ const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
+ const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
+ const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
+ const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
+ const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
+ const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
+ const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
+
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
+}
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_gnss.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.c
deleted file mode 100644
index da46a99..0000000
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#include "math.h"
-#include "zf_common_function.h"
-#include "zf_common_fifo.h"
-#include "zf_driver_delay.h"
-#include "zf_driver_uart.h"
-
-#include "zf_device_gps_tau1201.h"
-
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
-
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
-
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
-
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 获取指定 ',' 后面的索引
-// 参数说明 num 第几个逗号
-// 参数说明 *str 字符串
-// 返回参数 uint8 返回索引
-// 使用示例 get_parameter_index(1, s);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 get_parameter_index (uint8 num, char *str)
-{
- uint8 i = 0, j = 0;
- char *temp = strchr(str, '\n');
- uint8 len = 0, len1 = 0;
-
- if(NULL != temp)
- {
- len = (uint8)((uint32)temp - (uint32)str + 1);
- }
-
- for(i = 0; i < len; i ++)
- {
- if(',' == str[i])
- {
- j ++;
- }
- if(j == num)
- {
- len1 = i + 1;
- break;
- }
- }
-
- return len1;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static int get_int_number (char *s)
-{
- char buf[10];
- uint8 i = 0;
- int return_value = 0;
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_int(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static float get_float_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- float return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = (float)func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
-// 参数说明 *s 字符串
-// 返回参数 double 返回数值
-// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static double get_double_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- double return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 世界时间转换为北京时间
-// 参数说明 *time 保存的时间
-// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static void utc_to_btc (gps_time_struct *time)
-{
- uint8 day_num = 0;
-
- time->hour = time->hour + 8;
- if(23 < time->hour)
- {
- time->hour -= 24;
- time->day += 1;
-
- if(2 == time->month)
- {
- day_num = 28;
- if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
- {
- day_num ++; // 闰月 2月为29天
- }
- }
- else
- {
- day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
- if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
- {
- day_num = 30;
- }
- }
-
- if(time->day > day_num)
- {
- time->day = 1;
- time->month ++;
- if(12 < time->month)
- {
- time->month -= 12;
- time->year ++;
- }
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 RMC语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0, temp = 0;
-
- double latitude = 0; // 纬度
- double longitude = 0; // 经度
-
- double lati_cent_tmp = 0, lati_second_tmp = 0;
- double long_cent_tmp = 0, long_second_tmp = 0;
- float speed_tmp = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- gps->state = 0;
- if('A' == state) // 如果数据有效 则解析数据
- {
- return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
-
- latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
- longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
-
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
-
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
-
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
-
- speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
- }
-
- // 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
- temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
-
- utc_to_btc(&gps->time);
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GGA语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- if(',' != state)
- {
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
- return_state = 1;
- }
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的距离
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回两点距离
-// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
- double rad_latitude1 = 0;
- double rad_latitude2 = 0;
- double rad_longitude1 = 0;
- double rad_longitude2 = 0;
- double distance = 0;
- double a = 0;
- double b = 0;
-
- rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
- rad_latitude2 = ANGLE_TO_RAD(latitude2);
- rad_longitude1 = ANGLE_TO_RAD(longitude1);
- rad_longitude2 = ANGLE_TO_RAD(longitude2);
-
- a = rad_latitude1 - rad_latitude2;
- b = rad_longitude1 - rad_longitude2;
-
- distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
-
- return distance;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的方位角
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回方位角(0至360)
-// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- latitude1 = ANGLE_TO_RAD(latitude1);
- latitude2 = ANGLE_TO_RAD(latitude2);
- longitude1 = ANGLE_TO_RAD(longitude1);
- longitude2 = ANGLE_TO_RAD(longitude2);
-
- double x = sin(longitude2 - longitude1) * cos(latitude2);
- double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
- double angle = RAD_TO_ANGLE(atan2(x, y));
- return ((0 < angle) ? angle : (angle + 360));
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 解析GPS数据
-// 参数说明 void
-// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
-// 使用示例 gps_data_parse();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
-{
- uint8 return_state = 0;
- uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
- uint8 bbc_xor_origin = 0;
- uint8 bbc_xor_calculation = 0;
- uint32 data_len = 0;
-
- do
- {
- if(GPS_STATE_RECEIVED == gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
- for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_rmc_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
- }
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
- {
- gps_gga_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
- for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_gga_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
- }
- gps_gga_state = GPS_STATE_RECEIVING;
-
- }while(0);
- return return_state;
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS串口回调函数
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_uart_callback();
-// 备注信息 此函数需要在串口接收中断内进行调用
-//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
-{
- uint8 temp_gps[6];
- uint32 temp_length = 0;
-
- if(gps_tau1201_state)
- {
- uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
- {
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
- }
-
- if('\n' == dat)
- {
- // 读取前6个数据 用于判断语句类型
- temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
- // 根据不同类型将数据拷贝到不同的缓冲区
- if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
- else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
- {
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
-
- // 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
-
- gps_tau1201_flag = 1;
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS初始化
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_init();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
-{
- const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
- const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
- const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
- const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
- const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
- const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
- const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
- const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
- const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
- const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
- const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
- const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
-
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
-}
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_ips114.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_ips114.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_ips200.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_ips200.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_key.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_key.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_oled.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_oled.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_tft180.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_tft180.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_type.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_type.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E05_pit_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E05_pit_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E05_pit_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E05_pit_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E05_pit_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E05_pit_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E05_pit_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E05_pit_demo/user/isr.c b/Example/E05_pit_demo/user/isr.c
index f81ccb2..a419ee6 100644
--- a/Example/E05_pit_demo/user/isr.c
+++ b/Example/E05_pit_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E06_exit_demo/libraries/doc/version.txt b/Example/E06_exit_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E06_exit_demo/libraries/doc/version.txt
+++ b/Example/E06_exit_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E06_exit_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E06_exit_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E06_exit_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E06_exit_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_clock.c b/Example/E06_exit_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_clock.h b/Example/E06_exit_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_debug.c b/Example/E06_exit_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_debug.h b/Example/E06_exit_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_fifo.c b/Example/E06_exit_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_fifo.h b/Example/E06_exit_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_font.c b/Example/E06_exit_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_font.h b/Example/E06_exit_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_function.c b/Example/E06_exit_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_function.h b/Example/E06_exit_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_headfile.h b/Example/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E06_exit_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E06_exit_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_common/zf_common_typedef.h b/Example/E06_exit_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E06_exit_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E06_exit_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.c b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.h b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E06_exit_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_config.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_gnss.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_gnss.c
new file mode 100644
index 0000000..caf7cd0
--- /dev/null
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_gnss.c
@@ -0,0 +1,620 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "math.h"
+#include "zf_common_function.h"
+#include "zf_common_fifo.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_uart.h"
+
+#include "zf_device_gnss.h"
+
+#define GNSS_BUFFER_SIZE ( 128 )
+
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
+
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
+
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取指定 ',' 后面的索引
+// 参数说明 num 第几个逗号
+// 参数说明 *str 字符串
+// 返回参数 uint8 返回索引
+// 使用示例 get_parameter_index(1, s);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 get_parameter_index (uint8 num, char *str)
+{
+ uint8 i = 0, j = 0;
+ char *temp = strchr(str, '\n');
+ uint8 len = 0, len1 = 0;
+
+ if(NULL != temp)
+ {
+ len = (uint8)((uint32)temp - (uint32)str + 1);
+ }
+
+ for(i = 0; i < len; i ++)
+ {
+ if(',' == str[i])
+ {
+ j ++;
+ }
+ if(j == num)
+ {
+ len1 = i + 1;
+ break;
+ }
+ }
+
+ return len1;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static int get_int_number (char *s)
+{
+ char buf[10];
+ uint8 i = 0;
+ int return_value = 0;
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_int(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static float get_float_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ float return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = (float)func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
+// 参数说明 *s 字符串
+// 返回参数 double 返回数值
+// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static double get_double_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ double return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 世界时间转换为北京时间
+// 参数说明 *time 保存的时间
+// 返回参数 void
+// 使用示例 utc_to_btc(&gnss->time);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static void utc_to_btc (gps_time_struct *time)
+{
+ uint8 day_num = 0;
+
+ time->hour = time->hour + 8;
+ if(23 < time->hour)
+ {
+ time->hour -= 24;
+ time->day += 1;
+
+ if(2 == time->month)
+ {
+ day_num = 28;
+ if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
+ {
+ day_num ++; // 闰月 2月为29天
+ }
+ }
+ else
+ {
+ day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
+ if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
+ {
+ day_num = 30;
+ }
+ }
+
+ if(time->day > day_num)
+ {
+ time->day = 1;
+ time->month ++;
+ if(12 < time->month)
+ {
+ time->month -= 12;
+ time->year ++;
+ }
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 RMC语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0, temp = 0;
+
+ double latitude = 0; // 纬度
+ double longitude = 0; // 经度
+
+ double lati_cent_tmp = 0, lati_second_tmp = 0;
+ double long_cent_tmp = 0, long_second_tmp = 0;
+ float speed_tmp = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state) // 如果数据有效 则解析数据
+ {
+ return_state = 1;
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
+
+ latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
+ longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
+
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
+
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
+
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
+
+ speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
+ }
+
+ // 在定位没有生效前也是有时间数据的,可以直接解析
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ temp = get_parameter_index(9, buf);
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+
+ utc_to_btc(&gnss->time);
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GGA语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if(',' != state)
+ {
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ return_state = 1;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的距离
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回两点距离
+// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
+ double rad_latitude1 = 0;
+ double rad_latitude2 = 0;
+ double rad_longitude1 = 0;
+ double rad_longitude2 = 0;
+ double distance = 0;
+ double a = 0;
+ double b = 0;
+
+ rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
+ rad_latitude2 = ANGLE_TO_RAD(latitude2);
+ rad_longitude1 = ANGLE_TO_RAD(longitude1);
+ rad_longitude2 = ANGLE_TO_RAD(longitude2);
+
+ a = rad_latitude1 - rad_latitude2;
+ b = rad_longitude1 - rad_longitude2;
+
+ distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
+ distance = distance * EARTH_RADIUS;
+
+ return distance;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的方位角
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回方位角(0至360)
+// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ latitude1 = ANGLE_TO_RAD(latitude1);
+ latitude2 = ANGLE_TO_RAD(latitude2);
+ longitude1 = ANGLE_TO_RAD(longitude1);
+ longitude2 = ANGLE_TO_RAD(longitude2);
+
+ double x = sin(longitude2 - longitude1) * cos(latitude2);
+ double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
+ double angle = RAD_TO_ANGLE(atan2(x, y));
+ return ((0 < angle) ? angle : (angle + 360));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 解析GPS数据
+// 参数说明 void
+// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
+// 使用示例 gps_data_parse();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 gnss_data_parse (void)
+{
+ uint8 return_state = 0;
+ uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
+ uint8 bbc_xor_origin = 0;
+ uint8 bbc_xor_calculation = 0;
+ uint32 data_len = 0;
+
+ do
+ {
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+ for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_rmc_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
+ }
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_gga_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
+ }
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
+ }while(0);
+ return return_state;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS串口回调函数
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_uart_callback();
+// 备注信息 此函数需要在串口接收中断内进行调用
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_uart_callback (void)
+{
+ uint8 temp_gps[6];
+ uint32 temp_length = 0;
+
+
+
+
+ if(gnss_state)
+ {
+ uint8 dat;
+ while(uart_query_byte(GNSS_UART, &dat))
+ {
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
+ }
+
+ if('\n' == dat)
+ {
+ // 读取前6个数据 用于判断语句类型
+ temp_length = 6;
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
+ // 根据不同类型将数据拷贝到不同的缓冲区
+ if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
+ // 统一将FIFO清空
+ fifo_clear(&gnss_receiver_fifo);
+
+ gnss_flag = 1;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS初始化
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_init();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_init (gps_device_enum gps_device)
+{
+ const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
+ const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
+ const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
+
+ const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
+ const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
+ const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
+ const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
+ const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
+ const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
+ const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
+ const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
+ const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
+
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
+}
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_gnss.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.c
deleted file mode 100644
index da46a99..0000000
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#include "math.h"
-#include "zf_common_function.h"
-#include "zf_common_fifo.h"
-#include "zf_driver_delay.h"
-#include "zf_driver_uart.h"
-
-#include "zf_device_gps_tau1201.h"
-
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
-
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
-
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
-
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 获取指定 ',' 后面的索引
-// 参数说明 num 第几个逗号
-// 参数说明 *str 字符串
-// 返回参数 uint8 返回索引
-// 使用示例 get_parameter_index(1, s);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 get_parameter_index (uint8 num, char *str)
-{
- uint8 i = 0, j = 0;
- char *temp = strchr(str, '\n');
- uint8 len = 0, len1 = 0;
-
- if(NULL != temp)
- {
- len = (uint8)((uint32)temp - (uint32)str + 1);
- }
-
- for(i = 0; i < len; i ++)
- {
- if(',' == str[i])
- {
- j ++;
- }
- if(j == num)
- {
- len1 = i + 1;
- break;
- }
- }
-
- return len1;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static int get_int_number (char *s)
-{
- char buf[10];
- uint8 i = 0;
- int return_value = 0;
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_int(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static float get_float_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- float return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = (float)func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
-// 参数说明 *s 字符串
-// 返回参数 double 返回数值
-// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static double get_double_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- double return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 世界时间转换为北京时间
-// 参数说明 *time 保存的时间
-// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static void utc_to_btc (gps_time_struct *time)
-{
- uint8 day_num = 0;
-
- time->hour = time->hour + 8;
- if(23 < time->hour)
- {
- time->hour -= 24;
- time->day += 1;
-
- if(2 == time->month)
- {
- day_num = 28;
- if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
- {
- day_num ++; // 闰月 2月为29天
- }
- }
- else
- {
- day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
- if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
- {
- day_num = 30;
- }
- }
-
- if(time->day > day_num)
- {
- time->day = 1;
- time->month ++;
- if(12 < time->month)
- {
- time->month -= 12;
- time->year ++;
- }
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 RMC语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0, temp = 0;
-
- double latitude = 0; // 纬度
- double longitude = 0; // 经度
-
- double lati_cent_tmp = 0, lati_second_tmp = 0;
- double long_cent_tmp = 0, long_second_tmp = 0;
- float speed_tmp = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- gps->state = 0;
- if('A' == state) // 如果数据有效 则解析数据
- {
- return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
-
- latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
- longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
-
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
-
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
-
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
-
- speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
- }
-
- // 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
- temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
-
- utc_to_btc(&gps->time);
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GGA语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- if(',' != state)
- {
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
- return_state = 1;
- }
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的距离
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回两点距离
-// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
- double rad_latitude1 = 0;
- double rad_latitude2 = 0;
- double rad_longitude1 = 0;
- double rad_longitude2 = 0;
- double distance = 0;
- double a = 0;
- double b = 0;
-
- rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
- rad_latitude2 = ANGLE_TO_RAD(latitude2);
- rad_longitude1 = ANGLE_TO_RAD(longitude1);
- rad_longitude2 = ANGLE_TO_RAD(longitude2);
-
- a = rad_latitude1 - rad_latitude2;
- b = rad_longitude1 - rad_longitude2;
-
- distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
-
- return distance;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的方位角
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回方位角(0至360)
-// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- latitude1 = ANGLE_TO_RAD(latitude1);
- latitude2 = ANGLE_TO_RAD(latitude2);
- longitude1 = ANGLE_TO_RAD(longitude1);
- longitude2 = ANGLE_TO_RAD(longitude2);
-
- double x = sin(longitude2 - longitude1) * cos(latitude2);
- double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
- double angle = RAD_TO_ANGLE(atan2(x, y));
- return ((0 < angle) ? angle : (angle + 360));
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 解析GPS数据
-// 参数说明 void
-// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
-// 使用示例 gps_data_parse();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
-{
- uint8 return_state = 0;
- uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
- uint8 bbc_xor_origin = 0;
- uint8 bbc_xor_calculation = 0;
- uint32 data_len = 0;
-
- do
- {
- if(GPS_STATE_RECEIVED == gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
- for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_rmc_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
- }
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
- {
- gps_gga_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
- for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_gga_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
- }
- gps_gga_state = GPS_STATE_RECEIVING;
-
- }while(0);
- return return_state;
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS串口回调函数
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_uart_callback();
-// 备注信息 此函数需要在串口接收中断内进行调用
-//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
-{
- uint8 temp_gps[6];
- uint32 temp_length = 0;
-
- if(gps_tau1201_state)
- {
- uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
- {
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
- }
-
- if('\n' == dat)
- {
- // 读取前6个数据 用于判断语句类型
- temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
- // 根据不同类型将数据拷贝到不同的缓冲区
- if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
- else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
- {
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
-
- // 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
-
- gps_tau1201_flag = 1;
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS初始化
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_init();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
-{
- const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
- const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
- const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
- const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
- const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
- const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
- const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
- const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
- const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
- const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
- const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
- const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
-
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
-}
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_ips114.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_ips114.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_ips200.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_ips200.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_key.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_key.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_oled.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_oled.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_tft180.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_tft180.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_type.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_type.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E06_exit_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E06_exit_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E06_exit_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E06_exit_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E06_exit_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E06_exit_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E06_exit_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E06_exit_demo/user/isr.c b/Example/E06_exit_demo/user/isr.c
index 606b16a..6c26b9e 100644
--- a/Example/E06_exit_demo/user/isr.c
+++ b/Example/E06_exit_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(cc61_pit_ch1_isr, 0, CCU6_1_CH1_ISR_PRIORITY)
// {
// exti_flag_clear(ERU_CH5_REQ1_P15_8);
//
-// wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+//
//
// }
//}
diff --git a/Example/E07_encoder_demo/libraries/doc/version.txt b/Example/E07_encoder_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E07_encoder_demo/libraries/doc/version.txt
+++ b/Example/E07_encoder_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E07_encoder_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E07_encoder_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E07_encoder_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E07_encoder_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_clock.c b/Example/E07_encoder_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_clock.h b/Example/E07_encoder_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_debug.c b/Example/E07_encoder_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_debug.h b/Example/E07_encoder_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_fifo.c b/Example/E07_encoder_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_fifo.h b/Example/E07_encoder_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_font.c b/Example/E07_encoder_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_font.h b/Example/E07_encoder_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_function.c b/Example/E07_encoder_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_function.h b/Example/E07_encoder_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h b/Example/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E07_encoder_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E07_encoder_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_common/zf_common_typedef.h b/Example/E07_encoder_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E07_encoder_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E07_encoder_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E07_encoder_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_config.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_gnss.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_gnss.c
new file mode 100644
index 0000000..caf7cd0
--- /dev/null
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_gnss.c
@@ -0,0 +1,620 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "math.h"
+#include "zf_common_function.h"
+#include "zf_common_fifo.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_uart.h"
+
+#include "zf_device_gnss.h"
+
+#define GNSS_BUFFER_SIZE ( 128 )
+
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
+
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
+
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取指定 ',' 后面的索引
+// 参数说明 num 第几个逗号
+// 参数说明 *str 字符串
+// 返回参数 uint8 返回索引
+// 使用示例 get_parameter_index(1, s);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 get_parameter_index (uint8 num, char *str)
+{
+ uint8 i = 0, j = 0;
+ char *temp = strchr(str, '\n');
+ uint8 len = 0, len1 = 0;
+
+ if(NULL != temp)
+ {
+ len = (uint8)((uint32)temp - (uint32)str + 1);
+ }
+
+ for(i = 0; i < len; i ++)
+ {
+ if(',' == str[i])
+ {
+ j ++;
+ }
+ if(j == num)
+ {
+ len1 = i + 1;
+ break;
+ }
+ }
+
+ return len1;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static int get_int_number (char *s)
+{
+ char buf[10];
+ uint8 i = 0;
+ int return_value = 0;
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_int(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static float get_float_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ float return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = (float)func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
+// 参数说明 *s 字符串
+// 返回参数 double 返回数值
+// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static double get_double_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ double return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 世界时间转换为北京时间
+// 参数说明 *time 保存的时间
+// 返回参数 void
+// 使用示例 utc_to_btc(&gnss->time);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static void utc_to_btc (gps_time_struct *time)
+{
+ uint8 day_num = 0;
+
+ time->hour = time->hour + 8;
+ if(23 < time->hour)
+ {
+ time->hour -= 24;
+ time->day += 1;
+
+ if(2 == time->month)
+ {
+ day_num = 28;
+ if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
+ {
+ day_num ++; // 闰月 2月为29天
+ }
+ }
+ else
+ {
+ day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
+ if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
+ {
+ day_num = 30;
+ }
+ }
+
+ if(time->day > day_num)
+ {
+ time->day = 1;
+ time->month ++;
+ if(12 < time->month)
+ {
+ time->month -= 12;
+ time->year ++;
+ }
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 RMC语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0, temp = 0;
+
+ double latitude = 0; // 纬度
+ double longitude = 0; // 经度
+
+ double lati_cent_tmp = 0, lati_second_tmp = 0;
+ double long_cent_tmp = 0, long_second_tmp = 0;
+ float speed_tmp = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state) // 如果数据有效 则解析数据
+ {
+ return_state = 1;
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
+
+ latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
+ longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
+
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
+
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
+
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
+
+ speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
+ }
+
+ // 在定位没有生效前也是有时间数据的,可以直接解析
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ temp = get_parameter_index(9, buf);
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+
+ utc_to_btc(&gnss->time);
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GGA语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if(',' != state)
+ {
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ return_state = 1;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的距离
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回两点距离
+// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
+ double rad_latitude1 = 0;
+ double rad_latitude2 = 0;
+ double rad_longitude1 = 0;
+ double rad_longitude2 = 0;
+ double distance = 0;
+ double a = 0;
+ double b = 0;
+
+ rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
+ rad_latitude2 = ANGLE_TO_RAD(latitude2);
+ rad_longitude1 = ANGLE_TO_RAD(longitude1);
+ rad_longitude2 = ANGLE_TO_RAD(longitude2);
+
+ a = rad_latitude1 - rad_latitude2;
+ b = rad_longitude1 - rad_longitude2;
+
+ distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
+ distance = distance * EARTH_RADIUS;
+
+ return distance;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的方位角
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回方位角(0至360)
+// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ latitude1 = ANGLE_TO_RAD(latitude1);
+ latitude2 = ANGLE_TO_RAD(latitude2);
+ longitude1 = ANGLE_TO_RAD(longitude1);
+ longitude2 = ANGLE_TO_RAD(longitude2);
+
+ double x = sin(longitude2 - longitude1) * cos(latitude2);
+ double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
+ double angle = RAD_TO_ANGLE(atan2(x, y));
+ return ((0 < angle) ? angle : (angle + 360));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 解析GPS数据
+// 参数说明 void
+// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
+// 使用示例 gps_data_parse();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 gnss_data_parse (void)
+{
+ uint8 return_state = 0;
+ uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
+ uint8 bbc_xor_origin = 0;
+ uint8 bbc_xor_calculation = 0;
+ uint32 data_len = 0;
+
+ do
+ {
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+ for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_rmc_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
+ }
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_gga_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
+ }
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
+ }while(0);
+ return return_state;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS串口回调函数
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_uart_callback();
+// 备注信息 此函数需要在串口接收中断内进行调用
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_uart_callback (void)
+{
+ uint8 temp_gps[6];
+ uint32 temp_length = 0;
+
+
+
+
+ if(gnss_state)
+ {
+ uint8 dat;
+ while(uart_query_byte(GNSS_UART, &dat))
+ {
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
+ }
+
+ if('\n' == dat)
+ {
+ // 读取前6个数据 用于判断语句类型
+ temp_length = 6;
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
+ // 根据不同类型将数据拷贝到不同的缓冲区
+ if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
+ // 统一将FIFO清空
+ fifo_clear(&gnss_receiver_fifo);
+
+ gnss_flag = 1;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS初始化
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_init();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_init (gps_device_enum gps_device)
+{
+ const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
+ const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
+ const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
+
+ const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
+ const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
+ const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
+ const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
+ const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
+ const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
+ const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
+ const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
+ const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
+
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
+}
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_gnss.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.c
deleted file mode 100644
index da46a99..0000000
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#include "math.h"
-#include "zf_common_function.h"
-#include "zf_common_fifo.h"
-#include "zf_driver_delay.h"
-#include "zf_driver_uart.h"
-
-#include "zf_device_gps_tau1201.h"
-
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
-
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
-
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
-
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 获取指定 ',' 后面的索引
-// 参数说明 num 第几个逗号
-// 参数说明 *str 字符串
-// 返回参数 uint8 返回索引
-// 使用示例 get_parameter_index(1, s);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 get_parameter_index (uint8 num, char *str)
-{
- uint8 i = 0, j = 0;
- char *temp = strchr(str, '\n');
- uint8 len = 0, len1 = 0;
-
- if(NULL != temp)
- {
- len = (uint8)((uint32)temp - (uint32)str + 1);
- }
-
- for(i = 0; i < len; i ++)
- {
- if(',' == str[i])
- {
- j ++;
- }
- if(j == num)
- {
- len1 = i + 1;
- break;
- }
- }
-
- return len1;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static int get_int_number (char *s)
-{
- char buf[10];
- uint8 i = 0;
- int return_value = 0;
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_int(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static float get_float_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- float return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = (float)func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
-// 参数说明 *s 字符串
-// 返回参数 double 返回数值
-// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static double get_double_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- double return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 世界时间转换为北京时间
-// 参数说明 *time 保存的时间
-// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static void utc_to_btc (gps_time_struct *time)
-{
- uint8 day_num = 0;
-
- time->hour = time->hour + 8;
- if(23 < time->hour)
- {
- time->hour -= 24;
- time->day += 1;
-
- if(2 == time->month)
- {
- day_num = 28;
- if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
- {
- day_num ++; // 闰月 2月为29天
- }
- }
- else
- {
- day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
- if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
- {
- day_num = 30;
- }
- }
-
- if(time->day > day_num)
- {
- time->day = 1;
- time->month ++;
- if(12 < time->month)
- {
- time->month -= 12;
- time->year ++;
- }
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 RMC语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0, temp = 0;
-
- double latitude = 0; // 纬度
- double longitude = 0; // 经度
-
- double lati_cent_tmp = 0, lati_second_tmp = 0;
- double long_cent_tmp = 0, long_second_tmp = 0;
- float speed_tmp = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- gps->state = 0;
- if('A' == state) // 如果数据有效 则解析数据
- {
- return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
-
- latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
- longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
-
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
-
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
-
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
-
- speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
- }
-
- // 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
- temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
-
- utc_to_btc(&gps->time);
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GGA语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- if(',' != state)
- {
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
- return_state = 1;
- }
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的距离
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回两点距离
-// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
- double rad_latitude1 = 0;
- double rad_latitude2 = 0;
- double rad_longitude1 = 0;
- double rad_longitude2 = 0;
- double distance = 0;
- double a = 0;
- double b = 0;
-
- rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
- rad_latitude2 = ANGLE_TO_RAD(latitude2);
- rad_longitude1 = ANGLE_TO_RAD(longitude1);
- rad_longitude2 = ANGLE_TO_RAD(longitude2);
-
- a = rad_latitude1 - rad_latitude2;
- b = rad_longitude1 - rad_longitude2;
-
- distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
-
- return distance;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的方位角
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回方位角(0至360)
-// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- latitude1 = ANGLE_TO_RAD(latitude1);
- latitude2 = ANGLE_TO_RAD(latitude2);
- longitude1 = ANGLE_TO_RAD(longitude1);
- longitude2 = ANGLE_TO_RAD(longitude2);
-
- double x = sin(longitude2 - longitude1) * cos(latitude2);
- double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
- double angle = RAD_TO_ANGLE(atan2(x, y));
- return ((0 < angle) ? angle : (angle + 360));
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 解析GPS数据
-// 参数说明 void
-// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
-// 使用示例 gps_data_parse();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
-{
- uint8 return_state = 0;
- uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
- uint8 bbc_xor_origin = 0;
- uint8 bbc_xor_calculation = 0;
- uint32 data_len = 0;
-
- do
- {
- if(GPS_STATE_RECEIVED == gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
- for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_rmc_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
- }
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
- {
- gps_gga_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
- for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_gga_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
- }
- gps_gga_state = GPS_STATE_RECEIVING;
-
- }while(0);
- return return_state;
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS串口回调函数
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_uart_callback();
-// 备注信息 此函数需要在串口接收中断内进行调用
-//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
-{
- uint8 temp_gps[6];
- uint32 temp_length = 0;
-
- if(gps_tau1201_state)
- {
- uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
- {
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
- }
-
- if('\n' == dat)
- {
- // 读取前6个数据 用于判断语句类型
- temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
- // 根据不同类型将数据拷贝到不同的缓冲区
- if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
- else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
- {
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
-
- // 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
-
- gps_tau1201_flag = 1;
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS初始化
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_init();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
-{
- const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
- const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
- const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
- const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
- const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
- const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
- const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
- const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
- const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
- const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
- const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
- const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
-
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
-}
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips114.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips114.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips200.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips200.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_oled.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_oled.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_tft180.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_tft180.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E07_encoder_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E07_encoder_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E07_encoder_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E07_encoder_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E07_encoder_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E07_encoder_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E07_encoder_demo/user/isr.c b/Example/E07_encoder_demo/user/isr.c
index f81ccb2..a419ee6 100644
--- a/Example/E07_encoder_demo/user/isr.c
+++ b/Example/E07_encoder_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E08_eeprom_demo/libraries/doc/version.txt b/Example/E08_eeprom_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E08_eeprom_demo/libraries/doc/version.txt
+++ b/Example/E08_eeprom_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E08_eeprom_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E08_eeprom_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E08_eeprom_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E08_eeprom_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_clock.c b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_clock.h b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_debug.c b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_debug.h b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_fifo.c b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_fifo.h b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_font.c b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_font.h b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_function.c b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_function.h b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_typedef.h b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E08_eeprom_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E08_eeprom_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E08_eeprom_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_config.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gnss.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gnss.c
new file mode 100644
index 0000000..caf7cd0
--- /dev/null
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gnss.c
@@ -0,0 +1,620 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "math.h"
+#include "zf_common_function.h"
+#include "zf_common_fifo.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_uart.h"
+
+#include "zf_device_gnss.h"
+
+#define GNSS_BUFFER_SIZE ( 128 )
+
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
+
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
+
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取指定 ',' 后面的索引
+// 参数说明 num 第几个逗号
+// 参数说明 *str 字符串
+// 返回参数 uint8 返回索引
+// 使用示例 get_parameter_index(1, s);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 get_parameter_index (uint8 num, char *str)
+{
+ uint8 i = 0, j = 0;
+ char *temp = strchr(str, '\n');
+ uint8 len = 0, len1 = 0;
+
+ if(NULL != temp)
+ {
+ len = (uint8)((uint32)temp - (uint32)str + 1);
+ }
+
+ for(i = 0; i < len; i ++)
+ {
+ if(',' == str[i])
+ {
+ j ++;
+ }
+ if(j == num)
+ {
+ len1 = i + 1;
+ break;
+ }
+ }
+
+ return len1;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static int get_int_number (char *s)
+{
+ char buf[10];
+ uint8 i = 0;
+ int return_value = 0;
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_int(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static float get_float_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ float return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = (float)func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
+// 参数说明 *s 字符串
+// 返回参数 double 返回数值
+// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static double get_double_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ double return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 世界时间转换为北京时间
+// 参数说明 *time 保存的时间
+// 返回参数 void
+// 使用示例 utc_to_btc(&gnss->time);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static void utc_to_btc (gps_time_struct *time)
+{
+ uint8 day_num = 0;
+
+ time->hour = time->hour + 8;
+ if(23 < time->hour)
+ {
+ time->hour -= 24;
+ time->day += 1;
+
+ if(2 == time->month)
+ {
+ day_num = 28;
+ if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
+ {
+ day_num ++; // 闰月 2月为29天
+ }
+ }
+ else
+ {
+ day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
+ if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
+ {
+ day_num = 30;
+ }
+ }
+
+ if(time->day > day_num)
+ {
+ time->day = 1;
+ time->month ++;
+ if(12 < time->month)
+ {
+ time->month -= 12;
+ time->year ++;
+ }
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 RMC语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0, temp = 0;
+
+ double latitude = 0; // 纬度
+ double longitude = 0; // 经度
+
+ double lati_cent_tmp = 0, lati_second_tmp = 0;
+ double long_cent_tmp = 0, long_second_tmp = 0;
+ float speed_tmp = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state) // 如果数据有效 则解析数据
+ {
+ return_state = 1;
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
+
+ latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
+ longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
+
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
+
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
+
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
+
+ speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
+ }
+
+ // 在定位没有生效前也是有时间数据的,可以直接解析
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ temp = get_parameter_index(9, buf);
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+
+ utc_to_btc(&gnss->time);
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GGA语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if(',' != state)
+ {
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ return_state = 1;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的距离
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回两点距离
+// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
+ double rad_latitude1 = 0;
+ double rad_latitude2 = 0;
+ double rad_longitude1 = 0;
+ double rad_longitude2 = 0;
+ double distance = 0;
+ double a = 0;
+ double b = 0;
+
+ rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
+ rad_latitude2 = ANGLE_TO_RAD(latitude2);
+ rad_longitude1 = ANGLE_TO_RAD(longitude1);
+ rad_longitude2 = ANGLE_TO_RAD(longitude2);
+
+ a = rad_latitude1 - rad_latitude2;
+ b = rad_longitude1 - rad_longitude2;
+
+ distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
+ distance = distance * EARTH_RADIUS;
+
+ return distance;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的方位角
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回方位角(0至360)
+// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ latitude1 = ANGLE_TO_RAD(latitude1);
+ latitude2 = ANGLE_TO_RAD(latitude2);
+ longitude1 = ANGLE_TO_RAD(longitude1);
+ longitude2 = ANGLE_TO_RAD(longitude2);
+
+ double x = sin(longitude2 - longitude1) * cos(latitude2);
+ double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
+ double angle = RAD_TO_ANGLE(atan2(x, y));
+ return ((0 < angle) ? angle : (angle + 360));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 解析GPS数据
+// 参数说明 void
+// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
+// 使用示例 gps_data_parse();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 gnss_data_parse (void)
+{
+ uint8 return_state = 0;
+ uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
+ uint8 bbc_xor_origin = 0;
+ uint8 bbc_xor_calculation = 0;
+ uint32 data_len = 0;
+
+ do
+ {
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+ for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_rmc_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
+ }
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_gga_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
+ }
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
+ }while(0);
+ return return_state;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS串口回调函数
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_uart_callback();
+// 备注信息 此函数需要在串口接收中断内进行调用
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_uart_callback (void)
+{
+ uint8 temp_gps[6];
+ uint32 temp_length = 0;
+
+
+
+
+ if(gnss_state)
+ {
+ uint8 dat;
+ while(uart_query_byte(GNSS_UART, &dat))
+ {
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
+ }
+
+ if('\n' == dat)
+ {
+ // 读取前6个数据 用于判断语句类型
+ temp_length = 6;
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
+ // 根据不同类型将数据拷贝到不同的缓冲区
+ if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
+ // 统一将FIFO清空
+ fifo_clear(&gnss_receiver_fifo);
+
+ gnss_flag = 1;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS初始化
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_init();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_init (gps_device_enum gps_device)
+{
+ const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
+ const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
+ const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
+
+ const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
+ const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
+ const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
+ const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
+ const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
+ const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
+ const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
+ const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
+ const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
+
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
+}
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gnss.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.c
deleted file mode 100644
index da46a99..0000000
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#include "math.h"
-#include "zf_common_function.h"
-#include "zf_common_fifo.h"
-#include "zf_driver_delay.h"
-#include "zf_driver_uart.h"
-
-#include "zf_device_gps_tau1201.h"
-
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
-
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
-
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
-
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 获取指定 ',' 后面的索引
-// 参数说明 num 第几个逗号
-// 参数说明 *str 字符串
-// 返回参数 uint8 返回索引
-// 使用示例 get_parameter_index(1, s);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 get_parameter_index (uint8 num, char *str)
-{
- uint8 i = 0, j = 0;
- char *temp = strchr(str, '\n');
- uint8 len = 0, len1 = 0;
-
- if(NULL != temp)
- {
- len = (uint8)((uint32)temp - (uint32)str + 1);
- }
-
- for(i = 0; i < len; i ++)
- {
- if(',' == str[i])
- {
- j ++;
- }
- if(j == num)
- {
- len1 = i + 1;
- break;
- }
- }
-
- return len1;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static int get_int_number (char *s)
-{
- char buf[10];
- uint8 i = 0;
- int return_value = 0;
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_int(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static float get_float_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- float return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = (float)func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
-// 参数说明 *s 字符串
-// 返回参数 double 返回数值
-// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static double get_double_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- double return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 世界时间转换为北京时间
-// 参数说明 *time 保存的时间
-// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static void utc_to_btc (gps_time_struct *time)
-{
- uint8 day_num = 0;
-
- time->hour = time->hour + 8;
- if(23 < time->hour)
- {
- time->hour -= 24;
- time->day += 1;
-
- if(2 == time->month)
- {
- day_num = 28;
- if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
- {
- day_num ++; // 闰月 2月为29天
- }
- }
- else
- {
- day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
- if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
- {
- day_num = 30;
- }
- }
-
- if(time->day > day_num)
- {
- time->day = 1;
- time->month ++;
- if(12 < time->month)
- {
- time->month -= 12;
- time->year ++;
- }
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 RMC语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0, temp = 0;
-
- double latitude = 0; // 纬度
- double longitude = 0; // 经度
-
- double lati_cent_tmp = 0, lati_second_tmp = 0;
- double long_cent_tmp = 0, long_second_tmp = 0;
- float speed_tmp = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- gps->state = 0;
- if('A' == state) // 如果数据有效 则解析数据
- {
- return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
-
- latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
- longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
-
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
-
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
-
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
-
- speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
- }
-
- // 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
- temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
-
- utc_to_btc(&gps->time);
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GGA语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- if(',' != state)
- {
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
- return_state = 1;
- }
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的距离
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回两点距离
-// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
- double rad_latitude1 = 0;
- double rad_latitude2 = 0;
- double rad_longitude1 = 0;
- double rad_longitude2 = 0;
- double distance = 0;
- double a = 0;
- double b = 0;
-
- rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
- rad_latitude2 = ANGLE_TO_RAD(latitude2);
- rad_longitude1 = ANGLE_TO_RAD(longitude1);
- rad_longitude2 = ANGLE_TO_RAD(longitude2);
-
- a = rad_latitude1 - rad_latitude2;
- b = rad_longitude1 - rad_longitude2;
-
- distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
-
- return distance;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的方位角
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回方位角(0至360)
-// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- latitude1 = ANGLE_TO_RAD(latitude1);
- latitude2 = ANGLE_TO_RAD(latitude2);
- longitude1 = ANGLE_TO_RAD(longitude1);
- longitude2 = ANGLE_TO_RAD(longitude2);
-
- double x = sin(longitude2 - longitude1) * cos(latitude2);
- double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
- double angle = RAD_TO_ANGLE(atan2(x, y));
- return ((0 < angle) ? angle : (angle + 360));
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 解析GPS数据
-// 参数说明 void
-// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
-// 使用示例 gps_data_parse();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
-{
- uint8 return_state = 0;
- uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
- uint8 bbc_xor_origin = 0;
- uint8 bbc_xor_calculation = 0;
- uint32 data_len = 0;
-
- do
- {
- if(GPS_STATE_RECEIVED == gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
- for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_rmc_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
- }
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
- {
- gps_gga_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
- for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_gga_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
- }
- gps_gga_state = GPS_STATE_RECEIVING;
-
- }while(0);
- return return_state;
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS串口回调函数
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_uart_callback();
-// 备注信息 此函数需要在串口接收中断内进行调用
-//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
-{
- uint8 temp_gps[6];
- uint32 temp_length = 0;
-
- if(gps_tau1201_state)
- {
- uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
- {
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
- }
-
- if('\n' == dat)
- {
- // 读取前6个数据 用于判断语句类型
- temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
- // 根据不同类型将数据拷贝到不同的缓冲区
- if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
- else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
- {
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
-
- // 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
-
- gps_tau1201_flag = 1;
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS初始化
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_init();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
-{
- const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
- const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
- const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
- const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
- const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
- const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
- const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
- const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
- const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
- const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
- const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
- const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
-
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
-}
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_oled.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_oled.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tft180.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tft180.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E08_eeprom_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E08_eeprom_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E08_eeprom_demo/user/isr.c b/Example/E08_eeprom_demo/user/isr.c
index 8148b75..b010e82 100644
--- a/Example/E08_eeprom_demo/user/isr.c
+++ b/Example/E08_eeprom_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E09_timer_demo/libraries/doc/version.txt b/Example/E09_timer_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E09_timer_demo/libraries/doc/version.txt
+++ b/Example/E09_timer_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E09_timer_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E09_timer_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E09_timer_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E09_timer_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_clock.c b/Example/E09_timer_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_clock.h b/Example/E09_timer_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_debug.c b/Example/E09_timer_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_debug.h b/Example/E09_timer_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_fifo.c b/Example/E09_timer_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_fifo.h b/Example/E09_timer_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_font.c b/Example/E09_timer_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_font.h b/Example/E09_timer_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_function.c b/Example/E09_timer_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_function.h b/Example/E09_timer_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_headfile.h b/Example/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E09_timer_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E09_timer_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_common/zf_common_typedef.h b/Example/E09_timer_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E09_timer_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E09_timer_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.c b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.h b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E09_timer_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_config.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_gnss.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_gnss.c
new file mode 100644
index 0000000..caf7cd0
--- /dev/null
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_gnss.c
@@ -0,0 +1,620 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "math.h"
+#include "zf_common_function.h"
+#include "zf_common_fifo.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_uart.h"
+
+#include "zf_device_gnss.h"
+
+#define GNSS_BUFFER_SIZE ( 128 )
+
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
+
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
+
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取指定 ',' 后面的索引
+// 参数说明 num 第几个逗号
+// 参数说明 *str 字符串
+// 返回参数 uint8 返回索引
+// 使用示例 get_parameter_index(1, s);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 get_parameter_index (uint8 num, char *str)
+{
+ uint8 i = 0, j = 0;
+ char *temp = strchr(str, '\n');
+ uint8 len = 0, len1 = 0;
+
+ if(NULL != temp)
+ {
+ len = (uint8)((uint32)temp - (uint32)str + 1);
+ }
+
+ for(i = 0; i < len; i ++)
+ {
+ if(',' == str[i])
+ {
+ j ++;
+ }
+ if(j == num)
+ {
+ len1 = i + 1;
+ break;
+ }
+ }
+
+ return len1;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static int get_int_number (char *s)
+{
+ char buf[10];
+ uint8 i = 0;
+ int return_value = 0;
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_int(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static float get_float_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ float return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = (float)func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
+// 参数说明 *s 字符串
+// 返回参数 double 返回数值
+// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static double get_double_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ double return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 世界时间转换为北京时间
+// 参数说明 *time 保存的时间
+// 返回参数 void
+// 使用示例 utc_to_btc(&gnss->time);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static void utc_to_btc (gps_time_struct *time)
+{
+ uint8 day_num = 0;
+
+ time->hour = time->hour + 8;
+ if(23 < time->hour)
+ {
+ time->hour -= 24;
+ time->day += 1;
+
+ if(2 == time->month)
+ {
+ day_num = 28;
+ if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
+ {
+ day_num ++; // 闰月 2月为29天
+ }
+ }
+ else
+ {
+ day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
+ if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
+ {
+ day_num = 30;
+ }
+ }
+
+ if(time->day > day_num)
+ {
+ time->day = 1;
+ time->month ++;
+ if(12 < time->month)
+ {
+ time->month -= 12;
+ time->year ++;
+ }
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 RMC语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0, temp = 0;
+
+ double latitude = 0; // 纬度
+ double longitude = 0; // 经度
+
+ double lati_cent_tmp = 0, lati_second_tmp = 0;
+ double long_cent_tmp = 0, long_second_tmp = 0;
+ float speed_tmp = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state) // 如果数据有效 则解析数据
+ {
+ return_state = 1;
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
+
+ latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
+ longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
+
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
+
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
+
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
+
+ speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
+ }
+
+ // 在定位没有生效前也是有时间数据的,可以直接解析
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ temp = get_parameter_index(9, buf);
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+
+ utc_to_btc(&gnss->time);
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GGA语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if(',' != state)
+ {
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ return_state = 1;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的距离
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回两点距离
+// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
+ double rad_latitude1 = 0;
+ double rad_latitude2 = 0;
+ double rad_longitude1 = 0;
+ double rad_longitude2 = 0;
+ double distance = 0;
+ double a = 0;
+ double b = 0;
+
+ rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
+ rad_latitude2 = ANGLE_TO_RAD(latitude2);
+ rad_longitude1 = ANGLE_TO_RAD(longitude1);
+ rad_longitude2 = ANGLE_TO_RAD(longitude2);
+
+ a = rad_latitude1 - rad_latitude2;
+ b = rad_longitude1 - rad_longitude2;
+
+ distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
+ distance = distance * EARTH_RADIUS;
+
+ return distance;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的方位角
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回方位角(0至360)
+// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ latitude1 = ANGLE_TO_RAD(latitude1);
+ latitude2 = ANGLE_TO_RAD(latitude2);
+ longitude1 = ANGLE_TO_RAD(longitude1);
+ longitude2 = ANGLE_TO_RAD(longitude2);
+
+ double x = sin(longitude2 - longitude1) * cos(latitude2);
+ double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
+ double angle = RAD_TO_ANGLE(atan2(x, y));
+ return ((0 < angle) ? angle : (angle + 360));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 解析GPS数据
+// 参数说明 void
+// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
+// 使用示例 gps_data_parse();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 gnss_data_parse (void)
+{
+ uint8 return_state = 0;
+ uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
+ uint8 bbc_xor_origin = 0;
+ uint8 bbc_xor_calculation = 0;
+ uint32 data_len = 0;
+
+ do
+ {
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+ for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_rmc_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
+ }
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_gga_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
+ }
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
+ }while(0);
+ return return_state;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS串口回调函数
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_uart_callback();
+// 备注信息 此函数需要在串口接收中断内进行调用
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_uart_callback (void)
+{
+ uint8 temp_gps[6];
+ uint32 temp_length = 0;
+
+
+
+
+ if(gnss_state)
+ {
+ uint8 dat;
+ while(uart_query_byte(GNSS_UART, &dat))
+ {
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
+ }
+
+ if('\n' == dat)
+ {
+ // 读取前6个数据 用于判断语句类型
+ temp_length = 6;
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
+ // 根据不同类型将数据拷贝到不同的缓冲区
+ if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
+ // 统一将FIFO清空
+ fifo_clear(&gnss_receiver_fifo);
+
+ gnss_flag = 1;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS初始化
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_init();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_init (gps_device_enum gps_device)
+{
+ const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
+ const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
+ const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
+
+ const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
+ const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
+ const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
+ const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
+ const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
+ const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
+ const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
+ const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
+ const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
+
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
+}
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_gnss.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.c
deleted file mode 100644
index da46a99..0000000
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#include "math.h"
-#include "zf_common_function.h"
-#include "zf_common_fifo.h"
-#include "zf_driver_delay.h"
-#include "zf_driver_uart.h"
-
-#include "zf_device_gps_tau1201.h"
-
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
-
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
-
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
-
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 获取指定 ',' 后面的索引
-// 参数说明 num 第几个逗号
-// 参数说明 *str 字符串
-// 返回参数 uint8 返回索引
-// 使用示例 get_parameter_index(1, s);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 get_parameter_index (uint8 num, char *str)
-{
- uint8 i = 0, j = 0;
- char *temp = strchr(str, '\n');
- uint8 len = 0, len1 = 0;
-
- if(NULL != temp)
- {
- len = (uint8)((uint32)temp - (uint32)str + 1);
- }
-
- for(i = 0; i < len; i ++)
- {
- if(',' == str[i])
- {
- j ++;
- }
- if(j == num)
- {
- len1 = i + 1;
- break;
- }
- }
-
- return len1;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static int get_int_number (char *s)
-{
- char buf[10];
- uint8 i = 0;
- int return_value = 0;
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_int(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static float get_float_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- float return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = (float)func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
-// 参数说明 *s 字符串
-// 返回参数 double 返回数值
-// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static double get_double_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- double return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 世界时间转换为北京时间
-// 参数说明 *time 保存的时间
-// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static void utc_to_btc (gps_time_struct *time)
-{
- uint8 day_num = 0;
-
- time->hour = time->hour + 8;
- if(23 < time->hour)
- {
- time->hour -= 24;
- time->day += 1;
-
- if(2 == time->month)
- {
- day_num = 28;
- if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
- {
- day_num ++; // 闰月 2月为29天
- }
- }
- else
- {
- day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
- if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
- {
- day_num = 30;
- }
- }
-
- if(time->day > day_num)
- {
- time->day = 1;
- time->month ++;
- if(12 < time->month)
- {
- time->month -= 12;
- time->year ++;
- }
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 RMC语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0, temp = 0;
-
- double latitude = 0; // 纬度
- double longitude = 0; // 经度
-
- double lati_cent_tmp = 0, lati_second_tmp = 0;
- double long_cent_tmp = 0, long_second_tmp = 0;
- float speed_tmp = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- gps->state = 0;
- if('A' == state) // 如果数据有效 则解析数据
- {
- return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
-
- latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
- longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
-
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
-
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
-
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
-
- speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
- }
-
- // 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
- temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
-
- utc_to_btc(&gps->time);
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GGA语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- if(',' != state)
- {
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
- return_state = 1;
- }
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的距离
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回两点距离
-// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
- double rad_latitude1 = 0;
- double rad_latitude2 = 0;
- double rad_longitude1 = 0;
- double rad_longitude2 = 0;
- double distance = 0;
- double a = 0;
- double b = 0;
-
- rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
- rad_latitude2 = ANGLE_TO_RAD(latitude2);
- rad_longitude1 = ANGLE_TO_RAD(longitude1);
- rad_longitude2 = ANGLE_TO_RAD(longitude2);
-
- a = rad_latitude1 - rad_latitude2;
- b = rad_longitude1 - rad_longitude2;
-
- distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
-
- return distance;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的方位角
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回方位角(0至360)
-// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- latitude1 = ANGLE_TO_RAD(latitude1);
- latitude2 = ANGLE_TO_RAD(latitude2);
- longitude1 = ANGLE_TO_RAD(longitude1);
- longitude2 = ANGLE_TO_RAD(longitude2);
-
- double x = sin(longitude2 - longitude1) * cos(latitude2);
- double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
- double angle = RAD_TO_ANGLE(atan2(x, y));
- return ((0 < angle) ? angle : (angle + 360));
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 解析GPS数据
-// 参数说明 void
-// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
-// 使用示例 gps_data_parse();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
-{
- uint8 return_state = 0;
- uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
- uint8 bbc_xor_origin = 0;
- uint8 bbc_xor_calculation = 0;
- uint32 data_len = 0;
-
- do
- {
- if(GPS_STATE_RECEIVED == gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
- for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_rmc_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
- }
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
- {
- gps_gga_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
- for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_gga_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
- }
- gps_gga_state = GPS_STATE_RECEIVING;
-
- }while(0);
- return return_state;
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS串口回调函数
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_uart_callback();
-// 备注信息 此函数需要在串口接收中断内进行调用
-//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
-{
- uint8 temp_gps[6];
- uint32 temp_length = 0;
-
- if(gps_tau1201_state)
- {
- uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
- {
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
- }
-
- if('\n' == dat)
- {
- // 读取前6个数据 用于判断语句类型
- temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
- // 根据不同类型将数据拷贝到不同的缓冲区
- if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
- else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
- {
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
-
- // 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
-
- gps_tau1201_flag = 1;
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS初始化
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_init();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
-{
- const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
- const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
- const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
- const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
- const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
- const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
- const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
- const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
- const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
- const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
- const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
- const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
-
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
-}
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_ips114.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_ips114.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_ips200.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_ips200.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_key.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_key.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_oled.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_oled.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_tft180.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_tft180.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_type.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_type.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E09_timer_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E09_timer_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E09_timer_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E09_timer_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E09_timer_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E09_timer_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E09_timer_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E09_timer_demo/user/isr.c b/Example/E09_timer_demo/user/isr.c
index 27171d2..9108ff0 100644
--- a/Example/E09_timer_demo/user/isr.c
+++ b/Example/E09_timer_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E10_printf_debug_log_demo/libraries/doc/version.txt b/Example/E10_printf_debug_log_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E10_printf_debug_log_demo/libraries/doc/version.txt
+++ b/Example/E10_printf_debug_log_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E10_printf_debug_log_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E10_printf_debug_log_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E10_printf_debug_log_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E10_printf_debug_log_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_clock.c b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_clock.h b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_debug.c b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_debug.h b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_fifo.c b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_fifo.h b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_font.c b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_font.h b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_function.c b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_function.h b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_typedef.h b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_config.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gnss.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gnss.c
new file mode 100644
index 0000000..caf7cd0
--- /dev/null
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gnss.c
@@ -0,0 +1,620 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "math.h"
+#include "zf_common_function.h"
+#include "zf_common_fifo.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_uart.h"
+
+#include "zf_device_gnss.h"
+
+#define GNSS_BUFFER_SIZE ( 128 )
+
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
+
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
+
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取指定 ',' 后面的索引
+// 参数说明 num 第几个逗号
+// 参数说明 *str 字符串
+// 返回参数 uint8 返回索引
+// 使用示例 get_parameter_index(1, s);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 get_parameter_index (uint8 num, char *str)
+{
+ uint8 i = 0, j = 0;
+ char *temp = strchr(str, '\n');
+ uint8 len = 0, len1 = 0;
+
+ if(NULL != temp)
+ {
+ len = (uint8)((uint32)temp - (uint32)str + 1);
+ }
+
+ for(i = 0; i < len; i ++)
+ {
+ if(',' == str[i])
+ {
+ j ++;
+ }
+ if(j == num)
+ {
+ len1 = i + 1;
+ break;
+ }
+ }
+
+ return len1;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static int get_int_number (char *s)
+{
+ char buf[10];
+ uint8 i = 0;
+ int return_value = 0;
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_int(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static float get_float_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ float return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = (float)func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
+// 参数说明 *s 字符串
+// 返回参数 double 返回数值
+// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static double get_double_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ double return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 世界时间转换为北京时间
+// 参数说明 *time 保存的时间
+// 返回参数 void
+// 使用示例 utc_to_btc(&gnss->time);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static void utc_to_btc (gps_time_struct *time)
+{
+ uint8 day_num = 0;
+
+ time->hour = time->hour + 8;
+ if(23 < time->hour)
+ {
+ time->hour -= 24;
+ time->day += 1;
+
+ if(2 == time->month)
+ {
+ day_num = 28;
+ if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
+ {
+ day_num ++; // 闰月 2月为29天
+ }
+ }
+ else
+ {
+ day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
+ if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
+ {
+ day_num = 30;
+ }
+ }
+
+ if(time->day > day_num)
+ {
+ time->day = 1;
+ time->month ++;
+ if(12 < time->month)
+ {
+ time->month -= 12;
+ time->year ++;
+ }
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 RMC语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0, temp = 0;
+
+ double latitude = 0; // 纬度
+ double longitude = 0; // 经度
+
+ double lati_cent_tmp = 0, lati_second_tmp = 0;
+ double long_cent_tmp = 0, long_second_tmp = 0;
+ float speed_tmp = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state) // 如果数据有效 则解析数据
+ {
+ return_state = 1;
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
+
+ latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
+ longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
+
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
+
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
+
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
+
+ speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
+ }
+
+ // 在定位没有生效前也是有时间数据的,可以直接解析
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ temp = get_parameter_index(9, buf);
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+
+ utc_to_btc(&gnss->time);
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GGA语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if(',' != state)
+ {
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ return_state = 1;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的距离
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回两点距离
+// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
+ double rad_latitude1 = 0;
+ double rad_latitude2 = 0;
+ double rad_longitude1 = 0;
+ double rad_longitude2 = 0;
+ double distance = 0;
+ double a = 0;
+ double b = 0;
+
+ rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
+ rad_latitude2 = ANGLE_TO_RAD(latitude2);
+ rad_longitude1 = ANGLE_TO_RAD(longitude1);
+ rad_longitude2 = ANGLE_TO_RAD(longitude2);
+
+ a = rad_latitude1 - rad_latitude2;
+ b = rad_longitude1 - rad_longitude2;
+
+ distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
+ distance = distance * EARTH_RADIUS;
+
+ return distance;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的方位角
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回方位角(0至360)
+// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ latitude1 = ANGLE_TO_RAD(latitude1);
+ latitude2 = ANGLE_TO_RAD(latitude2);
+ longitude1 = ANGLE_TO_RAD(longitude1);
+ longitude2 = ANGLE_TO_RAD(longitude2);
+
+ double x = sin(longitude2 - longitude1) * cos(latitude2);
+ double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
+ double angle = RAD_TO_ANGLE(atan2(x, y));
+ return ((0 < angle) ? angle : (angle + 360));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 解析GPS数据
+// 参数说明 void
+// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
+// 使用示例 gps_data_parse();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 gnss_data_parse (void)
+{
+ uint8 return_state = 0;
+ uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
+ uint8 bbc_xor_origin = 0;
+ uint8 bbc_xor_calculation = 0;
+ uint32 data_len = 0;
+
+ do
+ {
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+ for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_rmc_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
+ }
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_gga_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
+ }
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
+ }while(0);
+ return return_state;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS串口回调函数
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_uart_callback();
+// 备注信息 此函数需要在串口接收中断内进行调用
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_uart_callback (void)
+{
+ uint8 temp_gps[6];
+ uint32 temp_length = 0;
+
+
+
+
+ if(gnss_state)
+ {
+ uint8 dat;
+ while(uart_query_byte(GNSS_UART, &dat))
+ {
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
+ }
+
+ if('\n' == dat)
+ {
+ // 读取前6个数据 用于判断语句类型
+ temp_length = 6;
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
+ // 根据不同类型将数据拷贝到不同的缓冲区
+ if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
+ // 统一将FIFO清空
+ fifo_clear(&gnss_receiver_fifo);
+
+ gnss_flag = 1;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS初始化
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_init();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_init (gps_device_enum gps_device)
+{
+ const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
+ const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
+ const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
+
+ const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
+ const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
+ const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
+ const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
+ const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
+ const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
+ const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
+ const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
+ const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
+
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
+}
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gnss.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.c
deleted file mode 100644
index da46a99..0000000
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#include "math.h"
-#include "zf_common_function.h"
-#include "zf_common_fifo.h"
-#include "zf_driver_delay.h"
-#include "zf_driver_uart.h"
-
-#include "zf_device_gps_tau1201.h"
-
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
-
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
-
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
-
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 获取指定 ',' 后面的索引
-// 参数说明 num 第几个逗号
-// 参数说明 *str 字符串
-// 返回参数 uint8 返回索引
-// 使用示例 get_parameter_index(1, s);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 get_parameter_index (uint8 num, char *str)
-{
- uint8 i = 0, j = 0;
- char *temp = strchr(str, '\n');
- uint8 len = 0, len1 = 0;
-
- if(NULL != temp)
- {
- len = (uint8)((uint32)temp - (uint32)str + 1);
- }
-
- for(i = 0; i < len; i ++)
- {
- if(',' == str[i])
- {
- j ++;
- }
- if(j == num)
- {
- len1 = i + 1;
- break;
- }
- }
-
- return len1;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static int get_int_number (char *s)
-{
- char buf[10];
- uint8 i = 0;
- int return_value = 0;
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_int(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static float get_float_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- float return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = (float)func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
-// 参数说明 *s 字符串
-// 返回参数 double 返回数值
-// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static double get_double_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- double return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 世界时间转换为北京时间
-// 参数说明 *time 保存的时间
-// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static void utc_to_btc (gps_time_struct *time)
-{
- uint8 day_num = 0;
-
- time->hour = time->hour + 8;
- if(23 < time->hour)
- {
- time->hour -= 24;
- time->day += 1;
-
- if(2 == time->month)
- {
- day_num = 28;
- if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
- {
- day_num ++; // 闰月 2月为29天
- }
- }
- else
- {
- day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
- if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
- {
- day_num = 30;
- }
- }
-
- if(time->day > day_num)
- {
- time->day = 1;
- time->month ++;
- if(12 < time->month)
- {
- time->month -= 12;
- time->year ++;
- }
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 RMC语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0, temp = 0;
-
- double latitude = 0; // 纬度
- double longitude = 0; // 经度
-
- double lati_cent_tmp = 0, lati_second_tmp = 0;
- double long_cent_tmp = 0, long_second_tmp = 0;
- float speed_tmp = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- gps->state = 0;
- if('A' == state) // 如果数据有效 则解析数据
- {
- return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
-
- latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
- longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
-
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
-
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
-
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
-
- speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
- }
-
- // 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
- temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
-
- utc_to_btc(&gps->time);
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GGA语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- if(',' != state)
- {
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
- return_state = 1;
- }
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的距离
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回两点距离
-// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
- double rad_latitude1 = 0;
- double rad_latitude2 = 0;
- double rad_longitude1 = 0;
- double rad_longitude2 = 0;
- double distance = 0;
- double a = 0;
- double b = 0;
-
- rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
- rad_latitude2 = ANGLE_TO_RAD(latitude2);
- rad_longitude1 = ANGLE_TO_RAD(longitude1);
- rad_longitude2 = ANGLE_TO_RAD(longitude2);
-
- a = rad_latitude1 - rad_latitude2;
- b = rad_longitude1 - rad_longitude2;
-
- distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
-
- return distance;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的方位角
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回方位角(0至360)
-// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- latitude1 = ANGLE_TO_RAD(latitude1);
- latitude2 = ANGLE_TO_RAD(latitude2);
- longitude1 = ANGLE_TO_RAD(longitude1);
- longitude2 = ANGLE_TO_RAD(longitude2);
-
- double x = sin(longitude2 - longitude1) * cos(latitude2);
- double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
- double angle = RAD_TO_ANGLE(atan2(x, y));
- return ((0 < angle) ? angle : (angle + 360));
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 解析GPS数据
-// 参数说明 void
-// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
-// 使用示例 gps_data_parse();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
-{
- uint8 return_state = 0;
- uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
- uint8 bbc_xor_origin = 0;
- uint8 bbc_xor_calculation = 0;
- uint32 data_len = 0;
-
- do
- {
- if(GPS_STATE_RECEIVED == gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
- for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_rmc_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
- }
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
- {
- gps_gga_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
- for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_gga_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
- }
- gps_gga_state = GPS_STATE_RECEIVING;
-
- }while(0);
- return return_state;
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS串口回调函数
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_uart_callback();
-// 备注信息 此函数需要在串口接收中断内进行调用
-//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
-{
- uint8 temp_gps[6];
- uint32 temp_length = 0;
-
- if(gps_tau1201_state)
- {
- uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
- {
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
- }
-
- if('\n' == dat)
- {
- // 读取前6个数据 用于判断语句类型
- temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
- // 根据不同类型将数据拷贝到不同的缓冲区
- if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
- else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
- {
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
-
- // 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
-
- gps_tau1201_flag = 1;
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS初始化
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_init();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
-{
- const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
- const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
- const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
- const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
- const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
- const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
- const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
- const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
- const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
- const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
- const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
- const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
-
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
-}
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_oled.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_oled.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tft180.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tft180.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E10_printf_debug_log_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E10_printf_debug_log_demo/user/isr.c b/Example/E10_printf_debug_log_demo/user/isr.c
index 27171d2..9108ff0 100644
--- a/Example/E10_printf_debug_log_demo/user/isr.c
+++ b/Example/E10_printf_debug_log_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt b/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt
+++ b/Example/E11_interrupt_priority_set_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E11_interrupt_priority_set_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_clock.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_clock.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_debug.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_debug.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_fifo.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_fifo.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_font.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_font.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_function.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_function.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_typedef.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_config.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gnss.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gnss.c
new file mode 100644
index 0000000..caf7cd0
--- /dev/null
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gnss.c
@@ -0,0 +1,620 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "math.h"
+#include "zf_common_function.h"
+#include "zf_common_fifo.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_uart.h"
+
+#include "zf_device_gnss.h"
+
+#define GNSS_BUFFER_SIZE ( 128 )
+
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
+
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
+
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取指定 ',' 后面的索引
+// 参数说明 num 第几个逗号
+// 参数说明 *str 字符串
+// 返回参数 uint8 返回索引
+// 使用示例 get_parameter_index(1, s);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 get_parameter_index (uint8 num, char *str)
+{
+ uint8 i = 0, j = 0;
+ char *temp = strchr(str, '\n');
+ uint8 len = 0, len1 = 0;
+
+ if(NULL != temp)
+ {
+ len = (uint8)((uint32)temp - (uint32)str + 1);
+ }
+
+ for(i = 0; i < len; i ++)
+ {
+ if(',' == str[i])
+ {
+ j ++;
+ }
+ if(j == num)
+ {
+ len1 = i + 1;
+ break;
+ }
+ }
+
+ return len1;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static int get_int_number (char *s)
+{
+ char buf[10];
+ uint8 i = 0;
+ int return_value = 0;
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_int(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static float get_float_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ float return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = (float)func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
+// 参数说明 *s 字符串
+// 返回参数 double 返回数值
+// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static double get_double_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ double return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 世界时间转换为北京时间
+// 参数说明 *time 保存的时间
+// 返回参数 void
+// 使用示例 utc_to_btc(&gnss->time);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static void utc_to_btc (gps_time_struct *time)
+{
+ uint8 day_num = 0;
+
+ time->hour = time->hour + 8;
+ if(23 < time->hour)
+ {
+ time->hour -= 24;
+ time->day += 1;
+
+ if(2 == time->month)
+ {
+ day_num = 28;
+ if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
+ {
+ day_num ++; // 闰月 2月为29天
+ }
+ }
+ else
+ {
+ day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
+ if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
+ {
+ day_num = 30;
+ }
+ }
+
+ if(time->day > day_num)
+ {
+ time->day = 1;
+ time->month ++;
+ if(12 < time->month)
+ {
+ time->month -= 12;
+ time->year ++;
+ }
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 RMC语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0, temp = 0;
+
+ double latitude = 0; // 纬度
+ double longitude = 0; // 经度
+
+ double lati_cent_tmp = 0, lati_second_tmp = 0;
+ double long_cent_tmp = 0, long_second_tmp = 0;
+ float speed_tmp = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state) // 如果数据有效 则解析数据
+ {
+ return_state = 1;
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
+
+ latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
+ longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
+
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
+
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
+
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
+
+ speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
+ }
+
+ // 在定位没有生效前也是有时间数据的,可以直接解析
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ temp = get_parameter_index(9, buf);
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+
+ utc_to_btc(&gnss->time);
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GGA语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if(',' != state)
+ {
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ return_state = 1;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的距离
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回两点距离
+// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
+ double rad_latitude1 = 0;
+ double rad_latitude2 = 0;
+ double rad_longitude1 = 0;
+ double rad_longitude2 = 0;
+ double distance = 0;
+ double a = 0;
+ double b = 0;
+
+ rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
+ rad_latitude2 = ANGLE_TO_RAD(latitude2);
+ rad_longitude1 = ANGLE_TO_RAD(longitude1);
+ rad_longitude2 = ANGLE_TO_RAD(longitude2);
+
+ a = rad_latitude1 - rad_latitude2;
+ b = rad_longitude1 - rad_longitude2;
+
+ distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
+ distance = distance * EARTH_RADIUS;
+
+ return distance;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的方位角
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回方位角(0至360)
+// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ latitude1 = ANGLE_TO_RAD(latitude1);
+ latitude2 = ANGLE_TO_RAD(latitude2);
+ longitude1 = ANGLE_TO_RAD(longitude1);
+ longitude2 = ANGLE_TO_RAD(longitude2);
+
+ double x = sin(longitude2 - longitude1) * cos(latitude2);
+ double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
+ double angle = RAD_TO_ANGLE(atan2(x, y));
+ return ((0 < angle) ? angle : (angle + 360));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 解析GPS数据
+// 参数说明 void
+// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
+// 使用示例 gps_data_parse();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 gnss_data_parse (void)
+{
+ uint8 return_state = 0;
+ uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
+ uint8 bbc_xor_origin = 0;
+ uint8 bbc_xor_calculation = 0;
+ uint32 data_len = 0;
+
+ do
+ {
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+ for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_rmc_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
+ }
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_gga_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
+ }
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
+ }while(0);
+ return return_state;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS串口回调函数
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_uart_callback();
+// 备注信息 此函数需要在串口接收中断内进行调用
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_uart_callback (void)
+{
+ uint8 temp_gps[6];
+ uint32 temp_length = 0;
+
+
+
+
+ if(gnss_state)
+ {
+ uint8 dat;
+ while(uart_query_byte(GNSS_UART, &dat))
+ {
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
+ }
+
+ if('\n' == dat)
+ {
+ // 读取前6个数据 用于判断语句类型
+ temp_length = 6;
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
+ // 根据不同类型将数据拷贝到不同的缓冲区
+ if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
+ // 统一将FIFO清空
+ fifo_clear(&gnss_receiver_fifo);
+
+ gnss_flag = 1;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS初始化
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_init();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_init (gps_device_enum gps_device)
+{
+ const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
+ const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
+ const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
+
+ const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
+ const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
+ const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
+ const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
+ const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
+ const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
+ const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
+ const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
+ const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
+
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
+}
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gnss.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.c
deleted file mode 100644
index da46a99..0000000
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#include "math.h"
-#include "zf_common_function.h"
-#include "zf_common_fifo.h"
-#include "zf_driver_delay.h"
-#include "zf_driver_uart.h"
-
-#include "zf_device_gps_tau1201.h"
-
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
-
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
-
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
-
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 获取指定 ',' 后面的索引
-// 参数说明 num 第几个逗号
-// 参数说明 *str 字符串
-// 返回参数 uint8 返回索引
-// 使用示例 get_parameter_index(1, s);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 get_parameter_index (uint8 num, char *str)
-{
- uint8 i = 0, j = 0;
- char *temp = strchr(str, '\n');
- uint8 len = 0, len1 = 0;
-
- if(NULL != temp)
- {
- len = (uint8)((uint32)temp - (uint32)str + 1);
- }
-
- for(i = 0; i < len; i ++)
- {
- if(',' == str[i])
- {
- j ++;
- }
- if(j == num)
- {
- len1 = i + 1;
- break;
- }
- }
-
- return len1;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static int get_int_number (char *s)
-{
- char buf[10];
- uint8 i = 0;
- int return_value = 0;
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_int(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static float get_float_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- float return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = (float)func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
-// 参数说明 *s 字符串
-// 返回参数 double 返回数值
-// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static double get_double_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- double return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 世界时间转换为北京时间
-// 参数说明 *time 保存的时间
-// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static void utc_to_btc (gps_time_struct *time)
-{
- uint8 day_num = 0;
-
- time->hour = time->hour + 8;
- if(23 < time->hour)
- {
- time->hour -= 24;
- time->day += 1;
-
- if(2 == time->month)
- {
- day_num = 28;
- if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
- {
- day_num ++; // 闰月 2月为29天
- }
- }
- else
- {
- day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
- if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
- {
- day_num = 30;
- }
- }
-
- if(time->day > day_num)
- {
- time->day = 1;
- time->month ++;
- if(12 < time->month)
- {
- time->month -= 12;
- time->year ++;
- }
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 RMC语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0, temp = 0;
-
- double latitude = 0; // 纬度
- double longitude = 0; // 经度
-
- double lati_cent_tmp = 0, lati_second_tmp = 0;
- double long_cent_tmp = 0, long_second_tmp = 0;
- float speed_tmp = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- gps->state = 0;
- if('A' == state) // 如果数据有效 则解析数据
- {
- return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
-
- latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
- longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
-
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
-
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
-
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
-
- speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
- }
-
- // 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
- temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
-
- utc_to_btc(&gps->time);
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GGA语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- if(',' != state)
- {
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
- return_state = 1;
- }
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的距离
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回两点距离
-// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
- double rad_latitude1 = 0;
- double rad_latitude2 = 0;
- double rad_longitude1 = 0;
- double rad_longitude2 = 0;
- double distance = 0;
- double a = 0;
- double b = 0;
-
- rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
- rad_latitude2 = ANGLE_TO_RAD(latitude2);
- rad_longitude1 = ANGLE_TO_RAD(longitude1);
- rad_longitude2 = ANGLE_TO_RAD(longitude2);
-
- a = rad_latitude1 - rad_latitude2;
- b = rad_longitude1 - rad_longitude2;
-
- distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
-
- return distance;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的方位角
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回方位角(0至360)
-// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- latitude1 = ANGLE_TO_RAD(latitude1);
- latitude2 = ANGLE_TO_RAD(latitude2);
- longitude1 = ANGLE_TO_RAD(longitude1);
- longitude2 = ANGLE_TO_RAD(longitude2);
-
- double x = sin(longitude2 - longitude1) * cos(latitude2);
- double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
- double angle = RAD_TO_ANGLE(atan2(x, y));
- return ((0 < angle) ? angle : (angle + 360));
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 解析GPS数据
-// 参数说明 void
-// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
-// 使用示例 gps_data_parse();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
-{
- uint8 return_state = 0;
- uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
- uint8 bbc_xor_origin = 0;
- uint8 bbc_xor_calculation = 0;
- uint32 data_len = 0;
-
- do
- {
- if(GPS_STATE_RECEIVED == gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
- for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_rmc_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
- }
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
- {
- gps_gga_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
- for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_gga_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
- }
- gps_gga_state = GPS_STATE_RECEIVING;
-
- }while(0);
- return return_state;
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS串口回调函数
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_uart_callback();
-// 备注信息 此函数需要在串口接收中断内进行调用
-//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
-{
- uint8 temp_gps[6];
- uint32 temp_length = 0;
-
- if(gps_tau1201_state)
- {
- uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
- {
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
- }
-
- if('\n' == dat)
- {
- // 读取前6个数据 用于判断语句类型
- temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
- // 根据不同类型将数据拷贝到不同的缓冲区
- if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
- else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
- {
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
-
- // 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
-
- gps_tau1201_flag = 1;
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS初始化
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_init();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
-{
- const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
- const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
- const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
- const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
- const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
- const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
- const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
- const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
- const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
- const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
- const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
- const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
-
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
-}
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_oled.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_oled.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tft180.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tft180.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E11_interrupt_priority_set_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E11_interrupt_priority_set_demo/user/isr.c b/Example/E11_interrupt_priority_set_demo/user/isr.c
index 27171d2..9108ff0 100644
--- a/Example/E11_interrupt_priority_set_demo/user/isr.c
+++ b/Example/E11_interrupt_priority_set_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt b/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_clock.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_clock.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_debug.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_debug.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_fifo.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_fifo.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_font.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_font.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_function.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_function.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_typedef.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_config.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gnss.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gnss.c
new file mode 100644
index 0000000..caf7cd0
--- /dev/null
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gnss.c
@@ -0,0 +1,620 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "math.h"
+#include "zf_common_function.h"
+#include "zf_common_fifo.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_uart.h"
+
+#include "zf_device_gnss.h"
+
+#define GNSS_BUFFER_SIZE ( 128 )
+
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
+
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
+
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取指定 ',' 后面的索引
+// 参数说明 num 第几个逗号
+// 参数说明 *str 字符串
+// 返回参数 uint8 返回索引
+// 使用示例 get_parameter_index(1, s);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 get_parameter_index (uint8 num, char *str)
+{
+ uint8 i = 0, j = 0;
+ char *temp = strchr(str, '\n');
+ uint8 len = 0, len1 = 0;
+
+ if(NULL != temp)
+ {
+ len = (uint8)((uint32)temp - (uint32)str + 1);
+ }
+
+ for(i = 0; i < len; i ++)
+ {
+ if(',' == str[i])
+ {
+ j ++;
+ }
+ if(j == num)
+ {
+ len1 = i + 1;
+ break;
+ }
+ }
+
+ return len1;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static int get_int_number (char *s)
+{
+ char buf[10];
+ uint8 i = 0;
+ int return_value = 0;
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_int(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static float get_float_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ float return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = (float)func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
+// 参数说明 *s 字符串
+// 返回参数 double 返回数值
+// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static double get_double_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ double return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 世界时间转换为北京时间
+// 参数说明 *time 保存的时间
+// 返回参数 void
+// 使用示例 utc_to_btc(&gnss->time);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static void utc_to_btc (gps_time_struct *time)
+{
+ uint8 day_num = 0;
+
+ time->hour = time->hour + 8;
+ if(23 < time->hour)
+ {
+ time->hour -= 24;
+ time->day += 1;
+
+ if(2 == time->month)
+ {
+ day_num = 28;
+ if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
+ {
+ day_num ++; // 闰月 2月为29天
+ }
+ }
+ else
+ {
+ day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
+ if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
+ {
+ day_num = 30;
+ }
+ }
+
+ if(time->day > day_num)
+ {
+ time->day = 1;
+ time->month ++;
+ if(12 < time->month)
+ {
+ time->month -= 12;
+ time->year ++;
+ }
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 RMC语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0, temp = 0;
+
+ double latitude = 0; // 纬度
+ double longitude = 0; // 经度
+
+ double lati_cent_tmp = 0, lati_second_tmp = 0;
+ double long_cent_tmp = 0, long_second_tmp = 0;
+ float speed_tmp = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state) // 如果数据有效 则解析数据
+ {
+ return_state = 1;
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
+
+ latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
+ longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
+
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
+
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
+
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
+
+ speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
+ }
+
+ // 在定位没有生效前也是有时间数据的,可以直接解析
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ temp = get_parameter_index(9, buf);
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+
+ utc_to_btc(&gnss->time);
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GGA语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if(',' != state)
+ {
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ return_state = 1;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的距离
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回两点距离
+// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
+ double rad_latitude1 = 0;
+ double rad_latitude2 = 0;
+ double rad_longitude1 = 0;
+ double rad_longitude2 = 0;
+ double distance = 0;
+ double a = 0;
+ double b = 0;
+
+ rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
+ rad_latitude2 = ANGLE_TO_RAD(latitude2);
+ rad_longitude1 = ANGLE_TO_RAD(longitude1);
+ rad_longitude2 = ANGLE_TO_RAD(longitude2);
+
+ a = rad_latitude1 - rad_latitude2;
+ b = rad_longitude1 - rad_longitude2;
+
+ distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
+ distance = distance * EARTH_RADIUS;
+
+ return distance;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的方位角
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回方位角(0至360)
+// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ latitude1 = ANGLE_TO_RAD(latitude1);
+ latitude2 = ANGLE_TO_RAD(latitude2);
+ longitude1 = ANGLE_TO_RAD(longitude1);
+ longitude2 = ANGLE_TO_RAD(longitude2);
+
+ double x = sin(longitude2 - longitude1) * cos(latitude2);
+ double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
+ double angle = RAD_TO_ANGLE(atan2(x, y));
+ return ((0 < angle) ? angle : (angle + 360));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 解析GPS数据
+// 参数说明 void
+// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
+// 使用示例 gps_data_parse();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 gnss_data_parse (void)
+{
+ uint8 return_state = 0;
+ uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
+ uint8 bbc_xor_origin = 0;
+ uint8 bbc_xor_calculation = 0;
+ uint32 data_len = 0;
+
+ do
+ {
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+ for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_rmc_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
+ }
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_gga_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
+ }
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
+ }while(0);
+ return return_state;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS串口回调函数
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_uart_callback();
+// 备注信息 此函数需要在串口接收中断内进行调用
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_uart_callback (void)
+{
+ uint8 temp_gps[6];
+ uint32 temp_length = 0;
+
+
+
+
+ if(gnss_state)
+ {
+ uint8 dat;
+ while(uart_query_byte(GNSS_UART, &dat))
+ {
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
+ }
+
+ if('\n' == dat)
+ {
+ // 读取前6个数据 用于判断语句类型
+ temp_length = 6;
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
+ // 根据不同类型将数据拷贝到不同的缓冲区
+ if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
+ // 统一将FIFO清空
+ fifo_clear(&gnss_receiver_fifo);
+
+ gnss_flag = 1;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS初始化
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_init();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_init (gps_device_enum gps_device)
+{
+ const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
+ const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
+ const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
+
+ const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
+ const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
+ const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
+ const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
+ const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
+ const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
+ const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
+ const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
+ const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
+
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
+}
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gnss.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.c
deleted file mode 100644
index da46a99..0000000
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#include "math.h"
-#include "zf_common_function.h"
-#include "zf_common_fifo.h"
-#include "zf_driver_delay.h"
-#include "zf_driver_uart.h"
-
-#include "zf_device_gps_tau1201.h"
-
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
-
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
-
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
-
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 获取指定 ',' 后面的索引
-// 参数说明 num 第几个逗号
-// 参数说明 *str 字符串
-// 返回参数 uint8 返回索引
-// 使用示例 get_parameter_index(1, s);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 get_parameter_index (uint8 num, char *str)
-{
- uint8 i = 0, j = 0;
- char *temp = strchr(str, '\n');
- uint8 len = 0, len1 = 0;
-
- if(NULL != temp)
- {
- len = (uint8)((uint32)temp - (uint32)str + 1);
- }
-
- for(i = 0; i < len; i ++)
- {
- if(',' == str[i])
- {
- j ++;
- }
- if(j == num)
- {
- len1 = i + 1;
- break;
- }
- }
-
- return len1;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static int get_int_number (char *s)
-{
- char buf[10];
- uint8 i = 0;
- int return_value = 0;
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_int(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static float get_float_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- float return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = (float)func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
-// 参数说明 *s 字符串
-// 返回参数 double 返回数值
-// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static double get_double_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- double return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 世界时间转换为北京时间
-// 参数说明 *time 保存的时间
-// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static void utc_to_btc (gps_time_struct *time)
-{
- uint8 day_num = 0;
-
- time->hour = time->hour + 8;
- if(23 < time->hour)
- {
- time->hour -= 24;
- time->day += 1;
-
- if(2 == time->month)
- {
- day_num = 28;
- if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
- {
- day_num ++; // 闰月 2月为29天
- }
- }
- else
- {
- day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
- if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
- {
- day_num = 30;
- }
- }
-
- if(time->day > day_num)
- {
- time->day = 1;
- time->month ++;
- if(12 < time->month)
- {
- time->month -= 12;
- time->year ++;
- }
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 RMC语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0, temp = 0;
-
- double latitude = 0; // 纬度
- double longitude = 0; // 经度
-
- double lati_cent_tmp = 0, lati_second_tmp = 0;
- double long_cent_tmp = 0, long_second_tmp = 0;
- float speed_tmp = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- gps->state = 0;
- if('A' == state) // 如果数据有效 则解析数据
- {
- return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
-
- latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
- longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
-
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
-
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
-
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
-
- speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
- }
-
- // 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
- temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
-
- utc_to_btc(&gps->time);
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GGA语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- if(',' != state)
- {
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
- return_state = 1;
- }
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的距离
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回两点距离
-// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
- double rad_latitude1 = 0;
- double rad_latitude2 = 0;
- double rad_longitude1 = 0;
- double rad_longitude2 = 0;
- double distance = 0;
- double a = 0;
- double b = 0;
-
- rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
- rad_latitude2 = ANGLE_TO_RAD(latitude2);
- rad_longitude1 = ANGLE_TO_RAD(longitude1);
- rad_longitude2 = ANGLE_TO_RAD(longitude2);
-
- a = rad_latitude1 - rad_latitude2;
- b = rad_longitude1 - rad_longitude2;
-
- distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
-
- return distance;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的方位角
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回方位角(0至360)
-// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- latitude1 = ANGLE_TO_RAD(latitude1);
- latitude2 = ANGLE_TO_RAD(latitude2);
- longitude1 = ANGLE_TO_RAD(longitude1);
- longitude2 = ANGLE_TO_RAD(longitude2);
-
- double x = sin(longitude2 - longitude1) * cos(latitude2);
- double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
- double angle = RAD_TO_ANGLE(atan2(x, y));
- return ((0 < angle) ? angle : (angle + 360));
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 解析GPS数据
-// 参数说明 void
-// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
-// 使用示例 gps_data_parse();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
-{
- uint8 return_state = 0;
- uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
- uint8 bbc_xor_origin = 0;
- uint8 bbc_xor_calculation = 0;
- uint32 data_len = 0;
-
- do
- {
- if(GPS_STATE_RECEIVED == gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
- for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_rmc_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
- }
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
- {
- gps_gga_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
- for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_gga_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
- }
- gps_gga_state = GPS_STATE_RECEIVING;
-
- }while(0);
- return return_state;
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS串口回调函数
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_uart_callback();
-// 备注信息 此函数需要在串口接收中断内进行调用
-//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
-{
- uint8 temp_gps[6];
- uint32 temp_length = 0;
-
- if(gps_tau1201_state)
- {
- uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
- {
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
- }
-
- if('\n' == dat)
- {
- // 读取前6个数据 用于判断语句类型
- temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
- // 根据不同类型将数据拷贝到不同的缓冲区
- if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
- else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
- {
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
-
- // 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
-
- gps_tau1201_flag = 1;
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS初始化
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_init();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
-{
- const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
- const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
- const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
- const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
- const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
- const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
- const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
- const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
- const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
- const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
- const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
- const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
-
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
-}
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_oled.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_oled.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tft180.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tft180.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E12_cpu1_handles_interrupts_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E12_cpu1_handles_interrupts_demo/user/isr.c b/Example/E12_cpu1_handles_interrupts_demo/user/isr.c
index f81ccb2..a419ee6 100644
--- a/Example/E12_cpu1_handles_interrupts_demo/user/isr.c
+++ b/Example/E12_cpu1_handles_interrupts_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E13_dual_core_demo/libraries/doc/version.txt b/Example/E13_dual_core_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E13_dual_core_demo/libraries/doc/version.txt
+++ b/Example/E13_dual_core_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E13_dual_core_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E13_dual_core_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E13_dual_core_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E13_dual_core_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_clock.c b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_clock.h b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_debug.c b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_debug.h b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_fifo.c b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_fifo.h b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_font.c b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_font.h b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_function.c b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_function.h b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_typedef.h b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E13_dual_core_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E13_dual_core_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E13_dual_core_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_config.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gnss.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gnss.c
new file mode 100644
index 0000000..caf7cd0
--- /dev/null
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gnss.c
@@ -0,0 +1,620 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "math.h"
+#include "zf_common_function.h"
+#include "zf_common_fifo.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_uart.h"
+
+#include "zf_device_gnss.h"
+
+#define GNSS_BUFFER_SIZE ( 128 )
+
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
+
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
+
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取指定 ',' 后面的索引
+// 参数说明 num 第几个逗号
+// 参数说明 *str 字符串
+// 返回参数 uint8 返回索引
+// 使用示例 get_parameter_index(1, s);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 get_parameter_index (uint8 num, char *str)
+{
+ uint8 i = 0, j = 0;
+ char *temp = strchr(str, '\n');
+ uint8 len = 0, len1 = 0;
+
+ if(NULL != temp)
+ {
+ len = (uint8)((uint32)temp - (uint32)str + 1);
+ }
+
+ for(i = 0; i < len; i ++)
+ {
+ if(',' == str[i])
+ {
+ j ++;
+ }
+ if(j == num)
+ {
+ len1 = i + 1;
+ break;
+ }
+ }
+
+ return len1;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static int get_int_number (char *s)
+{
+ char buf[10];
+ uint8 i = 0;
+ int return_value = 0;
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_int(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static float get_float_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ float return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = (float)func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
+// 参数说明 *s 字符串
+// 返回参数 double 返回数值
+// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static double get_double_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ double return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 世界时间转换为北京时间
+// 参数说明 *time 保存的时间
+// 返回参数 void
+// 使用示例 utc_to_btc(&gnss->time);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static void utc_to_btc (gps_time_struct *time)
+{
+ uint8 day_num = 0;
+
+ time->hour = time->hour + 8;
+ if(23 < time->hour)
+ {
+ time->hour -= 24;
+ time->day += 1;
+
+ if(2 == time->month)
+ {
+ day_num = 28;
+ if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
+ {
+ day_num ++; // 闰月 2月为29天
+ }
+ }
+ else
+ {
+ day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
+ if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
+ {
+ day_num = 30;
+ }
+ }
+
+ if(time->day > day_num)
+ {
+ time->day = 1;
+ time->month ++;
+ if(12 < time->month)
+ {
+ time->month -= 12;
+ time->year ++;
+ }
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 RMC语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0, temp = 0;
+
+ double latitude = 0; // 纬度
+ double longitude = 0; // 经度
+
+ double lati_cent_tmp = 0, lati_second_tmp = 0;
+ double long_cent_tmp = 0, long_second_tmp = 0;
+ float speed_tmp = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state) // 如果数据有效 则解析数据
+ {
+ return_state = 1;
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
+
+ latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
+ longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
+
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
+
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
+
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
+
+ speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
+ }
+
+ // 在定位没有生效前也是有时间数据的,可以直接解析
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ temp = get_parameter_index(9, buf);
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+
+ utc_to_btc(&gnss->time);
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GGA语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if(',' != state)
+ {
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ return_state = 1;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的距离
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回两点距离
+// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
+ double rad_latitude1 = 0;
+ double rad_latitude2 = 0;
+ double rad_longitude1 = 0;
+ double rad_longitude2 = 0;
+ double distance = 0;
+ double a = 0;
+ double b = 0;
+
+ rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
+ rad_latitude2 = ANGLE_TO_RAD(latitude2);
+ rad_longitude1 = ANGLE_TO_RAD(longitude1);
+ rad_longitude2 = ANGLE_TO_RAD(longitude2);
+
+ a = rad_latitude1 - rad_latitude2;
+ b = rad_longitude1 - rad_longitude2;
+
+ distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
+ distance = distance * EARTH_RADIUS;
+
+ return distance;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的方位角
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回方位角(0至360)
+// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ latitude1 = ANGLE_TO_RAD(latitude1);
+ latitude2 = ANGLE_TO_RAD(latitude2);
+ longitude1 = ANGLE_TO_RAD(longitude1);
+ longitude2 = ANGLE_TO_RAD(longitude2);
+
+ double x = sin(longitude2 - longitude1) * cos(latitude2);
+ double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
+ double angle = RAD_TO_ANGLE(atan2(x, y));
+ return ((0 < angle) ? angle : (angle + 360));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 解析GPS数据
+// 参数说明 void
+// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
+// 使用示例 gps_data_parse();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 gnss_data_parse (void)
+{
+ uint8 return_state = 0;
+ uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
+ uint8 bbc_xor_origin = 0;
+ uint8 bbc_xor_calculation = 0;
+ uint32 data_len = 0;
+
+ do
+ {
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+ for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_rmc_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
+ }
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_gga_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
+ }
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
+ }while(0);
+ return return_state;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS串口回调函数
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_uart_callback();
+// 备注信息 此函数需要在串口接收中断内进行调用
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_uart_callback (void)
+{
+ uint8 temp_gps[6];
+ uint32 temp_length = 0;
+
+
+
+
+ if(gnss_state)
+ {
+ uint8 dat;
+ while(uart_query_byte(GNSS_UART, &dat))
+ {
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
+ }
+
+ if('\n' == dat)
+ {
+ // 读取前6个数据 用于判断语句类型
+ temp_length = 6;
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
+ // 根据不同类型将数据拷贝到不同的缓冲区
+ if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
+ // 统一将FIFO清空
+ fifo_clear(&gnss_receiver_fifo);
+
+ gnss_flag = 1;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS初始化
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_init();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_init (gps_device_enum gps_device)
+{
+ const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
+ const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
+ const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
+
+ const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
+ const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
+ const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
+ const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
+ const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
+ const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
+ const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
+ const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
+ const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
+
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
+}
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gnss.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.c
deleted file mode 100644
index da46a99..0000000
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#include "math.h"
-#include "zf_common_function.h"
-#include "zf_common_fifo.h"
-#include "zf_driver_delay.h"
-#include "zf_driver_uart.h"
-
-#include "zf_device_gps_tau1201.h"
-
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
-
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
-
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
-
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 获取指定 ',' 后面的索引
-// 参数说明 num 第几个逗号
-// 参数说明 *str 字符串
-// 返回参数 uint8 返回索引
-// 使用示例 get_parameter_index(1, s);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 get_parameter_index (uint8 num, char *str)
-{
- uint8 i = 0, j = 0;
- char *temp = strchr(str, '\n');
- uint8 len = 0, len1 = 0;
-
- if(NULL != temp)
- {
- len = (uint8)((uint32)temp - (uint32)str + 1);
- }
-
- for(i = 0; i < len; i ++)
- {
- if(',' == str[i])
- {
- j ++;
- }
- if(j == num)
- {
- len1 = i + 1;
- break;
- }
- }
-
- return len1;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static int get_int_number (char *s)
-{
- char buf[10];
- uint8 i = 0;
- int return_value = 0;
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_int(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static float get_float_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- float return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = (float)func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
-// 参数说明 *s 字符串
-// 返回参数 double 返回数值
-// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static double get_double_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- double return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 世界时间转换为北京时间
-// 参数说明 *time 保存的时间
-// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static void utc_to_btc (gps_time_struct *time)
-{
- uint8 day_num = 0;
-
- time->hour = time->hour + 8;
- if(23 < time->hour)
- {
- time->hour -= 24;
- time->day += 1;
-
- if(2 == time->month)
- {
- day_num = 28;
- if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
- {
- day_num ++; // 闰月 2月为29天
- }
- }
- else
- {
- day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
- if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
- {
- day_num = 30;
- }
- }
-
- if(time->day > day_num)
- {
- time->day = 1;
- time->month ++;
- if(12 < time->month)
- {
- time->month -= 12;
- time->year ++;
- }
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 RMC语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0, temp = 0;
-
- double latitude = 0; // 纬度
- double longitude = 0; // 经度
-
- double lati_cent_tmp = 0, lati_second_tmp = 0;
- double long_cent_tmp = 0, long_second_tmp = 0;
- float speed_tmp = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- gps->state = 0;
- if('A' == state) // 如果数据有效 则解析数据
- {
- return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
-
- latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
- longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
-
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
-
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
-
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
-
- speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
- }
-
- // 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
- temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
-
- utc_to_btc(&gps->time);
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GGA语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- if(',' != state)
- {
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
- return_state = 1;
- }
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的距离
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回两点距离
-// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
- double rad_latitude1 = 0;
- double rad_latitude2 = 0;
- double rad_longitude1 = 0;
- double rad_longitude2 = 0;
- double distance = 0;
- double a = 0;
- double b = 0;
-
- rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
- rad_latitude2 = ANGLE_TO_RAD(latitude2);
- rad_longitude1 = ANGLE_TO_RAD(longitude1);
- rad_longitude2 = ANGLE_TO_RAD(longitude2);
-
- a = rad_latitude1 - rad_latitude2;
- b = rad_longitude1 - rad_longitude2;
-
- distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
-
- return distance;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的方位角
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回方位角(0至360)
-// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- latitude1 = ANGLE_TO_RAD(latitude1);
- latitude2 = ANGLE_TO_RAD(latitude2);
- longitude1 = ANGLE_TO_RAD(longitude1);
- longitude2 = ANGLE_TO_RAD(longitude2);
-
- double x = sin(longitude2 - longitude1) * cos(latitude2);
- double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
- double angle = RAD_TO_ANGLE(atan2(x, y));
- return ((0 < angle) ? angle : (angle + 360));
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 解析GPS数据
-// 参数说明 void
-// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
-// 使用示例 gps_data_parse();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
-{
- uint8 return_state = 0;
- uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
- uint8 bbc_xor_origin = 0;
- uint8 bbc_xor_calculation = 0;
- uint32 data_len = 0;
-
- do
- {
- if(GPS_STATE_RECEIVED == gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
- for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_rmc_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
- }
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
- {
- gps_gga_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
- for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_gga_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
- }
- gps_gga_state = GPS_STATE_RECEIVING;
-
- }while(0);
- return return_state;
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS串口回调函数
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_uart_callback();
-// 备注信息 此函数需要在串口接收中断内进行调用
-//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
-{
- uint8 temp_gps[6];
- uint32 temp_length = 0;
-
- if(gps_tau1201_state)
- {
- uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
- {
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
- }
-
- if('\n' == dat)
- {
- // 读取前6个数据 用于判断语句类型
- temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
- // 根据不同类型将数据拷贝到不同的缓冲区
- if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
- else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
- {
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
-
- // 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
-
- gps_tau1201_flag = 1;
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS初始化
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_init();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
-{
- const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
- const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
- const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
- const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
- const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
- const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
- const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
- const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
- const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
- const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
- const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
- const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
-
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
-}
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_oled.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_oled.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tft180.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tft180.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E13_dual_core_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E13_dual_core_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E13_dual_core_demo/user/isr.c b/Example/E13_dual_core_demo/user/isr.c
index 27171d2..9108ff0 100644
--- a/Example/E13_dual_core_demo/user/isr.c
+++ b/Example/E13_dual_core_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt b/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_clock.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_clock.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_debug.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_debug.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_fifo.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_fifo.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_font.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_font.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_function.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_function.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_typedef.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_config.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gnss.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gnss.c
new file mode 100644
index 0000000..caf7cd0
--- /dev/null
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gnss.c
@@ -0,0 +1,620 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "math.h"
+#include "zf_common_function.h"
+#include "zf_common_fifo.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_uart.h"
+
+#include "zf_device_gnss.h"
+
+#define GNSS_BUFFER_SIZE ( 128 )
+
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
+
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
+
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取指定 ',' 后面的索引
+// 参数说明 num 第几个逗号
+// 参数说明 *str 字符串
+// 返回参数 uint8 返回索引
+// 使用示例 get_parameter_index(1, s);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 get_parameter_index (uint8 num, char *str)
+{
+ uint8 i = 0, j = 0;
+ char *temp = strchr(str, '\n');
+ uint8 len = 0, len1 = 0;
+
+ if(NULL != temp)
+ {
+ len = (uint8)((uint32)temp - (uint32)str + 1);
+ }
+
+ for(i = 0; i < len; i ++)
+ {
+ if(',' == str[i])
+ {
+ j ++;
+ }
+ if(j == num)
+ {
+ len1 = i + 1;
+ break;
+ }
+ }
+
+ return len1;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static int get_int_number (char *s)
+{
+ char buf[10];
+ uint8 i = 0;
+ int return_value = 0;
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_int(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static float get_float_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ float return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = (float)func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
+// 参数说明 *s 字符串
+// 返回参数 double 返回数值
+// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static double get_double_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ double return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 世界时间转换为北京时间
+// 参数说明 *time 保存的时间
+// 返回参数 void
+// 使用示例 utc_to_btc(&gnss->time);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static void utc_to_btc (gps_time_struct *time)
+{
+ uint8 day_num = 0;
+
+ time->hour = time->hour + 8;
+ if(23 < time->hour)
+ {
+ time->hour -= 24;
+ time->day += 1;
+
+ if(2 == time->month)
+ {
+ day_num = 28;
+ if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
+ {
+ day_num ++; // 闰月 2月为29天
+ }
+ }
+ else
+ {
+ day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
+ if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
+ {
+ day_num = 30;
+ }
+ }
+
+ if(time->day > day_num)
+ {
+ time->day = 1;
+ time->month ++;
+ if(12 < time->month)
+ {
+ time->month -= 12;
+ time->year ++;
+ }
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 RMC语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0, temp = 0;
+
+ double latitude = 0; // 纬度
+ double longitude = 0; // 经度
+
+ double lati_cent_tmp = 0, lati_second_tmp = 0;
+ double long_cent_tmp = 0, long_second_tmp = 0;
+ float speed_tmp = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state) // 如果数据有效 则解析数据
+ {
+ return_state = 1;
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
+
+ latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
+ longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
+
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
+
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
+
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
+
+ speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
+ }
+
+ // 在定位没有生效前也是有时间数据的,可以直接解析
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ temp = get_parameter_index(9, buf);
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+
+ utc_to_btc(&gnss->time);
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GGA语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if(',' != state)
+ {
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ return_state = 1;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的距离
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回两点距离
+// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
+ double rad_latitude1 = 0;
+ double rad_latitude2 = 0;
+ double rad_longitude1 = 0;
+ double rad_longitude2 = 0;
+ double distance = 0;
+ double a = 0;
+ double b = 0;
+
+ rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
+ rad_latitude2 = ANGLE_TO_RAD(latitude2);
+ rad_longitude1 = ANGLE_TO_RAD(longitude1);
+ rad_longitude2 = ANGLE_TO_RAD(longitude2);
+
+ a = rad_latitude1 - rad_latitude2;
+ b = rad_longitude1 - rad_longitude2;
+
+ distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
+ distance = distance * EARTH_RADIUS;
+
+ return distance;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的方位角
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回方位角(0至360)
+// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ latitude1 = ANGLE_TO_RAD(latitude1);
+ latitude2 = ANGLE_TO_RAD(latitude2);
+ longitude1 = ANGLE_TO_RAD(longitude1);
+ longitude2 = ANGLE_TO_RAD(longitude2);
+
+ double x = sin(longitude2 - longitude1) * cos(latitude2);
+ double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
+ double angle = RAD_TO_ANGLE(atan2(x, y));
+ return ((0 < angle) ? angle : (angle + 360));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 解析GPS数据
+// 参数说明 void
+// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
+// 使用示例 gps_data_parse();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 gnss_data_parse (void)
+{
+ uint8 return_state = 0;
+ uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
+ uint8 bbc_xor_origin = 0;
+ uint8 bbc_xor_calculation = 0;
+ uint32 data_len = 0;
+
+ do
+ {
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+ for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_rmc_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
+ }
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_gga_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
+ }
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
+ }while(0);
+ return return_state;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS串口回调函数
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_uart_callback();
+// 备注信息 此函数需要在串口接收中断内进行调用
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_uart_callback (void)
+{
+ uint8 temp_gps[6];
+ uint32 temp_length = 0;
+
+
+
+
+ if(gnss_state)
+ {
+ uint8 dat;
+ while(uart_query_byte(GNSS_UART, &dat))
+ {
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
+ }
+
+ if('\n' == dat)
+ {
+ // 读取前6个数据 用于判断语句类型
+ temp_length = 6;
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
+ // 根据不同类型将数据拷贝到不同的缓冲区
+ if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
+ // 统一将FIFO清空
+ fifo_clear(&gnss_receiver_fifo);
+
+ gnss_flag = 1;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS初始化
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_init();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_init (gps_device_enum gps_device)
+{
+ const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
+ const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
+ const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
+
+ const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
+ const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
+ const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
+ const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
+ const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
+ const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
+ const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
+ const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
+ const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
+
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
+}
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gnss.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.c
deleted file mode 100644
index da46a99..0000000
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#include "math.h"
-#include "zf_common_function.h"
-#include "zf_common_fifo.h"
-#include "zf_driver_delay.h"
-#include "zf_driver_uart.h"
-
-#include "zf_device_gps_tau1201.h"
-
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
-
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
-
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
-
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 获取指定 ',' 后面的索引
-// 参数说明 num 第几个逗号
-// 参数说明 *str 字符串
-// 返回参数 uint8 返回索引
-// 使用示例 get_parameter_index(1, s);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 get_parameter_index (uint8 num, char *str)
-{
- uint8 i = 0, j = 0;
- char *temp = strchr(str, '\n');
- uint8 len = 0, len1 = 0;
-
- if(NULL != temp)
- {
- len = (uint8)((uint32)temp - (uint32)str + 1);
- }
-
- for(i = 0; i < len; i ++)
- {
- if(',' == str[i])
- {
- j ++;
- }
- if(j == num)
- {
- len1 = i + 1;
- break;
- }
- }
-
- return len1;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static int get_int_number (char *s)
-{
- char buf[10];
- uint8 i = 0;
- int return_value = 0;
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_int(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static float get_float_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- float return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = (float)func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
-// 参数说明 *s 字符串
-// 返回参数 double 返回数值
-// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static double get_double_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- double return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 世界时间转换为北京时间
-// 参数说明 *time 保存的时间
-// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static void utc_to_btc (gps_time_struct *time)
-{
- uint8 day_num = 0;
-
- time->hour = time->hour + 8;
- if(23 < time->hour)
- {
- time->hour -= 24;
- time->day += 1;
-
- if(2 == time->month)
- {
- day_num = 28;
- if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
- {
- day_num ++; // 闰月 2月为29天
- }
- }
- else
- {
- day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
- if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
- {
- day_num = 30;
- }
- }
-
- if(time->day > day_num)
- {
- time->day = 1;
- time->month ++;
- if(12 < time->month)
- {
- time->month -= 12;
- time->year ++;
- }
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 RMC语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0, temp = 0;
-
- double latitude = 0; // 纬度
- double longitude = 0; // 经度
-
- double lati_cent_tmp = 0, lati_second_tmp = 0;
- double long_cent_tmp = 0, long_second_tmp = 0;
- float speed_tmp = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- gps->state = 0;
- if('A' == state) // 如果数据有效 则解析数据
- {
- return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
-
- latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
- longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
-
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
-
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
-
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
-
- speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
- }
-
- // 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
- temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
-
- utc_to_btc(&gps->time);
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GGA语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- if(',' != state)
- {
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
- return_state = 1;
- }
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的距离
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回两点距离
-// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
- double rad_latitude1 = 0;
- double rad_latitude2 = 0;
- double rad_longitude1 = 0;
- double rad_longitude2 = 0;
- double distance = 0;
- double a = 0;
- double b = 0;
-
- rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
- rad_latitude2 = ANGLE_TO_RAD(latitude2);
- rad_longitude1 = ANGLE_TO_RAD(longitude1);
- rad_longitude2 = ANGLE_TO_RAD(longitude2);
-
- a = rad_latitude1 - rad_latitude2;
- b = rad_longitude1 - rad_longitude2;
-
- distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
-
- return distance;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的方位角
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回方位角(0至360)
-// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- latitude1 = ANGLE_TO_RAD(latitude1);
- latitude2 = ANGLE_TO_RAD(latitude2);
- longitude1 = ANGLE_TO_RAD(longitude1);
- longitude2 = ANGLE_TO_RAD(longitude2);
-
- double x = sin(longitude2 - longitude1) * cos(latitude2);
- double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
- double angle = RAD_TO_ANGLE(atan2(x, y));
- return ((0 < angle) ? angle : (angle + 360));
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 解析GPS数据
-// 参数说明 void
-// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
-// 使用示例 gps_data_parse();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
-{
- uint8 return_state = 0;
- uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
- uint8 bbc_xor_origin = 0;
- uint8 bbc_xor_calculation = 0;
- uint32 data_len = 0;
-
- do
- {
- if(GPS_STATE_RECEIVED == gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
- for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_rmc_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
- }
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
- {
- gps_gga_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
- for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_gga_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
- }
- gps_gga_state = GPS_STATE_RECEIVING;
-
- }while(0);
- return return_state;
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS串口回调函数
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_uart_callback();
-// 备注信息 此函数需要在串口接收中断内进行调用
-//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
-{
- uint8 temp_gps[6];
- uint32 temp_length = 0;
-
- if(gps_tau1201_state)
- {
- uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
- {
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
- }
-
- if('\n' == dat)
- {
- // 读取前6个数据 用于判断语句类型
- temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
- // 根据不同类型将数据拷贝到不同的缓冲区
- if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
- else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
- {
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
-
- // 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
-
- gps_tau1201_flag = 1;
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS初始化
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_init();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
-{
- const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
- const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
- const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
- const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
- const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
- const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
- const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
- const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
- const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
- const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
- const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
- const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
-
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
-}
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_oled.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_oled.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tft180.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tft180.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E14_specifies_variable_or_code_location_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E14_specifies_variable_or_code_location_demo/user/isr.c b/Example/E14_specifies_variable_or_code_location_demo/user/isr.c
index 27171d2..9108ff0 100644
--- a/Example/E14_specifies_variable_or_code_location_demo/user/isr.c
+++ b/Example/E14_specifies_variable_or_code_location_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Example/E15_fft_demo/.cproject b/Example/E15_fft_demo/.cproject
index 7d34c88..a823b48 100644
--- a/Example/E15_fft_demo/.cproject
+++ b/Example/E15_fft_demo/.cproject
@@ -108,12 +108,19 @@
+
+
-
+
@@ -147,7 +154,7 @@
-
-
diff --git a/Example/E15_fft_demo/libraries/doc/version.txt b/Example/E15_fft_demo/libraries/doc/version.txt
index b841b50..d644136 100644
--- a/Example/E15_fft_demo/libraries/doc/version.txt
+++ b/Example/E15_fft_demo/libraries/doc/version.txt
@@ -1,3 +1,8 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
+
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Example/E15_fft_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Example/E15_fft_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Example/E15_fft_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Example/E15_fft_demo/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_clock.c b/Example/E15_fft_demo/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_clock.c
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_clock.h b/Example/E15_fft_demo/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_clock.h
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_debug.c b/Example/E15_fft_demo/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_debug.c
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_debug.h b/Example/E15_fft_demo/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_debug.h
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_fifo.c b/Example/E15_fft_demo/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_fifo.c
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_fifo.h b/Example/E15_fft_demo/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_fifo.h
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_font.c b/Example/E15_fft_demo/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_font.c
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_font.h b/Example/E15_fft_demo/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_font.h
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_function.c b/Example/E15_fft_demo/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_function.c
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_function.h b/Example/E15_fft_demo/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_function.h
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_headfile.h b/Example/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_interrupt.c b/Example/E15_fft_demo/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_interrupt.c
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_interrupt.h b/Example/E15_fft_demo/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_interrupt.h
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_common/zf_common_typedef.h b/Example/E15_fft_demo/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Example/E15_fft_demo/libraries/zf_common/zf_common_typedef.h
+++ b/Example/E15_fft_demo/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.c b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.c
+++ b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.h b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.h
+++ b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Example/E15_fft_demo/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_config.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_config.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1a.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1a.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1a.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1a.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1b.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1b.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1b.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1b.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_gnss.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_gnss.c
new file mode 100644
index 0000000..caf7cd0
--- /dev/null
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_gnss.c
@@ -0,0 +1,620 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "math.h"
+#include "zf_common_function.h"
+#include "zf_common_fifo.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_uart.h"
+
+#include "zf_device_gnss.h"
+
+#define GNSS_BUFFER_SIZE ( 128 )
+
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
+
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
+
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取指定 ',' 后面的索引
+// 参数说明 num 第几个逗号
+// 参数说明 *str 字符串
+// 返回参数 uint8 返回索引
+// 使用示例 get_parameter_index(1, s);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 get_parameter_index (uint8 num, char *str)
+{
+ uint8 i = 0, j = 0;
+ char *temp = strchr(str, '\n');
+ uint8 len = 0, len1 = 0;
+
+ if(NULL != temp)
+ {
+ len = (uint8)((uint32)temp - (uint32)str + 1);
+ }
+
+ for(i = 0; i < len; i ++)
+ {
+ if(',' == str[i])
+ {
+ j ++;
+ }
+ if(j == num)
+ {
+ len1 = i + 1;
+ break;
+ }
+ }
+
+ return len1;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static int get_int_number (char *s)
+{
+ char buf[10];
+ uint8 i = 0;
+ int return_value = 0;
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_int(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static float get_float_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ float return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = (float)func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
+// 参数说明 *s 字符串
+// 返回参数 double 返回数值
+// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static double get_double_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ double return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 世界时间转换为北京时间
+// 参数说明 *time 保存的时间
+// 返回参数 void
+// 使用示例 utc_to_btc(&gnss->time);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static void utc_to_btc (gps_time_struct *time)
+{
+ uint8 day_num = 0;
+
+ time->hour = time->hour + 8;
+ if(23 < time->hour)
+ {
+ time->hour -= 24;
+ time->day += 1;
+
+ if(2 == time->month)
+ {
+ day_num = 28;
+ if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
+ {
+ day_num ++; // 闰月 2月为29天
+ }
+ }
+ else
+ {
+ day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
+ if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
+ {
+ day_num = 30;
+ }
+ }
+
+ if(time->day > day_num)
+ {
+ time->day = 1;
+ time->month ++;
+ if(12 < time->month)
+ {
+ time->month -= 12;
+ time->year ++;
+ }
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 RMC语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0, temp = 0;
+
+ double latitude = 0; // 纬度
+ double longitude = 0; // 经度
+
+ double lati_cent_tmp = 0, lati_second_tmp = 0;
+ double long_cent_tmp = 0, long_second_tmp = 0;
+ float speed_tmp = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state) // 如果数据有效 则解析数据
+ {
+ return_state = 1;
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
+
+ latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
+ longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
+
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
+
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
+
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
+
+ speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
+ }
+
+ // 在定位没有生效前也是有时间数据的,可以直接解析
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ temp = get_parameter_index(9, buf);
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+
+ utc_to_btc(&gnss->time);
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GGA语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if(',' != state)
+ {
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ return_state = 1;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的距离
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回两点距离
+// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
+ double rad_latitude1 = 0;
+ double rad_latitude2 = 0;
+ double rad_longitude1 = 0;
+ double rad_longitude2 = 0;
+ double distance = 0;
+ double a = 0;
+ double b = 0;
+
+ rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
+ rad_latitude2 = ANGLE_TO_RAD(latitude2);
+ rad_longitude1 = ANGLE_TO_RAD(longitude1);
+ rad_longitude2 = ANGLE_TO_RAD(longitude2);
+
+ a = rad_latitude1 - rad_latitude2;
+ b = rad_longitude1 - rad_longitude2;
+
+ distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
+ distance = distance * EARTH_RADIUS;
+
+ return distance;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的方位角
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回方位角(0至360)
+// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ latitude1 = ANGLE_TO_RAD(latitude1);
+ latitude2 = ANGLE_TO_RAD(latitude2);
+ longitude1 = ANGLE_TO_RAD(longitude1);
+ longitude2 = ANGLE_TO_RAD(longitude2);
+
+ double x = sin(longitude2 - longitude1) * cos(latitude2);
+ double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
+ double angle = RAD_TO_ANGLE(atan2(x, y));
+ return ((0 < angle) ? angle : (angle + 360));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 解析GPS数据
+// 参数说明 void
+// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
+// 使用示例 gps_data_parse();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 gnss_data_parse (void)
+{
+ uint8 return_state = 0;
+ uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
+ uint8 bbc_xor_origin = 0;
+ uint8 bbc_xor_calculation = 0;
+ uint32 data_len = 0;
+
+ do
+ {
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+ for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_rmc_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
+ }
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_gga_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
+ }
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
+ }while(0);
+ return return_state;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS串口回调函数
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_uart_callback();
+// 备注信息 此函数需要在串口接收中断内进行调用
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_uart_callback (void)
+{
+ uint8 temp_gps[6];
+ uint32 temp_length = 0;
+
+
+
+
+ if(gnss_state)
+ {
+ uint8 dat;
+ while(uart_query_byte(GNSS_UART, &dat))
+ {
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
+ }
+
+ if('\n' == dat)
+ {
+ // 读取前6个数据 用于判断语句类型
+ temp_length = 6;
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
+ // 根据不同类型将数据拷贝到不同的缓冲区
+ if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
+ // 统一将FIFO清空
+ fifo_clear(&gnss_receiver_fifo);
+
+ gnss_flag = 1;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS初始化
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_init();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_init (gps_device_enum gps_device)
+{
+ const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
+ const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
+ const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
+
+ const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
+ const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
+ const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
+ const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
+ const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
+ const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
+ const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
+ const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
+ const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
+
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
+}
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_gnss.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.c
deleted file mode 100644
index da46a99..0000000
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#include "math.h"
-#include "zf_common_function.h"
-#include "zf_common_fifo.h"
-#include "zf_driver_delay.h"
-#include "zf_driver_uart.h"
-
-#include "zf_device_gps_tau1201.h"
-
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
-
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
-
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
-
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 获取指定 ',' 后面的索引
-// 参数说明 num 第几个逗号
-// 参数说明 *str 字符串
-// 返回参数 uint8 返回索引
-// 使用示例 get_parameter_index(1, s);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 get_parameter_index (uint8 num, char *str)
-{
- uint8 i = 0, j = 0;
- char *temp = strchr(str, '\n');
- uint8 len = 0, len1 = 0;
-
- if(NULL != temp)
- {
- len = (uint8)((uint32)temp - (uint32)str + 1);
- }
-
- for(i = 0; i < len; i ++)
- {
- if(',' == str[i])
- {
- j ++;
- }
- if(j == num)
- {
- len1 = i + 1;
- break;
- }
- }
-
- return len1;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static int get_int_number (char *s)
-{
- char buf[10];
- uint8 i = 0;
- int return_value = 0;
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_int(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static float get_float_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- float return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = (float)func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
-// 参数说明 *s 字符串
-// 返回参数 double 返回数值
-// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static double get_double_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- double return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 世界时间转换为北京时间
-// 参数说明 *time 保存的时间
-// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static void utc_to_btc (gps_time_struct *time)
-{
- uint8 day_num = 0;
-
- time->hour = time->hour + 8;
- if(23 < time->hour)
- {
- time->hour -= 24;
- time->day += 1;
-
- if(2 == time->month)
- {
- day_num = 28;
- if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
- {
- day_num ++; // 闰月 2月为29天
- }
- }
- else
- {
- day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
- if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
- {
- day_num = 30;
- }
- }
-
- if(time->day > day_num)
- {
- time->day = 1;
- time->month ++;
- if(12 < time->month)
- {
- time->month -= 12;
- time->year ++;
- }
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 RMC语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0, temp = 0;
-
- double latitude = 0; // 纬度
- double longitude = 0; // 经度
-
- double lati_cent_tmp = 0, lati_second_tmp = 0;
- double long_cent_tmp = 0, long_second_tmp = 0;
- float speed_tmp = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- gps->state = 0;
- if('A' == state) // 如果数据有效 则解析数据
- {
- return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
-
- latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
- longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
-
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
-
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
-
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
-
- speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
- }
-
- // 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
- temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
-
- utc_to_btc(&gps->time);
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GGA语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- if(',' != state)
- {
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
- return_state = 1;
- }
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的距离
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回两点距离
-// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
- double rad_latitude1 = 0;
- double rad_latitude2 = 0;
- double rad_longitude1 = 0;
- double rad_longitude2 = 0;
- double distance = 0;
- double a = 0;
- double b = 0;
-
- rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
- rad_latitude2 = ANGLE_TO_RAD(latitude2);
- rad_longitude1 = ANGLE_TO_RAD(longitude1);
- rad_longitude2 = ANGLE_TO_RAD(longitude2);
-
- a = rad_latitude1 - rad_latitude2;
- b = rad_longitude1 - rad_longitude2;
-
- distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
-
- return distance;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的方位角
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回方位角(0至360)
-// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- latitude1 = ANGLE_TO_RAD(latitude1);
- latitude2 = ANGLE_TO_RAD(latitude2);
- longitude1 = ANGLE_TO_RAD(longitude1);
- longitude2 = ANGLE_TO_RAD(longitude2);
-
- double x = sin(longitude2 - longitude1) * cos(latitude2);
- double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
- double angle = RAD_TO_ANGLE(atan2(x, y));
- return ((0 < angle) ? angle : (angle + 360));
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 解析GPS数据
-// 参数说明 void
-// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
-// 使用示例 gps_data_parse();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
-{
- uint8 return_state = 0;
- uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
- uint8 bbc_xor_origin = 0;
- uint8 bbc_xor_calculation = 0;
- uint32 data_len = 0;
-
- do
- {
- if(GPS_STATE_RECEIVED == gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
- for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_rmc_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
- }
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
- {
- gps_gga_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
- for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_gga_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
- }
- gps_gga_state = GPS_STATE_RECEIVING;
-
- }while(0);
- return return_state;
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS串口回调函数
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_uart_callback();
-// 备注信息 此函数需要在串口接收中断内进行调用
-//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
-{
- uint8 temp_gps[6];
- uint32 temp_length = 0;
-
- if(gps_tau1201_state)
- {
- uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
- {
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
- }
-
- if('\n' == dat)
- {
- // 读取前6个数据 用于判断语句类型
- temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
- // 根据不同类型将数据拷贝到不同的缓冲区
- if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
- else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
- {
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
-
- // 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
-
- gps_tau1201_flag = 1;
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS初始化
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_init();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
-{
- const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
- const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
- const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
- const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
- const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
- const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
- const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
- const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
- const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
- const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
- const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
- const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
-
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
-}
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_icm20602.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_icm20602.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_icm20602.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_icm20602.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_imu660ra.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_imu660ra.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_imu660ra.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_imu660ra.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_imu963ra.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_imu963ra.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_imu963ra.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_imu963ra.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_ips114.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_ips114.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_ips114.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_ips114.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_ips200.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_ips200.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_ips200.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_ips200.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_key.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_key.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_key.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_key.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_mpu6050.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_mpu6050.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_mpu6050.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_mpu6050.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_mt9v03x.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_mt9v03x.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_oled.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_oled.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_oled.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_oled.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_ov7725.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_ov7725.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_ov7725.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_ov7725.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_scc8660.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_scc8660.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_tft180.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_tft180.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_tft180.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_tft180.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_tsl1401.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_tsl1401.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_tsl1401.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_tsl1401.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_type.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_type.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_type.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_type.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_wireless_uart.c b/Example/E15_fft_demo/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Example/E15_fft_demo/libraries/zf_device/zf_device_wireless_uart.h b/Example/E15_fft_demo/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Example/E15_fft_demo/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Example/E15_fft_demo/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_adc.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_adc.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_adc.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_adc.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_exti.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_exti.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_exti.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_exti.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_gpio.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_gpio.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_gpio.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_gpio.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pit.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pit.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pit.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pit.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pwm.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pwm.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pwm.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pwm.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_iic.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_iic.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_spi.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_spi.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_spi.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_spi.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_spi.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_spi.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_timer.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_timer.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_timer.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_timer.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_uart.c b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_uart.c
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_uart.h b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Example/E15_fft_demo/libraries/zf_driver/zf_driver_uart.h
+++ b/Example/E15_fft_demo/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Example/E15_fft_demo/user/cpu0_main.c b/Example/E15_fft_demo/user/cpu0_main.c
index 51bc0f2..deeb201 100644
--- a/Example/E15_fft_demo/user/cpu0_main.c
+++ b/Example/E15_fft_demo/user/cpu0_main.c
@@ -39,17 +39,13 @@
#define SAMPLE_FREQUENCY (0.01) // 定义采样频率 单位: 秒
-#define SIZE_N (2000) // 定义采集数量
+#define SIZE_N (1024) // 定义采集数量
cfloat32 fft_in [SIZE_N];
cfloat32 fft_out[SIZE_N];
uint32 use_time;
-
-
-
-
float x1, x2;
// **************************** 代码区域 ****************************
@@ -59,28 +55,25 @@ int core0_main(void)
debug_init(); // 初始化默认调试串口
// 此处编写用户代码 例如外设初始化代码等
- for (int i = 0; i < SIZE_N; i ++) // 生成输入信号
- {
- // 计算 x
- x1 = 3 * IFX_PI * (float)i * SAMPLE_FREQUENCY;
- x2 = (7 * IFX_PI * (float)i * SAMPLE_FREQUENCY) + (IFX_PI / 2);
-
- // 代入x计算y
- // 函数为 y = 1024*(cos(3 * pi * x)) + 512 * (cos(7 * pi * x) + pi / 2) + 2047
- fft_in[i].real = (float32)(1024 * cosf(x1) + 512 * cosf(x2) + 2047);
- fft_in[i].imag = 0.0;
+ for(int i = 0; i < SIZE_N; i++){
+ fft_in[i].real = i * 0.1024;
+ fft_in[i].imag = 0;
}
+ system_start(); // 开始计时
+ Ifx_FftF32_radix2(fft_out, fft_in, SIZE_N); // 进行FFT运算 Ifx_FftF32_radix2I 为IFT(FFT逆变换)运算
+ use_time = system_getval_us(); // 获取计时时间
+ printf("use_time: %ldus\n", use_time); // 将结果通过串口打印, 打印fft一次耗时多久
+// for(int i = 0; i < SIZE_N; i++){
+// printf("%f\r\n", fft_out[i].real);
+// }
// 此处编写用户代码 例如外设初始化代码等
cpu_wait_event_ready(); // 等待所有核心初始化完毕
while (TRUE)
{
// 此处编写需要循环执行的代码
- system_start(); // 开始计时
- Ifx_FftF32_radix2(fft_out, fft_in, SIZE_N); // 进行FFT运算 Ifx_FftF32_radix2I 为IFT(FFT逆变换)运算
- use_time = system_getval_us(); // 获取计时时间
- printf("use_time: %ldus\n", use_time); // 将结果通过串口打印, 打印fft一次耗时多久
+
// 此处编写需要循环执行的代码
}
diff --git a/Example/E15_fft_demo/user/isr.c b/Example/E15_fft_demo/user/isr.c
index 27171d2..9108ff0 100644
--- a/Example/E15_fft_demo/user/isr.c
+++ b/Example/E15_fft_demo/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,7 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
+
}
}
diff --git a/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt b/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt
index b841b50..c10dc6f 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt
+++ b/Seekfree_TC264_Opensource_Library/libraries/doc/version.txt
@@ -1,3 +1,7 @@
+V3.2.6
+ 更新逐飞助手接口函数 调用初始化时直接传参通信类
+ 更新wifi SPI驱动文件 提高通信效率
+ 更新GPS驱动文件,更名为GNSS,兼容普通定位模块及RTK
V3.2.5
修复延时函数初始化参数及中断向量表问题
V3.2.4
diff --git a/Seekfree_TC264_Opensource_Library/libraries/infineon_libraries/Configurations/Ifx_Cfg.h b/Seekfree_TC264_Opensource_Library/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
index 28ff689..371e6b6 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/infineon_libraries/Configurations/Ifx_Cfg.h
@@ -34,7 +34,7 @@
/*------------------------------------------Configuration for IfxScu_cfg.h-------------------------------------------*/
/*********************************************************************************************************************/
/* External oscillator frequency in Hz */
-#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are: 16000000, 20000000 or 40000000 */
+#define IFX_CFG_SCU_XTAL_FREQUENCY (20000000) /* Allowed values are9p: 16000000, 20000000 or 40000000 */
/* PLL frequency in Hz */
#define IFX_CFG_SCU_PLL_FREQUENCY (200000000) /* Allowed values are: 80000000, 133000000, 160000000
* or 200000000 */
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_clock.c b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_clock.c
index 5023270..9872ea9 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_clock.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_clock.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_clock.h b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_clock.h
index 9face65..2b50396 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_clock.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_clock.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_clock
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_debug.c b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_debug.c
index 52c623d..d680265 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_debug.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_debug.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -46,7 +46,7 @@ static volatile uint8 zf_debug_assert_enable = 1;
#if DEBUG_UART_USE_INTERRUPT // 如果启用 debug uart 接收中断
uint8 debug_uart_buffer[DEBUG_RING_BUFFER_LEN]; // 数据存放数组
uint8 debug_uart_data;
-fifo_obj_struct debug_uart_fifo;
+fifo_struct debug_uart_fifo;
#endif
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_debug.h b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_debug.h
index 881a297..4fb4d91 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_debug.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_debug.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_debug
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_fifo.c b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_fifo.c
index b010d3e..94f5133 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_fifo.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_fifo.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
// 使用示例 fifo_head_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_head_offset (fifo_struct *fifo, uint32 offset)
{
fifo->head += offset;
@@ -63,7 +63,7 @@ static void fifo_head_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_end_offset(fifo, 1);
// 备注信息 本函数在文件内部调用 用户不用关注 也不可修改
//-------------------------------------------------------------------------------------------------------------------
-static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
+static void fifo_end_offset (fifo_struct *fifo, uint32 offset)
{
fifo->end += offset;
@@ -80,7 +80,7 @@ static void fifo_end_offset (fifo_obj_struct *fifo, uint32 offset)
// 使用示例 fifo_clear(fifo);
// 备注信息 清空当前 FIFO 对象的内存
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
+fifo_state_enum fifo_clear (fifo_struct *fifo)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -113,7 +113,7 @@ fifo_state_enum fifo_clear (fifo_obj_struct *fifo)
// 使用示例 uint32 len = fifo_used(fifo);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 fifo_used (fifo_obj_struct *fifo)
+uint32 fifo_used (fifo_struct *fifo)
{
zf_assert(fifo != NULL);
return (fifo->max - fifo->size); // 返回当前 FIFO 缓冲区中数据个数
@@ -127,7 +127,7 @@ uint32 fifo_used (fifo_obj_struct *fifo)
// 使用示例 zf_log(fifo_write_element(&fifo, data) == FIFO_SUCCESS, "fifo_write_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -171,7 +171,7 @@ fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat)
// 使用示例 zf_log(fifo_write_buffer(&fifo, data, 32) == FIFO_SUCCESS, "fifo_write_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length)
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -286,7 +286,7 @@ fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 leng
// 使用示例 zf_log(fifo_read_element(&fifo, data, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_byte error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag)
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS; // 操作结果初值
@@ -348,7 +348,7 @@ fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operat
// 使用示例 zf_log(fifo_read_buffer(&fifo, data, &length, FIFO_READ_ONLY) == FIFO_SUCCESS, "fifo_read_buffer error");
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -447,7 +447,7 @@ fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *leng
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
// 如果使用 FIFO_READ_AND_CLEAN 操作 将会丢弃所有数据并清空整个 FIFO
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag)
{
zf_assert(NULL != fifo);
zf_assert(NULL != length);
@@ -541,7 +541,7 @@ fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32
// 使用示例 fifo_init(&user_fifo, user_buffer, 64);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size)
{
zf_assert(NULL != fifo);
fifo_state_enum return_state = FIFO_SUCCESS;
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_fifo.h b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_fifo.h
index 5cc7668..901a913 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_fifo.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_fifo.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_fifo
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -91,17 +91,17 @@ typedef struct
uint32 end; // 缓存尾指针 总是指向非空缓存(缓存全空除外)
uint32 size; // 缓存剩余大小
uint32 max; // 缓存总大小
-}fifo_obj_struct;
+}fifo_struct;
-fifo_state_enum fifo_clear (fifo_obj_struct *fifo);
-uint32 fifo_used (fifo_obj_struct *fifo);
+fifo_state_enum fifo_clear (fifo_struct *fifo);
+uint32 fifo_used (fifo_struct *fifo);
-fifo_state_enum fifo_write_element (fifo_obj_struct *fifo, uint32 dat);
-fifo_state_enum fifo_write_buffer (fifo_obj_struct *fifo, void *dat, uint32 length);
-fifo_state_enum fifo_read_element (fifo_obj_struct *fifo, void *dat, fifo_operation_enum flag);
-fifo_state_enum fifo_read_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_read_tail_buffer (fifo_obj_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_write_element (fifo_struct *fifo, uint32 dat);
+fifo_state_enum fifo_write_buffer (fifo_struct *fifo, void *dat, uint32 length);
+fifo_state_enum fifo_read_element (fifo_struct *fifo, void *dat, fifo_operation_enum flag);
+fifo_state_enum fifo_read_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
+fifo_state_enum fifo_read_tail_buffer (fifo_struct *fifo, void *dat, uint32 *length, fifo_operation_enum flag);
-fifo_state_enum fifo_init (fifo_obj_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
+fifo_state_enum fifo_init (fifo_struct *fifo, fifo_data_type_enum type, void *buffer_addr, uint32 size);
#endif
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_font.c b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_font.c
index c816f9d..ee1df09 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_font.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_font.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_font.h b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_font.h
index 24b8602..7531250 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_font.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_font.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_font
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_function.c b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_function.c
index d403fb5..acf2739 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_function.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_function.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_function.h b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_function.h
index f5683e1..101b58a 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_function.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_function.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_function
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h
index aa06ef8..86762db 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_headfile.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_headfile
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -82,7 +82,7 @@
//===================================================外接设备驱动层===================================================
#include "zf_device_absolute_encoder.h"
#include "zf_device_bluetooth_ch9141.h"
-#include "zf_device_gps_tau1201.h"
+#include "zf_device_gnss.h"
#include "zf_device_camera.h"
#include "zf_device_dl1a.h"
#include "zf_device_dl1b.h"
@@ -108,6 +108,7 @@
//====================================================应用组件层====================================================
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
//====================================================应用组件层====================================================
//=====================================================用户层======================================================
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_interrupt.c b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_interrupt.c
index 61058b2..af12fe0 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_interrupt.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_interrupt.c
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_interrupt.h b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_interrupt.h
index 99b0e53..f828423 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_interrupt.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_interrupt.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_interrupt
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_typedef.h b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_typedef.h
index bd09f30..9a07c92 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_typedef.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_common/zf_common_typedef.h
@@ -24,7 +24,7 @@
* 文件名称 zf_common_typedef
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c
index a196e10..0b7cb9d 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.c
@@ -1,49 +1,71 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
-#include "zf_common_fifo.h"
+
+#include "zf_common_debug.h"
+
#include "seekfree_assistant.h"
-seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
-static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
-static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
-static fifo_obj_struct seekfree_assistant_fifo;
-static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // 数据存放数组
-float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
-vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
+extern uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
+extern uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
+
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
+#include "zf_common_fifo.h"
+static uint8 seekfree_assistant_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE]; // FIFO缓冲区
+static fifo_struct seekfree_assistant_fifo = // FIFO结构体
+{
+ .buffer = seekfree_assistant_buffer,
+ .execution = FIFO_IDLE,
+ .type = FIFO_DATA_8BIT,
+ .head = 0,
+ .end = 0,
+ .size = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+ .max = SEEKFREE_ASSISTANT_BUFFER_SIZE,
+};
+#endif
+
+static seekfree_assistant_camera_struct seekfree_assistant_camera_data; // 图像上位机协议数据
+static seekfree_assistant_camera_dot_struct seekfree_assistant_camera_dot_data; // 图像上位机打点协议数据
+static seekfree_assistant_camera_buffer_struct seekfree_assistant_camera_buffer; // 图像以及边界缓冲区信息
+
+seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback = seekfree_assistant_transfer; // 数据发送函数指针
+seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback = seekfree_assistant_receive; // 数据接收函数指针
+
+seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 保存接收到的参数
+vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT] = {0}; // 参数更新标志位
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手求和函数
@@ -87,7 +109,7 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
seekfree_assistant_camera_data.image_height = height;
// 首先发送帧头、功能、摄像头类型、以及宽度高度等信息
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_data, sizeof(seekfree_assistant_camera_struct));
// 根据摄像头类型计算图像大小
switch(camera_type)
@@ -111,9 +133,8 @@ void seekfree_assistant_camera_data_send (seekfree_assistant_image_type_enum cam
// 发送图像数据
if(NULL != image_addr)
{
- seekfree_assistant_transfer(image_addr, image_size);
+ seekfree_assistant_transfer_callback(image_addr, image_size);
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -139,16 +160,15 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
dot_bytes *= 2;
}
-
// 首先发送帧头、功能、边界编号、坐标长度、点个数
- seekfree_assistant_transfer((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
+ seekfree_assistant_transfer_callback((const uint8 *)&seekfree_assistant_camera_dot_data, sizeof(seekfree_assistant_camera_dot_struct));
for(i=0; i < SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY; i++)
{
// 判断是否发送横坐标数据
if(NULL != buffer->boundary_x[i])
{
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_x[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_x[i], dot_bytes);
}
// 判断是否发送纵坐标数据
@@ -156,10 +176,9 @@ void seekfree_assistant_camera_dot_send (seekfree_assistant_camera_buffer_struct
{
// 如果没有纵坐标数据,则表示每一行只有一个边界
// 指定了横纵坐标数据,这种方式可以实现同一行多个边界的情况,例如搜线算法能够搜索出回弯。
- seekfree_assistant_transfer((const uint8 *)buffer->boundary_y[i], dot_bytes);
+ seekfree_assistant_transfer_callback((const uint8 *)buffer->boundary_y[i], dot_bytes);
}
}
-
}
//-------------------------------------------------------------------------------------------------------------------
@@ -193,7 +212,7 @@ void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struc
// 数据在调用本函数之前,由用户将需要发送的数据写入seekfree_assistant_oscilloscope_data.data[]
- seekfree_assistant_transfer((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
+ seekfree_assistant_transfer_callback((const uint8 *)seekfree_assistant_oscilloscope, packet_size);
}
//-------------------------------------------------------------------------------------------------------------------
@@ -364,12 +383,14 @@ void seekfree_assistant_camera_send (void)
}
}
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手解析接收到的数据
// 参数说明 void
// 返回参数 void
// 使用示例 函数只需要放到周期运行的PIT中断或者主循环即可
//-------------------------------------------------------------------------------------------------------------------
+#if (1 == SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE)
void seekfree_assistant_data_analysis (void)
{
uint8 temp_sum;
@@ -380,14 +401,13 @@ void seekfree_assistant_data_analysis (void)
uint32 temp_buffer[SEEKFREE_ASSISTANT_BUFFER_SIZE / 4];
// 尝试读取数据, 如果不是自定义的传输方式则从接收回调中读取数据
- read_length = seekfree_assistant_receive((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
+ read_length = seekfree_assistant_receive_callback((uint8 *)temp_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
if(read_length)
{
// 将读取到的数据写入FIFO
fifo_write_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, read_length);
}
-
while(sizeof(seekfree_assistant_parameter_struct) <= fifo_used(&seekfree_assistant_fifo))
{
read_length = sizeof(seekfree_assistant_parameter_struct);
@@ -416,21 +436,11 @@ void seekfree_assistant_data_analysis (void)
}
}
-
// 丢弃无需使用的数据
fifo_read_buffer(&seekfree_assistant_fifo, (uint8 *)temp_buffer, &read_length, FIFO_READ_AND_CLEAN);
}
}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 逐飞助手 初始化
-// 参数说明
-// 返回参数 void
-// 使用示例
-//-------------------------------------------------------------------------------------------------------------------
-ZF_WEAK void seekfree_assistant_init ()
-{
- fifo_init(&seekfree_assistant_fifo, FIFO_DATA_8BIT, seekfree_assistant_buffer, SEEKFREE_ASSISTANT_BUFFER_SIZE);
-}
+#endif
+
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h
index d02abb1..ae0f67c 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant.h
@@ -1,69 +1,75 @@
-/*/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#ifndef _seekfree_assistant_h_
#define _seekfree_assistant_h_
#include "zf_common_typedef.h"
-#include "zf_common_debug.h"
+
+
+// 1:使能参数调节的功能 0:关闭参数调节的功能
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_ENABLE ( 1 )
+
+
// 定义接收FIFO大小
-#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+#define SEEKFREE_ASSISTANT_BUFFER_SIZE ( 0x80 )
+
+// 定义示波器的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
+
+// 定义参数调试的最大通道数量
+#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
+
+// 定义图像边线最大数量
+#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
+
+// 单片机往上位机发送的帧头
+#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
+
+// 摄像头类
+#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
+#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
+#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
+
+// 上位机往单片机发送的帧头
+#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
+
+// 参数设置类
+#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
-// 定义示波器的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT ( 0x08 )
-
-// 定义参数调试的最大通道数量
-#define SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT ( 0x08 )
-
-// 定义图像边线最大数量
-#define SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY ( 0x08 )
-
-// 单片机往上位机发送的帧头
-#define SEEKFREE_ASSISTANT_SEND_HEAD ( 0xAA )
-
-// 摄像头类
-#define SEEKFREE_ASSISTANT_CAMERA_FUNCTION ( 0x02 )
-#define SEEKFREE_ASSISTANT_CAMERA_DOT_FUNCTION ( 0x03 )
-#define SEEKFREE_ASSISTANT_CAMERA_OSCILLOSCOPE ( 0x10 )
-
-// 上位机往单片机发送的帧头
-#define SEEKFREE_ASSISTANT_RECEIVE_HEAD ( 0x55 )
-
-// 参数设置类
-#define SEEKFREE_ASSISTANT_RECEIVE_SET_PARAMETER ( 0x20 )
// 摄像头类型枚举
typedef enum
@@ -91,71 +97,69 @@ typedef enum
typedef struct
{
- uint8 head; // 帧头
- uint8 channel_num; // 高四位为功能字 低四位为通道数量
- uint8 check_sum; // 和校验
- uint8 length; // 包长度
- float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
+ uint8 head; // 帧头
+ uint8 channel_num; // 高四位为功能字 低四位为通道数量
+ uint8 check_sum; // 和校验
+ uint8 length; // 包长度
+ float data[SEEKFREE_ASSISTANT_SET_OSCILLOSCOPE_COUNT]; // 通道数据
}seekfree_assistant_oscilloscope_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
- uint8 length; // 包长度(仅包含协议部分)
- uint16 image_width; // 图像宽度
- uint16 image_height; // 图像高度
-}seekfree_assistant_camera_struct;
-
-
-typedef struct
-{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
- uint8 length; // 包长度(仅包含协议部分)
- uint16 dot_num; // 画点数量
- uint8 valid_flag; // 通道标识
- uint8 reserve; // 保留
-}seekfree_assistant_camera_dot_struct;
-
-typedef struct
-{
- void *image_addr; // 摄像头地址
- uint16 width; // 图像宽度
- uint16 height; // 图像高度
- seekfree_assistant_image_type_enum camera_type; // 摄像头类型
- void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
- void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 camera_type; // 低四位表示边界数量 第四位表示是否有图像数据 例如0x13:其中3表示一副图像有三条边界(通常是左边界、中线、右边界)、1表示没有图像数据
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 image_width; // 图像宽度
+ uint16 image_height; // 图像高度
+}seekfree_assistant_camera_struct;
+
+
+typedef struct
+{
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 dot_type; // 点类型 BIT5:1:坐标是16位的 0:坐标是8位的 BIT7-BIT6:0:只有X坐标 1:只有Y坐标 2:X和Y坐标都有 BIT3-BIT0:边界数量
+ uint8 length; // 包长度(仅包含协议部分)
+ uint16 dot_num; // 画点数量
+ uint8 valid_flag; // 通道标识
+ uint8 reserve; // 保留
+}seekfree_assistant_camera_dot_struct;
+
+typedef struct
+{
+ void *image_addr; // 摄像头地址
+ uint16 width; // 图像宽度
+ uint16 height; // 图像高度
+ seekfree_assistant_image_type_enum camera_type; // 摄像头类型
+ void *boundary_x[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界横坐标数组地址
+ void *boundary_y[SEEKFREE_ASSISTANT_CAMERA_MAX_BOUNDARY]; // 边界纵坐标数组地址
}seekfree_assistant_camera_buffer_struct;
typedef struct
{
- uint8 head; // 帧头
- uint8 function; // 功能字
- uint8 channel; // 通道
- uint8 check_sum; // 和校验
- float data; // 数据
+ uint8 head; // 帧头
+ uint8 function; // 功能字
+ uint8 channel; // 通道
+ uint8 check_sum; // 和校验
+ float data; // 数据
}seekfree_assistant_parameter_struct;
+typedef uint32 (*seekfree_assistant_transfer_callback_function) (const uint8 *buff, uint32 length);
+typedef uint32 (*seekfree_assistant_receive_callback_function) (uint8 *buff, uint32 length);
-extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
-extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
-extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+extern seekfree_assistant_oscilloscope_struct seekfree_assistant_oscilloscope_data; // 虚拟示波器数据
+extern float seekfree_assistant_parameter[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 保存接收到的参数
+extern vuint8 seekfree_assistant_parameter_update_flag[SEEKFREE_ASSISTANT_SET_PARAMETR_COUNT]; // 参数更新标志位
+
+
+void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
+void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
+void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
+void seekfree_assistant_camera_send (void);
+void seekfree_assistant_data_analysis (void);
-uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length);
-uint32 seekfree_assistant_receive (uint8 *buff, uint32 length);
-
-void seekfree_assistant_oscilloscope_send (seekfree_assistant_oscilloscope_struct *seekfree_assistant_oscilloscope);
-
-void seekfree_assistant_camera_information_config (seekfree_assistant_image_type_enum camera_type, void *image_addr, uint16 width, uint16 height);
-void seekfree_assistant_camera_boundary_config (seekfree_assistant_boundary_type_enum boundary_type, uint16 dot_num, void *dot_x1, void *dot_x2, void *dot_x3, void *dot_y1, void *dot_y2, void *dot_y3);
-void seekfree_assistant_camera_send (void);
-
-void seekfree_assistant_data_analysis (void);
-void seekfree_assistant_init (void);
#endif
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c
index 99dbeef..fdade63 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.c
@@ -1,42 +1,55 @@
/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
+*
* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
* 甚至没有隐含的适销性或适合特定用途的保证
* 更多细节请参见 GPL
-*
+*
* 您应该在收到本开源库的同时收到一份 GPL 的副本
* 如果没有,请参阅
-*
+*
* 额外注明:
* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
+*
* 文件名称 seekfree_assistant_interface
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
-* 日期 作者 备注
-* 2023-11-29 pudding first version
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
********************************************************************************************************************/
#include "zf_common_typedef.h"
+#include "zf_common_fifo.h"
#include "zf_common_debug.h"
+#include "zf_driver_uart.h"
+#include "zf_device_wireless_uart.h"
+#include "zf_device_bluetooth_ch9141.h"
+#include "zf_device_wifi_uart.h"
+#include "zf_device_wifi_spi.h"
#include "seekfree_assistant.h"
+#include "seekfree_assistant_interface.h"
+
+
+extern seekfree_assistant_transfer_callback_function seekfree_assistant_transfer_callback; // 数据发送函数指针
+extern seekfree_assistant_receive_callback_function seekfree_assistant_receive_callback; // 数据接收函数指针
+
+
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 逐飞助手发送函数
// 参数说明 *buff 需要发送的数据地址
@@ -46,11 +59,9 @@
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
{
- uint32 len = 0;
-
- len = debug_send_buffer(buff, length);
-
- return len;
+
+ // 当选择自定义通讯方式时 需要自行完成数据发送功能
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
@@ -62,11 +73,57 @@ ZF_WEAK uint32 seekfree_assistant_transfer (const uint8 *buff, uint32 length)
//-------------------------------------------------------------------------------------------------------------------
ZF_WEAK uint32 seekfree_assistant_receive (uint8 *buff, uint32 length)
{
- uint32 len = 0;
+ // 当选择自定义通讯方式时 需要自行完成数据接收功能
+ return 0;
+}
- len = debug_read_ring_buffer(buff, length);
-
- return len;
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 逐飞助手接口 初始化
+// 参数说明
+// 返回参数 void
+// 使用示例 seekfree_assistant_interface_init(SEEKFREE_ASSISTANT_WIFI_SPI); 使用高速WIFI SPI模块进行数据收发
+// 备注 需要自行调用设备的初始化,例如使用无线转串口进行数据的收发,则需要自行调用无线转串口的初始化,然后再调用seekfree_assistant_interface_init完成逐飞助手的接口初始化
+//-------------------------------------------------------------------------------------------------------------------
+ZF_WEAK void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device)
+{
+ switch(transfer_device)
+ {
+ case SEEKFREE_ASSISTANT_DEBUG_UART:
+ {
+ seekfree_assistant_transfer_callback = debug_send_buffer;
+ seekfree_assistant_receive_callback = debug_read_ring_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIRELESS_UART:
+ {
+ seekfree_assistant_transfer_callback = wireless_uart_send_buffer;
+ seekfree_assistant_receive_callback = wireless_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CH9141:
+ {
+ seekfree_assistant_transfer_callback = bluetooth_ch9141_send_buffer;
+ seekfree_assistant_receive_callback = bluetooth_ch9141_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_UART:
+ {
+ seekfree_assistant_transfer_callback = wifi_uart_send_buffer;
+ seekfree_assistant_receive_callback = wifi_uart_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_WIFI_SPI:
+ {
+ seekfree_assistant_transfer_callback = wifi_spi_send_buffer;
+ seekfree_assistant_receive_callback = wifi_spi_read_buffer;
+ }break;
+
+ case SEEKFREE_ASSISTANT_CUSTOM:
+ {
+ // 根据自己的需求 自行实现seekfree_assistant_transfer与seekfree_assistant_receive函数,完成数据的收发
+
+ }break;
+ }
}
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h
new file mode 100644
index 0000000..940b5f7
--- /dev/null
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_components/seekfree_assistant_interface.h
@@ -0,0 +1,57 @@
+/*********************************************************************************************************************
+* RT1064DVL6A Opensourec Library 即(RT1064DVL6A 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 RT1064DVL6A 开源库的一部分
+*
+* RT1064DVL6A 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 seekfree_assistant_interface
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 IAR 8.32.4 or MDK 5.33
+* 适用平台 RT1064DVL6A
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2024-1-11 SeekFree first version
+********************************************************************************************************************/
+
+#ifndef _seekfree_assistant_interface_h_
+#define _seekfree_assistant_interface_h_
+
+
+
+// 数据发送设备枚举
+typedef enum
+{
+ SEEKFREE_ASSISTANT_DEBUG_UART, // 调试串口 使用的串口由DEBUG_UART_INDEX宏定义指定
+ SEEKFREE_ASSISTANT_WIRELESS_UART, // 无线转串口
+ SEEKFREE_ASSISTANT_CH9141, // CH9141蓝牙
+ SEEKFREE_ASSISTANT_WIFI_UART, // WIFI转串口
+ SEEKFREE_ASSISTANT_WIFI_SPI, // 高速WIFI SPI
+ SEEKFREE_ASSISTANT_CUSTOM, // 自定义通讯方式 需要自行seekfree_assistant_transfer与seekfree_assistant_receive函数
+}seekfree_assistant_transfer_device_enum;
+
+
+void seekfree_assistant_interface_init (seekfree_assistant_transfer_device_enum transfer_device);
+
+
+
+#endif
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.c
index 7c80a3b..f9bc809 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.h
index e6cc057..ed92906 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_absolute_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_absolute_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_bluetooth_ch9141.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_bluetooth_ch9141.c
index 500bccb..b0a06df 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_bluetooth_ch9141.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_bluetooth_ch9141.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_bluetooth_ch9141
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -54,7 +54,7 @@
#include "zf_device_camera.h"
#include "zf_device_bluetooth_ch9141.h"
-static fifo_obj_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
+static fifo_struct bluetooth_ch9141_fifo; // fifo缓冲区结构体定义
static uint8 bluetooth_ch9141_buffer[BLUETOOTH_CH9141_BUFFER_SIZE]; // 数据存放数组
static uint8 bluetooth_ch9141_data = 0; // 数据临时存放变量
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_bluetooth_ch9141.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_bluetooth_ch9141.h
index 800be6c..ffb30b5 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_bluetooth_ch9141.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_bluetooth_ch9141.h
@@ -24,7 +24,7 @@
* 文件名称 main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.c
index 84c7aa0..68668c4 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -45,7 +45,7 @@
#include "zf_device_camera.h"
-fifo_obj_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
+fifo_struct camera_receiver_fifo; // 定义摄像头接收数据fifo结构体
uint8 camera_receiver_buffer[CAMERA_RECEIVER_BUFFER_SIZE]; // 定义摄像头接收数据缓冲区
uint8 camera_send_image_frame_header[4] = {0x00, 0xFF, 0x01, 0x01}; // 定义摄像头数据发送到上位机的帧头
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.h
index 58efb06..2cd7d2d 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_camera.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_camera
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -44,7 +44,7 @@
//=================================================摄像头公共库 基本配置================================================
#define CAMERA_RECEIVER_BUFFER_SIZE (8) // 定义摄像头接收数据缓冲区大小
-extern fifo_obj_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
+extern fifo_struct camera_receiver_fifo; // 声明摄像头接收数据fifo结构体
extern uint8 camera_send_image_frame_header[4]; // 声明摄像头数据发送到上位机的帧头
//=================================================摄像头公共库 基本配置================================================
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_config.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_config.h
index af6a3d8..6c8147d 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_config.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_config.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1a.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1a.c
index 3e7410c..27be3a7 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1a.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1a.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1a.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1a.h
index 89145d3..3176dd3 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1a.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1a.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1a
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1b.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1b.c
index 90e64b3..96e472e 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1b.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1b.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1b.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1b.h
index b144739..922b3ce 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1b.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_dl1b.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_dl1b
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gnss.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gnss.c
new file mode 100644
index 0000000..caf7cd0
--- /dev/null
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gnss.c
@@ -0,0 +1,620 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#include "math.h"
+#include "zf_common_function.h"
+#include "zf_common_fifo.h"
+#include "zf_driver_delay.h"
+#include "zf_driver_uart.h"
+
+#include "zf_device_gnss.h"
+
+#define GNSS_BUFFER_SIZE ( 128 )
+
+uint8 gnss_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
+gnss_info_struct gnss; // GPS解析之后的数据
+
+static uint8 gnss_state = 0; // 1:GPS初始化完成
+static fifo_struct gnss_receiver_fifo; //
+static uint8 gnss_receiver_buffer[GNSS_BUFFER_SIZE]; // 数据存放数组
+
+static gps_state_enum gnss_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
+static gps_state_enum gnss_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
+static gps_state_enum gnss_ths_state = GPS_STATE_RECEIVING; // rmc 语句状态
+
+static uint8 gps_gga_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_rmc_buffer[GNSS_BUFFER_SIZE];
+static uint8 gps_ths_buffer[GNSS_BUFFER_SIZE];
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 获取指定 ',' 后面的索引
+// 参数说明 num 第几个逗号
+// 参数说明 *str 字符串
+// 返回参数 uint8 返回索引
+// 使用示例 get_parameter_index(1, s);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 get_parameter_index (uint8 num, char *str)
+{
+ uint8 i = 0, j = 0;
+ char *temp = strchr(str, '\n');
+ uint8 len = 0, len1 = 0;
+
+ if(NULL != temp)
+ {
+ len = (uint8)((uint32)temp - (uint32)str + 1);
+ }
+
+ for(i = 0; i < len; i ++)
+ {
+ if(',' == str[i])
+ {
+ j ++;
+ }
+ if(j == num)
+ {
+ len1 = i + 1;
+ break;
+ }
+ }
+
+ return len1;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static int get_int_number (char *s)
+{
+ char buf[10];
+ uint8 i = 0;
+ int return_value = 0;
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_int(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
+// 参数说明 *s 字符串
+// 返回参数 float 返回数值
+// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static float get_float_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ float return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = (float)func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
+// 参数说明 *s 字符串
+// 返回参数 double 返回数值
+// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static double get_double_number (char *s)
+{
+ uint8 i = 0;
+ char buf[15];
+ double return_value = 0;
+
+ i = get_parameter_index(1, s);
+ i = i - 1;
+ strncpy(buf, s, i);
+ buf[i] = 0;
+ return_value = func_str_to_double(buf);
+ return return_value;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 世界时间转换为北京时间
+// 参数说明 *time 保存的时间
+// 返回参数 void
+// 使用示例 utc_to_btc(&gnss->time);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static void utc_to_btc (gps_time_struct *time)
+{
+ uint8 day_num = 0;
+
+ time->hour = time->hour + 8;
+ if(23 < time->hour)
+ {
+ time->hour -= 24;
+ time->day += 1;
+
+ if(2 == time->month)
+ {
+ day_num = 28;
+ if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
+ {
+ day_num ++; // 闰月 2月为29天
+ }
+ }
+ else
+ {
+ day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
+ if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
+ {
+ day_num = 30;
+ }
+ }
+
+ if(time->day > day_num)
+ {
+ time->day = 1;
+ time->month ++;
+ if(12 < time->month)
+ {
+ time->month -= 12;
+ time->year ++;
+ }
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 RMC语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnrmc_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0, temp = 0;
+
+ double latitude = 0; // 纬度
+ double longitude = 0; // 经度
+
+ double lati_cent_tmp = 0, lati_second_tmp = 0;
+ double long_cent_tmp = 0, long_second_tmp = 0;
+ float speed_tmp = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state) // 如果数据有效 则解析数据
+ {
+ return_state = 1;
+ gnss->state = 1;
+ gnss -> ns = buf[get_parameter_index(4, buf)];
+ gnss -> ew = buf[get_parameter_index(6, buf)];
+
+ latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
+ longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
+
+ gnss->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
+ lati_cent_tmp = (latitude - gnss->latitude_degree * 100);
+ gnss->latitude_cent = (int)lati_cent_tmp;
+ lati_second_tmp = (lati_cent_tmp - gnss->latitude_cent) * 6000;
+ gnss->latitude_second = (int)lati_second_tmp;
+
+ gnss->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
+ long_cent_tmp = (longitude - gnss->longitude_degree * 100);
+ gnss->longitude_cent = (int)long_cent_tmp;
+ long_second_tmp = (long_cent_tmp - gnss->longitude_cent) * 6000;
+ gnss->longitude_second = (int)long_second_tmp;
+
+ gnss->latitude = gnss->latitude_degree + lati_cent_tmp / 60;
+ gnss->longitude = gnss->longitude_degree + long_cent_tmp / 60;
+
+ speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
+ gnss->speed = speed_tmp * 1.85f; // 转换为公里/小时
+ gnss->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
+ }
+ else
+ {
+ gnss->state = 0;
+ }
+
+ // 在定位没有生效前也是有时间数据的,可以直接解析
+ gnss->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
+ gnss->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
+ gnss->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
+ temp = get_parameter_index(9, buf);
+ gnss->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
+ gnss->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
+ gnss->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
+
+ utc_to_btc(&gnss->time);
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GGA语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gngga_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gngga_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if(',' != state)
+ {
+ gnss->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
+ gnss->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
+ return_state = 1;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 THS语句解析
+// 参数说明 *line 接收到的语句信息
+// 参数说明 *gnss 保存解析后的数据
+// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
+// 使用示例 gps_gnths_parse((char *)data_buffer, &gnss);
+// 备注信息 内部使用
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 gps_gnths_parse (char *line, gnss_info_struct *gnss)
+{
+ uint8 state = 0;
+ char *buf = line;
+ uint8 return_state = 0;
+
+ state = buf[get_parameter_index(2, buf)];
+
+ if('A' == state)
+ {
+ gnss->antenna_direction_state = 1;
+ gnss->antenna_direction = get_float_number(&buf[get_parameter_index(1, buf)]);
+ return_state = 1;
+ }
+ else
+ {
+ gnss->antenna_direction_state = 0;
+ }
+
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的距离
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回两点距离
+// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
+ double rad_latitude1 = 0;
+ double rad_latitude2 = 0;
+ double rad_longitude1 = 0;
+ double rad_longitude2 = 0;
+ double distance = 0;
+ double a = 0;
+ double b = 0;
+
+ rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
+ rad_latitude2 = ANGLE_TO_RAD(latitude2);
+ rad_longitude1 = ANGLE_TO_RAD(longitude1);
+ rad_longitude2 = ANGLE_TO_RAD(longitude2);
+
+ a = rad_latitude1 - rad_latitude2;
+ b = rad_longitude1 - rad_longitude2;
+
+ distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
+ distance = distance * EARTH_RADIUS;
+
+ return distance;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 计算从第一个点到第二个点的方位角
+// 参数说明 latitude1 第一个点的纬度
+// 参数说明 longitude1 第一个点的经度
+// 参数说明 latitude2 第二个点的纬度
+// 参数说明 longitude2 第二个点的经度
+// 返回参数 double 返回方位角(0至360)
+// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
+{
+ latitude1 = ANGLE_TO_RAD(latitude1);
+ latitude2 = ANGLE_TO_RAD(latitude2);
+ longitude1 = ANGLE_TO_RAD(longitude1);
+ longitude2 = ANGLE_TO_RAD(longitude2);
+
+ double x = sin(longitude2 - longitude1) * cos(latitude2);
+ double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
+ double angle = RAD_TO_ANGLE(atan2(x, y));
+ return ((0 < angle) ? angle : (angle + 360));
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 解析GPS数据
+// 参数说明 void
+// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
+// 使用示例 gps_data_parse();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 gnss_data_parse (void)
+{
+ uint8 return_state = 0;
+ uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
+ uint8 bbc_xor_origin = 0;
+ uint8 bbc_xor_calculation = 0;
+ uint32 data_len = 0;
+
+ do
+ {
+ if(GPS_STATE_RECEIVED == gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+ for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_rmc_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnrmc_parse((char *)gps_rmc_buffer, &gnss);
+ }
+ gnss_rmc_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_gga_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gngga_parse((char *)gps_gga_buffer, &gnss);
+ }
+ gnss_gga_state = GPS_STATE_RECEIVING;
+
+ if(GPS_STATE_RECEIVED == gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_PARSING;
+ strncpy((char *)&check_buffer[2], strchr((const char *)gps_ths_buffer, '*') + 1, 2);
+ bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
+
+ for(bbc_xor_calculation = gps_ths_buffer[1], data_len = 2; '*' != gps_ths_buffer[data_len]; data_len ++)
+ {
+ bbc_xor_calculation ^= gps_ths_buffer[data_len];
+ }
+ if(bbc_xor_calculation != bbc_xor_origin)
+ {
+ // 数据校验失败
+ return_state = 1;
+ break;
+ }
+
+ gps_gnths_parse((char *)gps_ths_buffer, &gnss);
+ }
+ gnss_ths_state = GPS_STATE_RECEIVING;
+
+ }while(0);
+ return return_state;
+}
+
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS串口回调函数
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_uart_callback();
+// 备注信息 此函数需要在串口接收中断内进行调用
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_uart_callback (void)
+{
+ uint8 temp_gps[6];
+ uint32 temp_length = 0;
+
+
+
+
+ if(gnss_state)
+ {
+ uint8 dat;
+ while(uart_query_byte(GNSS_UART, &dat))
+ {
+ fifo_write_buffer(&gnss_receiver_fifo, &dat, 1);
+ }
+
+ if('\n' == dat)
+ {
+ // 读取前6个数据 用于判断语句类型
+ temp_length = 6;
+ fifo_read_buffer(&gnss_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
+
+ // 根据不同类型将数据拷贝到不同的缓冲区
+ if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_rmc_state)
+ {
+ gnss_rmc_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_gga_state)
+ {
+ gnss_gga_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+ else if(0 == strncmp((char *)&temp_gps[3], "THS", 3))
+ {
+ // 如果没有在解析数据则更新缓冲区的数据
+ if(GPS_STATE_PARSING != gnss_ths_state)
+ {
+ gnss_ths_state = GPS_STATE_RECEIVED;
+ temp_length = fifo_used(&gnss_receiver_fifo);
+ fifo_read_buffer(&gnss_receiver_fifo, gps_ths_buffer, &temp_length, FIFO_READ_AND_CLEAN);
+ }
+ }
+
+ // 统一将FIFO清空
+ fifo_clear(&gnss_receiver_fifo);
+
+ gnss_flag = 1;
+ }
+ }
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 GPS初始化
+// 参数说明 void
+// 返回参数 void
+// 使用示例 gps_init();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+void gnss_init (gps_device_enum gps_device)
+{
+ const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
+ const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
+ const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
+
+ const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
+ const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
+ const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
+ const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
+ const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
+ const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
+ const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
+ const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
+ const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
+
+ if((TAU1201 == gps_device) || (GN42A == gps_device))
+ {
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ system_delay_ms(500); // 等待GPS启动后开始初始化
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
+ system_delay_ms(200);
+
+ uart_write_buffer(GNSS_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gll, sizeof(close_gll));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsa, sizeof(close_gsa));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_grs, sizeof(close_grs));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gsv, sizeof(close_gsv));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_vtg, sizeof(close_vtg));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_zda, sizeof(close_zda));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_gst, sizeof(close_gst));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt, sizeof(close_txt));
+ system_delay_ms(50);
+ uart_write_buffer(GNSS_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
+ system_delay_ms(50);
+
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+ else if(GN43RFA == gps_device)
+ {
+ // GN43RFA RTK模块不需要进行参数设置,如果需要修改参数应该使用专用的上位机修改参数
+ fifo_init(&gnss_receiver_fifo, FIFO_DATA_8BIT, gnss_receiver_buffer, GNSS_BUFFER_SIZE);
+ uart_init(GNSS_UART, 115200, GNSS_RX, GNSS_TX);
+ gnss_state = 1;
+ uart_rx_interrupt(GNSS_UART, 1);
+ }
+
+}
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gnss.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gnss.h
new file mode 100644
index 0000000..5d58976
--- /dev/null
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gnss.h
@@ -0,0 +1,125 @@
+/*********************************************************************************************************************
+* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
+* Copyright (c) 2022 SEEKFREE 逐飞科技
+*
+* 本文件是 TC264 开源库的一部分
+*
+* TC264 开源库 是免费软件
+* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
+* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
+*
+* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
+* 甚至没有隐含的适销性或适合特定用途的保证
+* 更多细节请参见 GPL
+*
+* 您应该在收到本开源库的同时收到一份 GPL 的副本
+* 如果没有,请参阅
+*
+* 额外注明:
+* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
+* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
+* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
+* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
+*
+* 文件名称 zf_device_gnss
+* 公司名称 成都逐飞科技有限公司
+* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
+* 开发环境 ADS v1.9.20
+* 适用平台 TC264D
+* 店铺链接 https://seekfree.taobao.com/
+*
+* 修改记录
+* 日期 作者 备注
+* 2023-12-28 pudding first version
+********************************************************************************************************************/
+/*********************************************************************************************************************
+* 接线定义:
+* ------------------------------------
+* 模块管脚 单片机管脚
+* RX 查看 zf_device_gnss.h 中 GNSS_RX 宏定义
+* TX 查看 zf_device_gnss.h 中 GNSS_TX 宏定义
+* VCC 3.3V电源
+* GND 电源地
+* ------------------------------------
+********************************************************************************************************************/
+
+#ifndef _zf_device_gnss_h_
+#define _zf_device_gnss_h_
+
+#include "zf_common_typedef.h"
+
+//--------------------------------------------------------------------------------------------------
+//引脚配置
+//--------------------------------------------------------------------------------------------------
+#define GNSS_UART (UART_3)
+#define GNSS_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
+#define GNSS_TX (UART3_RX_P15_7) // GPS TX串口引脚
+
+#define ANGLE_TO_RAD(x) ( (x) * PI / 180.0 ) // 角度转换为弧度
+#define RAD_TO_ANGLE(x) ( (x) * 180.0 / PI ) // 弧度转换为角度
+#define PI ( 3.1415926535898 )
+
+typedef enum
+{
+ TAU1201 = 1, // 逐飞科技双频GPS模块
+ GN42A = 1, // 逐飞科技双频GPS模块 与TAU1201是一样的
+ GN43RFA = 2, // 逐飞科技三频RTK模块
+}gps_device_enum;
+
+typedef struct
+{
+ uint16 year;
+ uint8 month;
+ uint8 day;
+ uint8 hour;
+ uint8 minute;
+ uint8 second;
+}gps_time_struct;
+
+typedef struct
+{
+ gps_time_struct time; // 时间
+
+ uint8 state; // 有效状态 1:定位有效 0:定位无效
+
+ uint16 latitude_degree; // 度
+ uint16 latitude_cent; // 分
+ uint16 latitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+ uint16 longitude_degree; // 度
+ uint16 longitude_cent; // 分
+ uint16 longitude_second; // 秒 这里的秒是被放大了100倍的,主要是避免使用浮点数
+
+ double latitude; // 纬度
+ double longitude; // 经度
+
+ int8 ns; // 纬度半球 N(北半球)或 S(南半球)
+ int8 ew; // 经度半球 E(东经)或 W(西经)
+
+ float speed; // 速度(公里/每小时)
+ float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)+
+ uint8 antenna_direction_state; // 双天线测向有效状态 1:测向有效 0:测向无效,无效时antenna_direction数据是无效的
+ float antenna_direction; // 主天线指向从天线与真北构成的夹角(000.0~359.9 度)
+
+ // 下面两个个信息从GNGGA语句中获取
+ uint8 satellite_used; // 用于定位的卫星数量
+ float height; // 高度
+}gnss_info_struct;
+
+typedef enum
+{
+ GPS_STATE_RECEIVING, // 正在接收数据
+ GPS_STATE_RECEIVED, // 数据接收完成
+ GPS_STATE_PARSING, // 正在解析
+}gps_state_enum;
+
+extern gnss_info_struct gnss;
+extern uint8 gnss_flag;
+
+
+double get_two_points_distance (double lat1, double lng1, double lat2, double lng2);
+double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2);
+uint8 gnss_data_parse (void);
+void gnss_uart_callback (void);
+void gnss_init (gps_device_enum gps_device);
+
+#endif
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.c
deleted file mode 100644
index da46a99..0000000
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.c
+++ /dev/null
@@ -1,541 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#include "math.h"
-#include "zf_common_function.h"
-#include "zf_common_fifo.h"
-#include "zf_driver_delay.h"
-#include "zf_driver_uart.h"
-
-#include "zf_device_gps_tau1201.h"
-
-#define GPS_TAU1201_BUFFER_SIZE ( 128 )
-
-uint8 gps_tau1201_flag = 0; // 1:采集完成等待处理数据 0:没有采集完成
-gps_info_struct gps_tau1201; // GPS解析之后的数据
-
-static uint8 gps_tau1201_state = 0; // 1:GPS初始化完成
-static fifo_obj_struct gps_tau1201_receiver_fifo; //
-static uint8 gps_tau1201_receiver_buffer[GPS_TAU1201_BUFFER_SIZE]; // 数据存放数组
-
-gps_state_enum gps_gga_state = GPS_STATE_RECEIVING; // gga 语句状态
-gps_state_enum gps_rmc_state = GPS_STATE_RECEIVING; // rmc 语句状态
-
-static uint8 gps_gga_buffer[GPS_TAU1201_BUFFER_SIZE]; // GGA语句缓冲区
-static uint8 gps_rmc_buffer[GPS_TAU1201_BUFFER_SIZE]; // RMC语句缓冲区
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 获取指定 ',' 后面的索引
-// 参数说明 num 第几个逗号
-// 参数说明 *str 字符串
-// 返回参数 uint8 返回索引
-// 使用示例 get_parameter_index(1, s);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 get_parameter_index (uint8 num, char *str)
-{
- uint8 i = 0, j = 0;
- char *temp = strchr(str, '\n');
- uint8 len = 0, len1 = 0;
-
- if(NULL != temp)
- {
- len = (uint8)((uint32)temp - (uint32)str + 1);
- }
-
- for(i = 0; i < len; i ++)
- {
- if(',' == str[i])
- {
- j ++;
- }
- if(j == num)
- {
- len1 = i + 1;
- break;
- }
- }
-
- return len1;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为int
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_int_number(&buf[get_parameter_index(7, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static int get_int_number (char *s)
-{
- char buf[10];
- uint8 i = 0;
- int return_value = 0;
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_int(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为float
-// 参数说明 *s 字符串
-// 返回参数 float 返回数值
-// 使用示例 get_float_number(&buf[get_parameter_index(8, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static float get_float_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- float return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = (float)func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 给定字符串第一个 ',' 之前的数据转换为double
-// 参数说明 *s 字符串
-// 返回参数 double 返回数值
-// 使用示例 get_double_number(&buf[get_parameter_index(3, buf)]);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static double get_double_number (char *s)
-{
- uint8 i = 0;
- char buf[15];
- double return_value = 0;
-
- i = get_parameter_index(1, s);
- i = i - 1;
- strncpy(buf, s, i);
- buf[i] = 0;
- return_value = func_str_to_double(buf);
- return return_value;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 世界时间转换为北京时间
-// 参数说明 *time 保存的时间
-// 返回参数 void
-// 使用示例 utc_to_btc(&gps->time);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static void utc_to_btc (gps_time_struct *time)
-{
- uint8 day_num = 0;
-
- time->hour = time->hour + 8;
- if(23 < time->hour)
- {
- time->hour -= 24;
- time->day += 1;
-
- if(2 == time->month)
- {
- day_num = 28;
- if((0 == time->year % 4 && 0 != time->year % 100) || 0 == time->year % 400) // 判断是否为闰年
- {
- day_num ++; // 闰月 2月为29天
- }
- }
- else
- {
- day_num = 31; // 1 3 5 7 8 10 12这些月份为31天
- if(4 == time->month || 6 == time->month || 9 == time->month || 11 == time->month )
- {
- day_num = 30;
- }
- }
-
- if(time->day > day_num)
- {
- time->day = 1;
- time->month ++;
- if(12 < time->month)
- {
- time->month -= 12;
- time->year ++;
- }
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 RMC语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gnrmc_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gnrmc_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0, temp = 0;
-
- double latitude = 0; // 纬度
- double longitude = 0; // 经度
-
- double lati_cent_tmp = 0, lati_second_tmp = 0;
- double long_cent_tmp = 0, long_second_tmp = 0;
- float speed_tmp = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- gps->state = 0;
- if('A' == state) // 如果数据有效 则解析数据
- {
- return_state = 1;
- gps->state = 1;
- gps -> ns = buf[get_parameter_index(4, buf)];
- gps -> ew = buf[get_parameter_index(6, buf)];
-
- latitude = get_double_number(&buf[get_parameter_index(3, buf)]);
- longitude = get_double_number(&buf[get_parameter_index(5, buf)]);
-
- gps->latitude_degree = (int)latitude / 100; // 纬度转换为度分秒
- lati_cent_tmp = (latitude - gps->latitude_degree * 100);
- gps->latitude_cent = (int)lati_cent_tmp;
- lati_second_tmp = (lati_cent_tmp - gps->latitude_cent) * 6000;
- gps->latitude_second = (int)lati_second_tmp;
-
- gps->longitude_degree = (int)longitude / 100; // 经度转换为度分秒
- long_cent_tmp = (longitude - gps->longitude_degree * 100);
- gps->longitude_cent = (int)long_cent_tmp;
- long_second_tmp = (long_cent_tmp - gps->longitude_cent) * 6000;
- gps->longitude_second = (int)long_second_tmp;
-
- gps->latitude = gps->latitude_degree + lati_cent_tmp / 60;
- gps->longitude = gps->longitude_degree + long_cent_tmp / 60;
-
- speed_tmp = get_float_number(&buf[get_parameter_index(7, buf)]); // 速度(海里/小时)
- gps->speed = speed_tmp * 1.85f; // 转换为公里/小时
- gps->direction = get_float_number(&buf[get_parameter_index(8, buf)]); // 角度
- }
-
- // 在定位没有生效前也是有时间数据的,可以直接解析
- gps->time.hour = (buf[7] - '0') * 10 + (buf[8] - '0'); // 时间
- gps->time.minute = (buf[9] - '0') * 10 + (buf[10] - '0');
- gps->time.second = (buf[11] - '0') * 10 + (buf[12] - '0');
- temp = get_parameter_index(9, buf);
- gps->time.day = (buf[temp + 0] - '0') * 10 + (buf[temp + 1] - '0'); // 日期
- gps->time.month = (buf[temp + 2] - '0') * 10 + (buf[temp + 3] - '0');
- gps->time.year = (buf[temp + 4] - '0') * 10 + (buf[temp + 5] - '0') + 2000;
-
- utc_to_btc(&gps->time);
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GGA语句解析
-// 参数说明 *line 接收到的语句信息
-// 参数说明 *gps 保存解析后的数据
-// 返回参数 uint8 1:解析成功 0:数据有问题不能解析
-// 使用示例 gps_gngga_parse((char *)data_buffer, &gps_tau1201);
-// 备注信息 内部使用
-//-------------------------------------------------------------------------------------------------------------------
-static uint8 gps_gngga_parse (char *line, gps_info_struct *gps)
-{
- uint8 state = 0;
- char *buf = line;
- uint8 return_state = 0;
-
- state = buf[get_parameter_index(2, buf)];
-
- if(',' != state)
- {
- gps->satellite_used = (uint8)get_int_number(&buf[get_parameter_index(7, buf)]);
- gps->height = get_float_number(&buf[get_parameter_index(9, buf)]) + get_float_number(&buf[get_parameter_index(11, buf)]); // 高度 = 海拔高度 + 地球椭球面相对大地水准面的高度
- return_state = 1;
- }
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的距离
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回两点距离
-// 使用示例 get_two_points_distance(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_distance (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- const double EARTH_RADIUS = 6378137; // 地球半径(单位:m)
- double rad_latitude1 = 0;
- double rad_latitude2 = 0;
- double rad_longitude1 = 0;
- double rad_longitude2 = 0;
- double distance = 0;
- double a = 0;
- double b = 0;
-
- rad_latitude1 = ANGLE_TO_RAD(latitude1); // 根据角度计算弧度
- rad_latitude2 = ANGLE_TO_RAD(latitude2);
- rad_longitude1 = ANGLE_TO_RAD(longitude1);
- rad_longitude2 = ANGLE_TO_RAD(longitude2);
-
- a = rad_latitude1 - rad_latitude2;
- b = rad_longitude1 - rad_longitude2;
-
- distance = 2 * asin(sqrt(pow(sin(a / 2), 2) + cos(rad_latitude1) * cos(rad_latitude2) * pow(sin(b / 2), 2))); // google maps 里面实现的算法
- distance = distance * EARTH_RADIUS;
-
- return distance;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 计算从第一个点到第二个点的方位角
-// 参数说明 latitude1 第一个点的纬度
-// 参数说明 longitude1 第一个点的经度
-// 参数说明 latitude2 第二个点的纬度
-// 参数说明 longitude2 第二个点的经度
-// 返回参数 double 返回方位角(0至360)
-// 使用示例 get_two_points_azimuth(latitude1_1, longitude1, latitude2, longitude2);
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-double get_two_points_azimuth (double latitude1, double longitude1, double latitude2, double longitude2)
-{
- latitude1 = ANGLE_TO_RAD(latitude1);
- latitude2 = ANGLE_TO_RAD(latitude2);
- longitude1 = ANGLE_TO_RAD(longitude1);
- longitude2 = ANGLE_TO_RAD(longitude2);
-
- double x = sin(longitude2 - longitude1) * cos(latitude2);
- double y = cos(latitude1) * sin(latitude2) - sin(latitude1) * cos(latitude2) * cos(longitude2 - longitude1);
- double angle = RAD_TO_ANGLE(atan2(x, y));
- return ((0 < angle) ? angle : (angle + 360));
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 解析GPS数据
-// 参数说明 void
-// 返回参数 uint8 0-解析成功 1-解析失败 可能数据包错误
-// 使用示例 gps_data_parse();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-uint8 gps_data_parse (void)
-{
- uint8 return_state = 0;
- uint8 check_buffer[5] = {'0', 'x', 0x00, 0x00, 0x00};
- uint8 bbc_xor_origin = 0;
- uint8 bbc_xor_calculation = 0;
- uint32 data_len = 0;
-
- do
- {
- if(GPS_STATE_RECEIVED == gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_rmc_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
- for(bbc_xor_calculation = gps_rmc_buffer[1], data_len = 2; '*' != gps_rmc_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_rmc_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gnrmc_parse((char *)gps_rmc_buffer, &gps_tau1201);
- }
- gps_rmc_state = GPS_STATE_RECEIVING;
-
- if(GPS_STATE_RECEIVED == gps_gga_state)
- {
- gps_gga_state = GPS_STATE_PARSING;
- strncpy((char *)&check_buffer[2], strchr((const char *)gps_gga_buffer, '*') + 1, 2);
- bbc_xor_origin = (uint8)func_str_to_hex((char *)check_buffer);
-
- for(bbc_xor_calculation = gps_gga_buffer[1], data_len = 2; '*' != gps_gga_buffer[data_len]; data_len ++)
- {
- bbc_xor_calculation ^= gps_gga_buffer[data_len];
- }
- if(bbc_xor_calculation != bbc_xor_origin)
- {
- // 数据校验失败
- return_state = 1;
- break;
- }
-
- gps_gngga_parse((char *)gps_gga_buffer, &gps_tau1201);
- }
- gps_gga_state = GPS_STATE_RECEIVING;
-
- }while(0);
- return return_state;
-}
-
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS串口回调函数
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_uart_callback();
-// 备注信息 此函数需要在串口接收中断内进行调用
-//-------------------------------------------------------------------------------------------------------------------
-void gps_uart_callback (void)
-{
- uint8 temp_gps[6];
- uint32 temp_length = 0;
-
- if(gps_tau1201_state)
- {
- uint8 dat;
- while(uart_query_byte(GPS_TAU1201_UART, &dat))
- {
- fifo_write_buffer(&gps_tau1201_receiver_fifo, &dat, 1);
- }
-
- if('\n' == dat)
- {
- // 读取前6个数据 用于判断语句类型
- temp_length = 6;
- fifo_read_buffer(&gps_tau1201_receiver_fifo, temp_gps, &temp_length, FIFO_READ_ONLY);
-
- // 根据不同类型将数据拷贝到不同的缓冲区
- if(0 == strncmp((char *)&temp_gps[3], "RMC", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_rmc_state)
- {
- gps_rmc_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_rmc_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
- else if(0 == strncmp((char *)&temp_gps[3], "GGA", 3))
- {
- // 如果没有在解析数据则更新缓冲区的数据
- if(GPS_STATE_PARSING != gps_gga_state)
- {
- gps_gga_state = GPS_STATE_RECEIVED;
- temp_length = fifo_used(&gps_tau1201_receiver_fifo);
- fifo_read_buffer(&gps_tau1201_receiver_fifo, gps_gga_buffer, &temp_length, FIFO_READ_AND_CLEAN);
- }
- }
-
- // 统一将FIFO清空
- fifo_clear(&gps_tau1201_receiver_fifo);
-
- gps_tau1201_flag = 1;
- }
- }
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 GPS初始化
-// 参数说明 void
-// 返回参数 void
-// 使用示例 gps_init();
-// 备注信息
-//-------------------------------------------------------------------------------------------------------------------
-void gps_init (void)
-{
- const uint8 set_rate[] = {0xF1, 0xD9, 0x06, 0x42, 0x14, 0x00, 0x00, 0x0A, 0x05, 0x00, 0x64, 0x00, 0x00, 0x00, 0x60, 0xEA, 0x00, 0x00, 0xD0, 0x07, 0x00, 0x00, 0xC8, 0x00, 0x00, 0x00, 0xB8, 0xED};
- const uint8 open_gga[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x00, 0x01, 0xFB, 0x10};
- const uint8 open_rmc[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x05, 0x01, 0x00, 0x1A};
-
- const uint8 close_gll[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x01, 0x00, 0xFB, 0x11};
- const uint8 close_gsa[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x02, 0x00, 0xFC, 0x13};
- const uint8 close_grs[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x03, 0x00, 0xFD, 0x15};
- const uint8 close_gsv[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x04, 0x00, 0xFE, 0x17};
- const uint8 close_vtg[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x06, 0x00, 0x00, 0x1B};
- const uint8 close_zda[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x07, 0x00, 0x01, 0x1D};
- const uint8 close_gst[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x08, 0x00, 0x02, 0x1F};
- const uint8 close_txt[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x40, 0x00, 0x3A, 0x8F};
- const uint8 close_txt_ant[] = {0xF1, 0xD9, 0x06, 0x01, 0x03, 0x00, 0xF0, 0x20, 0x00, 0x1A, 0x4F};
-
- fifo_init(&gps_tau1201_receiver_fifo, FIFO_DATA_8BIT, gps_tau1201_receiver_buffer, GPS_TAU1201_BUFFER_SIZE);
- system_delay_ms(500); // 等待GPS启动后开始初始化
- uart_init(GPS_TAU1201_UART, 115200, GPS_TAU1201_RX, GPS_TAU1201_TX);
- uart_rx_interrupt(GPS_TAU1201_UART, 0);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)set_rate, sizeof(set_rate)); // 设置GPS更新速率为10hz 如果不调用此语句则默认为1hz
- system_delay_ms(200);
-
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_rmc, sizeof(open_rmc)); // 开启rmc语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)open_gga, sizeof(open_gga)); // 开启gga语句
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gll, sizeof(close_gll));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsa, sizeof(close_gsa));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_grs, sizeof(close_grs));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gsv, sizeof(close_gsv));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_vtg, sizeof(close_vtg));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_zda, sizeof(close_zda));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_gst, sizeof(close_gst));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt, sizeof(close_txt));
- system_delay_ms(50);
- uart_write_buffer(GPS_TAU1201_UART, (uint8 *)close_txt_ant, sizeof(close_txt_ant));
- system_delay_ms(50);
-
- gps_tau1201_state = 1;
- uart_rx_interrupt(GPS_TAU1201_UART, 1);
-}
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.h
deleted file mode 100644
index c167bae..0000000
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_gps_tau1201.h
+++ /dev/null
@@ -1,117 +0,0 @@
-/*********************************************************************************************************************
-* TC264 Opensourec Library 即(TC264 开源库)是一个基于官方 SDK 接口的第三方开源库
-* Copyright (c) 2022 SEEKFREE 逐飞科技
-*
-* 本文件是 TC264 开源库的一部分
-*
-* TC264 开源库 是免费软件
-* 您可以根据自由软件基金会发布的 GPL(GNU General Public License,即 GNU通用公共许可证)的条款
-* 即 GPL 的第3版(即 GPL3.0)或(您选择的)任何后来的版本,重新发布和/或修改它
-*
-* 本开源库的发布是希望它能发挥作用,但并未对其作任何的保证
-* 甚至没有隐含的适销性或适合特定用途的保证
-* 更多细节请参见 GPL
-*
-* 您应该在收到本开源库的同时收到一份 GPL 的副本
-* 如果没有,请参阅
-*
-* 额外注明:
-* 本开源库使用 GPL3.0 开源许可证协议 以上许可申明为译文版本
-* 许可申明英文版在 libraries/doc 文件夹下的 GPL3_permission_statement.txt 文件中
-* 许可证副本在 libraries 文件夹下 即该文件夹下的 LICENSE 文件
-* 欢迎各位使用并传播本程序 但修改内容时必须保留逐飞科技的版权声明(即本声明)
-*
-* 文件名称 zf_device_gps_tau1201
-* 公司名称 成都逐飞科技有限公司
-* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
-* 适用平台 TC264D
-* 店铺链接 https://seekfree.taobao.com/
-*
-* 修改记录
-* 日期 作者 备注
-* 2022-09-15 pudding first version
-* 2023-04-28 pudding 增加中文注释说明
-********************************************************************************************************************/
-/********************************************************************************************************************
-* 接线定义:
-* ------------------------------------
-* 模块管脚 单片机管脚
-* RX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_RX 宏定义
-* TX 查看 zf_device_gps_tau1201.h 中 GPS_TAU1201_TX 宏定义
-* VCC 3.3V电源
-* GND 电源地
-* ------------------------------------
-********************************************************************************************************************/
-
-#ifndef _zf_device_gps_tau1201_h_
-#define _zf_device_gps_tau1201_h_
-
-#include "zf_common_typedef.h"
-
-//=================================================定义 定位模块 基本配置================================================
-#define GPS_TAU1201_UART (UART_3)
-#define GPS_TAU1201_RX (UART3_TX_P15_6) // GPS RX引脚连接到单片机此
-#define GPS_TAU1201_TX (UART3_RX_P15_7) // GPS TX串口引脚
-
-#define ANGLE_TO_RAD(x) ((x) * PI / 180.0) // 角度转换为弧度
-#define RAD_TO_ANGLE(x) ((x) * 180.0 / PI) // 弧度转换为角度
-#define PI (3.1415926535898)
-//=================================================定义 定位模块 基本配置================================================
-
-
-//================================================定义 定位模块 参数结构体================================================
-typedef struct
-{
- uint16 year;
- uint8 month;
- uint8 day;
- uint8 hour;
- uint8 minute;
- uint8 second;
-}gps_time_struct;
-
-typedef struct
-{
- gps_time_struct time; // 时间-
- uint8 state; // 有效状态 1:定位有效 0:定位无效
- uint16 latitude_degree; // 度
- uint16 latitude_cent; // 分
- uint16 latitude_second; // 秒
- uint16 longitude_degree; // 度
- uint16 longitude_cent; // 分
- uint16 longitude_second; // 秒
- double latitude; // 纬度
- double longitude; // 经度
- int8 ns; // 纬度半球 N(北半球)或 S(南半球)
- int8 ew; // 经度半球 E(东经)或 W(西经)
- float speed; // 速度(公里/每小时)
- float direction; // 地面航向(000.0~359.9 度,以真北方为参考基准)
- // 下面两个个信息从GNGGA语句中获取
- uint8 satellite_used; // 用于定位的卫星数量
- float height; // 高度
-}gps_info_struct;
-
-typedef enum
-{
- GPS_STATE_RECEIVING, // 正在接收数据
- GPS_STATE_RECEIVED, // 数据接收完成
- GPS_STATE_PARSING, // 正在解析
-}gps_state_enum;
-//================================================定义 定位模块 参数结构体================================================
-
-
-//=================================================声明 定位模块 全局变量================================================
-extern gps_info_struct gps_tau1201; // GPS解析之后的数据
-extern uint8 gps_tau1201_flag; // 1:采集完成等待处理数据 0:没有采集完成
-//=================================================声明 定位模块 全局变量================================================
-
-
-//=================================================声明 定位模块 基础函数================================================
-double get_two_points_distance (double lat1, double lng1, double lat2, double lng2); // 计算从第一个点到第二个点的距离(单位:m)
-double get_two_points_azimuth (double lat1, double lon1, double lat2, double lon2); // 计算从第一个点到第二个点的方位角(单位:°)
-uint8 gps_data_parse (void); // 解析GPS数据
-void gps_uart_callback (void); // GPS回调函数
-void gps_init (void); // GPS初始化
-//=================================================声明 定位模块 基础函数================================================
-#endif
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_icm20602.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_icm20602.c
index f4ae830..ddebf3c 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_icm20602.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_icm20602.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_icm20602.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_icm20602.h
index 67724ad..209972b 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_icm20602.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_icm20602.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_icm20602
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu660ra.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu660ra.c
index 95144f9..02fdb9e 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu660ra.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu660ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu660ra.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu660ra.h
index a689df1..348e6a1 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu660ra.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu660ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu660ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu963ra.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu963ra.c
index 92ec0f6..595142a 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu963ra.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu963ra.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu963ra.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu963ra.h
index 4d0d9f9..c0f981f 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu963ra.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_imu963ra.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_imu963ra
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.c
index 78c6f3b..b13e338 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.h
index 81dfc3c..ba932b1 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips114.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips114
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.c
index cd8681f..37d9d04 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.h
index ce59927..045bf27 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ips200.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ips200
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.c
index 9e42c8a..8b240cb 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.h
index bcab8aa..9c653cf 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_key.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_key
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mpu6050.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mpu6050.c
index dc3c5b2..101a5ae 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mpu6050.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mpu6050.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mpu6050.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mpu6050.h
index 3510e06..c8a086f 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mpu6050.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mpu6050.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mpu6050
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mt9v03x.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mt9v03x.c
index 231cfec..d38b8df 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mt9v03x.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mt9v03x.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mt9v03x.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mt9v03x.h
index 7786bc5..9d4650d 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mt9v03x.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_mt9v03x.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_mt9v03x
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_oled.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_oled.c
index 5314209..55aefa7 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_oled.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_oled.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_oled.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_oled.h
index d52d2fd..aadf048 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_oled.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_oled.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_oled
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ov7725.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ov7725.c
index 12f6095..bac95fe 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ov7725.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ov7725.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ov7725.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ov7725.h
index f45a4e8..2cb4026 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ov7725.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_ov7725.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_ov7725
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.c
index 3483c93..38d65ff 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h
index 815d272..537283a 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_scc8660.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_scc8660
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tft180.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tft180.c
index db50824..b661e91 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tft180.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tft180.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tft180.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tft180.h
index 47491ee..54a72b3 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tft180.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tft180.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tft180
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tsl1401.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tsl1401.c
index 3f9db7f..d133c7c 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tsl1401.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tsl1401.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tsl1401.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tsl1401.h
index 1fab12e..a7b061c 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tsl1401.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_tsl1401.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_tsl1401
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.c
index 497ba55..af24701 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -32,6 +32,7 @@
* 日期 作者 备注
* 2022-09-15 pudding first version
* 2023-05-26 pudding 新增SPI WIFI 中断回调指针
+* 2024-01-16 pudding 移除SPI WIFI 中断回调指针 SPI WIFI将不再使用外部
********************************************************************************************************************/
#include "zf_device_type.h"
@@ -45,7 +46,6 @@ callback_function camera_dma_handler = type_default_callback;
wireless_type_enum wireless_type = NO_WIRELESS;
callback_function wireless_module_uart_handler = type_default_callback; // 无线串口接收中断函数指针,根据初始化时设置的函数进行跳转
-callback_function wireless_module_spi_handler = type_default_callback; // WIFI SPI GPIO中断函数指针,根据初始化时设置的函数进行跳转
tof_type_enum tof_type = NO_TOF;
callback_function tof_module_exti_handler = type_default_callback; // ToF 模块 INT 更新中断
@@ -54,7 +54,7 @@ callback_function tof_module_exti_handler = type_default_callback;
// 函数简介 默认回调函数
// 参数说明 void
// 返回参数 void
-// 使用示例
+// 使用示例
// 备注信息 保护性冗余设计 防止在没有初始化设备的时候跑飞
//-------------------------------------------------------------------------------------------------------------------
static void type_default_callback (void)
@@ -90,14 +90,7 @@ void set_camera_type (camera_type_enum type_set, callback_function vsync_callba
void set_wireless_type (wireless_type_enum type_set, callback_function wireless_callback)
{
wireless_type = type_set;
- if(WIFI_SPI == wireless_type)
- {
- wireless_module_spi_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
- else
- {
- wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
- }
+ wireless_module_uart_handler = ((wireless_callback == NULL) ? (type_default_callback) : (wireless_callback));
}
//-------------------------------------------------------------------------------------------------------------------
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.h
index 19c36ca..3b124fe 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_type.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_type
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -56,7 +56,6 @@ typedef enum
WIRELESS_UART, // 无线串口
BLUETOOTH_CH9141, // 蓝牙 CH9141
WIFI_UART, // 串口 WiFi
- WIFI_SPI // SPI WiFi
}wireless_type_enum;
typedef enum
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_virtual_oscilloscope.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_virtual_oscilloscope.c
index 2bdb164..3cbc786 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_virtual_oscilloscope.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_virtual_oscilloscope.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_virtual_oscilloscope.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_virtual_oscilloscope.h
index f518026..b0fd085 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_virtual_oscilloscope.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_virtual_oscilloscope.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_virtual_oscilloscope
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.c
index 78a6d68..f9e51ca 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.c
@@ -24,14 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
-* 2023-05-29 pudding 新增关闭休眠指令,提升通讯效率
+* 2022-09-21 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,1374 +52,615 @@
#include "zf_common_clock.h"
#include "zf_common_debug.h"
#include "zf_common_fifo.h"
-#include "zf_common_function.h"
#include "zf_driver_delay.h"
#include "zf_driver_gpio.h"
-#include "zf_common_interrupt.h"
-#include "zf_driver_exti.h"
#include "zf_driver_spi.h"
#include "zf_device_type.h"
#include "zf_device_wifi_spi.h"
-#define WAIT_TIME_OUT (10000) // 单指令等待时间 单位:ms
+#define WIFI_CONNECT_TIME_OUT 10000 // 单位毫秒
+#define SOCKET_CONNECT_TIME_OUT 50000 // 单位毫秒
+#define OTHER_TIME_OUT 1000 // 单位毫秒
-#define WIFI_SPI_WRITE_MAX 128 // 定义一次SPI通讯最大发送的数据长度
-
-#define WIFI_SPI_WRITE_REQUEST 0x01
-#define WIFI_SPI_CHECK_STATE 0x02
-#define WIFI_SPI_WRITE_DATA 0x03
-#define WIFI_SPI_READ_DATA 0x04
-#define WIFI_SPI_WRITE_END 0x07
-#define WIFI_SPI_READ_END 0x08
-
-#define WIFI_SPI_WRITE_ADDR 0x00
-#define WIFI_SPI_STATE_ADDR 0x04
+char wifi_spi_version[12]; // 保存模块固件版本信息
+char wifi_spi_mac_addr[20]; // 保存模块MAC地址信息
+char wifi_spi_ip_addr_port[25]; // 保存模块IP地址与端口信息
-volatile wifi_spi_buffer_state_enum wifi_buffer_state;
-volatile wifi_spi_transmit_state_enum wifi_transmit_state;
-
-static fifo_obj_struct wifi_spi_fifo;
-static uint8 wifi_spi_buffer[WIFI_SPI_BUFFER_SIZE]; // 数据存放数组
-
-vuint8 wifi_spi_ack_flag = 0; // 0:模块未应答 1:模块已应答
-uint8 wifi_spi_init_flag; // 0:模块未初始化成功或者未连接 1:模块已连接并成功初始化
-vuint8 wifi_spi_packet_num; // 发送的数据包ID
-vuint32 wifi_spi_send_remain_length; // 剩余的发送长度
-
-
-
-wifi_spi_information_struct wifi_spi_information;
+static fifo_struct wifi_spi_fifo;
+static uint8 wifi_spi_buffer[WIFI_SPI_RECVIVE_FIFO_SIZE];
+static volatile wifi_spi_state_enum wifi_spi_mutex;
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 请求写入数据到模块
-// 参数说明 length 需要写入的长度
-// @return void
-// Sample usage:
+// 函数简介 等待WIFI SPI就绪
+// 参数说明 wait_time 最大等待时间 单位毫秒
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_write_request(uint16 length)
+static uint8 wifi_spi_wait_idle (uint32 wait_time)
{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_REQUEST;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
- head.magic = 0xFE;
- head.sequence = wifi_spi_packet_num++;
- head.length = length;
+ uint32 time = 0;
- wifi_transmit_state = TRANSMIT_WRITE_REQUEST;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 读取模块状态
-// 参数说明 *length 需要读取或者写入的长度
-// @return WIFI_SPI_BUFFER_STATE_enum 模块状态
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static wifi_spi_buffer_state_enum wifi_spi_read_state(uint16 *length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_CHECK_STATE;
- head.addr = WIFI_SPI_STATE_ADDR;
- head.dummy = 0x00;
-
- wifi_spi_ack_flag = 0;
- wifi_transmit_state = TRANSMIT_READ_STATE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, &head.cmd, 7);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- if(BUFFER_WRITE == head.magic)
+ wait_time = wait_time*100;
+ while(0 == gpio_get_level(WIFI_SPI_INT_PIN))
{
- wifi_spi_packet_num = head.sequence;
- }
- *length = head.length;
-
- return (wifi_spi_buffer_state_enum)head.magic;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据发送完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_done(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_start(void)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_READ_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- wifi_transmit_state = TRANSMIT_READ;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 数据接收完成
-// 参数说明 void
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_done(void)
-{
- wifi_spi_buffer_struct head;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
-
- head.cmd = WIFI_SPI_READ_END;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_transmit_state = TRANSMIT_IDLE;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要写入数据的首地址
-// 参数说明 length 需要写入数据的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data(const uint8 *buff, uint16 length)
-{
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
- spi_write_8bit_array(WIFI_SPI_INDEX, buff, length);
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_data_multi(wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- wifi_spi_buffer_struct head;
-
- head.cmd = WIFI_SPI_WRITE_DATA;
- head.addr = WIFI_SPI_WRITE_ADDR;
- head.dummy = 0x00;
-
- wifi_transmit_state = TRANSMIT_WRITE;
- gpio_set_level(WIFI_SPI_CS_PIN, 0);
- spi_write_8bit_array(WIFI_SPI_INDEX, (const uint8 *)&head.cmd, 3);
-
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(NULL != multi_buffer->source[i]) spi_write_8bit_array(WIFI_SPI_INDEX, multi_buffer->source[i], multi_buffer->length[i]);
- }
- gpio_set_level(WIFI_SPI_CS_PIN, 1);
- wifi_spi_send_done();
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 接收模块发送的数据
-// 参数说明 *buff 接收数组的缓冲区首地址
-// 参数说明 length 需要接收的长度
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_receive_data(uint8 *buff, uint16 length)
-{
- spi_read_8bit_array(WIFI_SPI_INDEX, buff, length);
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送命令到模块
-// 参数说明 *str 命令字符串首地址
-// @return void
-// Sample usage:
-//-------------------------------------------------------------------------------------------------------------------
-static void wifi_spi_send_command(const char *str)
-{
- uint8 state = 0;
- uint16 send_length;
- uint16 wait_time = 0;
-
- // 请求发送数据
- send_length = (uint16)strlen(str);
-
- // 等待传输进入空闲
- while(TRANSMIT_IDLE != wifi_transmit_state);
-
- // 如果没有进入发送状态则重新请求发送数据
- while(BUFFER_WRITE != wifi_buffer_state)
- {
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
- while(!wifi_spi_ack_flag)
- {
- wait_time++;
- if((WAIT_TIME_OUT / 4) <= wait_time)
- {
- state = 1;
- wifi_spi_init_flag = 0; // 模块已断开
- break;
- }
- system_delay_ms(1);
- }
-
- if(1 == state)
+ system_delay_us(10);
+ time++;
+ if(wait_time <= time)
{
break;
}
}
-
- wifi_buffer_state = BUFFER_IDLE;
-
- if(0 == state) // 通讯未超时
- {
- wifi_spi_send_remain_length = send_length;
- // 发送消息
- wifi_spi_send_data((const uint8 *)str, send_length);
- }
+ return (wait_time <= time);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 检查模块状态并读取模块发送的数据
-// 参数说明 void
-// @return void
-// Sample usage:
+// 函数简介 写入数据到WIFI SPI
+// 参数说明 *buffer1 第一组需要发送的数据缓冲区地址
+// 参数说明 length1 第一组数据长度
+// 参数说明 *buffer2 第二组需要发送的数据缓冲区地址
+// 参数说明 length2 第二组数据长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-void wifi_spi_check_state_read_buffer(void)
+static void wifi_spi_write (const uint8 *buffer1, uint16 length1, const uint8 *buffer2, uint16 length2)
{
- uint16 wifi_spi_receive_length; // 本次接收到的数据数量
- uint8 wifi_spi_receive_buffer[WIFI_SPI_WRITE_MAX];
-
- // 查询WIFI模块的状态
- wifi_buffer_state = wifi_spi_read_state(&wifi_spi_receive_length);
-
- // 如果需要读取WIFI模块数据,则保存需要读取的长度
- if(BUFFER_READ == wifi_buffer_state)
+ gpio_low(WIFI_SPI_CS_PIN);
+ if(NULL != buffer1)
{
- wifi_spi_receive_start();
- do
- {
- if(wifi_spi_receive_length > WIFI_SPI_WRITE_MAX)
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, WIFI_SPI_WRITE_MAX); // 存入 FIFO
- wifi_spi_receive_length = wifi_spi_receive_length - WIFI_SPI_WRITE_MAX;
- }
- else
- {
- wifi_spi_receive_data((uint8 *)wifi_spi_receive_buffer, wifi_spi_receive_length);
- fifo_write_buffer(&wifi_spi_fifo, wifi_spi_receive_buffer, wifi_spi_receive_length); // 存入 FIFO
- wifi_spi_receive_length = 0;
- }
- }while(wifi_spi_receive_length > 0);
- wifi_spi_receive_done();
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer1, length1);
}
- else if(BUFFER_IDLE == wifi_buffer_state)
+ if(NULL != buffer2)
{
- // 如果模块内部缓冲区状态为空闲,则传输状态也设置为空闲
- wifi_transmit_state = TRANSMIT_IDLE;
+ spi_write_8bit_array(WIFI_SPI_INDEX, buffer2, length2);
}
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块
-// 参数说明 *buff 需要发送的数据首地址
-// 参数说明 length 需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage:
+// 函数简介 WIFI SPI 发送与接收同时进行(命令收发)
+// 参数说明 *packets 发送与接收的地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data(const uint8 *buff, uint32 length)
+static void wifi_spi_transfer_command (wifi_spi_packets_struct *packets, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- wifi_spi_send_remain_length = length;
-
- while(wifi_spi_send_remain_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(packets->head), (uint8 *)&(packets->head), sizeof(wifi_spi_head_struct));
+
+ if(length)
{
- send_length = (uint16)func_limit_ab(wifi_spi_send_remain_length, 1, WIFI_SPI_WRITE_MAX);
-
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data(buff, send_length);
- buff += send_length;
- wifi_spi_send_remain_length -= send_length;
- wifi_buffer_state = BUFFER_IDLE;
- }
- else
- {
- break;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, (const uint8 *)(packets->buffer), packets->buffer, length);
}
-
- return wifi_spi_send_remain_length;
+
+ gpio_high(WIFI_SPI_CS_PIN);
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 发送数据到模块(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// @return uint32 剩余未发送长度
-// Sample usage: 发送数据总长度不能超过4092个
+// 函数简介 WIFI SPI 发送与接收同时进行(数据收发)
+// 参数说明 *write_data 发送的数据缓冲区地址
+// 参数说明 *read_data 接收到的数据的存储地址
+// 参数说明 length 需要接收的长度
+// 返回参数 void
+// 使用示例 内部使用,用户无需关心
+// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_write_data_multi(wifi_spi_send_multi_struct *multi_buffer)
+static void wifi_spi_transfer_data (const uint8 *write_data, wifi_spi_packets_struct *read_data, uint16 length)
{
- uint16 send_length;
- uint32 wait_time;
+ gpio_low(WIFI_SPI_CS_PIN);
- // 记录需要发送的长度
- send_length = multi_buffer->length[0] + multi_buffer->length[1] + multi_buffer->length[2] + multi_buffer->length[3] + multi_buffer->length[4] + multi_buffer->length[5] + multi_buffer->length[6] + multi_buffer->length[7];
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = length;
- if(WIFI_SPI_WRITE_MAX >= send_length)
+ spi_transfer_8bit(WIFI_SPI_INDEX, (uint8 *)&(read_data->head), (uint8 *)&(read_data->head), sizeof(wifi_spi_head_struct));
+
+ if(WIFI_SPI_RECVIVE_SIZE < length)
{
- // 请求发送数据
- wifi_spi_ack_flag = 0;
- wifi_spi_write_request(send_length);
-
- // 最长等待5秒
- wait_time = 5000;
- while(!wifi_spi_ack_flag)
- {
- wait_time--;
- if(0 == wait_time) break;
- system_delay_ms(1);
- }
-
- if(BUFFER_WRITE == wifi_buffer_state)
- {
- // 发送消息
- wifi_spi_send_data_multi(multi_buffer);
- send_length = 0;
- wifi_buffer_state = BUFFER_IDLE;
- }
+ spi_transfer_8bit(WIFI_SPI_INDEX, write_data, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ spi_write_8bit_array(WIFI_SPI_INDEX, &write_data[WIFI_SPI_RECVIVE_SIZE], length - WIFI_SPI_RECVIVE_SIZE);
}
-
- return send_length;
+ else
+ {
+ // 将需要发送的数据拷贝到读取缓冲区,避免出现write_data越界访问
+ memcpy(read_data->buffer, write_data, length);
+ spi_transfer_8bit(WIFI_SPI_INDEX, read_data->buffer, read_data->buffer, WIFI_SPI_RECVIVE_SIZE);
+ }
+ gpio_high(WIFI_SPI_CS_PIN);
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 等待模块响应
-// 参数说明 *wait_buffer 等待的响应的字符串
-// 参数说明 timeout 超时时间
-// 返回参数 uint8 0:模块响应指定数据 1:模块未响应指定数据或超时
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_wait_ack (char *wait_buffer, uint32 timeout)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 参数设置
+// 参数说明 command 命令类型
+// 参数说明 *buffer 参数地址
+// 参数说明 length 参数长度
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_set_parameter (wifi_spi_packets_command_enum command, uint8 *buffer, uint16 length, uint32 wait_time)
{
- uint8 return_state = 1;
- char receiver_buffer[8] = {0, 0, 0, 0, 0, 0, 0, 0};
- uint32 receiver_len = 8;
-
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- system_delay_ms(1);
- // 判断接收缓冲区内是否有需要响应的指定数据 如果有 则跳出循环并且返回0
- receiver_len = 8;
- fifo_read_tail_buffer(&wifi_spi_fifo, (uint8 *)receiver_buffer, &receiver_len, FIFO_READ_ONLY);
+ head.command = command;
+ head.length = length;
+
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
- if(strstr(receiver_buffer, wait_buffer))
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), buffer, length);
+ if(wifi_spi_wait_idle(wait_time))
+ {
+ break;
+ }
+ // 接收应答信号
+
+ head.command = WIFI_SPI_DATA;
+ head.length = 0;
+ wifi_spi_transfer_command((wifi_spi_packets_struct *)&head, head.length);
+ system_delay_us(20);
+ if(WIFI_SPI_REPLY_OK == head.command)
{
return_state = 0;
- break;
}
- else if(strstr(receiver_buffer, "ERROR") || strstr(receiver_buffer, "busy"))
- {
- // 如果接收到报错或者模块忙 则跳出循环并且返回1
- return_state = 1;
- break;
- }
- }while(timeout --);
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 清除WiFi接收缓冲区内容
-// 参数说明 void
-// 返回参数 void
-// 使用示例 wifi_spi_clear_receive_buffer();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static void wifi_spi_clear_receive_buffer (void)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 模块信息获取
+// 参数说明 command 命令类型
+// 参数说明 *buffer 保存接收到的参数地址
+// 参数说明 wait_time 最大等待时间 单位100微妙
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 内部使用,用户无需关心
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_parameter (wifi_spi_packets_command_enum command, wifi_spi_packets_struct *read_data, uint32 wait_time)
{
- // 清空WiFi接收缓冲区
- fifo_clear(&wifi_spi_fifo);
-}
+ uint8 return_state;
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块数据解析
-// 参数说明 *target_buffer 目标存放地址指针 字符串数组
-// 参数说明 *origin_buffer 数据来源地址指针 字符串数组
-// 参数说明 start_char 起始提取字节 例如从 "1234" 中从 '2' 开始提取 就应该填入 '2'
-// 参数说明 end_char 结束提取字节 例如从 "1234" 中在 '4' 结束提取 就应该填入 '\0'(0x00 空字符 一般是字符串结尾)
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_data_parse(wifi_spi_information.mac, wifi_spi_receive_buffer, '"', '"'); // 调用获取本机mac地址后,调用此函数提取mac地址
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_data_parse (uint8 *target_buffer, uint8 *origin_buffer, char start_char, char end_char)
-{
- uint8 return_state = 0;
- char *location1;
- char *location2;
- location1 = strchr((char *)origin_buffer, start_char);
- if(location1)
+ return_state = 1;
+ do
{
- location1 ++;
- location2 = strchr(location1, end_char);
- if(location2)
+ // 等待从机准备就绪
+ if(wifi_spi_wait_idle(wait_time))
{
- memcpy(target_buffer, location1, location2-location1);
+ break;
}
- else
+ read_data->head.command = command;
+ wifi_spi_write(&(read_data->head.command), WIFI_SPI_RECVIVE_SIZE, NULL, 0);
+
+ if(wifi_spi_wait_idle(wait_time))
{
- return_state = 1;
+ break;
}
- }
- else
- {
- return_state = 1;
- }
+ read_data->head.command = WIFI_SPI_DATA;
+ read_data->head.length = 0;
+ wifi_spi_transfer_command(read_data, WIFI_SPI_RECVIVE_SIZE);
+ return_state = 0;
+ }while(0);
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查看模块版本信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_version();
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 固件版本获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,固件版本信息以字符串形式保存在wifi_spi_version数组中
+//-------------------------------------------------------------------------------------------------------------------
static uint8 wifi_spi_get_version (void)
{
- char *location1;
- uint8 return_state = 0;
- uint8 receiver_buffer[256];
- uint32 receiver_len = 256;
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+GMR\r\n");
- do
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_VERSION, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_VERSION == temp_packets.head.command))
{
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- location1 = strrchr((char *)receiver_buffer, ':');
- if(wifi_spi_data_parse(wifi_spi_information.version, (uint8 *)location1, ':', '('))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
+ memcpy(wifi_spi_version, temp_packets.buffer, temp_packets.head.length);
+ }
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 模块回显设置
-// 参数说明 model 0:关闭模块的回写功能 其他:开启模块回写
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_echo_set("1");//开启模块回写功能
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_echo_set (char *model)
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI MAC地址获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_mac_addr (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- if('1' == *model)
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_MAC_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_MAC_ADDR == temp_packets.head.command))
{
- wifi_spi_send_command("ATE1\r\n");
+ memcpy(wifi_spi_mac_addr, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI IP地址与端口号获取
+// 参数说明 void 端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 调用函数之后,IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+// 需要在连接Socket之后调用此函数才能正常获取信息
+//-------------------------------------------------------------------------------------------------------------------
+static uint8 wifi_spi_get_ip_addr_port (void)
+{
+ uint8 return_state;
+ wifi_spi_packets_struct temp_packets;
+
+ return_state = wifi_spi_get_parameter(WIFI_SPI_GET_IP_ADDR, &temp_packets, OTHER_TIME_OUT);
+ if((0 == return_state) && (WIFI_SPI_REPLY_IP_ADDR == temp_packets.head.command))
+ {
+ memcpy(wifi_spi_ip_addr_port, temp_packets.buffer, temp_packets.head.length);
+ }
+ return return_state;
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的WiFi信息并尝试连接WiFi
+// 参数说明 *wifi_ssid WIFI名称
+// 参数说明 *pass_word WIFI密码
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_wifi_connect("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_wifi_connect("SEEKFREE", NULL); // 连接没有密码的WIFI热点
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word)
+{
+ uint8 return_state;
+ uint8 temp_buffer[64];
+ uint16 length;
+
+ if(NULL != pass_word)
+ {
+ // WIFI热点有密码发送热点名称与密码
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n", wifi_ssid, pass_word);
}
else
{
- wifi_spi_send_command("ATE0\r\n");
+ // WIFI热点没有密码只需要发送热点名称
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n", wifi_ssid);
}
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_WIFI_INFORMATION, temp_buffer, length, WIFI_CONNECT_TIME_OUT);
+
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块自身 的 MAC 地址
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_mac()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_mac (void)
-{
- uint8 return_state = 0;
- uint8 receiver_buffer[64];
- uint32 receiver_len = 64;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPAPMAC?\r\n");
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
-
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.mac, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块或者目标WIFI 的 IP 地址(取决于模块当前的工作模式)
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_ip()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_ip (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_STATION == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPSTA?\r\n");
- }
- else if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- wifi_spi_send_command("AT+CIPAP?\r\n");
- }
-
- do
- {
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- if(wifi_spi_data_parse(wifi_spi_information.local_ip, receiver_buffer, '"', '"'))
- {
- return_state = 1;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 查询模块的相关信息
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 if(wifi_spi_get_information()){}
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_get_information (void)
-{
- uint8 return_state = 0;
- do
- {
- // 获取模块版本号
- if(wifi_spi_get_version())
- {
- return_state = 1;
- break;
- }
- // 获取模块IP地址
- if(wifi_spi_get_ip())
- {
- return_state = 1;
- break;
- }
- // 获取模块MAC信息
- if(wifi_spi_get_mac())
- {
- return_state = 1;
- break;
- }
- memcpy(wifi_spi_information.local_port, "no port", 7);
- }while(0);
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 连接 WiFi
-// 参数说明 wifi_ssid WiFi名称
-// 参数说明 pass_word WiFi密码
-// 参数说明 model 0:查询WiFi连接情况 其他:连接WiFi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_get_or_connect_wifi("WiFi_name", "Pass_word", 1);
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_wifi (char *wifi_ssid, char *pass_word)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SOFTAP == wifi_spi_information.mode)
- {
- sprintf(temp, "AT+CWSAP=\"%s\",\"%s\",5,3\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- else
- {
- sprintf(temp, "AT+CWJAP=\"%s\",\"%s\"\r\n", wifi_ssid, pass_word);
- wifi_spi_send_command(temp);
- }
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 上电是否自动连接WiFi
-// 参数说明 model 0:上电不自动连接wifi 其他:上电自动连接wifi
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_auto_connect_wifi(0); //上电不自动连接wifi
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_auto_connect_wifi (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CWAUTOCONN=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置连接模式
-// 参数说明 model 0: 单连接模式 1:多连接模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_connect_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_connect_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMUX=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置传输模式
-// 参数说明 model – 0: 普通传输模式 IP断开后不重新连接
-// – 1: Wi-Fi 透传接收模式,仅支持 TCP 单连接、UDP 固定通信对端、SSL 单连接的情况 IP断开后会不断尝试重新连接
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_transfer_model("1");
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-static uint8 wifi_spi_set_transfer_model (char *model)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPMODE=%s\r\n", model);
- wifi_spi_send_command(temp);
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 设置模块模式 (Station/SoftAP/Station+SoftAP)
-// 参数说明 state 0:无 Wi-Fi 模式,并且关闭 Wi-Fi RF----1: Station 模式----2: SoftAP 模式----3: SoftAP+Station 模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_set_model("1");
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 设置连接的Socket信息并尝试连接Socket
+// 参数说明 *transport_type 传输类型
+// 参数说明 *ip_addr IP地址
+// 参数说明 *port 目标端口号
+// 参数说明 *local_port 本机端口号
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_connect("TCP", "192.168.2.5", "8080", "6060");
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_set_model (wifi_spi_mode_enum mode)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port)
{
- uint8 return_state = 0;
+ uint8 return_state;
+ uint8 temp_buffer[41];
+ uint16 length;
+
+ length = (uint16)sprintf((char *)temp_buffer, "%s\r\n%s\r\n%s\r\n%s\r\n", transport_type, ip_addr, port, local_port);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ return_state = wifi_spi_set_parameter(WIFI_SPI_SET_SOCKET_INFORMATION, temp_buffer, length, SOCKET_CONNECT_TIME_OUT);
- if(WIFI_SPI_SOFTAP == mode)
- {
- wifi_spi_send_command("AT+CWMODE=2\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CWMODE=1\r\n");
- }
- // 设置模块工作模式
- wifi_spi_information.mode = mode;
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 本机IP地址与端口号信息以字符串形式保存在wifi_spi_ip_addr_port数组中
+ wifi_spi_get_ip_addr_port();
return return_state;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 关闭睡眠模式
-// 参数说明 mode
-// 返回参数 uint8 0:成功 1:失败
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 断开Socket连接
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例 wifi_spi_socket_disconnect();
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_socket_disconnect (void)
+{
+ wifi_spi_packets_struct temp_packets;
+
+ return wifi_spi_get_parameter(WIFI_SPI_CLOSE_SOCKET, &temp_packets, OTHER_TIME_OUT);
+}
+
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 软复位
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
// 使用示例
// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_close_sleep_model (void)
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_reset (void)
{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+SLEEP=0\r\n");
- // 设置模块工作模式
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开与wifi的连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnected_wifi();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnected_wifi (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CWQAP\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 进入打开透传模式
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_entry_serianet();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_entry_serianet (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSEND\r\n");
- return_state = wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 退出透传模式
-// 参数说明 model 0:关闭透传模式 其他:开启透传模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_exit_serianet(1);
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_exit_serianet (void)
-{
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- system_delay_ms(20);
- wifi_spi_send_command("+++");
- system_delay_ms(1000);
-
- return 0;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立TCP连接
-// 参数说明 ip 远端 IPv4 地址、IPv6 地址,或域名
-// 参数说明 port 远端端口值
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_tcp_servers("192.168.101.110", "8080");
-// 备注信息 如果总是连接不上电脑的TCP服务器 可以尝试使用网线连接电脑
-// 如果是使用WiFi连接 可能会导致模块连接TCP服务器等待较长时间
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ uint8 return_state;
+ wifi_spi_head_struct head;
+ return_state = 1;
do
{
- if(wifi_spi_set_connect_model("0"))
+ head.command = WIFI_SPI_RESET;
+ head.length = 0xA5A5;
+ return_state = wifi_spi_wait_idle(OTHER_TIME_OUT);
+ if(return_state)
{
- return_state = 1;
break;
}
+ wifi_spi_write(&head.command, sizeof(wifi_spi_head_struct), NULL, 0);
+ }while(0);
+
+ return return_state;
+}
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- sprintf(temp, "AT+CIPSTARTEX=\"TCP\",\"%s\",%s\r\n", ip, port);
- wifi_spi_send_command(temp);
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI UDP模式时立即发送函数
+// 参数说明 void
+// 返回参数 uint8 状态 0-成功 1-错误
+// 使用示例
+// 备注信息 在UDP模式下模块收到数据后会等待2毫秒,2毫秒后未收到数据则将数据通过socket发送到网络,如果希望立即发送则在数据传输完毕后调用此函数
+//-------------------------------------------------------------------------------------------------------------------
+uint8 wifi_spi_udp_send_now (void)
+{
+ uint8 return_state = 1;
+ wifi_spi_packets_struct temp_packets;
+
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+ do
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- // 设置传输模式
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_send_command("AT+CIPSTATE?\r\n");
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- break;
- }
- else
- {
- uint8 receiver_buffer[128];
- uint32 receiver_len = 128;
- fifo_read_buffer(&wifi_spi_fifo, receiver_buffer, &receiver_len, FIFO_READ_ONLY);
- char* buffer_index = (char *)receiver_buffer;
- char* end_index;
-
- buffer_index += 22;
- buffer_index += strlen(ip);
- buffer_index += strlen(port);
- end_index = strchr(buffer_index, ',');
-
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, buffer_index, (end_index - buffer_index));
- }
-
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_TCP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 建立UDP连接
-// 参数说明 *ip 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 *port 远端端口值 字符串形式
-// 参数说明 *local_port 远端 IPv4 地址、IPv6 地址 或域名 字符串形式
-// 参数说明 mode 模块数据通信模式
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_connect_udp_client("192.168.101.110", "8080", "8080", WIFI_SPI_COMMAND);
-// 备注信息 自动分配ID
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode)
-{
- char temp[64];
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(wifi_spi_set_connect_model("0"))
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
+ // 立即开始socket发送
+ temp_packets.head.command = WIFI_SPI_UDP_SEND;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ // 等待应答信号
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 接收应答信号
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, temp_packets.head.length);
+
+ if(WIFI_SPI_REPLY_OK == temp_packets.head.command)
+ {
+ return_state = 0;
+ }
+
+ }while(0);
- sprintf(temp, "AT+CIPSTARTEX=\"UDP\",\"%s\",%s,%s\r\n", ip, port, local_port);
- wifi_spi_send_command(temp);
+ // 将通讯状态设置为空闲
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+
+ return return_state;
+}
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
+//-------------------------------------------------------------------------------------------------------------------
+// 函数简介 WIFI SPI 数据块发送函数并同步接收数据
+// 参数说明 *buff 需要发送的数据地址
+// 参数说明 length 发送长度
+// 返回参数 uint32 剩余未发送的长度
+// 使用示例 wifi_spi_send_buffer(buffer, 100);
+// 备注信息
+//-------------------------------------------------------------------------------------------------------------------
+uint32 wifi_spi_send_buffer (const uint8 *buffer, uint32 length)
+{
+ uint16 send_length;
+ wifi_spi_packets_struct temp_packets;
+
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ while(length)
{
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(wifi_spi_set_transfer_model(WIFI_SPI_COMMAND == mode ? "0" : "1")) // 设置传输模式
- {
- return_state = 1;
- break;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- if(WIFI_SPI_SERIANET == mode) // 透传模式下直接开启透传
- {
- if(wifi_spi_entry_serianet())
+ send_length = length > WIFI_SPI_TRANSFER_SIZE ? (uint16)WIFI_SPI_TRANSFER_SIZE : (uint16)length;
+
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
{
- return_state = 1;
break;
}
- }
- memcpy(wifi_spi_information.local_port, " ", 7);
- memcpy(wifi_spi_information.local_port, local_port, strlen(local_port));
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_ON;
- wifi_spi_information.connect_mode = WIFI_SPI_UDP_CLIENT;
- wifi_spi_information.transfer_mode = mode;
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//--------------------------------------------------------------------------------------------------
-// 函数简介 断开连接 TCP Server 使用本接口将会断开所有连接
-// 参数说明 void
-// 返回参数 uint8 0:成功 1:失败
-// 使用示例 wifi_spi_disconnect_link();
-// 备注信息
-//--------------------------------------------------------------------------------------------------
-uint8 wifi_spi_disconnect_link (void)
-{
- uint8 return_state = 0;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- do
- {
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- wifi_spi_send_command("AT+CIPCLOSE=5\r\n");
- }
- else
- {
- wifi_spi_send_command("AT+CIPCLOSE\r\n");
- }
-
- if(wifi_spi_wait_ack("OK", WAIT_TIME_OUT))
- {
- return_state = 1;
- wifi_spi_information.connect_state = WIFI_SPI_SERVER_OFF;
- break;
- }
- }while(0);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
-
- return return_state;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字节函数
-// 参数说明 data 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_byte(0xa5);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_byte (uint8 data)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = 1;
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(&data, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- send_length = (uint16)wifi_spi_write_data(&data, send_length);
- }
- }
- }
-
- return send_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数
-// 参数说明 buff 需要发送的数据地址
-// 参数说明 len 发送长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_buffer("123", 3);
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 len)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- while(len)
- {
- if((WIFI_SPI_WRITE_MAX * 2) < len) send_length = WIFI_SPI_WRITE_MAX * 2;
- else
- {
- send_length = (uint16)len;
- }
- len -= send_length;
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data(buff, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
- buff += send_length;
- }
-
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
- {
- len = wifi_spi_write_data(buff, len);
- }
- }
- }
-
- return len;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送缓冲区函数(多个源地址)
-// 参数说明 *multi_buffer 多个源地址以及每个源地址需要发送的长度
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例
-// 备注信息 需要发送多个数组时,采用此函数可以极大的降低通讯时间,发送数据总长度不能超过4092
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer)
-{
- uint8 i;
- uint16 remain_length;
-
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- for(i = 0; i < WIFI_SPI_MAX_MULTI; i++)
- {
- if(multi_buffer->source[i]) wifi_spi_send_buffer(multi_buffer->source[i], multi_buffer->length[i]);
- }
- }
- else
- {
- remain_length = (uint16)wifi_spi_write_data_multi(multi_buffer);
- }
- }
- }
-
- return remain_length;
-}
-
-//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi模块 发送字符串函数
-// 参数说明 *str 需要发送的数据
-// 返回参数 uint32 剩余未发送数据长度
-// 使用示例 wifi_spi_send_string("123");
-// 备注信息 当模块作为TCP服务器时,发送数据函数默认将数据发送至第一个连接模块的客户端
-//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_send_string (const char *str)
-{
- char temp[64];
- uint8 temp_length;
- uint16 send_length;
-
- send_length = (uint16)strlen(str);
- if(wifi_spi_init_flag)
- {
- if(WIFI_SPI_SERVER_ON == wifi_spi_information.connect_state)
- {
- if(WIFI_SPI_COMMAND == wifi_spi_information.transfer_mode)
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- temp_length = (uint8)sprintf(temp, "AT+CIPSEND=");
-
- if(WIFI_SPI_TCP_SERVER == wifi_spi_information.connect_mode)
- {
- temp_length += sprintf(&temp[temp_length], "0,");
- }
-
- temp_length += sprintf(&temp[temp_length], "%u\r\n", send_length);
-
- wifi_spi_send_command(temp);
- if(0 == wifi_spi_wait_ack("OK", WAIT_TIME_OUT)) // 等待模块响应
- {
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_write_data((uint8 *)str, send_length);
- wifi_spi_wait_ack("bytes", 50);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- wifi_spi_wait_ack("OK", WAIT_TIME_OUT);
- }
+ wifi_spi_transfer_data(buffer, &temp_packets, send_length);
- wifi_spi_clear_receive_buffer(); // 清空WiFi接收缓冲区
- }
- else
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
{
- send_length = (uint16)wifi_spi_write_data((uint8 *)str, send_length);
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+
+ length -= send_length;
+ buffer += send_length;
+ }
+
+ // 检查最后一次的接收是否将所有的数据都接收完毕
+ while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command)
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+
+ // 继续读取模块剩余数据
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
}
}
+ wifi_spi_mutex = WIFI_SPI_IDLE;
}
-
- return send_length;
+ return length;
}
//-------------------------------------------------------------------------------------------------------------------
-// 函数简介 WiFi 模块数据接收函数
-// 参数说明 buffer 接收数据的存放地址
-// 参数说明 len 数组长度,可直接填写或者使用sizeof求得
-// 返回参数 uint32 返回实际接收到的数据长度
-// 使用示例 uint8 test_buffer[256]; wifi_spi_read_buffer(&test_buffer[0], sizeof(test_buffer));
+// 函数简介 WIFI SPI 读取缓冲区
+// 参数说明 *buff 接收缓冲区
+// 参数说明 length 读取数据长度
+// 返回参数 uint32 实际读取数据长度
+// 使用示例 wifi_spi_read_buffer(buffer, 100);
// 备注信息
//-------------------------------------------------------------------------------------------------------------------
-uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 len)
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length)
{
- fifo_read_buffer(&wifi_spi_fifo, buffer, &len, FIFO_READ_AND_CLEAN);
- return len;
+ zf_assert(NULL != buffer);
+ uint32 data_len = length;
+
+#if(1 == WIFI_SPI_READ_TRANSFER)
+
+ wifi_spi_packets_struct temp_packets;
+ // 检查WIFI SPI状态,如果在其他中断或者线程中已经发起了通讯,则本次不能发送数据
+ if(WIFI_SPI_IDLE == wifi_spi_mutex)
+ {
+ // 将通讯状态设置为忙
+ wifi_spi_mutex = WIFI_SPI_BUSY;
+
+ // 发起通讯查看模块内是否有数据未读取
+ do
+ {
+ if(wifi_spi_wait_idle(OTHER_TIME_OUT))
+ {
+ break;
+ }
+ temp_packets.head.command = WIFI_SPI_DATA;
+ temp_packets.head.length = 0;
+ wifi_spi_transfer_command(&temp_packets, WIFI_SPI_RECVIVE_SIZE);
+ // 检查收到的包中是否有数据
+ if((WIFI_SPI_REPLY_DATA_START == temp_packets.head.command) || (WIFI_SPI_REPLY_DATA_END == temp_packets.head.command))
+ {
+ // 保存接收到的数据
+ if(temp_packets.head.length)
+ {
+ fifo_write_buffer(&wifi_spi_fifo, temp_packets.buffer, temp_packets.head.length);
+ }
+ }
+ }while(WIFI_SPI_REPLY_DATA_START == temp_packets.head.command);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
+ }
+#endif
+
+ fifo_read_buffer(&wifi_spi_fifo, buffer, &data_len, FIFO_READ_AND_CLEAN);
+ return data_len;
}
-//--------------------------------------------------------------------------------------------------
-// 函数简介 wifi spi handshake中断回调函数
-// 参数说明 void
-// 返回参数 void
-// 备注信息 内部调用
-//--------------------------------------------------------------------------------------------------
-void wifi_spi_callback (void)
-{
- wifi_spi_check_state_read_buffer();
- wifi_spi_ack_flag = 1; // ACK标志位置1
-}
-
-
//-------------------------------------------------------------------------------------------------------------------
// 函数简介 WiFi 模块初始化
// 参数说明 *wifi_ssid 目标连接的 WiFi 的名称 字符串形式
// 参数说明 *pass_word 目标连接的 WiFi 的密码 字符串形式
-// 参数说明 wifi_mode 模块的工作模式 参照 zf_device_wireless_spi.h 中 wifi_spi_mode_enum 枚举
// 返回参数 uint8 模块初始化状态 0-成功 1-错误
-// 使用示例 wifi_spi_init("SEEKFREE_2.4G", "SEEKFREEV2", WIFI_UART_STATION);
-// 备注信息 初始化会首先设置串口配置,之后会对模块进行基本参数配置
-// 具体的配置信息可以在 zf_device_wireless_spi.h 文件中修改
+// 使用示例 wifi_spi_init("SEEKFREE", "SEEKFREE123");
+// 备注信息 wifi_spi_init("SEEKFREE", NULL); // 连接没有密码的WIFI热点
//-------------------------------------------------------------------------------------------------------------------
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode)
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word)
{
uint8 return_state = 0;
- uint32 temp_isr;
-
- spi_init(WIFI_SPI_INDEX, SPI_MODE0, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
- set_wireless_type(WIFI_SPI, wifi_spi_callback);
- fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_BUFFER_SIZE);
+ fifo_init(&wifi_spi_fifo, FIFO_DATA_8BIT, wifi_spi_buffer, WIFI_SPI_RECVIVE_FIFO_SIZE);
+ spi_init(WIFI_SPI_INDEX, SPI_MODE3, WIFI_SPI_SPEED, WIFI_SPI_SCK_PIN, WIFI_SPI_MOSI_PIN, WIFI_SPI_MISO_PIN, SPI_CS_NULL);//硬件SPI初始化
gpio_init(WIFI_SPI_CS_PIN, GPO, 1, GPO_PUSH_PULL);
gpio_init(WIFI_SPI_RST_PIN, GPO, 1, GPO_PUSH_PULL);
-
- temp_isr = interrupt_global_disable();
-
- exti_init(WIFI_SPI_INT_PIN, EXTI_TRIGGER_RISING);
-
+ gpio_init(WIFI_SPI_INT_PIN, GPI, 0, GPI_PULL_DOWN);
+
+ // 复位
gpio_set_level(WIFI_SPI_RST_PIN, 0);
- system_delay_ms(50);
+ system_delay_ms(10);
gpio_set_level(WIFI_SPI_RST_PIN, 1);
- system_delay_ms(1000);
+
+ // 等待模块初始化
+ system_delay_ms(100);
+ wifi_spi_mutex = WIFI_SPI_IDLE;
- exti_flag_clear(WIFI_SPI_INT_PIN);
-
- interrupt_global_enable(temp_isr);
do
{
- if(wifi_spi_echo_set("0")) // 关闭模块回写
+ // 固件版本信息以字符串形式保存在wifi_spi_version数组中
+ return_state = wifi_spi_get_version();
+ if(return_state)
+ {
+ break;
+ }
+
+ // MAC地址信息以字符串形式保存在wifi_spi_mac_addr数组中
+ wifi_spi_get_mac_addr();
+
+
+ return_state = wifi_spi_wifi_connect(wifi_ssid, pass_word);
+ if(return_state)
{
- zf_log(0, "exit echo failed");
- return_state = 1;
break;
}
- if(wifi_spi_auto_connect_wifi("0")) // 关闭自动连接
+ #if(1 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("TCP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "close auto connect failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_set_model(wifi_mode)) // 设置运行模式
+ #endif
+
+ #if(2 == WIFI_SPI_AUTO_CONNECT)
+ return_state = wifi_spi_socket_connect("UDP", WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT);
+ if(return_state)
{
- zf_log(0, "set run mode failed");
- return_state = 1;
break;
}
-
- if(wifi_spi_close_sleep_model()) // 关闭睡眠模式
- {
- zf_log(0, "set sleep mode failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_set_wifi((char *)wifi_ssid, (char *)pass_word)) // 连接 wifi 或者开启热点
- {
- zf_log(0, "wifi set failed");
- return_state = 1;
- break;
- }
-
- if(wifi_spi_get_information()) // 模块基本参数获取
- {
- zf_log(0, "get module information failed");
- return_state = 1;
- break;
- }
-#if WIFI_SPI_AUTO_CONNECT == 1
- if(wifi_spi_connect_tcp_servers(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_SERIANET)) // 连接TCP服务器
- {
- zf_log(0, "connect TCP server failed");
- return_state = 1;
- break;
- }
-#endif
-#if WIFI_SPI_AUTO_CONNECT == 2
- if(wifi_spi_connect_udp_client(WIFI_SPI_TARGET_IP, WIFI_SPI_TARGET_PORT, WIFI_SPI_LOCAL_PORT, WIFI_SPI_SERIANET)) // 建立UDP连接
- {
- zf_log(0, "connect UDP server failed");
- return_state = 1;
- break;
- }
-#endif
- // 模块初始化成功
- wifi_spi_init_flag = 1;
+ #endif
}while(0);
-
+
return return_state;
}
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.h
index 5e5a025..24e7eb1 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_spi.h
@@ -24,13 +24,13 @@
* 文件名称 zf_device_wifi_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
-*
+*
* 修改记录
* 日期 作者 备注
-* 2023-05-27 pudding first version
+* 2024-01-18 SeekFree first version
********************************************************************************************************************/
/*********************************************************************************************************************
* 接线定义:
@@ -53,128 +53,100 @@
#include "zf_common_typedef.h"
+
#define WIFI_SPI_INDEX (SPI_3 ) // 定义使用的SPI号
-#define WIFI_SPI_SPEED (30 * 1000 * 1000 ) // 硬件 SPI 速率
+#define WIFI_SPI_SPEED (50 * 1000 * 1000 ) // 硬件 SPI 速率
#define WIFI_SPI_SCK_PIN (SPI3_SCLK_P22_3 ) // 定义SPI_SCK引脚
#define WIFI_SPI_MOSI_PIN (SPI3_MOSI_P22_0 ) // 定义SPI_MOSI引脚
#define WIFI_SPI_MISO_PIN (SPI3_MISO_P22_1 ) // 定义SPI_MISO引脚 IPS没有MISO引脚,但是这里任然需要定义,在spi的初始化时需要使用
#define WIFI_SPI_CS_PIN (P22_2 ) // 定义SPI_CS引脚 采用软件CS引脚
-#define WIFI_SPI_INT_PIN (ERU_CH5_REQ1_P15_8) // 定义中断引脚
+#define WIFI_SPI_INT_PIN (P15_8 ) // 定义握手引脚
#define WIFI_SPI_RST_PIN (P23_1 ) // 定义复位引脚
-
-
-#define WIFI_SPI_BUFFER_SIZE (1024) // 定义SPI接收的缓冲区大小
-#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不连接 1-自动连接TCP服务器并进入透传模式 2-自动连接UDP服务器并进入透传模式 3:自动建立TCP服务器
-
-#if (WIFI_SPI_AUTO_CONNECT > 2)
+
+#define WIFI_SPI_RECVIVE_FIFO_SIZE (1024) // 接收FIFO大小
+#define WIFI_SPI_READ_TRANSFER (1) // 在调用wifi_spi_read_buffer 是否尝试发起SPI通讯来检测模块内是否有数据需要读取 1:发起SPI通讯 0:不发起SPI通讯,仅读取FIFO
+ // 如果应用程序中没有任何的地方调用发送函数,则WIFI_SPI_READ_TRANSFER必须设置为1
+
+#define WIFI_SPI_AUTO_CONNECT (0) // 定义是否初始化时建立TCP或者UDP连接 0-不自动连接 1-自动连接TCP服务器 2-自动连接UDP
+
+#if (WIFI_SPI_AUTO_CONNECT > 2)
#error "WIFI_SPI_AUTO_CONNECT 的值只能为 [0,1,2]"
#else
-#define WIFI_SPI_TARGET_IP "192.168.2.28" // 连接目标的 IP
+#define WIFI_SPI_TARGET_IP "192.168.137.1" // 连接目标的 IP
#define WIFI_SPI_TARGET_PORT "8080" // 连接目标的端口
-#define WIFI_SPI_LOCAL_PORT "8080" // 本机端口
+#define WIFI_SPI_LOCAL_PORT "6666" // 本机的端口 0:随机 可设置范围2048-65535 默认 6666
#endif
-#define WIFI_SPI_MAX_MULTI (17) // 多地址发送,最大8个地址
-typedef enum
-{
- BUFFER_IDLE, // 模块的缓冲区是空闲的
- BUFFER_READ, // 模块的缓冲区有数据需要读取
- BUFFER_WRITE, // 模块的缓冲区是可写的
-}wifi_spi_buffer_state_enum;
+#define WIFI_SPI_RECVIVE_SIZE (32) // 每次SPI传输接收的字节数 不允许修改
+#define WIFI_SPI_TRANSFER_SIZE (4088) // 最大SPI传输接收的字节数 不允许修改
+
+
typedef enum
-{
- TRANSMIT_IDLE, // 当前没有传输
- TRANSMIT_WRITE_REQUEST, // 给模块发送了一个传输请求
- TRANSMIT_READ_STATE, // 读取模块状态
- TRANSMIT_READ, // 正在读取模块内部数据
- TRANSMIT_WRITE, // 正在往模块写入数据
-}wifi_spi_transmit_state_enum;
-
-typedef enum
-{
- WIFI_SPI_STATION, // 设备模式
- WIFI_SPI_SOFTAP, // AP模式
-}wifi_spi_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_COMMAND, // 使用命令的方式发送数据
- WIFI_SPI_SERIANET, // 使用透传的方式发送数据
-}wifi_spi_transfer_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_TCP_CLIENT, // 模块连接TCP服务器
- WIFI_SPI_TCP_SERVER, // 模块作为TCP服务器
- WIFI_SPI_UDP_CLIENT, // 模块启用UDP连接
-}wifi_spi_connect_mode_enum;
-
-typedef enum
-{
- WIFI_SPI_SERVER_OFF, // 模块未连接服务器
- WIFI_SPI_SERVER_ON, // 模块已经连接服务器
-}wifi_spi_connect_state_enum;
-
-typedef enum
-{
- WIFI_SPI_LINK_0, // 模块当前链接 0
- WIFI_SPI_LINK_1, // 模块当前链接 1
- WIFI_SPI_LINK_2, // 模块当前链接 2
- WIFI_SPI_LINK_3, // 模块当前链接 3
- WIFI_SPI_LINK_4, // 模块当前链接 4
-}wifi_spi_link_id_enum;
-
-typedef struct
{
- uint8 reserve;
- uint8 cmd;
- uint8 addr;
- uint8 dummy;
- uint8 magic;
- uint8 sequence;
- uint16 length;
-}wifi_spi_buffer_struct;
+ // 主机发送的命令
+ WIFI_SPI_INVALID1 = 0x00, // 无效数据包
+ WIFI_SPI_RESET = 0x01, // 复位命令
+ WIFI_SPI_DATA = 0x02, // 透传数据包
+ WIFI_SPI_UDP_SEND = 0x03, // UDP下立即发送命令,默认SPI接收数据后2MS未收到数据自动发送数据
+ WIFI_SPI_CLOSE_SOCKET = 0x04, // 断开连接
+
+ WIFI_SPI_SET_WIFI_INFORMATION = 0x10, // 设置WIFI信息命令
+ WIFI_SPI_SET_SOCKET_INFORMATION = 0x11, // 设置SOCKET信息命令
+
+ WIFI_SPI_GET_VERSION = 0x20, // 获取模块版本
+ WIFI_SPI_GET_MAC_ADDR = 0x21, // 获取模块MAC地址
+ WIFI_SPI_GET_IP_ADDR = 0x22, // 获取模块IP地址
+
+ // 从机回传的命令
+ WIFI_SPI_REPLY_OK = 0x80, // 从机应答的正确命令
+ WIFI_SPI_REPLY_ERROR = 0x81, // 从机应答的错误命令
+
+ WIFI_SPI_REPLY_DATA_START = 0x90, // 从机回传的数据包,并且还有数据需要主机读取
+ WIFI_SPI_REPLY_DATA_END = 0x91, // 从机回传的数据包,数据已读取完毕
+
+ WIFI_SPI_REPLY_VERSION = 0xA0, // 从机回复固件版本
+ WIFI_SPI_REPLY_MAC_ADDR = 0xA1, // 从机回复本机MAC地址等信息
+ WIFI_SPI_REPLY_IP_ADDR = 0xA2, // 从机回复本机IP地址、端口号
+ WIFI_SPI_INVALID2 = 0xFF // 无效数据包
+}wifi_spi_packets_command_enum;
+
+typedef enum
+{
+ WIFI_SPI_IDLE, // 模块空闲,可以进行SPI通讯
+ WIFI_SPI_BUSY, // 模块正忙,不可进行SPI通讯
+}wifi_spi_state_enum;
+
+
+typedef struct
+{
+ uint8 command; // 命令字
+ uint8 reserve; // 保留
+ uint16 length; // 包有效长度
+}wifi_spi_head_struct;
+
+
+typedef struct
+{
+ wifi_spi_head_struct head; // 帧头
+ uint8 buffer[WIFI_SPI_RECVIVE_SIZE]; // 缓冲区
+}wifi_spi_packets_struct;
+
+
+extern char wifi_spi_version[12]; // 固件版本 字符串
+extern char wifi_spi_mac_addr[20]; // 模块MAC地址 字符串
+extern char wifi_spi_ip_addr_port[25]; // IP地址与端口号 字符串
-typedef struct
-{
- uint8 version[12]; // 固件版本 字符串形式
- uint8 mac[20]; // 本机 MAC 地址 字符串形式
- uint8 local_ip[17]; // 本机 IP 地址 字符串形式
- uint8 local_port[10]; // 本机端口号 字符串形式
- uint8 remote_ip[5][17]; // 远端 IP 地址 字符串形式
- wifi_spi_mode_enum mode; // WIFI 模式
- wifi_spi_transfer_mode_enum transfer_mode; // 当前传输模式
- wifi_spi_connect_mode_enum connect_mode; // 网络连接模式
- wifi_spi_connect_state_enum connect_state; // 服务器连接情况
-}wifi_spi_information_struct;
+uint8 wifi_spi_wifi_connect (char *wifi_ssid, char *pass_word);
+uint8 wifi_spi_socket_connect (char *transport_type, char *ip_addr, char *port, char *local_port);
+uint8 wifi_spi_socket_disconnect (void);
+uint8 wifi_spi_udp_send_now (void);
+uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length);
+uint32 wifi_spi_read_buffer (uint8 *buffer, uint32 length);
-typedef struct
-{
- uint8 *source[WIFI_SPI_MAX_MULTI];
- uint16 length[WIFI_SPI_MAX_MULTI];
-}wifi_spi_send_multi_struct;
-
-extern wifi_spi_information_struct wifi_spi_information;
-
-
-uint8 wifi_spi_disconnected_wifi (void); // 断开 WIFI 连接
-uint8 wifi_spi_entry_serianet (void); // 打开透传模式
-uint8 wifi_spi_exit_serianet (void); // 关闭透传模式
-
-uint8 wifi_spi_connect_tcp_servers (char *ip, char *port, wifi_spi_transfer_mode_enum mode); // 建立 TCP 连接
-uint8 wifi_spi_connect_udp_client (char *ip, char *port, char *local_port, wifi_spi_transfer_mode_enum mode); // 建立 UDP 传输
-uint8 wifi_spi_disconnect_link (void); // 断开连接 TCP Server 使用本接口将会断开所有连接
-
-uint32 wifi_spi_send_byte (uint8 data); // WIFI 模块发送字节函数
-uint32 wifi_spi_send_buffer (const uint8 *buff, uint32 length); // WIFI 模块发送缓冲区函数
-uint32 wifi_spi_send_buffer_multi (wifi_spi_send_multi_struct *multi_buffer); // WIFI 模块发送多缓冲区函数
-uint32 wifi_spi_send_string (const char *str); // WIFI 模块发送字符串函数
-
-uint32 wifi_spi_read_buffer (uint8 *buff, uint32 len); // WIFI 模块数据接收函数
-
-uint8 wifi_spi_init (char *wifi_ssid, char *pass_word, wifi_spi_mode_enum wifi_mode); // WIFI 模块初始化函数
+uint8 wifi_spi_init (char *wifi_ssid, char *pass_word);
#endif
+
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.c
index 312dab7..ff728bb 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,7 +61,7 @@
wifi_uart_information_struct wifi_uart_information; // 模块自身参数
-static fifo_obj_struct wifi_uart_fifo;
+static fifo_struct wifi_uart_fifo;
static uint8 wifi_uart_buffer[WIFI_UART_BUFFER_SIZE]; // 数据存放数组
static uint8 wifi_uart_data;
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h
index abcb253..3316b6f 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wifi_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wifi_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wireless_uart.c b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wireless_uart.c
index eac2867..91ec013 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wireless_uart.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wireless_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -53,7 +53,7 @@
#include "zf_device_type.h"
#include "zf_device_wireless_uart.h"
-static fifo_obj_struct wireless_uart_fifo;
+static fifo_struct wireless_uart_fifo;
static uint8 wireless_uart_buffer[WIRELESS_UART_BUFFER_SIZE];
static uint8 wireless_uart_data = 0;
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wireless_uart.h b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wireless_uart.h
index 2418545..a789ad0 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wireless_uart.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_device/zf_device_wireless_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_device_wireless_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -61,11 +61,11 @@
// 注意事项2:开启自动波特率务必连接RTS引脚 否则会开启失败。
// 注意事项3:模块自动波特率失败的话 可以尝试断电重启
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
-// 开启自动波特率务必阅读上面两条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
+// 开启自动波特率务必阅读上面三条 注意事项
-// 0:关闭自动波特率
+// 0:关闭自动波特率
// 1:开启自动波特率 自动波特率的作用是修改 WIRELESS_UART_BAUD 之后不需要对模块进行配置 模块会自动设置为对应的波特率
#define WIRELESS_UART_AUTO_BAUD_RATE ( 1 )
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_adc.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_adc.c
index 9a262a1..06694d8 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_adc.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_adc.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_adc.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_adc.h
index 378b67e..f017c76 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_adc.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_adc.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_adc
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.c
index 4ec533c..ae3e610 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.h
index e8d82ef..7b8b475 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_delay.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_delay
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.c
index f72f1d6..43bffbc 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.h
index 1ec555b..320d40c 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_dma.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_dma
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.c
index 6592198..0e0e0b9 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.h
index 68d159f..e079122 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_encoder.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_encoder
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_exti.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_exti.c
index 72c9a1f..31d270a 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_exti.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_exti.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_exti.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_exti.h
index 30f5ef6..b63f9ee 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_exti.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_exti.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_exti
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.c
index f91f5a0..325cfed 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.h
index 912585a..e7425fd 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_flash.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_flash
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_gpio.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_gpio.c
index 5071114..a084353 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_gpio.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_gpio.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_gpio.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_gpio.h
index 2b23be0..550fb8d 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_gpio.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_gpio.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_gpio
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pit.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pit.c
index c4dc50d..5e03d38 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pit.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pit.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pit.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pit.h
index 5461e05..66854b5 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pit.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pit.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pit
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pwm.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pwm.c
index ad1059a..24d8d7a 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pwm.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pwm.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pwm.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pwm.h
index d6dce78..51948a4 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pwm.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_pwm.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_pwm
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_iic.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_iic.c
index 9833b62..a349ec7 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_iic.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_iic.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_iic.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_iic.h
index a62b262..80db53b 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_iic.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_iic.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_iic
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_spi.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_spi.c
index 292c60b..954fbe3 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_spi.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_spi.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_spi.h
index 6a9c207..62858de 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_spi.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_soft_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_soft_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_spi.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_spi.c
index 1b99196..f817dd9 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_spi.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_spi.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -920,7 +920,7 @@ void spi_transfer_16bit (spi_index_enum spi_n, const uint16 *write_buffer, uint1
do
{
- IfxQspi_writeTransmitFifo(moudle, (uint8)(*write_buffer & 0xFF00) >> 8); // 将发送的数据写入缓冲区
+ IfxQspi_writeTransmitFifo(moudle, (uint8)((*write_buffer & 0xFF00) >> 8)); // 将发送的数据写入缓冲区
if(read_buffer != NULL)
{
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_spi.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_spi.h
index e73507e..d15589c 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_spi.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_spi.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_spi
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_timer.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_timer.c
index a953b92..e085d6e 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_timer.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_timer.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_timer.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_timer.h
index 3c86f58..1bb348f 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_timer.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_timer.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_timer
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_uart.c b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_uart.c
index cd19782..fb89b55 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_uart.c
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_uart.c
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_uart.h b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_uart.h
index 8d1d111..cdc55ab 100644
--- a/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_uart.h
+++ b/Seekfree_TC264_Opensource_Library/libraries/zf_driver/zf_driver_uart.h
@@ -24,7 +24,7 @@
* 文件名称 zf_driver_uart
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/user/cpu0_main.c b/Seekfree_TC264_Opensource_Library/user/cpu0_main.c
index f0f5277..ef72def 100644
--- a/Seekfree_TC264_Opensource_Library/user/cpu0_main.c
+++ b/Seekfree_TC264_Opensource_Library/user/cpu0_main.c
@@ -24,7 +24,7 @@
* 文件名称 cpu0_main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/user/cpu1_main.c b/Seekfree_TC264_Opensource_Library/user/cpu1_main.c
index ef5e75b..d37083f 100644
--- a/Seekfree_TC264_Opensource_Library/user/cpu1_main.c
+++ b/Seekfree_TC264_Opensource_Library/user/cpu1_main.c
@@ -24,7 +24,7 @@
* 文件名称 cpu1_main
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/user/isr.c b/Seekfree_TC264_Opensource_Library/user/isr.c
index 27171d2..125f6d4 100644
--- a/Seekfree_TC264_Opensource_Library/user/isr.c
+++ b/Seekfree_TC264_Opensource_Library/user/isr.c
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
@@ -118,7 +118,6 @@ IFX_INTERRUPT(exti_ch1_ch5_isr, 0, EXTI_CH1_CH5_INT_PRIO)
{
exti_flag_clear(ERU_CH5_REQ1_P15_8);
- wireless_module_spi_handler(); // SPI WIFI 中断回调函数
}
}
@@ -229,7 +228,7 @@ IFX_INTERRUPT(uart3_tx_isr, 0, UART3_TX_INT_PRIO)
IFX_INTERRUPT(uart3_rx_isr, 0, UART3_RX_INT_PRIO)
{
interrupt_global_enable(0); // 开启中断嵌套
- gps_uart_callback(); // GPS串口回调函数
+ gnss_uart_callback(); // GNSS串口回调函数
diff --git a/Seekfree_TC264_Opensource_Library/user/isr.h b/Seekfree_TC264_Opensource_Library/user/isr.h
index b22cd26..ca6e01a 100644
--- a/Seekfree_TC264_Opensource_Library/user/isr.h
+++ b/Seekfree_TC264_Opensource_Library/user/isr.h
@@ -24,7 +24,7 @@
* 文件名称 isr
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*
diff --git a/Seekfree_TC264_Opensource_Library/user/isr_config.h b/Seekfree_TC264_Opensource_Library/user/isr_config.h
index 1776039..2e21f82 100644
--- a/Seekfree_TC264_Opensource_Library/user/isr_config.h
+++ b/Seekfree_TC264_Opensource_Library/user/isr_config.h
@@ -24,7 +24,7 @@
* 文件名称 isr_config
* 公司名称 成都逐飞科技有限公司
* 版本信息 查看 libraries/doc 文件夹内 version 文件 版本说明
-* 开发环境 ADS v1.9.4
+* 开发环境 ADS v1.9.20
* 适用平台 TC264D
* 店铺链接 https://seekfree.taobao.com/
*