Documentation

Documentation

Includes

tuya_driver.h

#include "tuya_driver.h"
#include "tuya_driver.h"

Macros

Marco __TUYA_PIN_H__

#define __TUYA_PIN_H__


      

Marco TUYA_PINS_NAME(PORT)

#define TUYA_PINS_NAME(PORT)                           \
   PORT##0, PORT##1, PORT##2, PORT##3, PORT##4,   \
   PORT##5, PORT##6, PORT##7, PORT##8, PORT##9,   \
   PORT##10, PORT##11, PORT##12, PORT##13, PORT##14,  \
   PORT##15, PORT##16, PORT##17, PORT##18, PORT##19,  \
   PORT##20, PORT##21, PORT##22, PORT##23, PORT##24,  \
   PORT##25, PORT##26, PORT##27, PORT##28, PORT##29,  \
   PORT##30, PORT##31 


      

Marco TUYA_PIN_INIT_LOW

#define TUYA_PIN_INIT_LOW              ((uint16_t)(1 << 0))
// 2bit

Marco TUYA_PIN_INIT_HIGH

#define TUYA_PIN_INIT_HIGH             ((uint16_t)(2 << 0))


      

Marco TUYA_PIN_INIT_MASK

#define TUYA_PIN_INIT_MASK             ((uint16_t)(3 << 0))


      

Marco TUYA_PIN_IN

#define TUYA_PIN_IN                    ((uint16_t)(1 << 2))
// 3bit

Marco TUYA_PIN_IN_FL

#define TUYA_PIN_IN_FL                 ((uint16_t)(2 << 2))


      

Marco TUYA_PIN_IN_IRQ

#define TUYA_PIN_IN_IRQ                ((uint16_t)(3 << 2))


      

Marco TUYA_PIN_OUT_PP

#define TUYA_PIN_OUT_PP                ((uint16_t)(4 << 2))


      

Marco TUYA_PIN_OUT_OD

#define TUYA_PIN_OUT_OD                ((uint16_t)(5 << 2))


      

Marco TUYA_PIN_INOUT_MASK

#define TUYA_PIN_INOUT_MASK            ((uint16_t)(7 << 2))


      

Marco TUYA_PIN_IRQ_RISE

#define TUYA_PIN_IRQ_RISE              ((uint16_t)(1 << 5))
// 3bit

Marco TUYA_PIN_IRQ_FALL

#define TUYA_PIN_IRQ_FALL              ((uint16_t)(2 << 5))


      

Marco TUYA_PIN_IRQ_RISE_FALL

#define TUYA_PIN_IRQ_RISE_FALL         ((uint16_t)(3 << 5))


      

Marco TUYA_PIN_IRQ_LOW

#define TUYA_PIN_IRQ_LOW               ((uint16_t)(4 << 5))


      

Marco TUYA_PIN_IRQ_HIGH

#define TUYA_PIN_IRQ_HIGH              ((uint16_t)(5 << 5))


      

Marco TUYA_PIN_IRQ_MASK

#define TUYA_PIN_IRQ_MASK              ((uint16_t)(7 << 5))


      

Marco TUYA_PIN_PULL_UP

#define TUYA_PIN_PULL_UP               ((uint16_t)(1 << 9))
// 4bit 

Marco TUYA_PIN_PULL_DOWN

#define TUYA_PIN_PULL_DOWN             ((uint16_t)(2 << 9))


      

Marco TUYA_PIN_PULL_NONE

#define TUYA_PIN_PULL_NONE             ((uint16_t)(3 << 9))


      

Marco TUYA_PIN_MODE_MASK

#define TUYA_PIN_MODE_MASK             ((uint16_t)(15 << 9))


      

Marco TUYA_PIN_NUM(__PINNAME)

#define TUYA_PIN_NUM(__PINNAME)        (__PINNAME & 31)


      

Marco TUYA_PIN_PORT(__PINNAME)

#define TUYA_PIN_PORT(__PINNAME)       (__PINNAME >> 5)

      

Functions

Func tuya_pin_irq_disable

int tuya_pin_irq_disable (tuya_pin_name_t pin);
/**
 * @brief pin irq disable
 * 
 * @param[in] pin refer to tuya_pin_name_t
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Vars

Variable tuya_pin_init

int tuya_pin_init    (tuya_pin_name_t pin, tuya_pin_mode_t mode);
/**
 * @brief pin init
 * 
 * @param[in] pin refer to tuya_pin_name_t
 * @param[in] mode refer to tuya_pin_mode_t
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Variable tuya_pin_write

int tuya_pin_write    (tuya_pin_name_t pin, tuya_pin_level_t level);
/**
 * @brief pin write
 * 
 * @param[in] pin refer to tuya_pin_name_t
 * @param[in] level refer to tuya_pin_level_t
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Variable tuya_pin_read

int tuya_pin_read    (tuya_pin_name_t pin);
/**
 * @brief pin read
 * 
 * @param[in] pin refer to tuya_pin_name_t
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Variable tuya_pin_control

int tuya_pin_control     (tuya_pin_name_t pin, uint8_t cmd, void *arg);
/**
 * @brief pin control
 * 
 * @param[in] pin refer to tuya_pin_name_t
 * @param[in] cmd control command
 * @param[in] arg command argument
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Variable tuya_pin_irq_init

int tuya_pin_irq_init    (tuya_pin_name_t pin, tuya_pin_mode_t irq_mode, tuya_pin_irq_cb cb, void *arg);
/**
 * @brief pin irq init
 * 
 * @param[in] pin refer to tuya_pin_name_t
 * @param[in] irq_mode refer to tuya_pin_mode_t
 * @param[in] cb irq callback
 * @param[in] arg callback argument
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Variable tuya_pin_irq_enable

int tuya_pin_irq_enable  (tuya_pin_name_t pin);
/**
 * @brief pin irq enable
 * 
 * @param[in] pin refer to tuya_pin_name_t
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Variable tuya_pin_register

int tuya_pin_register    (tuya_pin_ops_t *ops);
/**
 * @brief pin irq register
 * 
 * @param[in] ops refer to tuya_pin_ops_t
 *
 * @return OPRT_OK on success. Others on error, please refer to tuya_error_code.h
 */

Consts

Types

Typedefs

Typedef tuya_pin_port_t;

typedef enum {
   TUYA_PA = 0,
   TUYA_PB = 1,
   TUYA_PC = 2,
   TUYA_PD = 3,
   TUYA_PE = 4,
} tuya_pin_port_t;
// 3bit(bit7-bit5) port   5bit(bit4-bit0) pinmun

Typedef tuya_pin_name_t;

typedef enum {
   TUYA_PINS_NAME(TUYA_PA),
   TUYA_PINS_NAME(TUYA_PB),
   TUYA_PINS_NAME(TUYA_PC),
   TUYA_PINS_NAME(TUYA_PD),
   TUYA_PINS_NAME(TUYA_PE),
} tuya_pin_name_t;
// TUYA_PE ->  TUYA_PE0 - TUYA_PE31

Typedef tuya_pin_level_t;

typedef enum {
   TUYA_PIN_LOW = 0,
   TUYA_PIN_HIGH
} tuya_pin_level_t;


      

Typedef tuya_pin_mode_t;

typedef enum {
   TUYA_PIN_MODE_IN_PU              = TUYA_PIN_IN    | TUYA_PIN_PULL_UP,
   TUYA_PIN_MODE_IN_PD              = TUYA_PIN_IN    | TUYA_PIN_PULL_DOWN,
   TUYA_PIN_MODE_IN_FL              = TUYA_PIN_IN_FL,
   TUYA_PIN_MODE_IN_IRQ_RISE        = TUYA_PIN_IN_IRQ | TUYA_PIN_IRQ_RISE | TUYA_PIN_PULL_UP, 
   TUYA_PIN_MODE_IN_IRQ_FALL        = TUYA_PIN_IN_IRQ | TUYA_PIN_IRQ_FALL | TUYA_PIN_PULL_UP,
   TUYA_PIN_MODE_IN_IRQ_RISE_FALL   = TUYA_PIN_IN_IRQ | TUYA_PIN_IRQ_RISE_FALL | TUYA_PIN_PULL_UP,
   TUYA_PIN_MODE_IN_IRQ_LOW         = TUYA_PIN_IN_IRQ | TUYA_PIN_IRQ_LOW  | TUYA_PIN_PULL_UP,
   TUYA_PIN_MODE_IN_IRQ_HIGH        = TUYA_PIN_IN_IRQ | TUYA_PIN_IRQ_HIGH | TUYA_PIN_PULL_UP,
   TUYA_PIN_MODE_OUT_PP_LOW         = TUYA_PIN_OUT_PP | TUYA_PIN_INIT_LOW,
   TUYA_PIN_MODE_OUT_PP_HIGH        = TUYA_PIN_OUT_PP | TUYA_PIN_INIT_HIGH,
   TUYA_PIN_MODE_OUT_PP_PU_LOW      = TUYA_PIN_OUT_PP | TUYA_PIN_PULL_UP | TUYA_PIN_INIT_LOW,
   TUYA_PIN_MODE_OUT_PP_PU_HIGH     = TUYA_PIN_OUT_PP | TUYA_PIN_PULL_UP | TUYA_PIN_INIT_HIGH,
   TUYA_PIN_MODE_OUT_PP_PD_LOW      = TUYA_PIN_OUT_PP | TUYA_PIN_PULL_DOWN | TUYA_PIN_INIT_LOW,
   TUYA_PIN_MODE_OUT_PP_PD_HIGH     = TUYA_PIN_OUT_PP | TUYA_PIN_PULL_DOWN | TUYA_PIN_INIT_HIGH,
   TUYA_PIN_MODE_OUT_OD_LOW         = TUYA_PIN_OUT_OD | TUYA_PIN_INIT_LOW,
   TUYA_PIN_MODE_OUT_OD_HIZ         = TUYA_PIN_OUT_OD | TUYA_PIN_INIT_HIGH,
   TUYA_PIN_MODE_OUT_OD_PU_LOW      = TUYA_PIN_OUT_OD | TUYA_PIN_PULL_UP | TUYA_PIN_INIT_LOW,
   TUYA_PIN_MODE_OUT_OD_PU_HIGH     = TUYA_PIN_OUT_OD | TUYA_PIN_PULL_UP | TUYA_PIN_INIT_HIGH,
} tuya_pin_mode_t;
// hiz ->  high-impedance level

Typedef tuya_pin_irq_cb

typedef void (*tuya_pin_irq_cb)(void *args);


      

Typedef tuya_pin_irq_t;

typedef struct {
   tuya_pin_mode_t    mode;
   tuya_pin_irq_cb    cb;
   void               *arg;
} tuya_pin_irq_t;


      

Typedef tuya_pin_ops_t;

typedef struct {
   int  (*init)      (tuya_pin_name_t pin, tuya_pin_mode_t mode);
   int  (*write)     (tuya_pin_name_t pin, tuya_pin_level_t level);
   int  (*read)      (tuya_pin_name_t pin);
   int  (*toggle)    (tuya_pin_name_t pin);
   int  (*control)   (tuya_pin_name_t pin, uint8_t cmd, void *arg);
} tuya_pin_ops_t;