mos/dev/include/dev.h

Go to the documentation of this file.
00001 //  This file is part of MOS, the MANTIS Operating System
00002 //  See http://mantis.cs.colorado.edu/
00003 //
00004 //  Copyright (c) 2002 - 2007 University of Colorado, Boulder
00005 //
00006 //   All rights reserved.
00007 //
00008 //   Redistribution and use in source and binary forms, with or without
00009 //   modification, are permitted provided that the following conditions are
00010 //   met:
00011 //
00012 //       * Redistributions of source code must retain the above copyright
00013 //         notice, this list of conditions and the following disclaimer.
00014 //       * Redistributions in binary form must reproduce the above
00015 //         copyright notice, this list of conditions and the following
00016 //         disclaimer in the documentation and/or other materials provided
00017 //         with the distribution. 
00018 //       * Neither the name of the MANTIS Project nor the names of its
00019 //         contributors may be used to endorse or promote products derived
00020 //         from this software without specific prior written permission.
00021 //
00022 //   THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
00023 //   "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
00024 //   LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
00025 //   A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
00026 //   OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
00027 //   INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
00028 //   BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
00029 //   LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
00030 //   CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
00031 //   LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
00032 //   ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
00033 //   POSSIBILITY OF SUCH DAMAGE.
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  * Begin ADC Driver Interface
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  * Begin SPI Bus Driver Interface
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  * Begin AVR EEPROM Driver Interface
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  * Begin AVR RSSI Driver Interface
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  * Begin AVR I2C Bus Driver Interface
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  * Begin MICA2 Light Driver Interface
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(&lt_mutex)
00427 
00435 #define dev_close_DEV_MICA2_LIGHT() mos_mutex_unlock(&lt_mutex)
00436 /****************************************************************\
00437  * Begin MICA Temperature Driver Interface
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(&lt_mutex)
00486 
00495 #define dev_close_DEV_MICA2_TEMP() mos_mutex_unlock(&lt_mutex)
00496 /****************************************************************\
00497  * Begin MICA Microphone Driver Interface
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  * Begin MICA Sounder Driver Interface
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  * Begin MICA Accelerometer Driver Interface
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  * Begin MICA Magnet Driver Interface
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  * Begin MICA Battery Driver Interface
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  * Begin MICA Ultrasound Driver Interface
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  * Begin DS2411 Hardware ID Interface
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  * Begin GPS Driver Interface
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

Generated on Mon Nov 23 06:25:59 2009 for MANTIS by  doxygen 1.4.6