mcu_hi3321_watch/tjd/driver/encoder/encoder_port.h
2025-05-26 20:15:20 +08:00

57 lines
1.7 KiB
C

#ifndef ENCODER_PORT_H
#define ENCODER_PORT_H
#include <stdint.h>
#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