#ifndef ENCODER_PORT_H #define ENCODER_PORT_H #include #include "input_manager.h" #ifndef ENC_TRUE #define ENC_TRUE 1 #endif #ifndef ENC_FALSE #define ENC_FALSE 0 #endif #define ENC_SUCC 0UL #define ENC_FAIL 0xFFFFFFFF #define ENC_INVALID_PARAM 0x80000001 #define ENC_NOT_SUPPORT 0x80000002 #define ENC_MEMSET 0x80000003 #define ENC_MEMCPY 0x80000004 #define ENC_MALLOC 0x80000005 #define ENC_NOT_INIT 0x80000006 #define ENC_WAIT_ACK_FAIL 0x80000007 #define ENC_RECV_DATA_FAIL 0x80000008 #define ENC_SEND_DATA_FAIL 0x80000009 struct rotary_encoder { #if defined(TJD_PCBA_1) uint8_t i2c_bus; uint32_t i2c_speed; uint32_t i2c_addr; uint32_t int_pin; #endif uint32_t steps; // 步进数 int16_t pos; // 当前位置 struct { uint16_t desc[2]; unsigned int ndescs; } gpio_descs; // GPIO 描述 }; uint32_t rotary_encoder_init(struct rotary_encoder *encoder); uint32_t rotary_encoder_deinit(void); uint32_t encoder_register_report_event_cb(ReportEventCb callback); uint32_t encoder_unregister_report_event_cb(void); uint32_t encoder_i2c_cmd_write(uint8_t cmd); uint32_t encoder_i2c_package_write(uint8_t *data_buf, uint32_t data_len); uint32_t encoder_i2c_reg_write(uint32_t reg_addr, uint8_t reg_len, uint8_t reg_cfg); uint32_t encoder_i2c_data_read(uint32_t reg_addr, uint8_t reg_len, uint8_t *data_buf, uint16_t data_len); uint32_t encoder_i2c_data_write_read(uint8_t *send_buf, uint16_t data_len, uint8_t *recv_buf, uint16_t recv_len); uint32_t encoder_suspend(void); uint32_t encoder_resume(void); #endif