1 /*
2  * Copyright (C) 2020-2021 Alibaba Group Holding Limited
3  */
4 
5 #ifndef AOS_DEVICE_H
6 #define AOS_DEVICE_H
7 
8 #include <aos/kernel.h>
9 
10 typedef enum {
11     AOS_DEV_TYPE_MISC           = 0,
12     AOS_DEV_TYPE_INTC,
13     AOS_DEV_TYPE_TTY,
14     AOS_DEV_TYPE_GPIOC,
15     AOS_DEV_TYPE_GPIO,
16     AOS_DEV_TYPE_WATCHDOG,
17     AOS_DEV_TYPE_ETHERNET,
18     AOS_DEV_TYPE_WLAN,
19     AOS_DEV_TYPE_BLOCK,
20     AOS_DEV_TYPE_FLASH,
21     AOS_DEV_TYPE_MTD,
22     AOS_DEV_TYPE_RTC,
23     AOS_DEV_TYPE_SPI,
24     AOS_DEV_TYPE_I2C,
25     AOS_DEV_TYPE_ADC,
26     AOS_DEV_TYPE_DAC,
27     AOS_DEV_TYPE_PWM,
28 } aos_dev_type_t;
29 
30 struct aos_dev;
31 
32 typedef struct aos_dev_ref {
33     struct aos_dev *dev;
34     void *pdata;
35 } aos_dev_ref_t;
36 
37 #define AOS_DEV_REF_INIT_VAL            { .dev = NULL, .pdata = NULL, }
38 #define aos_dev_ref_init(ref)           do { *(ref) = (aos_dev_ref_t)AOS_DEV_REF_INIT_VAL; } while (0)
39 #define aos_dev_ref_is_valid(ref)       (!!(ref)->dev)
40 
41 #ifdef __cplusplus
42 extern "C" {
43 #endif
44 
45 aos_status_t aos_dev_get(aos_dev_ref_t *ref, aos_dev_type_t type, uint32_t id);
46 void aos_dev_put(aos_dev_ref_t *ref);
47 
48 #ifdef __cplusplus
49 }
50 #endif
51 
52 #endif /* AOS_DEVICE_H */
53