00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034 #ifndef __SENSORS_H__
00035 #define __SENSORS_H__
00036
00037 #include "process.h"
00038 #include "irq.h"
00039
00040 #define SENSORS_SENSOR(name, type, init, irq, activate, deactivate, \
00041 active, value, configure, status) \
00042 const struct sensors_sensor name = { type , \
00043 init, irq, activate, deactivate, \
00044 active, value, configure, status }
00045
00046 #define SENSORS(...) \
00047 const struct sensors_sensor *sensors[] = {__VA_ARGS__, NULL}; \
00048 unsigned char sensors_flags[sizeof(sensors) / sizeof(struct sensors_sensor *)];
00049
00050 struct sensors_sensor {
00051 char * type;
00052 void (* init) (void);
00053 int (* irq) (void);
00054 void (* activate) (void);
00055 void (* deactivate)(void);
00056 int (* active) (void);
00057 unsigned int (* value) (void);
00058 int (* configure) (void *parameters);
00059 void * (* status) (void);
00060 };
00061
00062 struct sensors_sensor *sensors_find(char *type);
00063 struct sensors_sensor *sensors_next(const struct sensors_sensor *s);
00064 struct sensors_sensor *sensors_first(void);
00065
00066 void sensors_changed(const struct sensors_sensor *s);
00067
00068
00069 void sensors_add_irq(const struct sensors_sensor *s, unsigned char irq);
00070 void sensors_remove_irq(const struct sensors_sensor *s, unsigned char irq);
00071
00072 int sensors_handle_irq(unsigned char irq_flag);
00073
00074
00075 extern process_event_t sensors_event;
00076
00077 PROCESS_NAME(sensors_process);
00078
00079 #endif