• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Author: Zion Orent <sorent@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