优化RotaryEncoder驱动,暂时还没有打通与UI的消息通道
authorSnickerSun <snickersun@163.com>
Wed, 21 Feb 2024 03:06:47 +0000 (11:06 +0800)
committerSnickerSun <snickersun@163.com>
Wed, 21 Feb 2024 03:06:47 +0000 (11:06 +0800)
12 files changed:
code/sdk/application/brandy/brandy_standard/input_app.c
code/sdk/build/config/target_config/brandy/config.py
code/sdk/drivers/peripheral/rotary_encoder/hx3507.c [deleted file]
code/sdk/drivers/peripheral/rotary_encoder/hx3507.h [deleted file]
code/sdk/drivers/peripheral/rotary_encoder/hx3507/hx3507.c
code/sdk/drivers/peripheral/rotary_encoder/hx3507/hx3507_hal.c
code/sdk/drivers/peripheral/rotary_encoder/hx3507/hx3507_hal.h
code/sdk/drivers/peripheral/rotary_encoder/hx3507_at_cmd.c [deleted file]
code/sdk/drivers/peripheral/rotary_encoder/hx3507_at_cmd.h [deleted file]
code/sdk/drivers/peripheral/rotary_encoder/rotary_encoder_drv.c
code/sdk/drivers/peripheral/touch/touch_screen_def.h
code/sdk/middleware/services/gui/hal/input/src/input_manager.c

index 5dcee7a..49db40e 100755 (executable)
@@ -511,10 +511,16 @@ static void input_device_task(void const *arg)
             continue;
         }
 
+        if (mail.comm.app == APP_ENCODER) {
+    #ifdef ENCODER_SUPPORT
+            encoder_info_process();
+            
+            // PRINT("[encoder][app] TDO : APP_ENCODER EVENT\n");
+    #endif
+        }
         if (mail.comm.app == APP_BUTTON) {
             button_driver_event_handler(&mail);
         }
-
         if (mail.comm.app == APP_TOUCH) {
             uapi_pm_add_sleep_veto(PM_ID_TOUCH);
             touch_info_process();
index 6119897..5bc3fcb 100755 (executable)
@@ -122,13 +122,14 @@ target = {
                     'MAG_MMC5603',
                     'ENABLE_VIBRATOR',
                     'ENABLE_SLIP',
+                    'ENCODER_SUPPORT',
                     #'CONFIG_ADC_SUPPORT_AUTO_SCAN','CONFIG_ADC_SUPPORT_LONG_SAMPLE',
                     'MIPI_ULPS_SUPPORT', 
                     'ENABLE_FONT_VECTOR_GLOBAL', 
                     'ENABLE_SHAPING',
                     'TPTYPE_FT6X46',
-                    'SUPPORT_CHARGER_PLUG_DETECTION_NOTIFICATION'
-                    #'SUPPORT_ALIPAY_SEC'
+                    'SUPPORT_CHARGER_PLUG_DETECTION_NOTIFICATION',
+                    'SUPPORT_ALIPAY_SEC'
                     ],
         'ram_component': ["algorithm", "dfx_port_brandy", "dfx_update", 'dfx_nv', "osal", "arch_port", "-:testsuite",
                           "liteos_port", 'lcd', 'qspi_display', 'dfx_file_operation',
@@ -150,6 +151,7 @@ target = {
                           "vibrator",
                           "vibrator_service",
                           "lwIP",
+                        #   "slip",
                           "audio_manager",
                           "custom_utils",
                           "rotary_encoder",
diff --git a/code/sdk/drivers/peripheral/rotary_encoder/hx3507.c b/code/sdk/drivers/peripheral/rotary_encoder/hx3507.c
deleted file mode 100644 (file)
index 92a06fc..0000000
+++ /dev/null
@@ -1,542 +0,0 @@
-/**
- * Copyright (c) @CompanyNameMagicTag 2023-2023. All rights reserved. \n
- *
- * Description: Button driver source file \n
- * Author: @CompanyNameTag \n
- * History: \n
- * 2023-02-24, Create file. \n
- */
-
-#include "pinctrl.h"
-#include "button_porting.h"
-#include "platform_core.h"
-#include "gpio.h"
-#include "gpio_porting.h"
-#include "debug_print.h"
-#include "rtc.h"
-#include "timer.h"
-#include "systick.h"
-#include "chip_core_irq.h"
-#include "tcxo.h"
-#include "errcode.h"
-#include "pm_veto.h"
-
-/**
- * Copyright (c) 2014 - 2023, 南京天易合芯电子有限公司
- *
- * All rights reserved.
- *
-*/
-/*****************************************************************************
-    * @file     tyhx_crown_custom.c
-    * @author   Jiandang.Dong
-    * @date     2022-08-09 created
-    * @Emial    Jiandang.Dong@tianyihexin.com
-    * @brief    HX3507 驱动程序
-******************************************************************************/
-/*
-整体应用流程, 请见应用文档.
-先初始化IO, 执行crown_init 保证通信正确;
-在需要HX3507工作的时候, 调用crown_start(),  定时器启动,
-定时器周期处理调用crown_data_handler()来读取HX3507的数据;
-在HX3507 不需要工作的时候, 调用crown_stop() 让HX3507 进入power down状态
-*/
-
-
-#include <stdbool.h>
-#include <stdint.h>
-#include <string.h>
-#include <stdio.h>
-#include <stdlib.h>
-#include "hx3507.h"
-
-// #ifdef CHIP_HX3507
-
-
-#include "cmsis_os2.h"
-
-osTimerId_t g_hx3507_timer = NULL;//定义一个定时器ID
-static uint8_t g_hx3695_timer_installed = 0;
-
-static int16_t crown_result = 0;
-
-/*----------------------以下为定时函数相关定义 建立/启动/停止定时器//定时中断处理-------------------------------*/
-
-
-
-/**
- * 定时器超时处理函数
- * @param p_context 是对应的定时器;
- */
-void crown_timer_handler(void * p_context)
-{
-    UNUSED(p_context);
-    crown_data_handler(NULL,0);
-}
-/**
- * 表冠定时器创建函数
- * @param NULL
- */
-void crown_timer_creat(void)
-{
-    if (g_hx3695_timer_installed == 1)
-     return ;
-    g_hx3507_timer = osTimerNew((osTimerFunc_t)crown_timer_handler, osTimerPeriodic, NULL, NULL);
-    g_hx3695_timer_installed = true;
-    return ;
-    // app_timer_create(&crown_timer_id, APP_TIMER_MODE_REPEATED, crown_timer_handler);
-}
-
-/**
- * 定时器start函数 ,  目前定义的定时器是50ms, 用户可以根据需要改为100ms
- * @param NULL
- */
-void crown_timer_start(void)
-{
-     if(osTimerIsRunning(g_hx3507_timer)==0)
-        osTimerStart(g_hx3507_timer, 50);
-}
-
-/**
- * 定时器stop函数
- * @param timerid 是对应的定时器;
- */
-void crown_timer_stop(void)
-{
-    if(osTimerIsRunning(g_hx3507_timer))
-        osTimerStop(g_hx3507_timer);
-}
-
-
-
-/*----------------------以上为定时函数相关定义 建立/启动/停止定时器//定时中断处理-------------------------------*/
-
-
-/*---------------------------以下为表冠的寄存器读写,初始化/开始/结束------------------------*/
-
-/**
- * 通信重新同步函数, 作用是防止因为其他干扰而引起的错乱
- * @param NULL;
- */
-void crown_com_resync(void)
-{
-    uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
-    uapi_tcxo_delay_us(5);
-    uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
-    uapi_tcxo_delay_us(5);
-    uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
-    uapi_tcxo_delay_ms(5);
-}
-
-/**
- * 通信读寄存器值函数
- * @param regaddr, hx3507的寄存器地址
- * uapi_tcxo_delay_us(COM_DELAY), 读写函数的delay 按照实际平台调整, HX3507 通信sclk 最高支持1MHZ频率.
- * 在最高频率的范围内, 尽量减小delay, 减少定时器周期读取的时间.
- */
-uint8_t crown_read_reg(uint8_t regaddr)
-{
-    uint8_t readvalue = 0;
-
-    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);
-
-    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);
-    }
-
-    //开始读操作,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);
-    uapi_tcxo_delay_us(COM_DELAY);
-    //nrf_gpio_pin_clear(PIN_TYHX_SCLK);
-    //uapi_tcxo_delay_us(COM_DELAY);
-
-    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_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_HIGH);
-        //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);
-   
-    return readvalue;
-}
-
-/**
- * 通信读寄存器值函数
- * @param regaddr, hx3507的寄存器地址
- * @param regvalue, 要写的值
- */
-void crown_write_reg(uint8_t regaddr, uint8_t regvalue)
-{
-
-    uint16_t writevalue;
-    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);
-
-    //写通信协议, 最高位置1, 循环16次依次送出寄存器和值,在SCLK的上升沿前准备好数据
-    writevalue= (uint16_t)((regaddr|0x80)<<8) + regvalue;
-
-    for(int i=0; i<16; i++)
-    {
-        uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
-   
-        if(writevalue & 0x8000)
-        {
-            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);
-        
-        writevalue<<=1;
-    }
-    uapi_gpio_set_val(PIN_TYHX_SDIO,GPIO_LEVEL_LOW);
-    uapi_gpio_set_val(PIN_TYHX_SCLK,GPIO_LEVEL_LOW);
-   
-    return;
-}
-
-
-/**
- * 某些OTS冠轴质量非常差, 这个是防呆处理
- * @param xdata, 当前读到的OTS的有效轴的数据
- * @result = true, 值有效, = false 这个值无效
- */
-static bool crown_data_verify(int16_t xdata)
-{
-    static int16_t xstore[3] = {0};
-    uint16_t diff1, diff2, diff3= 0;
-
-    if(abs(xdata)>=600)//间隔50ms的一次读数
-    {
-        crown_timer_stop();
-        crown_start();
-        return false;
-    }
-    diff1 = abs(xstore[2]-xstore[1]);
-    diff2 = abs(xstore[1]-xstore[0]);
-    diff3 = abs(xstore[0]-xdata);
-
-    if((diff1<5) &&(diff2<=5) &&(diff3<=5) &&(abs(xdata)>=100))//连续四次读到接近的值
-    {
-        crown_timer_stop();
-        crown_start();
-        return false;
-    }
-    xstore[2] = xstore[1];
-    xstore[1] = xstore[0];
-    xstore[0] = xdata;
-    return true;
-}
-
-/**
- * 周期定时器数据读取
- * @param p_event_data, 参数暂时无用
- * @param event_size, 参数暂时无用
- */
-void crown_data_handler(void *p_event_data, uint16_t event_size)
-{
-    int16_t delatx = 0;
-    uint8_t sleepstatus = 0;
-    for(int i=0; i<5; i++)//先读一下芯片ID保证通信正常
-    {
-        if(crown_read_reg(HX3507_DID) == 0x30)
-        {
-            break;
-        }
-        else
-        {
-            crown_com_resync();
-        }
-    }
-    if(crown_read_reg(Motion_St)&0x80)
-    {
-#if defined(MOT_LOW_LEVEL_MODE) 
-        //如果有使用中断, 需要读取Y的值,          值读完, 中断电平才能恢复
-        int16_t delaty = 0;
-        delaty = crown_read_reg(DeltaY) |(crown_read_reg(DeltaY_Hi)<<8);
-#endif
-        //HX3507 一个方向转动出正值, 另外一个方向就是负值, 正负值跟芯片的摆放方向有关
-        delatx = crown_read_reg(DeltaX) |(crown_read_reg(DeltaX_Hi)<<8);
-        if(crown_data_verify(delatx)) //先判断数据是否合理, 
-        // 主要针对OTS冠轴质量,或者装配摆动幅度大引起的错误, 做的保护程序
-        {
-            //打印读取结果
-            TYHX_LOG("DeltaX = %d\r\n",delatx);
-            //把结果转换为大概的估算角度
-            put_crown_result(delatx);
-        }
-    }
-    else //下面这两个参数在产测程序里面需要加上
-    {
-        //冠轴静止的时候, 打印图像的质量和PD的饱和度, 这两个参数读取要放在出货测试的程序里面,
-        // 图像质量应该>=80, 否则可能代表芯片表面有脏污等或者装配问题或者有漏光
-        // PD的饱和度应该>=100 且 <=180, 如果有漏光等问题, 结果>=240以上, 相关漏光等要处理
-        TYHX_LOG("pic qulity =%d, pd saturation=%d\r\n",crown_read_reg(Img_Qa),crown_read_reg(PD_SAT));
-    }
-
-#if (defined(MOT_LOW_LEVEL_MODE))//如果低电平中断模式,要读到芯片MOT变高
-    if(uapi_gpio_get_val(PIN_TYHX_MOT))
-    {
-        TYHX_LOG("PIN_TYHX_MOT is high \r\n");
-        crown_timer_stop();
-    }
-#endif
-
-#if (defined(MOT_FALLINGTRI_MODE))//如果是脉冲中断模式,要读到芯片进入sleep
-    sleepstatus = crown_read_reg(Op_St);
-    if((sleepstatus & 0x7) == 6)
-    {
-        TYHX_LOG("crown is sleep \r\n");
-        crown_timer_stop();
-    }
-#endif
-#if (defined(MOT_NO_USE_MODE))
-    //如果是MOT_NO_USE_MODE , 一般在屏幕熄掉,不需要HX3507工作的时候, 关闭定时器
-#endif
-
-}
-
-//MOT 中断处理程序,  这个是根据平台程序处理, 用户可以自行修改
-//这里加中断发生标志位或者把中断处理推送到其他任务队列, 因为中断函数里面不能加太多程序
-//下面的例子用的是NORDIC标准的程序,中断发生后GPIO的一个处理,并且把中断处理推送到任务队列
-#if (defined(MOT_LOW_LEVEL_MODE) || defined(MOT_FALLINGTRI_MODE))
-static void crown_int_handler(nrf_drv_gpiote_pin_t pin, nrf_gpiote_polarity_t action)
-{
-    uint32_t err_code;
-    bool mothitolow = false;
-
-    nrf_drv_gpiote_in_uninit(PIN_TYHX_MOT);
-    if (action == NRF_GPIOTE_POLARITY_HITOLO)
-    {
-        mothitolow = true;
-        nrf_drv_gpiote_in_config_t config_crown = GPIOTE_CONFIG_IN_SENSE_LOTOHI(false);
-        err_code = nrf_drv_gpiote_in_init(PIN_TYHX_MOT, &config_crown, crown_int_handler);
-        APP_ERROR_CHECK(err_code);
-        config_crown.pull = NRF_GPIO_PIN_PULLUP;
-        nrf_drv_gpiote_in_event_enable(PIN_TYHX_MOT, true);
-    }
-    else
-    {
-        mothitolow = false;
-        nrf_drv_gpiote_in_config_t config_crown = GPIOTE_CONFIG_IN_SENSE_HITOLO(false);
-        err_code = nrf_drv_gpiote_in_init(PIN_TYHX_MOT, &config_crown, crown_int_handler);
-        APP_ERROR_CHECK(err_code);
-        config_crown.pull = NRF_GPIO_PIN_PULLUP;
-        nrf_drv_gpiote_in_event_enable(PIN_TYHX_MOT, true);
-    }
-    nrf_gpio_pin_latch_clear(PIN_TYHX_MOT);
-    if(mothitolow)
-    {
-        TYHX_LOG("mot interrupt! \r\n");
-        mothitolow = false;
-        crown_timer_start();
-    }
-
-}
-
-#endif
-
-
-/**
- * HX3507 初始化
- * @param NULL
- */
-void crown_init(void)
-{
-    int i;
-    uapi_gpio_set_dir(PIN_TYHX_SDIO,GPIO_DIRECTION_INPUT);
-    uapi_gpio_set_dir(PIN_TYHX_SCLK,GPIO_DIRECTION_OUTPUT);
-    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);
-    crown_com_resync();
-    for(i=0; i<10; i++)
-    {
-        if(crown_read_reg(HX3507_DID) == 0x30)
-        {
-            TYHX_LOG("read chip id is 0x30\r\n",i);
-            break;
-        }
-        if(i<7)//读到ID不对, 复位通信
-        {
-            crown_com_resync();
-        }
-    }
-    if(i==10)
-    {
-        TYHX_LOG("HX3507 communication err,  please check\r\n");
-        return;
-    }
-
-#if (defined(MOT_LOW_LEVEL_MODE) || defined(MOT_FALLINGTRI_MODE))
-    //中断定义
-    nrf_drv_gpiote_in_config_t config_crown = GPIOTE_CONFIG_IN_SENSE_HITOLO(false);
-    config_crown.pull = NRF_GPIO_PIN_PULLUP;
-    nrf_drv_gpiote_in_init(PIN_TYHX_MOT, &config_crown, crown_int_handler);
-    nrf_drv_gpiote_in_event_enable(PIN_TYHX_MOT, true);
-
-#endif
-    //定时器创建
-    crown_timer_creat();
-}
-
-
-/**
- * HX3507 启动
- * @param NULL
- */
-void crown_start(void)
-{
-    int i = 0;
-    for(int i=0; i<5; i++)
-    {
-        crown_write_reg(Config_St,0x89); //RESET
-        uapi_tcxo_delay_ms(10);
-        TYHX_LOG("Reset ic, now init ---\r\n");
-
-#if defined(MOT_LOW_LEVEL_MODE)
-        crown_write_reg(Config_St,0x01);     //正常工作, MOT低电平中断
-        crown_write_reg(Op_Mode,0xb8);          //打开Sleep1 和 sleep2 功能
-        crown_write_reg(Sleep1_Setting,0xc0);
-        crown_write_reg(Enter_Time,0xc1);
-        crown_write_reg(Sleep2_Setting,0xc0);
-#elif defined(MOT_FALLINGTRI_MODE)
-        crown_write_reg(Config_St,0x41);     //正常工作, MOT下降沿中断
-        crown_write_reg(Op_Mode,0xb8);          //打开Sleep1 和 sleep2 功能
-        crown_write_reg(Sleep1_Setting,0xc0);
-        crown_write_reg(Enter_Time,0xc1);
-        crown_write_reg(Sleep2_Setting,0xc0);
-
-#elif defined(MOT_NO_USE_MODE)
-        crown_write_reg(Op_Mode,0xa0);           //关闭sleep功能
-#endif
-        crown_write_reg(Write_Protect,0xc3);   //enable all registers
-        crown_write_reg(Sleep1_Setting,0xc0);  //0x70,32ms.loop = 40ms. return 0 slowly
-        crown_write_reg(Enter_Time,0x0);       //sleep1=128*(Enter_Time[7:4]+1) sleep2=20480*(Enter_Time[3:0]+1)
-        crown_write_reg(DxDy_16bit,0x01);      //0:8bit,1:16bit
-        crown_write_reg(CPI2_Setting,0x88);    //800 cpi
-        crown_write_reg(HX3507_REV,0x00);
-        if(1 == crown_read_reg(DxDy_16bit) )
-        {
-            break;
-        }
-        else
-        {
-            crown_com_resync();
-        }
-    }
-    if(i==5)
-    {
-        TYHX_LOG("HX3507 init err,  please check\r\n");
-        return;
-    }
-
-
-#if 0  //这里非常关键, 在调试初期, 需要用#if 1 来验证寄存器写入的值和读出来的值是一样的, 通信正确
-    TYHX_LOG("Op_Mode = 0x%x\r\n",crown_read_reg(Op_Mode));
-    TYHX_LOG("Sleep1_Setting = 0x%x\r\n",crown_read_reg(Sleep1_Setting));
-    TYHX_LOG("DxDy_16bit = 0x%x\r\n",crown_read_reg(DxDy_16bit));
-    TYHX_LOG("CPI2_Setting = 0x%x\r\n",crown_read_reg(CPI2_Setting));
-#endif
-
-#ifdef MOT_NO_USE_MODE   // 如果是非中断模式, 初始后, 开启定时器; 
-    crown_timer_start();
-#endif
-
-
-
-}
-
-
-/**
- * HX3507 停止
- * @param NULL
- */
-void crown_stop(void)
-{
-#ifdef MOT_NO_USE_MODE
-    crown_timer_stop();
-    crown_write_reg(Config_St,0x89); // power down, power down 后芯片功耗9uA
-    uapi_tcxo_delay_ms(20);
-    TYHX_LOG("[tyhx_crown_stop]\r\n");
-#endif
-}
-
-
-/**
- * HX3507 结果转换为角度, 供UI处理
- * @param NULL
- */
-void put_crown_result(int16_t x)
-{
-    if(abs(x)<=FILTER_MIN )
-        return;
-    if(abs(x)>=4 )
-    {
-        crown_result += x/4; //大于4的值除以4, 代表角度, 单位0.5°
-    }
-    else
-    {
-        if(x>0)
-        {
-            crown_result+=1; //2~4 默认一个单位, 0.5°
-        }
-        else
-        {
-            crown_result-=1; //2~4 默认一个单位, 0.5°
-        }
-    }
-}
-
-/**
- * 获取表冠的数据结果接口函数
- * @param NULL
-*/
-int16_t get_crown_result(void)
-{
-    int16_t resulttemp;
-    resulttemp=crown_result;
-    crown_result = 0;
-    return resulttemp;
-}
-
-// #endif
-
diff --git a/code/sdk/drivers/peripheral/rotary_encoder/hx3507.h b/code/sdk/drivers/peripheral/rotary_encoder/hx3507.h
deleted file mode 100644 (file)
index 647601e..0000000
+++ /dev/null
@@ -1,91 +0,0 @@
-/**
- * Copyright (c) 2014 - 2023, 南京天易合芯电子有限公司
- *
- * All rights reserved.
- *
-*/
-
-/***************************************************************************
-    * @file     TYHX_CROWN_CUSTOM.h
-    * @author   TYHX team
-       * @product  CROWN
-    * @version  V0.1
-    * @date     2022-08-09
-    * @modify date     2023-02-17
-
-****************************************************************************/
-#ifndef _TYHX_CROWN_CUSTOM_H_
-#define _TYHX_CROWN_CUSTOM_H_
-
-#include "debug_print.h"
-#define CHIP_HX3507  
-
-
-//三种中断模式的应用具体见“天易合芯表冠产品应用文档.docx"的流程说明,用户也可以定义自己的流程模式
-//#define MOT_LOW_LEVEL_MODE   //MOT使用低电平中断
-//#define MOT_FALLINGTRI_MODE  //MOT 使用低脉冲中断
-#define MOT_NO_USE_MODE        //用户不使用MOT 中断, 这个为常用的推荐模式
-
-
-//register define , addr, rw, default value, detail
-#define HX3507_DID      0x00  //R 0x30 芯片ID
-#define Motion_St       0x02  //R 是否有冠轴转动数据产生
-#define DeltaX          0x03  //R 0x30 DeltaX 的低8位数据
-#define DeltaY          0x04  //R 0x30 DeltaY 的低8位数据
-#define Op_Mode         0x05  //W/R  操作模式
-#define Config_St       0x06  //W/R  0x02 閰嶇疆
-#define Img_Qa          0x07  //R 图像质量
-#define Op_St           0x08  //R Sleep 和帧率设置
-#define Write_Protect   0x09  //W扩展寄存器的写使能
-#define Sleep1_Setting  0x0A  //W/R Sleep1 的工作频率设置
-#define Enter_Time      0x0B  //W/R  进入SLEEP的等待时间设置
-#define Sleep2_Setting  0x0C  // W/R  Sleep2的工作频率设置
-#define DeltaX_Hi       0x20  //R DeltaX 的高8位数据
-#define DeltaY_Hi       0x21  //R DeltaY的高8位数据
-#define DxDy_16bit      0x22  //数据输出寄存器选择16bit还是8bit格式
-#define CPI2_Setting    0x23  //W/R 扩展CPI 设置
-#define PD_SAT          0x3D  //PD 感光的饱和度
-#define HX3507_REV      0x5F  //W 保留寄存器
-
-#define COM_DELAY       5     // 通信的delay 单位, 用户根据平台实际调整, 最高支持1MHZ CLK
-#define FILTER_MIN      1     // 偶尔冠轴被震动等各种意外产生的小的数据,  可根据产品情况把小的出值滤掉
-
-//log 打印定义
-#define TYHX_LOG_ENABLE         
-#ifdef TYHX_LOG_ENABLE
-#define  TYHX_LOG(fmt, ...)                    \
-    do {                                      \
-        PRINT(fmt" ", ##__VA_ARGS__);     \
-    } while (0)
-#else 
-#define  TYHX_LOG(...)
-#endif //TYHX_LOG_ENABLE 
-
-
-/*----------------------使用的IO定义-------------------------------*/
-
-#define PIN_TYHX_SDIO      S_AGPIO_L12  //custom to do here
-#define PIN_TYHX_SCLK      S_AGPIO_L13  //custom to do here 
-#define PIN_TYHX_MOT       S_AGPIO_L17  //custom to do here 
-
-//定时器的 创建/启动/停止/溢出处理函数
-void crown_timer_creat(void);
-void crown_timer_start(void);
-void crown_timer_stop(void);
-void crown_timer_handler(void * p_context);
-
-//HX3507 初始化,启动,停止, 数据读取, 读寄存器, 写寄存器等, 通信同步
-void crown_init(void);
-void crown_start(void);
-void crown_stop(void);
-void crown_data_handler(void *p_event_data, uint16_t event_size);
-uint8_t crown_read_reg(uint8_t regaddr);
-void  crown_write_reg(uint8_t regaddr, uint8_t regvalue);
-void crown_com_resync(void);
-
-//把读出的数据转换为大概角度函数
-void put_crown_result(int16_t x);
-
-//把角度结果上报的函数
-int16_t get_crown_result(void);
-#endif //_TYHX_CROWN_CUSTOM_H_
index 74b1289..397d469 100644 (file)
@@ -298,7 +298,7 @@ void crown_data_handler(void *p_event_data, uint16_t event_size)
         // 主要针对OTS冠轴质量,或者装配摆动幅度大引起的错误, 做的保护程序
         {
             //打印读取结果
-            TYHX_LOG("DeltaX = %d\r\n",delatx);
+            // TYHX_LOG("DeltaX = %d\r\n",delatx);
             //把结果转换为大概的估算角度
             put_crown_result(delatx);
         }
@@ -499,8 +499,8 @@ void crown_stop(void)
     TYHX_LOG("[tyhx_crown_stop]\r\n");
 #endif
 }
-
-
+#include "hx3507_hal.h"
+extern encoder_callback g_encoder_callback;
 /**
  * HX3507 结果转换为角度, 供UI处理
  * @param NULL
@@ -524,6 +524,9 @@ void put_crown_result(int16_t x)
             crown_result-=1; //2~4 默认一个单位, 0.5°
         }
     }
+
+   if (g_encoder_callback != NULL)
+        g_encoder_callback();
 }
 
 /**
index 670426e..a4b6cd6 100644 (file)
@@ -13,6 +13,7 @@
 #include "hal_i2c.h"
 
 static uint8_t g_hx3507_test_started = 0;
+encoder_callback g_encoder_callback = NULL;
 uint32_t hx3507_start(void)
 {
     if (g_hx3507_test_started == 1) 
@@ -50,7 +51,7 @@ static ext_errno hx3507_encoder_deinit(void)
 static ext_errno hx3507_encoder_get_encoderinfo(uint8_t *data, uint8_t data_len)
 {
 
-    re_print("hx3507_encoder_get_encoderinfo\r\n");
+    // re_print("hx3507_encoder_get_encoderinfo\r\n");
     if (data_len != sizeof(re_input_event_info))
         return EXT_ERR_NOT_SUPPORT;
     re_input_event_info *encoder_info = (re_input_event_info*)data;
@@ -99,11 +100,13 @@ static ext_errno hx3507_encoder_bus_init(void *private_data)
 static ext_errno hx3507_register_callback(void *peri_data, encoder_callback func)
 {
     re_print("hx3507_register_callback\r\n");
+    g_encoder_callback = func;
     return EXT_ERR_SUCCESS;
 }
 static ext_errno hx3507_unregister_callback(void *peri_data)
 {
     re_print("hx3507_unregister_callback\r\n");
+    g_encoder_callback = NULL;
     return EXT_ERR_SUCCESS;
 }
 
index 74e2633..f4e6b5f 100644 (file)
 #include <stdio.h>
 #include "errcode.h"
 #include "soc_osal.h"
-#include "at_cmd_api.h"
-
+#include "rotary_encoder_def.h"
 #ifdef __cplusplus
 #if __cplusplus
 extern "C" {
 #endif /* __cplusplus */
 #endif /* __cplusplus */
 
-at_cmd_table_t *get_mmc5603_cmd_table(uint32_t *cmd_count);
+void *rotary_encoder_get_api(void);
+void *rotary_encoder_get_peri_attr(void);
 
 #ifdef __cplusplus
 #if __cplusplus
diff --git a/code/sdk/drivers/peripheral/rotary_encoder/hx3507_at_cmd.c b/code/sdk/drivers/peripheral/rotary_encoder/hx3507_at_cmd.c
deleted file mode 100644 (file)
index 064256e..0000000
+++ /dev/null
@@ -1,92 +0,0 @@
-
-// #include "hx3507.h"
-
-
-#include "at_cmd_api.h"
-#include "pm_control.h"
-#include "hx3507.h"
-
-#define ARRAY_COUNT(array) (sizeof(array) / sizeof(array[0]))
-#define HX3507_MAX_ARGC            8
-#define HX3507_MAX_ARGV_LEN        64
-
-#define HX3507_SUCCESS             0
-#define HX3507_FAILED              (-1)
-
-static int ConvertCmdToParam(uint8_t *para, uint32_t paraLen,
-        uint8_t argv[HX3507_MAX_ARGC][HX3507_MAX_ARGV_LEN], uint32_t* argc)
-{
-    uint32_t pos = 0;
-    *argc = 0;
-
-    for (uint32_t i = 0; i < paraLen; i++) {
-        if ((para[i] == ' ' || para[i] == '\n') && pos != 0) {
-            argv[*argc][pos] = '\0';
-            *argc += 1;
-            pos = 0;
-            if (*argc >= HX3507_MAX_ARGC) {
-                return HX3507_FAILED;
-            }
-        } else {
-            argv[*argc][pos] = para[i];
-            pos++;
-            if (pos >= HX3507_MAX_ARGV_LEN) {
-                return HX3507_FAILED;
-            }
-        }
-    }
-    if (pos != 0) {
-        *argc += 1;
-    }
-
-    return HX3507_SUCCESS;
-}
-
-static uint8_t g_hx3507_test_started = 0;
-static uint32_t hx3507_test(uint8_t *para, uint32_t paraLen, char *strCommonCmd)
-{
-    UNUSED(strCommonCmd);
-    uint8_t argv[HX3507_MAX_ARGC][HX3507_MAX_ARGV_LEN] = { 0 };
-    uint32_t argc = 0;
-
-    int ret = ConvertCmdToParam(para, paraLen, argv, &argc);
-    if (ret != HX3507_SUCCESS) {
-        PRINT("HX3507TEST ATCMD Convert Command Failed\n");
-        return ERRCODE_FAIL;
-    }
-
-    if (argc != 1) {
-        PRINT("HX3507TEST ATCMD Set Parameter Failed argc %d\n",argc);
-        return ERRCODE_FAIL;
-    }
-    uint8_t start = (uint8_t)atoi((char*)argv[0]);
-    if (start == 1)
-    {
-        if (g_hx3507_test_started == 1) 
-        {
-            PRINT("SKIP hx3507test start, already started\r\n");
-            return 0;
-        }
-        crown_init();
-        crown_start();
-        g_hx3507_test_started = 1;
-    }else{
-        if (g_hx3507_test_started == 0) 
-        {
-            PRINT("SKIP hx3507test stop, already stopped\r\n");
-            return 0;
-        }
-        crown_stop();
-        g_hx3507_test_started = 0 ;
-    }
-    return ERRCODE_SUCC;
-}
-static const at_cmd_table_t g_hx3507_cmd[] = {
-    { (char *)"AT^HX3507TEST",      hx3507_test, (char *)"1" },
-};
-
-at_cmd_table_t *get_hx3507_cmd_table(uint32_t *cmd_count)
-{
-    *cmd_count = ARRAY_COUNT(g_hx3507_cmd);
-    return (at_cmd_table_t *)g_hx3507_cmd;
-}
diff --git a/code/sdk/drivers/peripheral/rotary_encoder/hx3507_at_cmd.h b/code/sdk/drivers/peripheral/rotary_encoder/hx3507_at_cmd.h
deleted file mode 100644 (file)
index cb7de85..0000000
+++ /dev/null
@@ -1,32 +0,0 @@
-/**
- * Copyright (c) @CompanyNameMagicTag 2022-2022. All rights reserved. \n
- *
- * Description: Provides at cmd register func \n
- * Author: @CompanyNameTag \n
- * History: \n
- * 2022-07-20, Create file. \n
- */
-#ifndef HX3507_AT_PROCESS_H
-#define HX3507_AT_PROCESS_H
-
-#include <stdint.h>
-#include <stdio.h>
-#include "errcode.h"
-#include "soc_osal.h"
-#include "at_cmd_api.h"
-
-#ifdef __cplusplus
-#if __cplusplus
-extern "C" {
-#endif /* __cplusplus */
-#endif /* __cplusplus */
-
-at_cmd_table_t *get_mmc5603_cmd_table(uint32_t *cmd_count);
-
-#ifdef __cplusplus
-#if __cplusplus
-}
-#endif /* __cplusplus */
-#endif /* __cplusplus */
-
-#endif
index f90f2c5..bd7ece6 100644 (file)
@@ -28,7 +28,7 @@
 
 #define ROTARY_ENCODER_DEV_NAME_LEN 16
 #define ROTARY_ENCODER_DEVNAME "input/event"
-#define ROTARY_ENCODER_DYNAMIC_MINOR 65
+#define ROTARY_ENCODER_DYNAMIC_MINOR 66
 #define ROTARY_ENCODER_CMDID_MAX 16
 
 #define ROTARY_ENCODER_TASK_PRIO      5
@@ -71,7 +71,8 @@ static void convert_encoder_info(input_dev_data_t* data, re_input_event_info* en
 {
     data->x = (int16_t)encoder_info->re_event_info.x_axis[0];
     data->y = (int16_t)encoder_info->re_event_info.y_axis[0];
-    data->type = INDEV_TYPE_TOUCH;
+    data->type = INDEV_TYPE_ENCODER;
+    data->encoderDiff = data->x;
     data->timestamp = (uint32_t)encoder_info->tv_usec;
     if ((encoder_info->re_event == MC_RE_PRESS) || (encoder_info->re_event == MC_RE_MOVE)) {
         data->state = INDEV_STATE_PRESS;
@@ -87,11 +88,14 @@ static void report_or_enqueue_event(re_input_event_info* encoder_info, struct re
     if (g_re_report_event_cb != NULL) {
         input_dev_data_t data;
         convert_encoder_info(&data, encoder_info);
-        if (data.state == INDEV_STATE_UNKNOWN) {
-            return;
-        }
+        // if (data.state == INDEV_STATE_UNKNOWN) {
+            // return;
+        // }
+        re_print("report encoder diff %d ,state %d \n",data.encoderDiff,data.state);
         g_re_report_event_cb(&data);
     } else {
+        // re_print("re_en_queue encoder diff %d \n",encoder_info->re_event_info.x_axis[0]);
+
         int32_t ret = re_en_queue(redd->queue, encoder_info);
         if (ret != EXT_ERR_SUCCESS) {
             re_err("Failed to enqueue ts queue! ret=0x%x", ret);
@@ -132,7 +136,7 @@ ext_errno encoder_info_process(void)
         if (ret != EXT_ERR_SUCCESS) {
             re_err("get encoder info fail! ret=0x%x", ret);
         }
-
+        // re_print("encoder_info_process\n");
         report_or_enqueue_event(&encoder_info, redd);
 #if defined(SUPPORT_POWER_MANAGER)
         report_event_to_power_manager(&encoder_info);
@@ -160,6 +164,7 @@ static ext_errno re_register_callback(struct re_driver_data *attr)
 {
     ext_errno ret = EXT_ERR_FAILURE;
     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);
@@ -177,6 +182,7 @@ static ext_errno re_register_callback(struct re_driver_data *attr)
 static ext_errno re_unregister_callback(struct re_driver_data *attr)
 {
     ext_errno ret = EXT_ERR_FAILURE;
+    re_err("re_unregister_callback ----------succ!!!\n");
 
     if (attr->encoder_api->unregister_callback != NULL) {
         ret = attr->encoder_api->unregister_callback(attr->private_data);
@@ -196,6 +202,8 @@ static int32_t re_dev_open(const void *private_data)
 {
     int32_t ret;
     struct re_driver_data *redd = NULL;
+    re_err("re_dev_open ----------succ!!!\n");
+
     if (private_data == NULL) {
         re_err("re_open: invalid dev or driver_data!\n");
         return EXT_ERR_FAILURE;
@@ -236,6 +244,7 @@ static int32_t re_dev_open(const void *private_data)
         re_err("register callback fail! ret=0x%x\r\n", ret);
         return ret;
     }
+    re_err("re_dev_open ----------succ!!!\n");
 
     return EXT_ERR_SUCCESS;
 }
@@ -243,6 +252,8 @@ static int32_t re_dev_open(const void *private_data)
 static int32_t re_dev_release(const void *private_data)
 {
     int32_t ret;
+    re_err("re_dev_release ----------succ!!!\n");
+
     struct re_driver_data *redd = NULL;
     if (private_data == NULL) {
         re_err("re_dev_release: invalid dev or driver_data!\n");
@@ -266,6 +277,8 @@ static uint32_t re_dev_poll(const osal_poll *osal_poll, const void *private_data
     // todo: get redd from private_data
     struct re_driver_data *redd = NULL;
     redd = rotary_encoder_get_driver_data();
+    re_err("re_dev_poll ----------succ!!!\n");
+
     if (redd == NULL) {
         re_err("re_driver_data is NULL");
         return EXT_ERR_FAILURE;
@@ -326,6 +339,7 @@ struct re_ops g_re_status_ops = {
 static ext_errno rotary_encoder_register_device(void)
 {
     ext_errno ret;
+    re_err("rotary_encoder_register_device ----------succ!!!\n");
 
     g_encoder_drv.private_data = rotary_encoder_get_peri_attr();
     g_encoder_drv.encoder_api = rotary_encoder_get_api();
@@ -339,6 +353,7 @@ static ext_errno rotary_encoder_register_device(void)
         re_err("rotary encoder osal_dev_register --------failed! ret=0x%x\n", ret);
         return EXT_ERR_FAILURE;
     }
+    re_err("rotary_encoder_register_device ----------succ!!!\n");
 
     return EXT_ERR_SUCCESS;
 }
@@ -346,6 +361,7 @@ static ext_errno rotary_encoder_register_device(void)
 ext_errno rotary_encoder_module_init(void)
 {
     ext_errno ret;
+    re_err("rotary_encoder_module_init ----------succ!!!\n");
 
     ret = rotary_encoder_register_device();
     if (ret != EXT_ERR_SUCCESS) {
@@ -363,6 +379,7 @@ ext_errno rotary_encoder_module_deinit(void)
 
 uint32_t re_register_report_event_cb(report_event_cb callback)
 {
+    re_err("re_register_report_event_cb ----------succ!!!\n");
     if (g_re_report_event_cb != NULL) {
         return EXT_ERR_FAILURE;
     }
@@ -372,6 +389,8 @@ uint32_t re_register_report_event_cb(report_event_cb callback)
 
 uint32_t re_unregister_report_event_cb(void)
 {
+    re_err("re_unregister_report_event_cb ----------succ!!!\n");
+
     g_re_report_event_cb = NULL;
     return EXT_ERR_SUCCESS;
 }
@@ -380,6 +399,7 @@ uint32_t re_init(void)
 {
     int32_t ret;
     struct re_driver_data *redd = NULL;
+    // re_err("re_init ----------1!!!\n");
 
     g_encoder_drv.private_data = rotary_encoder_get_peri_attr();
     g_encoder_drv.encoder_api = rotary_encoder_get_api();
@@ -396,18 +416,23 @@ uint32_t re_init(void)
         re_err("register callback fail! ret=0x%x\r\n", ret);
         return EXT_ERR_FAILURE;
     }
-
+    re_err("re_init ----------succ!!!\n");
+    rotary_encoder_resume();
     return EXT_ERR_SUCCESS;
 }
 
 uint32_t re_read(const input_dev_data_t* data)
 {
     unused(data);
+    re_err("re_read ----------succ!!!\n");
+
     return EXT_ERR_SUCCESS;
 }
 
 uint32_t re_close(void)
 {
+    re_err("re_close ----------succ!!!\n");
+
     return EXT_ERR_SUCCESS;
 }
 
@@ -431,11 +456,14 @@ void rotary_encoder_resume(void)
 
 void encoder_suspend_for_i2c(void)
 {
+    re_err("encoder_suspend_for_i2c ----------succ!!!\n");
     // i2c_save_reg(TOUCH_I2C_BUS);
 }
 
 void encoder_resume_for_i2c(void)
 {
+    re_err("encoder_resume_for_i2c ----------succ!!!\n");
+
     // i2c_recovery_reg(TOUCH_I2C_BUS);
 }
 
@@ -443,5 +471,6 @@ void rotary_encoder_restart(void)
 {
     // uapi_i2c_deinit(TOUCH_I2C_BUS);
     // uapi_i2c_master_init(TOUCH_I2C_BUS, 400000, I2C_SPEED_MODE_FS); /* 400000: 400KHz */
+    re_err("rotary_encoder_restart ----------succ!!!\n");
 
 }
\ No newline at end of file
index ad2d184..ceda5fa 100644 (file)
@@ -27,7 +27,7 @@ extern "C" {
 #define CMD_GET_TOUCH_INFO     0
 #define TOUCH_SCREEN_GET_EVENT _IOWR(INPUT_TOUCH_MODULE_ID, CMD_GET_TOUCH_INFO, input_event_info)
 
-#define TP_DEBUG
+// #define TP_DEBUG
 
 /* common definitions */
 #define tp_mem_free(sz)                   \
index a3bbc94..752b94a 100755 (executable)
@@ -61,20 +61,20 @@ __attribute__((weak)) uint32_t button_close(void)
 }
 
 
-__attribute__((weak)) uint32_t encoder_register_report_event_cb(report_event_cb callback)
+__attribute__((weak)) uint32_t re_register_report_event_cb(report_event_cb callback)
 {
     (void)(callback);
     return INPUT_FAILURE;
 }
-__attribute__((weak)) uint32_t encoder_unregister_report_event_cb(void)
+__attribute__((weak)) uint32_t re_unregister_report_event_cb(void)
 {
     return INPUT_FAILURE;
 }
-__attribute__((weak)) uint32_t encoder_init(void)
+__attribute__((weak)) uint32_t re_init(void)
 {
     return INPUT_FAILURE;
 }
-__attribute__((weak)) uint32_t encoder_close(void)
+__attribute__((weak)) uint32_t re_close(void)
 {
     return INPUT_FAILURE;
 }
@@ -88,10 +88,10 @@ static void InitInputDevices(void)
 
     /* Init Encoder Device */
     g_inputDevs[INDEV_TYPE_ENCODER].type = INDEV_TYPE_ENCODER;
-    g_inputDevs[INDEV_TYPE_ENCODER].funcs.Init = encoder_init;
-    g_inputDevs[INDEV_TYPE_ENCODER].funcs.Close = encoder_close;
-    g_inputDevs[INDEV_TYPE_ENCODER].funcs.RegisterReportEventCb = encoder_register_report_event_cb;
-    g_inputDevs[INDEV_TYPE_ENCODER].funcs.UnregisterReportEventCb = encoder_unregister_report_event_cb;
+    g_inputDevs[INDEV_TYPE_ENCODER].funcs.Init = re_init;
+    g_inputDevs[INDEV_TYPE_ENCODER].funcs.Close = re_close;
+    g_inputDevs[INDEV_TYPE_ENCODER].funcs.RegisterReportEventCb = re_register_report_event_cb;
+    g_inputDevs[INDEV_TYPE_ENCODER].funcs.UnregisterReportEventCb = re_unregister_report_event_cb;
 
     /* Init Touch Device */
     g_inputDevs[INDEV_TYPE_TOUCH].type = INDEV_TYPE_TOUCH;