Home | History | Annotate | Download | only in ppd42ns
      1 /*
      2  * Author: Zion Orent <sorent (at) ics.com>
      3  * Copyright (c) 2014 Intel Corporation.
      4  *
      5  * Permission is hereby granted, free of charge, to any person obtaining
      6  * a copy of this software and associated documentation files (the
      7  * "Software"), to deal in the Software without restriction, including
      8  * without limitation the rights to use, copy, modify, merge, publish,
      9  * distribute, sublicense, and/or sell copies of the Software, and to
     10  * permit persons to whom the Software is furnished to do so, subject to
     11  * the following conditions:
     12  *
     13  * The above copyright notice and this permission notice shall be
     14  * included in all copies or substantial portions of the Software.
     15  *
     16  * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
     17  * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
     18  * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
     19  * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
     20  * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
     21  * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
     22  * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
     23  */
     24 #pragma once
     25 
     26 #include <string>
     27 #include <time.h>
     28 #include <mraa/aio.h>
     29 
     30 namespace upm {
     31 
     32 typedef struct
     33 {
     34 	int lowPulseOccupancy;
     35 	double ratio;
     36 	double concentration;
     37 } dustData;
     38 
     39   /**
     40    * @brief PPD42NS Dust Sensor library
     41    * @defgroup ppd42ns libupm-ppd42ns
     42    * @ingroup seeed gpio other eak
     43    */
     44   /**
     45    * @library ppd42ns
     46    * @sensor ppd42ns
     47    * @comname PPD42NS Dust Sensor
     48    * @altname Grove Dust Sensor
     49    * @type other
     50    * @man seeed
     51    * @web http://www.seeedstudio.com/wiki/Grove_-_Dust_Sensor
     52    * @con gpio
     53    * @kit eak
     54    *
     55    * @brief API for the PPD42NS Dust Sensor
     56    *
     57    * UPM module for the PPD42NS dust sensor
     58    *
     59    * @image html ppd42ns.jpg
     60    * @snippet ppd42ns.cxx Interesting
     61    */
     62   class PPD42NS {
     63   public:
     64     /**
     65      * PPD42NS constructor
     66      *
     67      * @param pin Digital pin to use
     68      */
     69     PPD42NS(int pin);
     70     /**
     71      * PPD42NS destructor
     72      */
     73     ~PPD42NS();
     74     /**
     75      * Prints dust concentration
     76      *
     77      * @return struct dustData  Contains data from the dust sensor
     78      */
     79      dustData getData();
     80 
     81   private:
     82         mraa_gpio_context m_gpio;
     83 		/**
     84 		 * Returns the amount of time it takes a pin to go from HIGH to LOW or from LOW to HIGH
     85 		 *
     86 		 * @param highLowValue int Do we measure movements from HIGH to LOW or from LOW to HIGH? highLowValue is the "from" value
     87 		 */
     88 		double pulseIn_polyfill(bool highLowValue, double endTime);
     89 		double m_timediff(timespec time1, timespec time2);
     90 	};
     91 }
     92 
     93 
     94