00001
00006 #ifndef __DEVICE_H__
00007 #define __DEVICE_H__
00008
00009
00010 #include <reent.h>
00011 #include <errno.h>
00012
00013
00014 #ifndef STDIN_FILENO
00015 #define STDIN_FILENO 0
00016 #endif
00017
00018 #ifndef STDOUT_FILENO
00019 #define STDOUT_FILENO 1
00020 #endif
00021
00022 #ifndef STDERR_FILENO
00023 #define STDERR_FILENO 2
00024 #endif
00025
00026
00027
00028 #define SCEPTRE_STDIN STDIN_FILENO
00029 #define SCEPTRE_STDOUT STDOUT_FILENO
00030 #define SCEPTRE_STDERR STDERR_FILENO
00031 #define SCEPTRE_UART0 3
00032 #define SCEPTRE_UART1 4
00033 #define SCEPTRE_USB 5
00034 #define SCEPTRE_I2C0 6
00035 #define SCEPTRE_I2C1 7
00036 #define SCEPTRE_SPI0 8
00037 #define SCEPTRE_SPI1 9
00038 #define SCEPTRE_THERMOMETER 10
00039 #define SCEPTRE_ACCELEROMETER 11
00040 #define SCEPTRE_BLUETOOTH SCEPTRE_UART1
00041 #define SCEPTRE_SDCARD 13
00042
00043 #define DEVICE_MAX_DESCRIPTORS 4
00044
00045
00047 #define DEVICE(D) (D<<8)
00048 #define DEVICE_TYPE(D) ((D>>8)&0xff)
00049
00050
00052 typedef const struct
00053 {
00054 const char *p_name;
00055
00056 uint16_t device_type;
00057
00058 int (*open)(struct _reent *p_reent, const char *p_name, int flags, int mode);
00059 int (*close)(struct _reent *p_reent, int file);
00060 _ssize_t (*read)(struct _reent *p_reent, int file, void *p_dst, size_t dst_size);
00061 _ssize_t (*write)(struct _reent *p_reent, int file, const void *p_src, size_t src_size);
00062
00063 int (*init)(void);
00064
00065 int (*ioctl)(struct _reent *p_reent, int file, int cmd, void *p_data);
00066 }
00067 device_table_entry_t;
00068
00069
00070 typedef const struct
00071 {
00072 const device_table_entry_t *p_item;
00073 }
00074 device_table_array_t;
00075
00076
00077
00078
00079 extern device_table_array_t device_table_list[DEVICE_MAX_DESCRIPTORS];
00080
00081
00082 int device_find(struct _reent *r, uint8_t device_type);
00083 void device_init(void);
00084 int device_find_by_name(const char *p_name, int *p_len);
00085
00086
00087 #endif // __DEVICE_H__