From fb78d7d9cae3ad843be2784683cca8ee8888134b Mon Sep 17 00:00:00 2001 From: penglei <1624952103@qq.com> Date: Tue, 4 Nov 2025 16:29:50 +0800 Subject: [PATCH] =?utf8?q?272=E5=A2=9E=E5=8A=A0qmc6309=E7=A3=81=E5=8A=9B?= =?utf8?q?=E8=AE=A1=E9=A9=B1=E5=8A=A8=EF=BC=8C=E9=80=82=E9=85=8Dgps?= =?utf8?q?=E3=80=81=E5=85=85=E7=94=B5=E8=8A=AF=E7=89=87=E3=80=81=E9=A9=AC?= =?utf8?q?=E8=BE=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit --- .../brandy/brandy_standard/thread_pri_init.c | 4 +- .../config/target_config/brandy/config.py | 19 +- .../brandy_evb/board_config/board_fd272.h | 20 +- .../boards/brandy_evb/product/product.h | 12 + .../clocks/drivers/acore/clocks_config_priv.c | 4 + code/sdk/drivers/drivers/driver/uart/uart.c | 15 +- code/sdk/zhihui/drivers/charge/CMakeLists.txt | 3 +- .../sdk/zhihui/drivers/charge/hp4570/hp4570.c | 2 +- code/sdk/zhihui/drivers/mag/CMakeLists.txt | 3 +- .../zhihui/drivers/mag/qmc6309/CMakeLists.txt | 42 + code/sdk/zhihui/drivers/mag/qmc6309/qmc6309.c | 733 ++++++++++++++++++ code/sdk/zhihui/drivers/mag/qmc6309/qmc6309.h | 222 ++++++ .../zhihui/drivers/mag/service/mag_at_cmd.c | 4 + code/sdk/zhihui/drivers/mag/service/mag_hal.c | 18 +- code/sdk/zhihui/drivers/mag/service/mag_hal.h | 6 +- .../zhihui/drivers/mag/service/mag_service.c | 4 +- code/sdk/zhihui/drivers/ppg/hal/ppg_hal.c | 12 +- code/sdk/zhihui/drivers/vibrator/vibrator.c | 9 +- .../board_porting/tiot_board_pin_port.h | 13 + code/sdk/zhihui/services/gnss/inc/gnss_ctl.h | 9 + .../gnss/sample/pgnss_sample/pgnss_sample.c | 54 +- code/sdk/zhihui/services/gnss/src/gnss_ctl.c | 22 +- .../zhihui/utils/custom_fileoperate_service.c | 12 +- 23 files changed, 1183 insertions(+), 59 deletions(-) create mode 100644 code/sdk/zhihui/drivers/mag/qmc6309/CMakeLists.txt create mode 100644 code/sdk/zhihui/drivers/mag/qmc6309/qmc6309.c create mode 100644 code/sdk/zhihui/drivers/mag/qmc6309/qmc6309.h diff --git a/code/sdk/application/brandy/brandy_standard/thread_pri_init.c b/code/sdk/application/brandy/brandy_standard/thread_pri_init.c index a43afdd7c..8d0f885e0 100644 --- a/code/sdk/application/brandy/brandy_standard/thread_pri_init.c +++ b/code/sdk/application/brandy/brandy_standard/thread_pri_init.c @@ -563,7 +563,9 @@ static void thread_main(const void *unused) #ifdef ENABLE_CUSTOM_I2C // custom_i2c_init(I2C_BUS_3); - // custom_i2c_init(I2C_BUS_0); +#ifdef BOARD_FD272 + custom_i2c_init(I2C_BUS_0); +#endif custom_i2c_init(I2C_BUS_2); #ifdef SUPPORT_CYWEE_SERVICE diff --git a/code/sdk/build/config/target_config/brandy/config.py b/code/sdk/build/config/target_config/brandy/config.py index 6509d8cc0..495c4a22d 100644 --- a/code/sdk/build/config/target_config/brandy/config.py +++ b/code/sdk/build/config/target_config/brandy/config.py @@ -1151,7 +1151,12 @@ target = { # 'MEMORY_CORRUPTION', 'SAP_EFFECT_SWS_SUPPORT', 'AUDIO_SMARTPA_AW88082', - "-:SUPPORT_LWIP", + '-:SUPPORT_LWIP', + 'ENABLE_HP4507', + 'SUPPORT_GNSS', + 'DISABLE_UART_LOG', + 'CONFIG_GNSS_UART_WITH_FLOWCTRL', + # 'DOWNLOAD_GNSS_SWITCH', ], #添加自定义应用 'ram_component': [ @@ -1159,8 +1164,9 @@ target = { 'media_at_service', 'bt_manager_at_service', "ppg_sensor_hx3695", - # "ppgBleService", - "mag_sensor_mmc5603", + "ppgBleService", + # "mag_sensor_mmc5603", + "mag_sensor_qmc6309", "vibrator", "vibrator_service", # "-:lwip", @@ -1193,7 +1199,12 @@ target = { "ppg_hal", "mag_service", "cywee_dml", - #"cyweeBleService", + "cyweeBleService", + "charge_ic_hp4570", + "gnss", + "pgnss_sample", + # "gnss_sample", + "cyweeBleService", ], 'image_analysis': False, 'fs_image_path':'fd272', diff --git a/code/sdk/drivers/boards/brandy_evb/board_config/board_fd272.h b/code/sdk/drivers/boards/brandy_evb/board_config/board_fd272.h index 313f40083..cdca2bfb9 100644 --- a/code/sdk/drivers/boards/brandy_evb/board_config/board_fd272.h +++ b/code/sdk/drivers/boards/brandy_evb/board_config/board_fd272.h @@ -117,8 +117,8 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { { HAL_PIO_FUNC_I2C0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_MGPIO12 I2C0 SDA { HAL_PIO_FUNC_I2C1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO13 I2C1 SCL touch i2c { HAL_PIO_FUNC_I2C1_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO14 I2C1 SDA - { HAL_PIO_FUNC_I2C2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_DRIVE_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO15 I2C2 SCL Sensor 6è½´ 指南针 心率 - { HAL_PIO_FUNC_I2C2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_DRIVE_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO16 I2C2 SDA Sensor + { HAL_PIO_FUNC_I2C2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO15 I2C2 SCL Sensor 6è½´ 指南针 心率 + { HAL_PIO_FUNC_I2C2_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO16 I2C2 SDA Sensor { HAL_PIO_FUNC_I2C3_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO17 i2c3 SCL smart pa\ 预留马达控制 \安全芯片 { HAL_PIO_FUNC_I2C3_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_MGPIO18 I2C3 SDA { HAL_PIO_FUNC_UART1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_MGPIO19 uart1 tx @@ -156,12 +156,12 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_MGPIO38 uart rx NC #endif - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L0 NC + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L0 NC - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L1 i2s1 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L2 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L3 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L4 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_L1 i2s1 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L2 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L3 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L4 { HAL_PIO_FUNC_I2S0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L5 { HAL_PIO_FUNC_I2S0_M1, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L6 i2s0 @@ -204,7 +204,7 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L28 CAT_1复位 CAT1_RESET_N 拉低有效 { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L29 charge done info 检测是否充满电 { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L30 KP_MKIN1 唤醒 CAT1 ,输出 - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L31 KP_MKOUIT1 唤醒 蓝牙 ,输入 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L31 KP_MKOUIT1 唤醒 蓝牙 ,输入 { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_L32 NC { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R0 PRG_LED_POWER ON 心率等电源控制脚 @@ -213,7 +213,7 @@ const hal_pio_config_t g_pio_function_config[PIN_MAX_NUMBER] = { // { HAL_PIO_FUNC_PWMP1_M2, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚 // { HAL_PIO_FUNC_PWMN1_M3, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚 // #else - { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚 + { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R2 VIBR_PWM 马达控制脚 兼容预留马达驱动复位脚 // #endif #ifdef BOARD_N9 { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_AGPIO_R3 NC @@ -309,7 +309,7 @@ const hal_gpio_config_t g_gpio_function_config[PIN_MAX_NUMBER] = { #endif //默认关闭马达 - { S_AGPIO_R2, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, + { S_AGPIO_L16, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, //默认开启 EXT LDO V3.0 V1.8 // { S_AGPIO_L18, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL }, diff --git a/code/sdk/drivers/boards/brandy_evb/product/product.h b/code/sdk/drivers/boards/brandy_evb/product/product.h index fc156185d..baf12b870 100644 --- a/code/sdk/drivers/boards/brandy_evb/product/product.h +++ b/code/sdk/drivers/boards/brandy_evb/product/product.h @@ -1,3 +1,11 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2025-05-15 11:27:17 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2025-11-04 16:21:23 + * @FilePath: /FD230/code/sdk/drivers/boards/brandy_evb/product/product.h + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ /* * Copyright (c) @CompanyNameMagicTag 2020-2020. All rights reserved. * Description: BRANDY product config @@ -72,5 +80,9 @@ #define EMMC_SD_BUSWIDTH MMCSD_BUSWIDTH_8 #define PARTITION_EXIST YES #define ALIPAY_SEC_I2C_INDEX I2C_BUS_3 +#ifdef BOARD_FD272 +#define ALIPAY_SEC_GPIO S_AGPIO_L4 +#else #define ALIPAY_SEC_GPIO S_AGPIO_R1 #endif +#endif diff --git a/code/sdk/drivers/chips/brandy/clocks/drivers/acore/clocks_config_priv.c b/code/sdk/drivers/chips/brandy/clocks/drivers/acore/clocks_config_priv.c index ba97fa885..22e32bf99 100644 --- a/code/sdk/drivers/chips/brandy/clocks/drivers/acore/clocks_config_priv.c +++ b/code/sdk/drivers/chips/brandy/clocks/drivers/acore/clocks_config_priv.c @@ -369,7 +369,11 @@ static const system_mcu_perip_clk_t g_system_mcu_perp_clk_set_config[] = { {HAL_CLOCKS_APP_SPI2_MS_CLK, TURN_OFF}, // spi2 clock {HAL_CLOCKS_APP_UART_H0_CLK, TURN_ON}, // uart h0 clock {HAL_CLOCKS_APP_UART_H1_CLK, TURN_ON}, // uart h1 clock +#ifdef BOARD_FD272 + {HAL_CLOCKS_APP_I2C0_CLK, TURN_ON}, // i2c0 clock +#else {HAL_CLOCKS_APP_I2C0_CLK, TURN_OFF}, // i2c0 clock +#endif {HAL_CLOCKS_APP_I2C1_CLK, TURN_ON}, // i2c1 clock {HAL_CLOCKS_APP_I2C2_CLK, TURN_ON}, // i2c2 clock {HAL_CLOCKS_APP_I2C3_CLK, TURN_ON}, // i2c3 clock diff --git a/code/sdk/drivers/drivers/driver/uart/uart.c b/code/sdk/drivers/drivers/driver/uart/uart.c index 170486a6d..84a3b54ff 100644 --- a/code/sdk/drivers/drivers/driver/uart/uart.c +++ b/code/sdk/drivers/drivers/driver/uart/uart.c @@ -399,21 +399,10 @@ errcode_t uapi_uart_register_frame_error_callback(uart_bus_t bus, uart_error_cal #if defined(CONFIG_UART_SUPPORT_TX) int32_t uapi_uart_write(uart_bus_t bus, const uint8_t *buffer, uint32_t length, uint32_t timeout) { -#ifdef SUPPORT_GNSS +#if defined(SUPPORT_GNSS) && !defined(BOARD_FD272) if (getPGnssIsStart() == 1 && timeout != 0xFFFFFFF3) return -1; - // if (getPGnssServerStat() == 1 && timeout == 0xFFFFFFF3 && !stat) - // { - // stat = 1; - // } - - // if (getPGnssServerStat() == 0 && stat) - // { - // stat = 0; - // sw_debug_uart_deinit(); - // uart_config_init(); - // } #endif unused(timeout); bool tx_fifo_full = false; @@ -691,7 +680,7 @@ int32_t uapi_uart_read_by_dma(uart_bus_t bus, const void *buffer, uint32_t lengt #if defined(CONFIG_UART_SUPPORT_RX) int32_t uapi_uart_read(uart_bus_t bus, const uint8_t *buffer, uint32_t length, uint32_t timeout) { -#ifdef SUPPORT_GNSS +#if defined(SUPPORT_GNSS) && !defined(BOARD_FD272) if (getPGnssIsStart() == 1 && timeout != 0xFFFFFFF3) return -1; #else diff --git a/code/sdk/zhihui/drivers/charge/CMakeLists.txt b/code/sdk/zhihui/drivers/charge/CMakeLists.txt index 97149a107..6039880af 100644 --- a/code/sdk/zhihui/drivers/charge/CMakeLists.txt +++ b/code/sdk/zhihui/drivers/charge/CMakeLists.txt @@ -2,7 +2,7 @@ # @brief cmake file # Copyright (c) @CompanyNameMagicTag 2022-2023. All rights reserved. #=============================================================================== -set(COMPONENT_NAME "charge_ic") +set(COMPONENT_NAME "charge_ic_hp4570") set(SOURCES ${CMAKE_CURRENT_SOURCE_DIR}/hp4570/hp4570.c @@ -26,7 +26,6 @@ set(PRIVATE_DEFINES set(PUBLIC_DEFINES SUPPORT_AT_CHARGE -ENABLE_HP4507 ) # use this when you want to add ccflags like -include xxx diff --git a/code/sdk/zhihui/drivers/charge/hp4570/hp4570.c b/code/sdk/zhihui/drivers/charge/hp4570/hp4570.c index a4dd2ea9f..f7120d838 100644 --- a/code/sdk/zhihui/drivers/charge/hp4570/hp4570.c +++ b/code/sdk/zhihui/drivers/charge/hp4570/hp4570.c @@ -50,7 +50,7 @@ uint8_t hp45xxx_i2c_addr = 0; #define I2C_ERROR 1 #define INVALID_INPUT 1 -#ifdef BOARD_L22 +#if defined(BOARD_L22) || defined(BOARD_FD272) #define HP4570_I2C_BUS I2C_BUS_0 #elif defined BOARD_U8 #define HP4570_I2C_BUS I2C_BUS_3 diff --git a/code/sdk/zhihui/drivers/mag/CMakeLists.txt b/code/sdk/zhihui/drivers/mag/CMakeLists.txt index a37147b2f..da8552ed8 100644 --- a/code/sdk/zhihui/drivers/mag/CMakeLists.txt +++ b/code/sdk/zhihui/drivers/mag/CMakeLists.txt @@ -1,2 +1,3 @@ add_subdirectory_if_exist(service) -add_subdirectory_if_exist(mmc5603) \ No newline at end of file +add_subdirectory_if_exist(mmc5603) +add_subdirectory_if_exist(qmc6309) \ No newline at end of file diff --git a/code/sdk/zhihui/drivers/mag/qmc6309/CMakeLists.txt b/code/sdk/zhihui/drivers/mag/qmc6309/CMakeLists.txt new file mode 100644 index 000000000..2ed6c09cd --- /dev/null +++ b/code/sdk/zhihui/drivers/mag/qmc6309/CMakeLists.txt @@ -0,0 +1,42 @@ +#=============================================================================== +# @brief cmake file +# Copyright (c) @CompanyNameMagicTag 2023-2023. All rights reserved. +#=============================================================================== +set(COMPONENT_NAME "mag_sensor_qmc6309") + +set(SOURCES + ${CMAKE_CURRENT_SOURCE_DIR}/qmc6309.c +) +set(PUBLIC_HEADER + ${CMAKE_CURRENT_SOURCE_DIR} +) +set(PUBLIC_DEFINES + MAG_QMC6309 +) + +set(PRIVATE_HEADER +) + +set(PRIVATE_DEFINES +) + +# use this when you want to add ccflags like -include xxx +set(COMPONENT_PUBLIC_CCFLAGS +) + +set(COMPONENT_CCFLAGS + -Wno-incompatible-function-pointer-types + -Wno-unused-function +) + +set(WHOLE_LINK + true +) + +set(MAIN_COMPONENT + false +) + +install_sdk(${CMAKE_CURRENT_SOURCE_DIR} "*") + +build_component() \ No newline at end of file diff --git a/code/sdk/zhihui/drivers/mag/qmc6309/qmc6309.c b/code/sdk/zhihui/drivers/mag/qmc6309/qmc6309.c new file mode 100644 index 000000000..3a34908f5 --- /dev/null +++ b/code/sdk/zhihui/drivers/mag/qmc6309/qmc6309.c @@ -0,0 +1,733 @@ + +#include "qmc6309.h" +#include "los_tick.h" +#include "custom_utils.h" + +static qmc6309_data_t p_mag; +static const unsigned char mag_slave[] = {QMC6309_IIC_ADDR}; +//static const unsigned char mag_slave[] = {QMC6309H_IIC_ADDR}; + +#define QMC6309_I2C_BUS I2C_BUS_2 + +int qmc6309_read_block(unsigned char addr, unsigned char *data, unsigned short len) +{ + int ret = QMC6309_FAIL; + int retry = 0; + + while((ret!=QMC6309_OK) && (retry++ < 5)) + { + // ret = bsp_i2c_read_reg(p_mag.slave_addr, addr, data, len); + ret = custom_i2c_read_regs(QMC6309_IIC_ADDR, addr, 1, data, len,QMC6309_I2C_BUS); + } + + return ret; +} + +int qmc6309_write_reg(unsigned char addr, unsigned char data) +{ + int ret = QMC6309_FAIL; + int retry = 0; + + while((ret!=QMC6309_OK) && (retry++ < 5)) + { + // ret = bsp_i2c_write_reg(p_mag.slave_addr, addr, data); + ret = custom_i2c_write_reg(QMC6309_IIC_ADDR, addr, 1, &data, 1, QMC6309_I2C_BUS); + } + + return ret; +} + +void qmc6309_delay(unsigned int ms) +{ + // extern void qst_delay_ms(unsigned int n_ms); + + // qst_delay_ms(ms); + LOS_Mdelay(ms); +} + + +void qmc6309_dump_reg(void) +{ +#if 0 + unsigned char ctrl_value[4]; + unsigned char version_id; + unsigned char wafer_id; + unsigned char die_id[2]; + + QMC6309_LOG("qmc6309_dump_reg\r\n"); + qmc6309_read_block(0x12, &version_id, 1); + qmc6309_read_block(0x37, &wafer_id, 1); + qmc6309_read_block(0x38, die_id, 2); + QMC6309_LOG("version id:0x%x wafer id:0x%x die id:0x%x \r\n", version_id, wafer_id, (die_id[1]<<8)|die_id[0]); + qmc6309_read_block(QMC6309_CTL_REG_ONE, ctrl_value, 2); + QMC6309_LOG("ctrlreg [0x0a=0x%x 0x0b=0x%x] \r\n", ctrl_value[0], ctrl_value[1]); + qmc6309_read_block(QMC6309_FIFO_REG_CTRL, ctrl_value, 1); + QMC6309_LOG("fifo-ctrl 0x%x=0x%x \r\n", QMC6309_FIFO_REG_CTRL, ctrl_value[0]); + qmc6309_read_block(0x40, ctrl_value, 1); + QMC6309_LOG("0x40 = 0x%x \r\n", ctrl_value[0]); +#else + unsigned char i2c_0_2 = 0; + unsigned char version_id = 0; + unsigned char wafer_id = 0; + unsigned short d_id = 0; + unsigned char g_reg_tbl[16]; + + QMC6309_LOG("\r\n********qst reg dump(hex)********\r\n"); + QMC6309_LOG(" | 0 1 2 3 4 5 6 7 8 9 a b c d e f\r\n"); + QMC6309_LOG("______________________________________________________\r\n"); +// qmc6309_read_block(0x00, &g_reg_tbl[0], 72); + qmc6309_read_block(0x00, &g_reg_tbl[0], 16); + QMC6309_LOG("0x%xx | %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\r\n", 0, + g_reg_tbl[0],g_reg_tbl[1],g_reg_tbl[2],g_reg_tbl[3], + g_reg_tbl[4],g_reg_tbl[5],g_reg_tbl[6],g_reg_tbl[7], + g_reg_tbl[8],g_reg_tbl[9],g_reg_tbl[10],g_reg_tbl[11], + g_reg_tbl[12],g_reg_tbl[13],g_reg_tbl[14],g_reg_tbl[15]); + + qmc6309_read_block(0x10, &g_reg_tbl[0], 16); +// qmc6309_delay(1); + QMC6309_LOG("0x%xx | %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\r\n", 1, + g_reg_tbl[0],g_reg_tbl[1],g_reg_tbl[2],g_reg_tbl[3], + g_reg_tbl[4],g_reg_tbl[5],g_reg_tbl[6],g_reg_tbl[7], + g_reg_tbl[8],g_reg_tbl[9],g_reg_tbl[10],g_reg_tbl[11], + g_reg_tbl[12],g_reg_tbl[13],g_reg_tbl[14],g_reg_tbl[15]); + version_id = g_reg_tbl[0x02]; + + qmc6309_read_block(0x20, &g_reg_tbl[0], 16); +// qmc6309_delay(1); + QMC6309_LOG("0x%xx | %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\r\n", 2, + g_reg_tbl[0],g_reg_tbl[1],g_reg_tbl[2],g_reg_tbl[3], + g_reg_tbl[4],g_reg_tbl[5],g_reg_tbl[6],g_reg_tbl[7], + g_reg_tbl[8],g_reg_tbl[9],g_reg_tbl[10],g_reg_tbl[11], + g_reg_tbl[12],g_reg_tbl[13],g_reg_tbl[14],g_reg_tbl[15]); + qmc6309_read_block(0x30, &g_reg_tbl[0], 16); +// qmc6309_delay(1); + QMC6309_LOG("0x%xx | %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x %02x\r\n", 3, + g_reg_tbl[0],g_reg_tbl[1],g_reg_tbl[2],g_reg_tbl[3], + g_reg_tbl[4],g_reg_tbl[5],g_reg_tbl[6],g_reg_tbl[7], + g_reg_tbl[8],g_reg_tbl[9],g_reg_tbl[10],g_reg_tbl[11], + g_reg_tbl[12],g_reg_tbl[13],g_reg_tbl[14],g_reg_tbl[15]); + wafer_id = g_reg_tbl[0x07]&0x1f; + d_id = (unsigned short)((g_reg_tbl[0x09]<<8)|g_reg_tbl[0x08]); + i2c_0_2 = ((g_reg_tbl[0x07]&0x20)>>3)|(g_reg_tbl[0x0b]&0x03); + + qmc6309_read_block(0x40, &g_reg_tbl[0], 8); +// qmc6309_delay(1); + QMC6309_LOG("0x%xx | %02x %02x %02x %02x %02x %02x %02x %02x \r\n", 4, + g_reg_tbl[0],g_reg_tbl[1],g_reg_tbl[2],g_reg_tbl[3], + g_reg_tbl[4],g_reg_tbl[5],g_reg_tbl[6],g_reg_tbl[7]); + + QMC6309_LOG("Version-ID:[0x%02x] Wafer-ID:[0x%02x] Di-ID:[0x%04x] I2C:[0x%x]\r\n", version_id, wafer_id, d_id, i2c_0_2); + QMC6309_LOG("********qst reg dump done********\r\n\r\n\r\n"); +#endif +} + +void qmc6309_get_chip_info(unsigned int *info) +{ + unsigned char verid = 0; + unsigned char ctrl_value[4]; + + qmc6309_read_block(0x37, ctrl_value, 3); + qmc6309_read_block(0x12, &verid, 1); + info[0] = (unsigned int)(((unsigned int)0x90<<24)|((unsigned int)ctrl_value[0]<<16)|((unsigned int)ctrl_value[2]<<8)|((unsigned int)ctrl_value[1])); + info[1] = verid; +} + +int qmc6309_get_chipid(uint8_t *id) +{ + int ret = QMC6309_FAIL; + int retry=0; + unsigned char chip_id = 0x00; + + retry = 0; + while((chip_id != QMC6309_CHIP_ID) && (retry++<5)) + { + ret = qmc6309_read_block(QMC6309_CHIP_ID_REG, &chip_id, 1); + if(ret == QMC6309_OK) + { + break; + } + } + if((chip_id == QMC6309_CHIP_ID)||(chip_id == 0xa5)) + { + QMC6309_LOG("qmc6309_get_chipid-ok slave:0x%x chipid = 0x%x\r\n", p_mag.slave_addr, chip_id); + *id = chip_id; + return 1; + } + else + { + QMC6309_LOG("qmc6309_get_chipid-fail slave:0x%x chip_id = 0x%x\r\n", p_mag.slave_addr, chip_id); + return 0; + } +} + +void qmc6309_set_range(unsigned char range) +{ + QMC6309_LOG("qmc6309_set_range 0x%x\r\n", range); + p_mag.ctrl2.bit.range = range; + + switch(p_mag.ctrl2.bit.range) + { + case QMC6309_RNG_32G: + p_mag.ssvt = 1000; + break; + case QMC6309_RNG_16G: + p_mag.ssvt = 2000; + break; + case QMC6309_RNG_8G: + p_mag.ssvt = 4000; + break; + default: + p_mag.ssvt = 1000; + break; + } +} + +int qmc6309_enable(void) +{ + int ret = 0; + + QMC6309_LOG("qmc6309_enable!\r\n"); + if(p_mag.chip_type == TYPE_QMC6309H) + { + unsigned char reg = 0; + + ret = qmc6309_read_block(0x40, ®, 1); + QMC6309_LOG("read 0x40=0x%x\r\n", reg); +#if defined(QMC6309H_VDD_MODE1) + reg = ((reg&0x3f)|0x80); + ret = qmc6309_write_reg(0x40, reg); +#elif defined(QMC6309H_VDD_MODE2) + reg = ((reg&0x3f)|0x40); + ret = qmc6309_write_reg(0x40, reg); +#endif + qmc6309_delay(1); + } + ret = qmc6309_write_reg(QMC6309_CTL_REG_TWO, p_mag.ctrl2.value); + QMC6309_CHECK_ERR(ret); + qmc6309_delay(1); + ret = qmc6309_write_reg(QMC6309_CTL_REG_ONE, p_mag.ctrl1.value); + QMC6309_CHECK_ERR(ret); + qmc6309_delay(1); + + return ret; +} + +int qmc6309_disable(void) +{ + int ret = 0; + qmc6309_ctrlreg1 ctrl1; + + QMC6309_LOG("qmc6309_disable!\r\n"); + ctrl1.value = p_mag.ctrl1.value; + ctrl1.bit.mode = QMC6309_MODE_SUSPEND; + ret = qmc6309_write_reg(QMC6309_CTL_REG_ONE, ctrl1.value); + QMC6309_CHECK_ERR(ret); + + return ret; +} + +void qmc6309_enable_ibi(qmc6309_fifo_ibi flag) +{ + int ret = QMC6309_FAIL; + unsigned char ibi_value = 0x00; + + QMC6309_LOG("qmc6309_enable_ibi 0x%x\r\n", flag); + ibi_value = (unsigned char)flag; + ret = qmc6309_write_reg(QMC6309_CTL_IBI, ibi_value); + + QMC6309_CHECK_ERR(ret); +} + +void qmc6309_init_para(unsigned char mode, unsigned char odr) +{ + p_mag.ctrl1.bit.mode = mode; // QMC6309_MODE_HPFM; QMC6309_MODE_NORMAL + p_mag.ctrl1.bit.osr1 = QMC6309_OSR1_8; + p_mag.ctrl1.bit.osr2 = QMC6309_OSR2_4; + if(p_mag.chip_type == TYPE_QMC6309) + p_mag.ctrl1.bit.zdbl_enb = QMC6309_ZDBL_ENB_ON; + else + p_mag.ctrl1.bit.zdbl_enb = QMC6309H_ZDBL_ENB_ON; + + p_mag.ctrl2.bit.set_rst = QMC6309_SET_RESET_ON; // QMC6309_SET_ON, QMC6309_SET_RESET_ON QMC6309_SET_RESET_OFF + p_mag.ctrl2.bit.range = QMC6309_RNG_32G; + p_mag.ctrl2.bit.odr = odr; + p_mag.ctrl2.bit.soft_rst = 0; + + qmc6309_set_range(p_mag.ctrl2.bit.range); +#if defined(QMC6309_MODE_SWITCH) + p_mag.set_ctl.mode = 0; + p_mag.set_ctl.count = 0; +#endif +} + + +void qmc6309_reload_otp(void) +{ + int ret = 0; + unsigned char status = 0; + int retry = 0; + int count = 0; + + QMC6309_LOG("qmc6309_reload_otp\r\n"); + while(retry++ < 20) + { + ret = qmc6309_write_reg(0x28, 0x02); + qmc6309_delay(2); + if(ret != QMC6309_OK) + { + QMC6309_LOG("write 0x28 = 0x02 fail!\r\n"); + } + qmc6309_delay(2); + count = 0; + while(count++<100) + { + qmc6309_delay(1); + status = 0; + ret = qmc6309_read_block(QMC6309_STATUS_REG, &status, 1); + if((ret==QMC6309_OK)&&(status & 0x10)) + { + QMC6309_LOG("qmc6309_reload_otp done slave=0x%x status=0x%x\r\n", p_mag.slave_addr, status); + //qmc6309_dump_reg(); + return; + } + } + } + + QMC6309_LOG("qmc6309_reload_otp fail\r\n"); +} + + +void qmc6309_check_otp(void) +{ + int ret = QMC6309_FAIL; + int retry = 0; + unsigned char status = 0x00; + int count=10; + + while(count > 0) + { + count--; + retry = 0; + while(retry++<5) + { + ret = qmc6309_read_block(QMC6309_STATUS_REG, &status, 1); + QMC6309_CHECK_ERR(ret); + QMC6309_LOG("qmc6309 status 0x%x\r\n", status); + if(status & 0x10) + { + QMC6309_LOG("qmc6309 NVM load done!\r\n"); + return; + } + qmc6309_delay(1); + } + + if(!(status & 0x10)) + { + qmc6309_reload_otp(); + } + else + { + return; + } + } +} + + +void qmc6309_soft_reset(void) +{ + int ret = QMC6309_FAIL; + int retry = 0; + unsigned char status = 0x00; + + QMC6309_LOG("qmc6309_soft_reset!\r\n"); + ret = qmc6309_write_reg(QMC6309_CTL_REG_TWO, 0x80); + QMC6309_CHECK_ERR(ret); + ret = qmc6309_write_reg(QMC6309_CTL_REG_TWO, 0x00); + QMC6309_CHECK_ERR(ret); + qmc6309_delay(5); + + while(retry++<5) + { + ret = qmc6309_read_block(QMC6309_STATUS_REG, &status, 1); + QMC6309_CHECK_ERR(ret); + QMC6309_LOG("qmc6309 status 0x%x\r\n", status); + if((status & 0x10)&&(status & 0x08)) + { + QMC6309_LOG("qmc6309 NVM load done!\r\n"); + break; + } + qmc6309_delay(1); + } +} + + +int qmc6309_read_mag_raw(short raw[3]) +{ + static int qmc6309_fail_num = 0; + int res = QMC6309_FAIL; + unsigned char mag_data[6]; + int t1 = 0; + unsigned char rdy = 0; + + /* Check status register for data availability */ + res = qmc6309_read_block(QMC6309_STATUS_REG, &rdy, 1); + while(!(rdy & (QMC6309_STATUS_DRDY|QMC6309_STATUS_OVFL)) & (t1++ < 5)) + { + res = qmc6309_read_block(QMC6309_STATUS_REG, &rdy, 1); + QMC6309_CHECK_ERR(res); + qmc6309_delay(1); + } + if((res == QMC6309_FAIL)||(!(rdy & QMC6309_STATUS_DRDY))) + { + raw[0] = p_mag.last_data[0]; + raw[1] = p_mag.last_data[1]; + raw[2] = p_mag.last_data[2]; + QMC6309_LOG("qmc6309_read_mag_raw read drdy fail! res=%d rdy=0x%x\r\n",res,rdy); + if(qmc6309_fail_num++ > 10) + { +#if defined(QMC6309_RECOVER) + qmc6309_recover(); + qmc6309_enable(); +#endif + qmc6309_fail_num = 0; + } + res = QMC6309_OK; // QMC6309_FAIL; + } + else if(rdy & QMC6309_STATUS_OVFL) + { + raw[0] = 32767; + raw[1] = 32767; + raw[2] = 32767; + } + else + { + qmc6309_fail_num = 0; + mag_data[0] = QMC6309_DATA_OUT_X_LSB_REG; + res = qmc6309_read_block(QMC6309_DATA_OUT_X_LSB_REG, mag_data, 6); + if(res == QMC6309_FAIL) + { + QMC6309_LOG("qmc6309_read_mag_raw read data fail! res=%d\r\n",res); + raw[0] = p_mag.last_data[0]; + raw[1] = p_mag.last_data[1]; + raw[2] = p_mag.last_data[2]; + res = QMC6309_OK; // QMC6309_FAIL; + } + else + { + raw[0] = (short)(((mag_data[1]) << 8) | mag_data[0]); + raw[1] = (short)(((mag_data[3]) << 8) | mag_data[2]); + raw[2] = (short)(((mag_data[5]) << 8) | mag_data[4]); + } + } + + p_mag.last_data[0] = raw[0]; + p_mag.last_data[1] = raw[1]; + p_mag.last_data[2] = raw[2]; +#if defined(QMC6309_MODE_SWITCH) + qmc6309_setrst_auto_mode(raw); +#endif + + return res; +} + + +int qmc6309_read_mag_xyz(float uT[3], short raw[3]) +{ + int res = QMC6309_FAIL; + + res = qmc6309_read_mag_raw(raw); + if(res == QMC6309_OK) + { + uT[0] = (float)((float)raw[0] / ((float)p_mag.ssvt/100.f)); // ut + uT[1] = (float)((float)raw[1] / ((float)p_mag.ssvt/100.f)); // ut + uT[2] = (float)((float)raw[2] / ((float)p_mag.ssvt/100.f)); // ut + } + else + { + uT[0] = uT[1]= uT[2] = 0.0f; + } + + if(p_mag.ctrl1.bit.mode == QMC6309_MODE_SINGLE) + { + res = qmc6309_write_reg(QMC6309_CTL_REG_ONE, p_mag.ctrl1.value); + QMC6309_CHECK_ERR(res); + } + + return res; +} + + +int qmc6309_self_test(void) +{ + int selftest_result = 0; + int selftest_retry = 0; + signed char st_data[3]; + unsigned char abs_data[3]; + unsigned char rdy = 0x00; + int t1 = 0; + int ret = QMC6309_FAIL; + + while((selftest_result == 0)&&(selftest_retry<3)) + { + selftest_retry++; + qmc6309_write_reg(QMC6309_CTL_REG_ONE, 0x00); + qmc6309_delay(2); + qmc6309_write_reg(QMC6309_CTL_REG_TWO, 0x00); + qmc6309_delay(2); + qmc6309_write_reg(QMC6309_CTL_REG_ONE, 0x03); + qmc6309_delay(20); + qmc6309_write_reg(0x0e, 0x80); + //qmc6309_delay(150); // old 150ms + rdy = 0x00; + t1 = 0; + while(!(rdy & 0x04)) + { + qmc6309_delay(5); + ret = qmc6309_read_block(QMC6309_STATUS_REG, &rdy, 1); + + if(t1++ > 50) + { + break; + } + } + + if(rdy & 0x04) + { + ret = qmc6309_read_block(QMC6309_DATA_OUT_ST_X, (unsigned char*)st_data, 3); + if(ret == QMC6309_FAIL) + continue; + } + else + { + QMC6309_LOG("qmc6309 selftest drdy fail!\r\n"); + continue; + } + + abs_data[0] = QMC6309_ABS(st_data[0]); + abs_data[1] = QMC6309_ABS(st_data[1]); + abs_data[2] = QMC6309_ABS(st_data[2]); + + if( ((abs_data[0] < QMC6309_SELFTEST_MAX_X) && (abs_data[0] > QMC6309_SELFTEST_MIN_X)) + && ((abs_data[1] < QMC6309_SELFTEST_MAX_Y) && (abs_data[1] > QMC6309_SELFTEST_MIN_Y)) + && ((abs_data[2] < QMC6309_SELFTEST_MAX_Z) && (abs_data[2] > QMC6309_SELFTEST_MIN_Z)) ) + { + QMC6309_LOG("qmc6309 selftest OK! status[0x%x]data[%d %d %d]\r\n",rdy,st_data[0],st_data[1],st_data[2]); + selftest_result = 1; + } + else + { + QMC6309_LOG("qmc6309 selftest fail! status[0x%x]data[%d %d %d]\r\n",rdy,st_data[0],st_data[1],st_data[2]); + selftest_result = 0; + } + } + + return selftest_result; +} + + +#if defined(QMC6309_MODE_SWITCH) +void qmc6309_setrst_auto_mode(short hw_d[3]) +{ + int ret = QMC6309_FAIL; + + if(p_mag.set_ctl.mode == 0) + {// set reset on + if((QMC6309_ABS(hw_d[0]) > 8000)||(QMC6309_ABS(hw_d[1]) > 8000)) + { + p_mag.set_ctl.count++; + if(p_mag.set_ctl.count >= 10) + { + p_mag.set_ctl.mode = 1; + p_mag.set_ctl.count = 0; + + p_mag.ctrl2.bit.set_rst = QMC6309_SET_ON; + ret = qmc6309_write_reg(QMC6309_CTL_REG_TWO, p_mag.ctrl2.value); + QMC6309_CHECK_ERR(ret); + qmc6309_delay(1); + } + } + else + { + p_mag.set_ctl.count = 0; + } + } + else + {// set only + int force_switch = 0; + p_mag.set_ctl.count++; + if(p_mag.set_ctl.count >= 100) + { + p_mag.set_ctl.count = 0; + force_switch = 1; + } + if(((QMC6309_ABS(hw_d[0]) < 6000)&&(QMC6309_ABS(hw_d[1]) < 6000)) || force_switch) + { + p_mag.set_ctl.mode = 0; + p_mag.set_ctl.count = 0; + + p_mag.ctrl2.bit.set_rst = QMC6309_SET_RESET_ON; + ret = qmc6309_write_reg(QMC6309_CTL_REG_TWO, p_mag.ctrl2.value); + QMC6309_CHECK_ERR(ret); + qmc6309_delay(1); + } + } + +} +#endif + +void qmc6309_fifo_config(qmc6309_fifo_mode mode, qmc6309_fifo_ch ch, int wmk) +{ + unsigned char fifo_reg = 0x00; + int ret = QMC6309_OK; + + fifo_reg = (mode|ch|(wmk<<3)); + p_mag.fifo_ctrl = fifo_reg; + ret = qmc6309_write_reg(QMC6309_FIFO_REG_CTRL, fifo_reg); + QMC6309_CHECK_ERR(ret); + qmc6309_delay(1); + p_mag.fifo_frame_len = 0; + if(ch & QMC6309_FIFO_CH_X) + { + p_mag.fifo_frame_len+=2; + } + if(ch & QMC6309_FIFO_CH_Y) + { + p_mag.fifo_frame_len+=2; + } + if(ch & QMC6309_FIFO_CH_Z) + { + p_mag.fifo_frame_len+=2; + } +} + +int qmc6309_fifo_read(unsigned char *f_data) +{ + unsigned char fifo_status = 0; + unsigned char fifo_level = 0; + int ret = QMC6309_FAIL; + + ret = qmc6309_read_block(QMC6309_FIFO_REG_STATUS, &fifo_status, 1); + QMC6309_CHECK_ERR(ret); + fifo_level = (fifo_status >> 4); + if(fifo_level) + { + ret = qmc6309_read_block(QMC6309_FIFO_REG_DATA, (unsigned char*)f_data, p_mag.fifo_frame_len*fifo_level); + //for(int index=0; index +#include + +#define QMC6309_RECOVER + +#define QMC6309_OK 1 +#define QMC6309_FAIL 0 + +#define QMC6309_IIC_ADDR 0x7c +#define QMC6309H_IIC_ADDR 0x0c + +//#define QMC6309H_VDD_MODE1 // 1:vio = vdd 2:vio=1.8 vdd < 2.1 +//#define QMC6309H_VDD_MODE2 // vio = 1.8 vdd >= 2.1 + +/* chip id*/ +#define QMC6309_CHIP_ID 0x90 + +/*data output register*/ +#define QMC6309_CHIP_ID_REG 0x00 +#define QMC6309_DATA_OUT_X_LSB_REG 0x01 +#define QMC6309_DATA_OUT_X_MSB_REG 0x02 +#define QMC6309_DATA_OUT_Y_LSB_REG 0x03 +#define QMC6309_DATA_OUT_Y_MSB_REG 0x04 +#define QMC6309_DATA_OUT_Z_LSB_REG 0x05 +#define QMC6309_DATA_OUT_Z_MSB_REG 0x06 +#define QMC6309_TEMP_OUT_LSB_REG 0x07 +#define QMC6309_TEMP_OUT_MSB_REG 0x08 + +#define QMC6309_DATA_OUT_ST_X 0x13 + +/*Status registers */ +#define QMC6309_STATUS_REG 0x09 +/* configuration registers */ +#define QMC6309_CTL_REG_ONE 0x0A /* Contrl register one */ +#define QMC6309_CTL_REG_TWO 0x0B /* Contrl register two */ +#define QMC6309_CTL_REG_THREE 0x0D /* Contrl register three */ +#define QMC6309_CTL_IBI 0x21 + +#define QMC6309_FIFO_REG_STATUS 0x20 +#define QMC6309_FIFO_REG_CTRL 0x2E +#define QMC6309_FIFO_REG_DATA 0x2F + +#define QMC6309_DATA_OFFSET_X_LSB_REG 0x22 + +#define QMC6309_SET_RESET_ON 0 +#define QMC6309_SET_ON 1 +#define QMC6309_RESET_ON 2 +#define QMC6309_SET_RESET_OFF 3 + +#define QMC6309_RNG_32G 0 +#define QMC6309_RNG_16G 1 +#define QMC6309_RNG_8G 2 + +#define QMC6309_MODE_SUSPEND 0 +#define QMC6309_MODE_NORMAL 1 +#define QMC6309_MODE_SINGLE 2 +#define QMC6309_MODE_HPFM 3 + +#define QMC6309_ODR_HPFM 0 +#define QMC6309_ODR_1HZ 0 +#define QMC6309_ODR_10HZ 1 +#define QMC6309_ODR_50HZ 2 +#define QMC6309_ODR_100HZ 3 +#define QMC6309_ODR_200HZ 4 + +// CIC filter OSR: 512/256/128/64(0~3) +#define QMC6309_OSR1_8 0 +#define QMC6309_OSR1_4 1 +#define QMC6309_OSR1_2 2 +#define QMC6309_OSR1_1 3 + +// Moving average depth normal mode the depth:16/8/4/2/1(7~4/3/2/1/0). Single Mode also use this filter. +#define QMC6309_OSR2_1 0 +#define QMC6309_OSR2_2 1 +#define QMC6309_OSR2_4 2 +#define QMC6309_OSR2_8 3 +#define QMC6309_OSR2_16 4 +//#define QMC6309_OSR2_64 6 +//#define QMC6309_OSR2_128 7 + +//ZDBL_ENB 0: OSR1_Z=2*OSR_XY 1:OSR1_Z=OSR_XY +#define QMC6309H_ZDBL_ENB_ON 1 +#define QMC6309H_ZDBL_ENB_OFF 0 + +#define QMC6309_ZDBL_ENB_ON 0 +#define QMC6309_ZDBL_ENB_OFF 1 + +#define QMC6309_STATUS_DRDY 0x01 +#define QMC6309_STATUS_OVFL 0x02 + +#define QMC6309_FIFO_STATUS_OR 0x04 +#define QMC6309_FIFO_STATUS_WMK 0x02 +#define QMC6309_FIFO_STATUS_FULL 0x01 + +#define QMC6309_SELFTEST_MAX_X (50) +#define QMC6309_SELFTEST_MIN_X (1) +#define QMC6309_SELFTEST_MAX_Y (50) +#define QMC6309_SELFTEST_MIN_Y (1) +#define QMC6309_SELFTEST_MAX_Z (50) +#define QMC6309_SELFTEST_MIN_Z (1) + +#define QMC6309_ABS(X) ((X) < 0 ? (-1 * (X)) : (X)) +#define QMC6309_ABSF(X) ((X) < 0.0f ? (-1.0 * (X)) : (X)) + +#define QMC6309_LOG printf +#define QMC6309_CHECK_ERR(ret) do {\ + if((ret) != QMC6309_OK) \ + QMC6309_LOG("qmc6309 error:%d line:%d\r\n",ret, __LINE__); \ + }while(0) + +//#define QMC6309_MODE_SWITCH + +enum +{ + TYPE_UNKNOW, + TYPE_QMC6309, + TYPE_QMC6309H, + + TYPE_MAX +}; + +typedef enum +{ + QMC6309_FIFO_MODE_BYPASS = (0<<6), + QMC6309_FIFO_MODE_FIFO = (1<<6), + QMC6309_FIFO_MODE_STREAM = (2<<6), + QMC6309_FIFO_MODE_DEFAULT = (3<<6) +} qmc6309_fifo_mode; + +typedef enum +{ + QMC6309_FIFO_CH_X = 0x01, + QMC6309_FIFO_CH_Y = 0x02, + QMC6309_FIFO_CH_Z = 0x04, + QMC6309_FIFO_CH_ALL = 0x07 +} qmc6309_fifo_ch; + +typedef enum +{ + QMC6309_IBI_OFF = 0x00, + QMC6309_IBI_DRDY = 0x01, + QMC6309_IBI_OVFL = 0x02, + QMC6309_IBI_ST_RDY = 0x04, + QMC6309_IBI_FIFO_FULL = 0x08, + QMC6309_IBI_FIFO_WMK = 0x10, + QMC6309_IBI_EN = 0x20 +} qmc6309_fifo_ibi; + +typedef struct +{ + char mode; + unsigned short count; +} qmc6309_set_ctl_t; + +typedef union +{ + struct + { + unsigned char mode:2; + unsigned char zdbl_enb:1; + unsigned char osr1:2; + unsigned char osr2:3; + }bit; + unsigned char value; +} qmc6309_ctrlreg1; + +typedef union +{ + struct + { + unsigned char set_rst:2; + unsigned char range:2; + unsigned char odr:3; + unsigned char soft_rst:1; + }bit; + unsigned char value; +} qmc6309_ctrlreg2; + +typedef struct +{ + unsigned char slave_addr; + int chip_type; + unsigned short ssvt; + short last_data[3]; + qmc6309_ctrlreg1 ctrl1; + qmc6309_ctrlreg2 ctrl2; + unsigned char fifo_ctrl; + unsigned char fifo_frame_len; +#if defined(QMC6309_MODE_SWITCH) + qmc6309_set_ctl_t set_ctl; +#endif +} qmc6309_data_t; + +int qmc6309_write_reg(unsigned char addr, unsigned char data); +int qmc6309_read_block(unsigned char addr, unsigned char *data, unsigned short len); + +int qmc6309_init(void); +int qmc6309_disable(void); +int qmc6309_enable(void); +void qmc6309_soft_reset(void); +#if defined(QMC6309_RECOVER) +int qmc6309_recover(void); +#endif +void qmc6309_check_otp(void); +void qmc6309_dump_reg(void); +void qmc6309_get_chip_info(unsigned int *info); +int qmc6309_read_mag_xyz(float uT[3], short raw[3]); +int qmc6309_read_mag_raw(short data[3]); +#if defined(QMC6309_MODE_SWITCH) +void qmc6309_setrst_auto_mode(short hw_d[3]); +#endif +void qmc6309_set_range(unsigned char range); +int qmc6309_self_test(void); +void qmc6309_fifo_config(qmc6309_fifo_mode mode, qmc6309_fifo_ch ch, int wmk); +int qmc6309_fifo_read(unsigned char *f_data); +void qmc6309_enable_ibi(qmc6309_fifo_ibi flag); +int qmc6309_get_chipid(uint8_t *id); +#endif + diff --git a/code/sdk/zhihui/drivers/mag/service/mag_at_cmd.c b/code/sdk/zhihui/drivers/mag/service/mag_at_cmd.c index f44cbf26d..20089ce1d 100644 --- a/code/sdk/zhihui/drivers/mag/service/mag_at_cmd.c +++ b/code/sdk/zhihui/drivers/mag/service/mag_at_cmd.c @@ -57,7 +57,9 @@ static uint32_t mag_start_test(uint8_t *para, uint32_t paraLen, char *strCommonC UNUSED(paraLen); UNUSED(para); do_mag_service_check_msg(MAG_SERVICE_CMD_START_CHECK); +#ifdef MAG_MMC5603 mag_set_factory_log_switch(1); +#endif return ERRCODE_SUCC; } static uint32_t mag_stop_test(uint8_t *para, uint32_t paraLen, char *strCommonCmd) @@ -66,7 +68,9 @@ static uint32_t mag_stop_test(uint8_t *para, uint32_t paraLen, char *strCommonCm UNUSED(paraLen); UNUSED(para); do_mag_service_check_msg(MAG_SERVICE_CMD_STOP_CHECK); +#ifdef MAG_MMC5603 mag_set_factory_log_switch(0); +#endif return ERRCODE_SUCC; } static const at_cmd_table_t g_mag_cmd[] = { diff --git a/code/sdk/zhihui/drivers/mag/service/mag_hal.c b/code/sdk/zhihui/drivers/mag/service/mag_hal.c index a267b35d1..42f21efcd 100644 --- a/code/sdk/zhihui/drivers/mag/service/mag_hal.c +++ b/code/sdk/zhihui/drivers/mag/service/mag_hal.c @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2025-05-16 11:36:48 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2025-08-18 17:33:25 + * @LastEditTime: 2025-11-04 10:00:47 * @FilePath: /FD230/code/sdk/zhihui/drivers/mag/hal/mag_hal.c * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE */ @@ -15,17 +15,27 @@ #endif +#ifdef MAG_QMC6309 +#include "qmc6309.h" +#endif + + void mag_timer_handler(void) { #ifdef MAG_MMC5603 mmc5603_check(); +#elif defined MAG_QMC6309 + // qmc6309_read_mag_xyz(); #endif } void mag_sensor_start(void) { #ifdef MAG_MMC5603 + mag_readPara_infile(); mmc5603_start(); +#elif defined MAG_QMC6309 + qmc6309_init(); #endif } @@ -33,6 +43,9 @@ void mag_sensor_stop(void) { #ifdef MAG_MMC5603 mmc5603_stop(); + mag_savePara_infile(); +#elif defined MAG_QMC6309 + qmc6309_disable(); #endif } @@ -42,6 +55,9 @@ uint8_t mag_get_chip_id(void) #ifdef MAG_MMC5603 CUSTOM_MMC5603_GETID(&id); printf("MMC5603 CHIP ID : 0x%x\n",id); +#elif defined MAG_QMC6309 + qmc6309_get_chipid(&id); + printf("QMC6309 CHIP ID : 0x%x\n",id); #endif return id; } diff --git a/code/sdk/zhihui/drivers/mag/service/mag_hal.h b/code/sdk/zhihui/drivers/mag/service/mag_hal.h index 2531c1fa6..0ea38e163 100644 --- a/code/sdk/zhihui/drivers/mag/service/mag_hal.h +++ b/code/sdk/zhihui/drivers/mag/service/mag_hal.h @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2024-06-07 11:18:26 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2025-08-18 17:33:40 + * @LastEditTime: 2025-11-04 10:06:53 * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.h * @Description: * @@ -18,8 +18,8 @@ extern "C" { #ifdef MAG_MMC5603 #define MAG_SENSOR_CHIP_ID 0X10 -#else -#define MAG_SENSOR_CHIP_ID 0 +#elif defined MAG_QMC6309 +#define MAG_SENSOR_CHIP_ID 0x90 #endif void mag_timer_handler(void); diff --git a/code/sdk/zhihui/drivers/mag/service/mag_service.c b/code/sdk/zhihui/drivers/mag/service/mag_service.c index 817da8812..3d6fd874b 100644 --- a/code/sdk/zhihui/drivers/mag/service/mag_service.c +++ b/code/sdk/zhihui/drivers/mag/service/mag_service.c @@ -100,7 +100,7 @@ static void mag_service_check_task(void const *arg) }else if (mail.comm.app == MAG_SERVICE_CMD_START_CHECK){ uapi_dev_runtime_set_mmc_status(1); // do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_MMCDATA_READ, NULL, 0); - mag_readPara_infile(); + // mag_readPara_infile(); // mmc5603_start(); mag_sensor_start(); LOS_Mdelay(20); @@ -110,7 +110,7 @@ static void mag_service_check_task(void const *arg) }else if (mail.comm.app == MAG_SERVICE_CMD_STOP_CHECK){ uapi_dev_runtime_set_mmc_status(0); // do_custom_fileoperate_service_check_msg(CUSTOM_FILEOPERATE_MSG_TYPE_MMCDATA_SAVE, NULL, 0); - mag_savePara_infile(); + // mag_savePara_infile(); mag_service_running_stat = false; osTimerStop(g_mag_service_timer); // mmc5603_stop(); diff --git a/code/sdk/zhihui/drivers/ppg/hal/ppg_hal.c b/code/sdk/zhihui/drivers/ppg/hal/ppg_hal.c index 10b7b6fbe..8fef223ac 100644 --- a/code/sdk/zhihui/drivers/ppg/hal/ppg_hal.c +++ b/code/sdk/zhihui/drivers/ppg/hal/ppg_hal.c @@ -2,7 +2,7 @@ * @Author: penglei 1624952103@qq.com * @Date: 2024-03-13 15:08:38 * @LastEditors: penglei 1624952103@qq.com - * @LastEditTime: 2025-10-27 16:05:36 + * @LastEditTime: 2025-11-04 12:08:12 * @FilePath: /FD230/code/sdk/drivers/peripheral/ppg/hx3695/hx3695_hal.c * @Description: * @@ -43,12 +43,22 @@ #include "cywee_service.h" #endif +#ifdef BOARD_FD272 + +// S_AGPIO_L26 心率复位 PPG reset +#define GPIO_PIN_PRG_RESET S_AGPIO_L26 +// S_AGPIO_R0 PRG_LED_POWER ON 心率等电源控制脚 +#define GPIO_PIN_PRG_LED_ON S_AGPIO_L3 + +#else // S_AGPIO_L26 心率复位 PPG reset #define GPIO_PIN_PRG_RESET S_AGPIO_L26 // S_AGPIO_R0 PRG_LED_POWER ON 心率等电源控制脚 #define GPIO_PIN_PRG_LED_ON S_AGPIO_R0 +#endif + static uint8_t ppg_factory_log = 0; void ppg_power_on(void) diff --git a/code/sdk/zhihui/drivers/vibrator/vibrator.c b/code/sdk/zhihui/drivers/vibrator/vibrator.c index e99be7992..15b5f5542 100644 --- a/code/sdk/zhihui/drivers/vibrator/vibrator.c +++ b/code/sdk/zhihui/drivers/vibrator/vibrator.c @@ -23,21 +23,26 @@ #ifdef BOARD_LEINIAO #define VIBRATOR_GPIOPPIN S_HGPIO4 +#elif defined BOARD_FD272 +#define VIBRATOR_GPIOPPIN S_AGPIO_L16 +#define VIBRATORPIN_MODE HAL_PIO_FUNC_PWMP3_M1 +static pwm_channel_t channel = PWM_3; #else #define VIBRATOR_GPIOPPIN S_AGPIO_R2 +#define VIBRATORPIN_MODE HAL_PIO_FUNC_PWMN1_M3 +static pwm_channel_t channel = PWM_1; #endif // #define VIB_DEBUG #ifdef VIB_USE_PWM // #define VIBRATORPIN_MODE HAL_PIO_FUNC_PWMP1_M2 -#define VIBRATORPIN_MODE HAL_PIO_FUNC_PWMN1_M3 #define TEST_TCXO_DELAY_1000MS 1000 #define TEST_PARAM_FOR_PWM_10 10 #define TEST_PARAM_FOR_PWM_200 200 -static pwm_channel_t channel = PWM_1; + static pin_t pin = VIBRATOR_GPIOPPIN; static pin_mode_t mode = VIBRATORPIN_MODE; static uint32_t delay_ms = 5; diff --git a/code/sdk/zhihui/services/gnss/driver/common/interface/board_interface/board_porting/tiot_board_pin_port.h b/code/sdk/zhihui/services/gnss/driver/common/interface/board_interface/board_porting/tiot_board_pin_port.h index aa2aad234..78db209c6 100644 --- a/code/sdk/zhihui/services/gnss/driver/common/interface/board_interface/board_porting/tiot_board_pin_port.h +++ b/code/sdk/zhihui/services/gnss/driver/common/interface/board_interface/board_porting/tiot_board_pin_port.h @@ -41,6 +41,19 @@ extern "C" { #define TIOT_PIN_UART_RTS S_MGPIO35 #define TIOT_PINMUX HAL_PIO_FUNC_UART_HS_UART +#elif defined BOARD_FD272 +#define TIOT_UART_PORT UART_BUS_0 +#define TIOT_PIN_WAKEUP_HOST_NUM S_AGPIO_R1 /* 用于唤醒HOST. */ +#define TIOT_PIN_WAKEUP_GNSS_NUM S_AGPIO_R0 /* 用于 唤醒GNSS. */ +#define TIOT_PIN_POWER S_AGPIO_R2 /* 用于开启GNSS. */ + + +#define TIOT_PIN_UART_TX S_MGPIO19 +#define TIOT_PIN_UART_RX S_MGPIO20 +#define TIOT_PIN_UART_CTS S_MGPIO21 +#define TIOT_PIN_UART_RTS S_MGPIO22 +#define TIOT_PINMUX HAL_PIO_FUNC_UART1 + #else #define TIOT_PIN_WAKEUP_HOST_NUM TIOT_PIN_NONE /* 用于唤醒HOST. */ #define TIOT_PIN_WAKEUP_GNSS_NUM TIOT_PIN_NONE /* 用于 唤醒GNSS. */ diff --git a/code/sdk/zhihui/services/gnss/inc/gnss_ctl.h b/code/sdk/zhihui/services/gnss/inc/gnss_ctl.h index de6cb520a..621a469c6 100644 --- a/code/sdk/zhihui/services/gnss/inc/gnss_ctl.h +++ b/code/sdk/zhihui/services/gnss/inc/gnss_ctl.h @@ -1,3 +1,11 @@ +/* + * @Author: penglei 1624952103@qq.com + * @Date: 2025-05-15 11:28:07 + * @LastEditors: penglei 1624952103@qq.com + * @LastEditTime: 2025-11-04 13:49:13 + * @FilePath: /FD230/code/sdk/zhihui/services/gnss/inc/gnss_ctl.h + * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE + */ // Copyright 2018-2025 Espressif Systems (Shanghai) PTE LTD // // Licensed under the Apache License, Version 2.0 (the "License"); @@ -39,6 +47,7 @@ int GnssLogEnable(bool enable); /**test only */ uint32_t gnss_write_cmd(uint8_t * cmdbuf,uint16_t cmdlen); +void gnss_bat_switch(uint8_t cmd); #ifdef __cplusplus } diff --git a/code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c b/code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c index d1d6e3059..6fe4e81fc 100644 --- a/code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c +++ b/code/sdk/zhihui/services/gnss/sample/pgnss_sample/pgnss_sample.c @@ -588,6 +588,8 @@ static void ListenGnssData(tiot_handle handle) } dump_location_data_to_buf(&g_global_gpsData, temp_buf, 512); + // printf("temp_buf : %s\n",temp_buf); + // 追加到pgnss_log中 if (pgnss_log != NULL) { int current_len = strlen(pgnss_log); @@ -724,16 +726,22 @@ void PGnssServerStartAutoModeStart(void) uapi_pm_add_sleep_veto(PM_ID_SYS); - #ifdef DOWNLOAD_GNSS_SWITCH +#ifdef DOWNLOAD_GNSS_SWITCH download_gnss_switch(SWITCH_TO_GNSS); - #endif +#endif + +#ifdef BOARD_FD272 + gnss_bat_switch(1); +#endif g_is_pgnss_start = 1; g_pgnss_stopflag = 0; g_cold_start_pgnss_stopflag = 0; g_is_listening_data = 0; // 初始化监听状态 + +#ifndef BOARD_FD272 sw_debug_uart_deinit(); - +#endif // Step1: init int32_t ret = tiot_service_init(); if (ret != 0) { @@ -825,16 +833,23 @@ void PGnssServerStartAutoModeStart(void) // Step8: deinit tiot_service_deinit(); - #ifdef DOWNLOAD_GNSS_SWITCH +#ifdef DOWNLOAD_GNSS_SWITCH download_gnss_switch(SWITCH_TO_DOWNLOAD); - #endif +#endif + +#ifdef BOARD_FD272 + gnss_bat_switch(0); +#endif + uapi_pm_remove_sleep_veto(PM_ID_SYS); g_is_pgnss_poweron = 0; g_is_pgnss_start = 0; g_pgnss_stopflag = 0; // 清除停止标志 +#ifndef BOARD_FD272 sw_debug_uart_deinit(); uart_config_init(); +#endif printf("finish auto start mode\r\n"); @@ -1070,6 +1085,8 @@ static int pgnss_startup_check(void) return 0; // 检查通过,可以正常启动PGNSS } +#ifdef SUPPORT_CAT1_SERVICE + printf("AGNSS folder is expired or does not exist. Attempting to download...\n"); // 检查4G状态 @@ -1129,6 +1146,8 @@ static int pgnss_startup_check(void) uapi_gnss_http_server_deinit(); printf("GNSS HTTP server deinitialized successfully\n"); +#endif + return 1; // 检查失败,需要冷启动 } @@ -1210,13 +1229,20 @@ void PGnssServerStart(void) uapi_pm_add_sleep_veto(PM_ID_SYS); - #ifdef DOWNLOAD_GNSS_SWITCH + +#ifdef DOWNLOAD_GNSS_SWITCH download_gnss_switch(SWITCH_TO_GNSS); - #endif +#endif + +#ifdef BOARD_FD272 + gnss_bat_switch(1); +#endif - g_is_pgnss_start = 1; + g_is_pgnss_start = 1; +#ifndef BOARD_FD272 sw_debug_uart_deinit(); +#endif // Step1: init int32_t ret = tiot_service_init(); if (ret != 0) { @@ -1308,9 +1334,14 @@ void PGnssServerStart(void) // Step8: deinit tiot_service_deinit(); - #ifdef DOWNLOAD_GNSS_SWITCH +#ifdef DOWNLOAD_GNSS_SWITCH download_gnss_switch(SWITCH_TO_DOWNLOAD); - #endif +#endif + +#ifdef BOARD_FD272 + gnss_bat_switch(0); +#endif + uapi_pm_remove_sleep_veto(PM_ID_SYS); if(!g_cold_start_pgnss_stopflag) { @@ -1318,9 +1349,10 @@ void PGnssServerStart(void) g_is_pgnss_poweron = 0; g_pgnss_stopflag = 0; // 清除停止标志 } - +#ifndef BOARD_FD272 sw_debug_uart_deinit(); uart_config_init(); +#endif printf("finish gnss samples\r\n"); diff --git a/code/sdk/zhihui/services/gnss/src/gnss_ctl.c b/code/sdk/zhihui/services/gnss/src/gnss_ctl.c index 57eca614d..1c3a432bb 100644 --- a/code/sdk/zhihui/services/gnss/src/gnss_ctl.c +++ b/code/sdk/zhihui/services/gnss/src/gnss_ctl.c @@ -33,6 +33,9 @@ // #include "gnss_sample.h" #include "pgnss_sample.h" // #include "cywee_hal.h" +#include "tcxo.h" + +#define TIOT_PIN_BAT S_AGPIO_L31 /* GNSS BAT */ errcode_t gnss_power_on(void) { @@ -157,4 +160,21 @@ errcode_t download_gnss_switch(DOWNLOAD_GPS_SWITCH_T download_gps_switch) PRINT("SWITCH uart to download set_value S_AGPIO_L16 GPIO_LEVEL_LOW ret %d\n",ret); } return ret; -} \ No newline at end of file +} + +void gnss_bat_switch(uint8_t cmd) +{ + uapi_pin_set_mode(TIOT_PIN_BAT,HAL_PIO_FUNC_GPIO); + uapi_gpio_set_dir(TIOT_PIN_BAT, GPIO_DIRECTION_OUTPUT); + + if (cmd) + { + uapi_gpio_set_val(TIOT_PIN_BAT, GPIO_LEVEL_HIGH); + uapi_tcxo_delay_ms(10); + } + else + { + uapi_gpio_set_val(TIOT_PIN_BAT, GPIO_LEVEL_LOW); + uapi_tcxo_delay_ms(10); + } +} diff --git a/code/sdk/zhihui/utils/custom_fileoperate_service.c b/code/sdk/zhihui/utils/custom_fileoperate_service.c index 094beea6a..bca900320 100644 --- a/code/sdk/zhihui/utils/custom_fileoperate_service.c +++ b/code/sdk/zhihui/utils/custom_fileoperate_service.c @@ -193,14 +193,14 @@ static void custom_fileoperate_service_check_task(void const *arg) // cywee_read_nap_data(); break; case CUSTOM_FILEOPERATE_MSG_TYPE_MMCDATA_SAVE: -#ifdef SUPPORT_MAG_SERVICE - mag_savePara_infile(); -#endif +// #ifdef SUPPORT_MAG_SERVICE +// mag_savePara_infile(); +// #endif break; case CUSTOM_FILEOPERATE_MSG_TYPE_MMCDATA_READ: -#ifdef SUPPORT_MAG_SERVICE - mag_readPara_infile(); -#endif +// #ifdef SUPPORT_MAG_SERVICE + // mag_readPara_infile(); +// #endif break; case CUSTOM_FILEOPERATE_MSG_TYPE_MUSICNAME_READ: -- 2.17.1