summaryrefslogtreecommitdiff
path: root/components/drivers/include
diff options
context:
space:
mode:
authorAubr.Cool <[email protected]>2017-03-10 15:07:28 +0800
committerAubr.Cool <[email protected]>2017-03-10 15:07:28 +0800
commit320b116b5f13fe991a947664949bef5c734b63e1 (patch)
treeaed7719cc64d9496a579b6f645a34c07b938eb0e /components/drivers/include
parent69f5767868655576019988edb39866d99b275916 (diff)
[Components] Drivers: pin add irq apis
Diffstat (limited to 'components/drivers/include')
-rw-r--r--components/drivers/include/drivers/pin.h26
1 files changed, 25 insertions, 1 deletions
diff --git a/components/drivers/include/drivers/pin.h b/components/drivers/include/drivers/pin.h
index 704114cf99..ac35ed3baa 100644
--- a/components/drivers/include/drivers/pin.h
+++ b/components/drivers/include/drivers/pin.h
@@ -46,6 +46,12 @@ struct rt_device_pin
#define PIN_MODE_INPUT 0x01
#define PIN_MODE_INPUT_PULLUP 0x02
+#define PIN_IRQ_MODE_RISING 0x00
+#define PIN_IRQ_MODE_FALLING 0x01
+#define PIN_IRQ_MODE_RISING_FALLING 0x02
+
+#define PIN_IRQ_PIN_NONE -1
+
struct rt_device_pin_mode
{
rt_uint16_t pin;
@@ -56,7 +62,13 @@ struct rt_device_pin_status
rt_uint16_t pin;
rt_uint16_t status;
};
-
+struct rt_pin_irq_hdr
+{
+ rt_int32_t pin;
+ rt_uint32_t mode;
+ void (*hdr)(void *args);
+ void *args;
+};
struct rt_pin_ops
{
void (*pin_mode)(struct rt_device *device, rt_base_t pin, rt_base_t mode);
@@ -64,6 +76,11 @@ struct rt_pin_ops
int (*pin_read)(struct rt_device *device, rt_base_t pin);
/* TODO: add GPIO interrupt */
+ rt_err_t (*pin_attach_irq)(struct rt_device *device, rt_int32_t pin,
+ rt_uint32_t mode, void (*hdr)(void *args), void *args);
+ rt_err_t (*pin_dettach_irq)(struct rt_device *device, rt_int32_t pin);
+ rt_err_t (*pin_irq_enable)(struct rt_device *device, rt_base_t pin);
+ rt_err_t (*pin_irq_disable)(struct rt_device *device, rt_base_t pin);
};
int rt_device_pin_register(const char *name, const struct rt_pin_ops *ops, void *user_data);
@@ -71,7 +88,14 @@ int rt_device_pin_register(const char *name, const struct rt_pin_ops *ops, void
void rt_pin_mode(rt_base_t pin, rt_base_t mode);
void rt_pin_write(rt_base_t pin, rt_base_t value);
int rt_pin_read(rt_base_t pin);
+rt_err_t rt_pin_attach_irq(rt_int32_t pin, rt_uint32_t mode,
+ void (*hdr)(void *args), void *args);
+rt_err_t rt_pin_dettach_irq(rt_int32_t pin);
+rt_err_t pin_irq_enable(rt_base_t pin);
+rt_err_t pin_irq_disable(rt_base_t pin);
+int rt_device_pin_irq_register(const char *name, const struct rt_pin_ops *ops,
+ void *user_data);
#ifdef __cplusplus
}
#endif