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
00035
00044 #ifndef _DEV_H_
00045 #define _DEV_H_
00046
00047 #include <stdarg.h>
00048 #include <stddef.h>
00049 #include "mutex.h"
00050
00051 #ifdef SCONS
00052 #include "optsconfig.h"
00053 #endif
00054
00055
00056 #ifdef PLATFORM_TELOSB
00057 #include "plat_dep.h"
00058 #endif
00059
00060 #ifdef PLATFORM_MICROBLAZE
00061 #include "mb-adc-parallel.h"
00062 #include "mb-dipsw.h"
00063 #endif
00064
00065 typedef enum {
00066 DEV_ADC = 0,
00067 #ifdef PLATFORM_MICROBLAZE
00068 DEV_ADC_PARALLEL,
00069 DEV_DIPSW,
00070 #endif
00071 DEV_SPI,
00072 DEV_AVR_EEPROM,
00073 DEV_AVR_RSSI,
00074 DEV_AVR_I2C,
00075 DEV_MICA2_LIGHT,
00076 DEV_MICA2_TEMP,
00077 DEV_MICA2_MIC,
00078 DEV_MICA2_SOUNDER,
00079 DEV_MICA2_ACCEL_X,
00080 DEV_MICA2_ACCEL_Y,
00081 DEV_MICA2_MAGNET_X,
00082 DEV_MICA2_MAGNET_Y,
00083 DEV_MICA2_BATTERY,
00084 DEV_MICA2_ULTRASOUND,
00085 DEV_HARDWARE_ID,
00086 DEV_ATMEL_FLASH,
00087 DEV_MSP_ACCELEROMETER,
00088 DEV_MSP_TEMPERATURE,
00089 DEV_MSP_HUMIDITY,
00090 DEV_TELOS_FLASH,
00091 DEV_MSP_FLASH,
00092 DEV_MSP_ADC,
00093 DEV_MICA2_GPS,
00094 NUM_DEVICES
00095 } dev_id_t;
00096
00101
00102
00103
00104
00112 extern mos_mutex_t adc_mutex;
00120 uint16_t dev_read_DEV_ADC(void *buf, uint16_t count);
00127 uint16_t dev_write_DEV_ADC(const void *buf, uint16_t count);
00136 uint8_t dev_mode_DEV_ADC(uint8_t md);
00145 uint8_t dev_ioctl_DEV_ADC(int8_t request, ...);
00151 #define dev_open_DEV_ADC() mos_mutex_lock(&adc_mutex)
00152
00156 #define dev_close_DEV_ADC() mos_mutex_unlock(&adc_mutex)
00157
00158
00159
00160
00161
00162
00173 extern mos_mutex_t spi_mutex;
00181 uint16_t dev_read_DEV_SPI(void *buf, uint16_t count);
00189 uint16_t dev_write_DEV_SPI(const void *buf, uint16_t count);
00195 uint8_t dev_mode_DEV_SPI(uint8_t md);
00205 uint8_t dev_ioctl_DEV_SPI(int8_t request, ...);
00211 #define dev_open_DEV_SPI() mos_mutex_lock(&spi_mutex)
00212
00216 #define dev_close_DEV_SPI() mos_mutex_unlock(&spi_mutex)
00217
00218
00219
00228 extern mos_mutex_t eeprom_mutex;
00235 uint16_t dev_read_DEV_AVR_EEPROM(void *buf, uint16_t count);
00242 uint16_t dev_write_DEV_AVR_EEPROM(const void *buf, uint16_t count);
00248 uint8_t dev_mode_DEV_AVR_EEPROM(uint8_t md);
00257 uint8_t dev_ioctl_DEV_AVR_EEPROM(int8_t request, ...);
00263 #define dev_open_DEV_AVR_EEPROM() mos_mutex_lock(&eeprom_mutex)
00264
00268 #define dev_close_DEV_AVR_EEPROM() mos_mutex_unlock(&eeprom_mutex)
00269
00270
00271
00281 extern mos_mutex_t rssi_mutex;
00290 uint16_t dev_read_DEV_AVR_RSSI(void *buf, uint16_t count);
00296 uint16_t dev_write_DEV_AVR_RSSI(const void *buf, uint16_t count);
00305 uint8_t dev_mode_DEV_AVR_RSSI(uint8_t md);
00312 uint8_t dev_ioctl_DEV_AVR_RSSI(int8_t request, ...);
00318 #define dev_open_DEV_AVR_RSSI() mos_mutex_lock(&rssi_mutex)
00319
00323 #define dev_close_DEV_AVR_RSSI() mos_mutex_unlock(&rssi_mutex)
00324
00325
00326
00327
00328
00344 uint16_t dev_read_DEV_AVR_I2C(void *buf, uint16_t count);
00351 uint16_t dev_write_DEV_AVR_I2C(const void *buf, uint16_t count);
00360 uint8_t dev_mode_DEV_AVR_I2C(uint8_t md);
00373 uint8_t dev_ioctl_DEV_AVR_I2C(int8_t request, ...);
00374
00375
00376
00384 extern mos_mutex_t lt_mutex;
00393 uint16_t dev_read_DEV_MICA2_LIGHT(void *buf, uint16_t count);
00400 uint16_t dev_write_DEV_MICA2_LIGHT(const void *buf, uint16_t count);
00409 uint8_t dev_mode_DEV_MICA2_LIGHT(uint8_t md);
00416 uint8_t dev_ioctl_DEV_MICA2_LIGHT(int8_t request, ...);
00426 #define dev_open_DEV_MICA2_LIGHT() mos_mutex_lock(<_mutex)
00427
00435 #define dev_close_DEV_MICA2_LIGHT() mos_mutex_unlock(<_mutex)
00436
00437
00438
00451 uint16_t dev_read_DEV_MICA2_TEMP(void *buf, uint16_t count);
00458 uint16_t dev_write_DEV_MICA2_TEMP(const void *buf, uint16_t count);
00467 uint8_t dev_mode_DEV_MICA2_TEMP(uint8_t md);
00474 uint8_t dev_ioctl_DEV_MICA2_TEMP(int8_t request, ...);
00485 #define dev_open_DEV_MICA2_TEMP() mos_mutex_lock(<_mutex)
00486
00495 #define dev_close_DEV_MICA2_TEMP() mos_mutex_unlock(<_mutex)
00496
00497
00498
00505 extern mos_mutex_t mic_mutex;
00514 uint16_t dev_read_DEV_MICA2_MIC(void *buf, uint16_t count);
00521 uint16_t dev_write_DEV_MICA2_MIC(const void *buf, uint16_t count);
00530 uint8_t dev_mode_DEV_MICA2_MIC(uint8_t md);
00537 uint8_t dev_ioctl_DEV_MICA2_MIC(int8_t request, ...);
00543 #define dev_open_DEV_MICA2_MIC() mos_mutex_lock(&mic_mutex)
00544
00548 #define dev_close_DEV_MICA2_MIC() mos_mutex_unlock(&mic_mutex)
00549
00550
00551
00558 extern mos_mutex_t sounder_mutex;
00565 uint16_t dev_read_DEV_MICA2_SOUNDER(void *buf, uint16_t count);
00574 uint16_t dev_write_DEV_MICA2_SOUNDER(const void *buf, uint16_t count);
00580 uint8_t dev_mode_DEV_MICA2_SOUNDER(uint8_t md);
00587 uint8_t dev_ioctl_DEV_MICA2_SOUNDER(int8_t request, ...);
00593 #define dev_open_DEV_MICA2_SOUNDER() mos_mutex_lock(&sounder_mutex)
00594
00598 #define dev_close_DEV_MICA2_SOUNDER() mos_mutex_unlock(&sounder_mutex)
00599
00600
00601
00608 extern mos_mutex_t accel_mutex;
00616 uint16_t dev_read_DEV_MICA2_ACCEL_X(void *buf, uint16_t count);
00623 uint16_t dev_write_DEV_MICA2_ACCEL_X(const void *buf, uint16_t count);
00632 uint8_t dev_mode_DEV_MICA2_ACCEL_X(uint8_t md);
00639 uint8_t dev_ioctl_DEV_MICA2_ACCEL_X(int8_t request, ...);
00645 #define dev_open_DEV_MICA2_ACCEL_X() mos_mutex_lock(&accel_mutex)
00646
00650 #define dev_close_DEV_MICA2_ACCEL_X() mos_mutex_unlock(&accel_mutex)
00651
00658 uint16_t dev_read_DEV_MICA2_ACCEL_Y(void *buf, uint16_t count);
00665 uint16_t dev_write_DEV_MICA2_ACCEL_Y(const void *buf, uint16_t count);
00674 uint8_t dev_mode_DEV_MICA2_ACCEL_Y(uint8_t md);
00681 uint8_t dev_ioctl_DEV_MICA2_ACCEL_Y(int8_t request, ...);
00687 #define dev_open_DEV_MICA2_ACCEL_Y() mos_mutex_lock(&accel_mutex)
00688
00692 #define dev_close_DEV_MICA2_ACCEL_Y() mos_mutex_unlock(&accel_mutex)
00693
00694
00695
00696
00703 extern mos_mutex_t magnet_x_mutex;
00711 uint16_t dev_read_DEV_MICA2_MAGNET_X(void *buf, uint16_t count);
00718 uint16_t dev_write_DEV_MICA2_MAGNET_X(const void *buf, uint16_t count);
00727 uint8_t dev_mode_DEV_MICA2_MAGNET_X(uint8_t md);
00734 uint8_t dev_ioctl_DEV_MICA2_MAGNET_X(int8_t request, ...);
00740 #define dev_open_DEV_MICA2_MAGNET_X() mos_mutex_lock(&magnet_x_mutex)
00741
00745 #define dev_close_DEV_MICA2_MAGNET_X() mos_mutex_unlock(&magnet_x_mutex)
00746
00749 extern mos_mutex_t magnet_y_mutex;
00757 uint16_t dev_read_DEV_MICA2_MAGNET_Y(void *buf, uint16_t count);
00764 uint16_t dev_write_DEV_MICA2_MAGNET_Y(const void *buf, uint16_t count);
00773 uint8_t dev_mode_DEV_MICA2_MAGNET_Y(uint8_t md);
00780 uint8_t dev_ioctl_DEV_MICA2_MAGNET_Y(int8_t request, ...);
00786 #define dev_open_DEV_MICA2_MAGNET_Y() mos_mutex_lock(&magnet_y_mutex)
00787
00791 #define dev_close_DEV_MICA2_MAGNET_Y() mos_mutex_unlock(&magnet_y_mutex)
00792
00793
00794
00801 extern mos_mutex_t battery_mutex;
00802
00809 uint16_t dev_read_DEV_MICA2_BATTERY(void *buf, uint16_t count);
00815 uint16_t dev_write_DEV_MICA2_BATTERY(const void *buf, uint16_t count);
00823 uint8_t dev_mode_DEV_MICA2_BATTERY(uint8_t md);
00829 uint8_t dev_ioctl_DEV_MICA2_BATTERY(int8_t request, ...);
00834 #define dev_open_DEV_MICA2_BATTERY(void) mos_mutex_lock(&battery_mutex)
00835
00838 #define dev_close_DEV_MICA2_BATTERY(void) mos_mutex_unlock(&battery_mutex)
00839
00840
00841
00842
00843
00853 uint16_t dev_read_DEV_MICA2_ULTRASOUND(void *buf, uint16_t count);
00861 uint16_t dev_write_DEV_MICA2_ULTRASOUND(const void *buf, uint16_t count);
00866 uint8_t dev_mode_DEV_MICA2_ULTRASOUND(uint8_t md);
00872 uint8_t dev_ioctl_DEV_MICA2_ULTRASOUND(int8_t request, ...);
00874
00875
00876
00877
00878
00885 extern mos_mutex_t id_mutex;
00892 uint16_t dev_read_DEV_HARDWARE_ID(void *buf, uint16_t count);
00898 uint16_t dev_write_DEV_HARDWARE_ID(const void *buf, uint16_t count);
00903 uint8_t dev_mode_DEV_HARDWARE_ID(uint8_t md);
00909 uint8_t dev_ioctl_DEV_HARDWARE_ID(int8_t request, ...);
00910 #define dev_open_DEV_HARDWARE_ID(void) mos_mutex_lock(&id_mutex)
00911 #define dev_close_DEV_HARDWARE_ID(void) mos_mutex_unlock(&id_mutex)
00912
00913
00915 extern mos_mutex_t atmel_flash_mutex;
00916 uint16_t dev_read_DEV_ATMEL_FLASH(void *buf, uint16_t count);
00917 uint16_t dev_write_DEV_ATMEL_FLASH(const void *buf, uint16_t count);
00918 uint8_t dev_mode_DEV_ATMEL_FLASH(uint8_t md);
00919 uint8_t dev_ioctl_DEV_ATMEL_FLASH(int8_t request, ...);
00920 #define dev_open_DEV_ATMEL_FLASH(void) mos_mutex_lock(&atmel_flash_mutex)
00921 #define dev_close_DEV_ATMEL_FLASH(void) mos_mutex_unlock(&atmel_flash_mutex)
00922
00923
00925 extern mos_mutex_t loopback_mutex;
00926 uint16_t dev_read_DEV_LOOPBACK(void *buf, uint16_t count);
00927 uint16_t dev_write_DEV_LOOPBACK(const void *buf, uint16_t count);
00928 uint8_t dev_mode_DEV_LOOPBACK(uint8_t md);
00929 uint8_t dev_ioctl_DEV_LOOPBACK(int8_t request, ...);
00930 #define dev_open_DEV_LOOPBACK(void) mos_mutex_lock(&loopback_mutex)
00931 #define dev_close_DEV_LOOPBACK(void) mos_mutex_unlock(&loopback_mutex)
00932
00933
00935 extern mos_mutex_t msp_temp_mutex;
00936 uint8_t dev_read_DEV_MSP_HUMIDITY(void *buf, uint16_t count);
00937 uint8_t dev_write_DEV_MSP_HUMIDITY(const void *buf, uint16_t count);
00938 uint8_t dev_mode_DEV_MSP_HUMIDITY(uint8_t md);
00939 uint8_t dev_ioctl_DEV_MSP_HUMIDITY(int8_t request, ...);
00940 #define dev_open_DEV_MSP_HUMIDITY(void) mos_mutex_lock(&msp_temp_mutex)
00941 #define dev_close_DEV_MSP_HUMIDITY(void) mos_mutex_unlock(&msp_temp_mutex)
00942
00943
00945 uint8_t dev_read_DEV_MSP_TEMPERATURE(void *buf, uint16_t count);
00946 uint8_t dev_write_DEV_MSP_TEMPERATURE(const void *buf, uint16_t count);
00947 #define dev_mode_DEV_MSP_TEMPERTURE(newMode) dev_mode_DEV_MSP_HUMIDITY(newMode)
00948 #define dev_ioctl_DEV_MSP_TEMPERATURE(request) dev_ioctl_DEV_MSP_HUMIDITY(request)
00949 #define dev_open_DEV_MSP_TEMPERATURE(void) mos_mutex_lock(&msp_temp_mutex)
00950 #define dev_close_DEV_MSP_TEMPERATURE(void) mos_mutex_unlock(&msp_temp_mutex)
00951
00952
00954 extern mos_mutex_t msp_acc_mutex;
00955 uint8_t dev_read_DEV_MSP_ACCELEROMETER(void *buf, uint16_t count);
00956 uint8_t dev_write_DEV_MSP_ACCELEROMETER(const void *buf, uint16_t count);
00957 uint8_t dev_ioctl_DEV_MSP_ACCELEROMETER(int8_t request, ...);
00958 uint8_t dev_mode_DEV_MSP_ACCELEROMETER(uint8_t newMode);
00959 #define dev_open_DEV_MSP_ACCELEROMETER(void) mos_mutex_lock(&msp_acc_mutex)
00960 #define dev_close_DEV_MSP_ACCELEROMETER(void) mos_mutex_unlock(&msp_acc_mutex)
00961
00962
00970 extern mos_mutex_t telos_flash_mutex;
00971
00976 #define TELOSB_RAMFUNC __attribute__((section (".data")))
00977
00986 uint8_t TELOSB_RAMFUNC dev_read_DEV_TELOS_FLASH(void *buf, uint16_t count);
00994 uint8_t dev_write_DEV_TELOS_FLASH(const void *buf, uint16_t count);
01003 uint8_t dev_mode_DEV_TELOS_FLASH(uint8_t md);
01016 uint8_t TELOSB_RAMFUNC dev_ioctl_DEV_TELOS_FLASH(int8_t request, ...);
01022 #define dev_open_DEV_TELOS_FLASH(void) mos_mutex_lock(&telos_flash_mutex)
01023
01027 #define dev_close_DEV_TELOS_FLASH(void) mos_mutex_unlock(&telos_flash_mutex)
01028
01030 uint8_t dev_read_DEV_MSP_FLASH(void *buf, uint16_t count);
01031 uint8_t TELOSB_RAMFUNC dev_write_DEV_MSP_FLASH(const void *buf, uint16_t count);
01032 uint8_t TELOSB_RAMFUNC dev_ioctl_DEV_MSP_FLASH(int8_t request, ...);
01033 #define dev_open_DEV_MSP_FLASH(void)
01034 #define dev_close_DEV_MSP_FLASH(void)
01035
01036
01037
01038
01039
01040
01049 extern mos_mutex_t mica2_gps_mutex;
01058 uint16_t dev_read_DEV_MICA2_GPS(void *buf, uint16_t count);
01065 uint16_t dev_write_DEV_MICA2_GPS(const void *buf, uint16_t count);
01074 uint8_t dev_mode_DEV_MICA2_GPS(uint8_t md);
01084 uint8_t dev_ioctl_DEV_MICA2_GPS(int8_t request, ...);
01090 #define dev_open_DEV_MICA2_GPS(void) mos_mutex_lock(&mica2_gps_mutex)
01091
01095 #define dev_close_DEV_MICA2_GPS(void) mos_mutex_unlock(&mica2_gps_mutex)
01096
01097
01098
01099
01100
01107 #define dev_read(dev,buf,count) dev_read_##dev(buf, count)
01108
01110 #define dev_write(dev,buf,count) dev_write_##dev(buf, count)
01111
01113 #define dev_mode(dev,mode) dev_mode_##dev(mode)
01114
01120 #define dev_ioctl(dev,request,args...) dev_ioctl_##dev(request, ##args)
01121
01123 #define dev_open(dev) dev_open_##dev()
01124
01125 #define dev_close(dev) dev_close_##dev()
01126
01127
01128
01134 #define DEV_MODE_OFF 0
01135
01136 #define DEV_MODE_IDLE 1
01137
01138 #define DEV_MODE_ON 2
01139
01140
01147 #define DEV_SEEK 1
01148
01149 #define DEV_FLUSH 2
01150
01151 #define DEV_LOCK 3
01152
01153 #define DEV_UNLOCK 4
01154
01155
01162 #define DEV_OK 0
01163
01164 #define DEV_UNSUPPORTED 100
01165
01166 #define DEV_NOT_REGISTERED 101
01167
01168 #define DEV_OUT_OF_RANGE 102
01169
01170 #define DEV_BAD_IOCTL 103
01171
01172 #define DEV_BAD_MODE 104
01173
01174 #define DEV_FAILURE 105
01175
01176
01178 #endif