1 /* 2 * Author: Brendan Le Foll <brendan.le.foll@intel.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 <mraa/aio.hpp> 28 29 struct thresholdContext { 30 long averageReading; 31 long runningAverage; 32 int averagedOver; 33 }; 34 35 namespace upm { 36 /** 37 * @brief Gas Sensor library 38 * 39 * Library for air quality and gas detecting sensors. Base class Gas provides buffered 40 * sampling, threshold checking, basic printing function, and standard read function. 41 * 42 * @defgroup gas libupm-gas 43 * @ingroup seeed analog gaseous eak hak 44 */ 45 class Gas { 46 public: 47 /** 48 * Instantiates a Gas object 49 * 50 * @param gasPin Pin where gas is connected 51 */ 52 Gas(int gasPin); 53 54 /** 55 * Gas object destructor 56 */ 57 ~Gas(); 58 59 /** 60 * Gets samples from the gas sensor according to the provided window and 61 * number of samples 62 * 63 * @param freqMS Time between each sample (in milliseconds) 64 * @param numberOfSamples Number of sample to sample for this window 65 * @param buffer Buffer with sampled data 66 */ 67 virtual int getSampledWindow (unsigned int freqMS, int numberOfSamples, uint16_t * buffer); 68 69 /** 70 * Given the sampled buffer, this method returns TRUE/FALSE if the threshold 71 * is reached 72 * 73 * @param ctx Threshold context 74 * @param threshold Sample threshold 75 * @param buffer Buffer with samples 76 * @param len Buffer length 77 */ 78 virtual int findThreshold (thresholdContext* ctx, unsigned int threshold, uint16_t * buffer, int len); 79 80 /** 81 * Returns average data for the sampled window 82 * 83 * @param ctx Threshold context 84 */ 85 virtual int getSampledData (thresholdContext* ctx); 86 87 /** 88 * Returns one sample from the sensor 89 */ 90 virtual int getSample (); 91 92 /** 93 * 94 * Prints a running average of the threshold context 95 * 96 * @param ctx Threshold context 97 */ 98 virtual void printGraph (thresholdContext* ctx, uint8_t resolution); 99 100 protected: 101 mraa::Aio m_aio; 102 }; 103 104 } 105