From 0f2fa5859700326ac73fb0d355eb00fcd1b8e20d Mon Sep 17 00:00:00 2001 From: alienwalker Date: Tue, 4 Mar 2025 18:35:38 +0800 Subject: [PATCH] =?UTF-8?q?update:=E5=AE=8C=E5=96=84=E7=A1=AC=E4=BB=B6?= =?UTF-8?q?=E5=8D=95=E6=80=BB=E7=BA=BF=E7=9A=84api?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- luat/include/luat_onewire.h | 74 ++++++++++++++++++++++++++++++++++--- 1 file changed, 69 insertions(+), 5 deletions(-) diff --git a/luat/include/luat_onewire.h b/luat/include/luat_onewire.h index 8a35b88e..18a0bef0 100644 --- a/luat/include/luat_onewire.h +++ b/luat/include/luat_onewire.h @@ -38,12 +38,76 @@ typedef struct uint8_t type; //0 timing_us, 1 timing_tick }onewire_timing_t; -void luat_onewire_init(void); +/** + * @brief 单总线初始化 + * @param id 总线ID,如果只有1条,随便写 + */ +void luat_onewire_init(int id); +/** + * @brief 单总线调试开关 + * @param id 总线ID,如果只有1条,随便写 + * @param on_off 1打开,0关闭 + */ +void luat_onewire_debug(int id, uint8_t on_off); +/** + * @brief 单总线时序设置 + * @param id 总线ID,如果只有1条,随便写 + * @param timing 时序设置 + */ void luat_onewire_setup_timing(int id, onewire_timing_t *timing); -void luat_onewire_reset(int id); +/** + * @brief 单总线复位 + * @param id 总线ID,如果只有1条,随便写 + * @param check_ack 是否检测ACK信号,1检测,0不检测 + * @return 0成功,其他没有读到ACK信号 + */ +int luat_onewire_reset(int id, uint8_t check_ack); +/** + * @brief 单总线写1个bit + * @param id 总线ID,如果只有1条,随便写 + * @param level 电平 + */ void luat_onewire_write_bit(int id, uint8_t level); +/** + * @brief 单总线读1个bit + * @param id 总线ID,如果只有1条,随便写 + * @return 1 高 0 低 + */ uint8_t luat_onewire_read_bit(int id); -void luat_onewire_write_byte(int id, const uint8_t *data, uint32_t len, uint8_t is_msb); -void luat_onewire_read_byte(int id, uint8_t *data, uint32_t len, uint8_t is_msb); -void luat_onewire_read_byte_with_cmd(int id, const uint8_t cmd, uint8_t *data, uint32_t len, uint8_t is_msb); +/** + * @brief 单总线写N字节 + * @param id 总线ID,如果只有1条,随便写 + * @param data 需要写入数据 + * @param len 需要写入长度 + * @param is_msb 是否MSB优先发送,默认是0,一般都是LSB先发送 + * @param need_reset 是否需要先reset,1是,0否 + * @param check_ack 是否在reset过程中检测ACK信号,1检测,0不检测,如果需要reset并且检测ACK,一旦没用检测到ACK直接停止 + * @return 0成功,其他没有读到ACK信号 + */ +int luat_onewire_write_byte(int id, const uint8_t *data, uint32_t len, uint8_t is_msb, uint8_t need_reset, uint8_t check_ack); +/** + * @brief 单总线读N字节 + * @param id 总线ID,如果只有1条,随便写 + * @param data 需要读出的数据 + * @param len 需要读出的长度 + * @param is_msb 是否MSB优先,默认是0,一般都是LSB先 + * @param need_reset 是否需要先reset,1是,0否 + * @param check_ack 是否在reset过程中检测ACK信号,1检测,0不检测,如果需要reset并且检测ACK,一旦没用检测到ACK直接停止 + * @return 0成功,其他没有读到ACK信号 + */ +int luat_onewire_read_byte(int id, uint8_t *data, uint32_t len, uint8_t is_msb, uint8_t need_reset, uint8_t check_ack); + +/** + * @brief 单总线先发一个命令,再读N字节 + * @param id 总线ID,如果只有1条,随便写 + * @param cmd 命令 + * @param data 需要读出的数据 + * @param len 需要读出的长度 + * @param is_msb 是否MSB优先,默认是0,一般都是LSB先 + * @param need_reset 是否需要先reset,1是,0否 + * @param check_ack 是否在reset过程中检测ACK信号,1检测,0不检测,如果需要reset并且检测ACK,一旦没用检测到ACK直接停止 + * @return 0成功,其他没有读到ACK信号 + */ +int luat_onewire_read_byte_with_cmd(int id, const uint8_t cmd, uint8_t *data, uint32_t len, uint8_t is_msb, uint8_t need_reset, uint8_t check_ack); + #endif