#endif\r
\r
#ifdef ENABLE_CUSTOM_I2C\r
- errcode_t result = custom_iic_init();\r
+ errcode_t result = custom_i2c_init(I2C_BUS_2);\r
if(result != SUCC)\r
PRINT("custom_iic_init failed !!! \r\n");\r
else\r
'CONFIG_DFX_SUPPORT_DIAG_UP_MACHINE=1',
'TPTYPE_CST86XX',
'PPG_VC9202',
- 'ROTARYENCODER_HX3507',
+ #'ROTARYENCODER_HX3507',
+ 'ROTARYENCODER_U8',
+ 'FUNC_KEY2',
'NANDFLASH_DS35X'
],
'ram_component': [
{ S_AGPIO_L30, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_HIGH, 0, NULL },
- // // S_AGPIO_L12 SDIO_BT 光电开关 sd
- // { S_AGPIO_L12, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
- // // S_AGPIO_L13 SCLK_BT 光电开关 sc
- // { S_AGPIO_L13, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
+ // S_AGPIO_L12 SDIO_BT 光电开关 sd
+ { S_AGPIO_L12, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
+ // S_AGPIO_L13 SCLK_BT 光电开关 sc
+ { S_AGPIO_L13, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
// // S_AGPIO_L26 心率复位 PPG reset
// { S_AGPIO_L26, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
#ifdef ENABLE_CYWEE
extern void cywee_int_callback(pin_t pin, uintptr_t param);
#endif
+
+#ifdef ROTARYENCODER_U8
+extern void crown_int_callback(pin_t pin, uintptr_t param);
+#endif
/**
* @addtogroup connectivity_config_boards
* @{
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_UP, HAL_PIO_IE_ENBALE }, // S_AGPIO_L11 G_INT1
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L12 i2c data HX3507_SDIO
+#ifdef ROTARYENCODER_U8
+ { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_L13 i2c CLK HX3507_SCLK
+#else
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_L13 i2c CLK HX3507_SCLK
-
+#endif
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_L14 NC
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_L15 NC
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_DOWN, HAL_PIO_IE_DISABLE }, // S_AGPIO_L16 NC
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R6 PRG_INT 心率中断
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R7 GYRO_INT2
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R8 GYRO_INT1
- { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R9 BAT_CHARGE_OFF 关掉充电 温度高的时候
+#ifdef BOARD_U8
+ { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R9 u8为key3
+#else
+ { HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_DISABLE }, // S_AGPIO_R9 BAT_CHARGE_OFF 关掉充电 温度高的时候
+#endif
{ HAL_PIO_FUNC_GPIO, HAL_PIO_DRIVE_MAX, HAL_PIO_PULL_MAX, HAL_PIO_IE_ENBALE }, // S_AGPIO_R10 Key2 ///////////////////HAL_PIO_IE_ENBALE input enable
#if CORE == APPS
// S_AGPIO_L17 HX3507_INT
// { S_AGPIO_L17, HAL_GPIO_DIRECTION_INPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
// S_AGPIO_L12 SDIO_BT
- { S_AGPIO_L12, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
+ { S_AGPIO_L12, HAL_GPIO_DIRECTION_INPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
// S_AGPIO_L13 SCLK_BT
- { S_AGPIO_L13, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
+ { S_AGPIO_L13, HAL_GPIO_DIRECTION_INPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
// S_AGPIO_L26 心率复位 PPG reset
{ S_AGPIO_L26, HAL_GPIO_DIRECTION_OUTPUT, HAL_GPIO_LEVEL_LOW, 0, NULL },
#ifdef PPG_VC9202
{ S_AGPIO_R6, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_RISING_EDGE, ppg_int_callback},
+ { S_AGPIO_L12, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_HIGH, crown_int_callback},
+ { S_AGPIO_L13, HAL_GPIO_DIRECTION_INPUT, NULL, GPIO_INTERRUPT_HIGH, crown_int_callback},
#endif
};
}\r
\r
// Initialize HP4570 chip\r
-bool hp45xxx_init(uint8_t chip_ver){\r
+bool hp45xxx_init(uint8_t chip_ver)\r
+{\r
+ custom_i2c_init(I2C_BUS_0);\r
+\r
switch (chip_ver){\r
case HP4570K:\r
hp45xxx_i2c_addr = HP4570K_I2C_ADDR;\r
* @Author: penglei 1624952103@qq.com
* @Date: 2024-12-23 15:11:01
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-12-24 21:09:51
+ * @LastEditTime: 2024-12-30 15:24:42
* @FilePath: /sdk615/code/sdk/zhihui/drivers/charge/HP4570/service/charge_at_cmd.c
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
return ERRCODE_SUCC;
}
static const at_cmd_table_t g_charge_cmd[] = {
- { (char *)"AT^CHARGETEST", hp4570_test, (char *)"1" },
+ { (char *)"AT^HP4570TEST", hp4570_test, (char *)"1" },
};
at_cmd_table_t *get_charge_cmd_table(uint32_t *cmd_count)
if((int)sensorEVT->fData[1] == CUSTOM_OFFBODY_DETECT)
{
CWM_OS_dbgPrintf("CUSTOM_OFFBODY_DETECT !!! \r\n");
-#if 1
+#if 0
if((int)sensorEVT->fData[2] == 1)
send_ppg_cmd_msg(PPG_SERVICE_CMD_TYPE_DO_WEAR_MODE_TEST);
else
set(PUBLIC_DEFINES
SUPPORT_AT_HX3507
)
-else()
+
+elseif("ROTARYENCODER_HX3509" IN_LIST DEFINES)
set(SOURCES
${CMAKE_CURRENT_SOURCE_DIR}/hx3509/tyhx_OTS_hx3509_custom.c
${CMAKE_CURRENT_SOURCE_DIR}/hx3509/hx3509_hal.c
)
set(PUBLIC_DEFINES
SUPPORT_AT_HX3509
+)
+elseif("ROTARYENCODER_U8" IN_LIST DEFINES)
+set(SOURCES
+ ${CMAKE_CURRENT_SOURCE_DIR}/crown/crown.c
+)
+set(PUBLIC_HEADER
+ ${CMAKE_CURRENT_SOURCE_DIR}/crown
+)
+set(PUBLIC_DEFINES
)
endif()
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-12-23 14:24:09
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2024-12-30 17:28:09
+ * @FilePath: /sdk615/code/sdk/zhihui/drivers/rotary_encoder/hx3507/hx3507_hal.c
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
+ */
// #include "hx3507.h"
};
-void *rotary_encoder_get_api(void)
+void *rotary_encoder_get_hx3507_api(void)
{
return ((void *)&g_hx3507_api);
}
-void *rotary_encoder_get_peri_attr(void)
+void *rotary_encoder_get_hx3507_peri_attr(void)
{
return ((void *)NULL);
}
\ No newline at end of file
#endif /* __cplusplus */
#endif /* __cplusplus */
-void *rotary_encoder_get_api(void);
-void *rotary_encoder_get_peri_attr(void);
+void *rotary_encoder_get_hx3507_api(void);
+void *rotary_encoder_get_hx3507_peri_attr(void);
#ifdef __cplusplus
#if __cplusplus
* @Author: penglei 1624952103@qq.com
* @Date: 2024-12-18 10:23:22
* @LastEditors: penglei 1624952103@qq.com
- * @LastEditTime: 2024-12-20 18:45:27
+ * @LastEditTime: 2025-01-02 16:20:33
* @FilePath: /sdk615/code/sdk/drivers/peripheral/rotary_encoder/hx3509/hx3509_at_cmd.c
* @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE
*/
#include "tyhx_OTS_hx3509_custom.h"
#include "custom_utils.h"
+
#define ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0]))
#define HX3509_MAX_ARGC 8
#define HX3509_MAX_ARGV_LEN 64
re_print("SKIP hx3509test start, already started\r\n");
return 0;
}
- crown_init();
- crown_start();
+ ots_init();
+ ots_start();
g_hx3509_test_started = 1;
return ERRCODE_SUCC;
}
re_print("SKIP hx3509test stop, already stopped\r\n");
return 0;
}
- crown_stop();
+ ots_stop();
g_hx3509_test_started = 0 ;
return ERRCODE_SUCC;
}
if (data_len != sizeof(re_input_event_info))
return EXT_ERR_NOT_SUPPORT;
re_input_event_info *encoder_info = (re_input_event_info*)data;
- int16_t diff = get_crown_result();
- int16_t stand_still = get_stand_still();
+ int16_t diff = hx3509_get_crown_result();
+ int16_t stand_still = hx3509_get_stand_still();
// re_print("hx3509_encoder_get_encoderinfo diff %d stand_still %d\n",diff,stand_still);
if (stand_still == 1 )
{
};
-// void *rotary_encoder_get_api(void)
-// {
-// return ((void *)&g_hx3509_api);
-// }
+void *rotary_encoder_get_hx3509_api(void)
+{
+ return ((void *)&g_hx3509_api);
+}
-// void *rotary_encoder_get_peri_attr(void)
-// {
-// return ((void *)NULL);
-// }
\ No newline at end of file
+void *rotary_encoder_get_peri_hx3509_attr(void)
+{
+ return ((void *)NULL);
+}
\ No newline at end of file
+/*
+ * @Author: penglei 1624952103@qq.com
+ * @Date: 2024-12-23 15:11:25
+ * @LastEditors: penglei 1624952103@qq.com
+ * @LastEditTime: 2024-12-30 17:28:53
+ * @FilePath: /sdk615/code/sdk/zhihui/drivers/rotary_encoder/hx3509/hx3509_hal.h
+ * @Description: 这是默认设置,请设置`customMade`, 打开koroFileHeader查看配置 进行设置: https://github.com/OBKoro1/koro1FileHeader/wiki/%E9%85%8D%E7%BD%AE;
+ */
/**
* Copyright (c) @CompanyNameMagicTag 2022-2022. All rights reserved. \n
*
#endif /* __cplusplus */
#endif /* __cplusplus */
-// void *rotary_encoder_get_api(void);
-// void *rotary_encoder_get_peri_attr(void);
+void *rotary_encoder_get_hx3509_api(void);
+void *rotary_encoder_get_peri_hx3509_attr(void);
#ifdef __cplusplus
#if __cplusplus
#define REPORT_MIN 2 // 这个是最小上报角度, 按照平均值预估的值, 由客户定义, 看多大的数据上报给UI处理一次
static int16_t ots_result = 0;//ots结果
+static int16_t stand_still = 1; //静止标志 1 静止,0 转动
bool ots_timer_running = false; //ots定时器是否运行标志
}
/*----------------------以上为定时函数相关定义 建立/启动/停止定时器//定时中断处理----------
---------------------*/
+void crown_i2c_SendByte(uint8_t byte)
+{
+ uint8_t i;
+ uapi_gpio_set_dir(PIN_TYHX_SDIO,GPIO_DIRECTION_OUTPUT);
+
+ for (i = 0; i < 8; i++)
+ {
+ if (byte & 0x80)
+ {
+ uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_HIGH);
+ }
+ else
+ {
+ uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
+ }
+ LOS_Udelay(COM_DELAY);
+ uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
+ LOS_Udelay(COM_DELAY);
+ uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+ if (i == 7)
+ {
+ uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_HIGH);
+ }
+ byte <<= 1;
+ LOS_Udelay(COM_DELAY);
+ }
+}
+
+uint8_t crown_i2c_ReadByte(void)
+{
+ uint8_t i;
+ uint8_t value = 0;
+
+ for (i = 0; i < 8; i++)
+ {
+ value <<= 1;
+ uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
+ LOS_Udelay(COM_DELAY);
+ if (uapi_gpio_get_val(PIN_TYHX_SDIO))
+ {
+ value++;
+ }
+ uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+ LOS_Udelay(COM_DELAY);
+ }
+ return value;
+}
-// 定义一个用于检测ACK信号的函数,返回1表示收到ACK,返回0表示未收到ACK
-int crown_check_ack(void)
+void crown_i2c_Ack(void)
{
+
+ uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
+ LOS_Udelay(COM_DELAY);
+ uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
+ LOS_Udelay(COM_DELAY);
uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
LOS_Udelay(COM_DELAY);
+ uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_HIGH);
+}
- // 将SCLK引脚拉高,以便从设备在这个时钟周期内返回ACK信号(假设ACK在SCLK高电平期间有效)
+void crown_i2c_NAck(void)
+{
+ uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_HIGH);
+ LOS_Udelay(COM_DELAY);
uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
LOS_Udelay(COM_DELAY);
+ uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+ LOS_Udelay(COM_DELAY);
+}
- // 读取SDIO引脚的电平状态,判断是否为低电平(低电平表示收到ACK)
- if (uapi_gpio_get_val(PIN_TYHX_SDIO) == GPIO_LEVEL_LOW) {
- return 1; // 收到ACK,返回1
- }
- return 0; // 未收到ACK,返回0
+void crown_i2c_start(void)
+{
+ uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
+ uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_HIGH);
+
+ LOS_Udelay(COM_DELAY);
+ uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
+ LOS_Udelay(COM_DELAY);
+ uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+}
+
+void crown_i2c_stop(void)
+{
+ uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
+ uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
+ LOS_Udelay(COM_DELAY);
+ uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_HIGH);
+}
+
+
+int crown_wait_ack(void)
+{
+ int ret = 0;
+ uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_HIGH);
+ LOS_Udelay(COM_DELAY);
+ uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
+ LOS_Udelay(COM_DELAY);
+
+ if (uapi_gpio_get_val(PIN_TYHX_SDIO) == GPIO_LEVEL_LOW)
+ ret = 1;
+ else
+ ret = 0;
+
+ uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+ LOS_Udelay(COM_DELAY);
+ return ret;
}
/*---------------------------以下为OTS 的寄存器读写,初始化/开始/结束------------------------*/
// TYHX_LOG("regaddr 0x%x\r\n",regaddr);
// regaddr &= 0x7f;
- uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
- uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
- uapi_tcxo_delay_us(COM_DELAY);
+ // uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
+ // uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+ // uapi_tcxo_delay_us(COM_DELAY);
- // 先发送设备地址(包含读写位)
- for(int i = 0; i < 8; i++)
- {
- uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+ crown_i2c_start();
- if(addrWithRwBit & 0x80)
- {
- uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_HIGH);
- }
- else
- {
- uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
- }
- //uapi_tcxo_delay_us(COM_DELAY);
- uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
+ crown_i2c_SendByte(addrWithRwBit);
- addrWithRwBit <<= 1;
- // uapi_tcxo_delay_us(COM_DELAY);
- }
+ // // 先发送设备地址(包含读写位)
+ // for(int i = 0; i < 8; i++)
+ // {
+ // uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
- // 发送寄存器地址
- for(int i = 0; i < 8; i++)
+ // if(addrWithRwBit & 0x80)
+ // {
+ // uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_HIGH);
+ // }
+ // else
+ // {
+ // uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
+ // }
+ // //uapi_tcxo_delay_us(COM_DELAY);
+ // uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
+
+ // addrWithRwBit <<= 1;
+ // // uapi_tcxo_delay_us(COM_DELAY);
+ // }
+
+ if(!crown_wait_ack())
{
- uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+ // TYHX_LOG("111 wait ack error !!! \n");
+ }
- if(regaddr & 0x80)
- {
- uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_HIGH);
- }
- else
- {
- uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
- }
- //uapi_tcxo_delay_us(COM_DELAY);
- uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
+ crown_i2c_SendByte(regaddr);
+ // // 发送寄存器地址
+ // for(int i = 0; i < 8; i++)
+ // {
+ // uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+
+ // if(regaddr & 0x80)
+ // {
+ // uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_HIGH);
+ // }
+ // else
+ // {
+ // uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
+ // }
+ // //uapi_tcxo_delay_us(COM_DELAY);
+ // uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
+
+ // regaddr <<= 1;
+ // // uapi_tcxo_delay_us(COM_DELAY);
+ // }
- regaddr <<= 1;
- // uapi_tcxo_delay_us(COM_DELAY);
+ if(!crown_wait_ack())
+ {
+ // TYHX_LOG("222 wait ack error !!! \n");
}
- // // addrWithRwBit = (0x0 << 1) | 0x01;
+ addrWithRwBit = (deviceAddr << 1) | 0x01;
+
+ crown_i2c_start();
- // addrWithRwBit = 0;
- // printf("addrWithRwBit :0x%x \n",addrWithRwBit);
+ crown_i2c_SendByte(addrWithRwBit);
// // 先发送设备地址(包含读写位)
// for(int i = 0; i < 8; i++)
// // uapi_tcxo_delay_us(COM_DELAY);
// }
- // 开始读操作,HOST要把SDIO从输出端口改为输入端口.
+ if(!crown_wait_ack())
+ {
+ // TYHX_LOG("333 wait ack error !!! \n");
+ }
+
+
+ // // 开始读操作,HOST要把SDIO从输出端口改为输入端口.
uapi_gpio_set_dir(PIN_TYHX_SDIO,GPIO_DIRECTION_INPUT);
uapi_pin_set_pull(PIN_TYHX_SDIO, (pin_pull_t)HAL_PIO_PULL_UP);
uapi_pin_set_ie(PIN_TYHX_SDIO,HAL_PIO_IE_ENBALE);
// LOS_Udelay(COM_DELAY);
//nrf_gpio_pin_clear(PIN_TYHX_SCLK);
//uapi_tcxo_delay_us(COM_DELAY);
+ readvalue = crown_i2c_ReadByte();
- for(int i = 0; i < 8; i++)
- {
- readvalue <<= 1;
- uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+ // for(int i = 0; i < 8; i++)
+ // {
+ // readvalue <<= 1;
+ // uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
- //uapi_tcxo_delay_us(COM_DELAY);
+ // //uapi_tcxo_delay_us(COM_DELAY);
- //uapi_tcxo_delay_us(COM_DELAY);
+ // //uapi_tcxo_delay_us(COM_DELAY);
- uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
+ // uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
- if(uapi_gpio_get_val(PIN_TYHX_SDIO))
- {
- readvalue |= 0x1;
- }
- //uapi_tcxo_delay_us(COM_DELAY);
+ // if(uapi_gpio_get_val(PIN_TYHX_SDIO))
+ // {
+ // readvalue |= 0x1;
+ // }
+ // //uapi_tcxo_delay_us(COM_DELAY);
- }
+ // }
uapi_gpio_set_dir(PIN_TYHX_SDIO,GPIO_DIRECTION_OUTPUT);
- uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
- uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+ // uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
+ // uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+
+
+ crown_i2c_NAck();
+ crown_i2c_stop();
// TYHX_LOG("readvalue 0x%x\r\n",readvalue);
return readvalue;
}
addrWithRwBit <<= 1;
}
// if (!crown_check_ack()) {
- // printf("write check error \n");
+ // TYHX_LOG("write check error \n");
// return ;
// }
// if((ots_read_reg(RA_MOTION_BIT)&0x80)||(nrf_gpio_pin_read(PIN_TYHX_MOT)==false))
if((ots_read_reg(RA_MOTION_BIT)&0x80))
{
+ stand_still = 0;
//X Y的数据必须全部被读出,但是我们只需要X的结果来判断方向和速度
deltax = ots_read_reg(RA_ACC_DELTA_X_LOW) |(ots_read_reg(RA_ACC_DELTA_X_HIG)<<8);
deltay = ots_read_reg(RA_ACC_DELTA_Y_LOW) |(ots_read_reg(RA_ACC_DELTA_Y_HIG)<<8);
TYHX_LOG("Deltay = %d \r\n",deltay);//djd0305
//用户添加程序, deltay 是表冠产生数据, 上报给UI, 如果需要数据变化,
// 积攒到一定值再上报UI, 可以调用 ots_result_deal()函数处理.
+ ots_result_deal(deltax);
}
else
{
+ stand_still = 1;
//debug的时候, 可能用到, 看一下图像质量
TYHX_LOG("pic qulity =%d, agc num=%d\r\n",ots_read_reg(RA_DATA_2AGC),ots_read_reg(RA_EXP_NUM_SEL)&0x7F);
}
void ots_init(void)
{
//此时要保证芯片已经正常上电
- // uapi_gpio_set_dir(PIN_TYHX_SDIO,GPIO_DIRECTION_OUTPUT);
+ uapi_gpio_set_dir(PIN_TYHX_SDIO,GPIO_DIRECTION_OUTPUT);
- // uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
+ uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
- // uapi_gpio_set_dir(PIN_TYHX_SCLK,GPIO_DIRECTION_OUTPUT);
+ uapi_gpio_set_dir(PIN_TYHX_SCLK,GPIO_DIRECTION_OUTPUT);
- // uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
+ uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
- // uapi_tcxo_delay_us(COM_DELAY);
+ uapi_tcxo_delay_us(COM_DELAY);
// crown_com_resync();
int i;
for(i=0; i<10; i++)//重复读DEVICE ID 是否等于0X35
*/
void ots_result_deal(int16_t x)
{
-#if 0// 如果冠轴结构设计摆动角度很大(>5°), 请改成#if 1
+#if 1// 如果冠轴结构设计摆动角度很大(>5°), 请改成#if 1
if(abs(x)<=FILTER_MIN )
return;
#endif
ots_result-=1; //
}
}
- if(abs(ots_result)>=REPORT_MIN)//最小的值由用户定义, 就是得到值大于一定的值, 再上报UI
- {
- //OTS结果上报UI, 因为这里是定时读取的函数, 可以把结果上报
- ots_result = 0;
- }
+ // if(abs(ots_result)>=REPORT_MIN)//最小的值由用户定义, 就是得到值大于一定的值, 再上报UI
+ // {
+ // //OTS结果上报UI, 因为这里是定时读取的函数, 可以把结果上报
+ // ots_result = 0;
+ // }
+}
+
+int16_t hx3509_get_stand_still(void)
+{
+ return stand_still;
+}
+
+int16_t hx3509_get_crown_result(void)
+{
+ int16_t resulttemp;
+ resulttemp=ots_result;
+ ots_result = 0;
+ return resulttemp;
}
#else //其他平台,由用户自行添加上面对应的程序
/*----------------------以下为LOG打印函数, 用户需要改成自己平台的-------------------------------*/
//log 打印定义
-#define TYHX_LOG_ENABLE
+// #define TYHX_LOG_ENABLE
#ifdef TYHX_LOG_ENABLE
#define TYHX_LOG(fmt, ...) \
do { \
//工厂测试模式
bool ots_factory_test(void);
+int16_t hx3509_get_crown_result(void);
+int16_t hx3509_get_stand_still(void);
+int32_t microhone_switch(bool isopen);
+
#endif //_TYHX__OTS_hx3509_CUSTOM_H
g_attr_re = attr;
re_err("re_register_callback ----------succ!!!\n");
- if (attr->encoder_api->register_callback != NULL) {
- ret = attr->encoder_api->register_callback(attr->private_data, re_callback_func);
- if (ret != EXT_ERR_SUCCESS) {
- re_err("register rotary encoder callback fail! ret=0x%x", ret);
- return ret;
+ if(attr->encoder_api)
+ {
+ if (attr->encoder_api->register_callback != NULL) {
+ ret = attr->encoder_api->register_callback(attr->private_data, re_callback_func);
+ if (ret != EXT_ERR_SUCCESS) {
+ re_err("register rotary encoder callback fail! ret=0x%x", ret);
+ return ret;
+ }
+ } else {
+ re_err("rotary encoder callback register func is empty!");
}
- } else {
- re_err("rotary encoder callback register func is empty!");
}
+
return ret;
}
int32_t ret;
struct re_driver_data *redd = NULL;
// re_err("re_init ----------1!!!\n");
-
#ifdef ROTARYENCODER_HX3507
- g_encoder_drv.private_data = rotary_encoder_get_peri_attr();
- g_encoder_drv.encoder_api = rotary_encoder_get_api();
+ g_encoder_drv.private_data = rotary_encoder_get_peri_hx3507_attr();
+ g_encoder_drv.encoder_api = rotary_encoder_get_hx3507_api();
+#elif defined ROTARYENCODER_HX3509
+ g_encoder_drv.private_data = rotary_encoder_get_peri_hx3509_attr();
+ g_encoder_drv.encoder_api = rotary_encoder_get_hx3509_api();
#endif
g_encoder_drv.ops = &g_re_status_ops;
redd = rotary_encoder_get_driver_data();
void rotary_encoder_suspend(void)
{
-
+ encoder_peripheral_api *encoder_ptr = NULL;
/**灭屏,关闭Encoder*/
#ifdef ROTARYENCODER_HX3507
- encoder_peripheral_api *encoder_ptr = rotary_encoder_get_api();
+ encoder_ptr = rotary_encoder_get_hx3507_api();
+#elif defined ROTARYENCODER_HX3509
+ encoder_ptr = rotary_encoder_get_hx3509_api();
+#endif
+ if(encoder_ptr == NULL)
+ return;
ext_errno ret = encoder_ptr->encoder_sleep();
if (ret != EXT_ERR_SUCCESS) { re_err("encoder sleep ret=0x%x", ret); }
-#endif
}
void rotary_encoder_resume(void)
{
+ encoder_peripheral_api *encoder_ptr = NULL;
#ifdef ROTARYENCODER_HX3507
/**亮屏,恢复Encoder工作*/
- encoder_peripheral_api *encoder_ptr = (encoder_peripheral_api*)rotary_encoder_get_api();
+ encoder_ptr = (encoder_peripheral_api*)rotary_encoder_get_hx3507_api();
+#elif defined ROTARYENCODER_HX3509
+ encoder_ptr = (encoder_peripheral_api*)rotary_encoder_get_hx3509_api();
+#endif
+ if(encoder_ptr == NULL)
+ return;
ext_errno ret = encoder_ptr->encoder_resume();
if (ret != EXT_ERR_SUCCESS) { re_err("encoder resume ret=0x%x", ret); }
-#endif
}
void encoder_suspend_for_i2c(void)
PRINT(" custom_iic_reset done! i2cbus %d clock %d\n",i2cbus,i2c_clock);
}
-errcode_t custom_iic_init(void)
+errcode_t custom_i2c_init(uint8_t bus_index)
{
errcode_t result;
// #warning CONFIG_I2C_SUPPORT_DMA = 0
// #endif
// #endif
- if(i2c_installed == 0)
- {
- result = uapi_i2c_master_init(I2C_BUS_2, 400000, I2C_SPEED_MODE_FS); /* 400000: 400KHz */
+ // if(i2c_installed == 0)
+ // {
+ result = uapi_i2c_master_init(bus_index, 400000, I2C_SPEED_MODE_FS); /* 400000: 400KHz */
- if (result != ERRCODE_SUCC) {
- PRINT("cywee i2c init fail! ret=0x%x\n", result);
- return ERRCODE_FAIL;
- }
-
- i2c_installed = 1;
- return ERRCODE_SUCC;
- }
- else
+ if (result != ERRCODE_SUCC) {
+ PRINT("cywee i2c init fail! ret=0x%x\n", result);
return ERRCODE_FAIL;
+ }
+
+ // i2c_installed = 1;
+ return ERRCODE_SUCC;
+ // }
+ // else
+ // return ERRCODE_FAIL;
}
errcode_t custom_i2c_read_regs(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *readData, int readDataSize, int busIndex)
int uapi_delete_files(const char *file_path);
void uapi_restore_factory_setting(void);
+errcode_t custom_i2c_init(uint8_t bus_index);
void custom_i2c_reset(uint8_t i2cbus, uint16_t i2c_clock);
errcode_t custom_i2c_write_reg(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *writeData, int writeDataSize, int busIndex);
errcode_t custom_i2c_read_regs(uint16_t slaveAddr, uint16_t reg, int regLength, uint8_t *readData, int readDataSize, int busIndex);