Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Revision 2:d864e21d4e58, committed 2014-10-11
- Comitter:
- arve0
- Date:
- Sat Oct 11 08:20:09 2014 +0000
- Parent:
- 1:659ccb9047ed
- Child:
- 4:6445a678d458
- Commit message:
- 4 space indentation
Changed in this revision
| Adafruit_ADS1015.cpp | Show annotated file Show diff for this revision Revisions of this file |
| Adafruit_ADS1015.h | Show annotated file Show diff for this revision Revisions of this file |
--- a/Adafruit_ADS1015.cpp Sun Nov 10 18:44:47 2013 +0000
+++ b/Adafruit_ADS1015.cpp Sat Oct 11 08:20:09 2014 +0000
@@ -30,12 +30,13 @@
@brief Writes 16-bits to the specified destination register
*/
/**************************************************************************/
-void Adafruit_ADS1015::writeRegister(uint8_t i2cAddress, uint8_t reg, uint16_t value) {
- char cmd[3];
- cmd[0] = (char)reg;
- cmd[1] = (char)(value>>8);
- cmd[2] = (char)(value & 0xFF);
- m_i2c->write(i2cAddress, cmd, 3);
+void Adafruit_ADS1015::writeRegister(uint8_t i2cAddress, uint8_t reg, uint16_t value)
+{
+ char cmd[3];
+ cmd[0] = (char)reg;
+ cmd[1] = (char)(value>>8);
+ cmd[2] = (char)(value & 0xFF);
+ m_i2c->write(i2cAddress, cmd, 3);
}
/**************************************************************************/
@@ -43,12 +44,13 @@
@brief Reads 16-bits from the specified register
*/
/**************************************************************************/
-uint16_t Adafruit_ADS1015::readRegister(uint8_t i2cAddress, uint8_t reg) {
- char data[2];
- data[0] = reg; // temporary use this to send address to conversion register
- m_i2c->write(i2cAddress, data, 1);
- m_i2c->read(i2cAddress, data, 2);
- return (data[0] << 8 | data [1]);
+uint16_t Adafruit_ADS1015::readRegister(uint8_t i2cAddress, uint8_t reg)
+{
+ char data[2];
+ data[0] = reg; // temporary use this to send address to conversion register
+ m_i2c->write(i2cAddress, data, 1);
+ m_i2c->read(i2cAddress, data, 2);
+ return (data[0] << 8 | data [1]);
}
/**************************************************************************/
@@ -56,14 +58,14 @@
@brief Instantiates a new ADS1015 class w/appropriate properties
*/
/**************************************************************************/
-Adafruit_ADS1015::Adafruit_ADS1015(I2C* i2c, uint8_t i2cAddress)
+Adafruit_ADS1015::Adafruit_ADS1015(I2C* i2c, uint8_t i2cAddress)
{
- // shift 7 bit address 1 left: read expects 8 bit address, see I2C.h
- m_i2cAddress = i2cAddress << 1;
- m_conversionDelay = ADS1015_CONVERSIONDELAY;
- m_bitShift = 4;
- m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
- m_i2c = i2c;
+ // shift 7 bit address 1 left: read expects 8 bit address, see I2C.h
+ m_i2cAddress = i2cAddress << 1;
+ m_conversionDelay = ADS1015_CONVERSIONDELAY;
+ m_bitShift = 4;
+ m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
+ m_i2c = i2c;
}
/**************************************************************************/
@@ -73,12 +75,12 @@
/**************************************************************************/
Adafruit_ADS1115::Adafruit_ADS1115(I2C* i2c, uint8_t i2cAddress)
{
- // shift 7 bit address 1 left: read expects 8 bit address, see mbed's I2C.h
- m_i2cAddress = i2cAddress << 1;
- m_conversionDelay = ADS1115_CONVERSIONDELAY;
- m_bitShift = 0;
- m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
- m_i2c = i2c;
+ // shift 7 bit address 1 left: read expects 8 bit address, see mbed's I2C.h
+ m_i2cAddress = i2cAddress << 1;
+ m_conversionDelay = ADS1115_CONVERSIONDELAY;
+ m_bitShift = 0;
+ m_gain = GAIN_TWOTHIRDS; /* +/- 6.144V range (limited to VDD +0.3V max!) */
+ m_i2c = i2c;
}
/**************************************************************************/
@@ -88,7 +90,7 @@
/**************************************************************************/
void Adafruit_ADS1015::setGain(adsGain_t gain)
{
- m_gain = gain;
+ m_gain = gain;
}
/**************************************************************************/
@@ -98,7 +100,7 @@
/**************************************************************************/
adsGain_t Adafruit_ADS1015::getGain()
{
- return m_gain;
+ return m_gain;
}
/**************************************************************************/
@@ -106,154 +108,147 @@
@brief Gets a single-ended ADC reading from the specified channel
*/
/**************************************************************************/
-uint16_t Adafruit_ADS1015::readADC_SingleEnded(uint8_t channel) {
- if (channel > 3)
- {
- return 0;
- }
-
- // Start with default values
- uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val)
- ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val)
- ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
- ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
- ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
- ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default)
+uint16_t Adafruit_ADS1015::readADC_SingleEnded(uint8_t channel)
+{
+ if (channel > 3) {
+ return 0;
+ }
- // Set PGA/voltage range
- config |= m_gain;
+ // Start with default values
+ uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val)
+ ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val)
+ ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
+ ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
+ ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
+ ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default)
+
+ // Set PGA/voltage range
+ config |= m_gain;
- // Set single-ended input channel
- switch (channel)
- {
- case (0):
- config |= ADS1015_REG_CONFIG_MUX_SINGLE_0;
- break;
- case (1):
- config |= ADS1015_REG_CONFIG_MUX_SINGLE_1;
- break;
- case (2):
- config |= ADS1015_REG_CONFIG_MUX_SINGLE_2;
- break;
- case (3):
- config |= ADS1015_REG_CONFIG_MUX_SINGLE_3;
- break;
- }
+ // Set single-ended input channel
+ switch (channel) {
+ case (0):
+ config |= ADS1015_REG_CONFIG_MUX_SINGLE_0;
+ break;
+ case (1):
+ config |= ADS1015_REG_CONFIG_MUX_SINGLE_1;
+ break;
+ case (2):
+ config |= ADS1015_REG_CONFIG_MUX_SINGLE_2;
+ break;
+ case (3):
+ config |= ADS1015_REG_CONFIG_MUX_SINGLE_3;
+ break;
+ }
- // Set 'start single-conversion' bit
- config |= ADS1015_REG_CONFIG_OS_SINGLE;
+ // Set 'start single-conversion' bit
+ config |= ADS1015_REG_CONFIG_OS_SINGLE;
- // Write config register to the ADC
- writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config);
+ // Write config register to the ADC
+ writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config);
- // Wait for the conversion to complete
- wait_ms(m_conversionDelay);
+ // Wait for the conversion to complete
+ wait_ms(m_conversionDelay);
- // Read the conversion results
- // Shift 12-bit results right 4 bits for the ADS1015
- return readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift;
+ // Read the conversion results
+ // Shift 12-bit results right 4 bits for the ADS1015
+ return readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift;
}
/**************************************************************************/
-/*!
+/*!
@brief Reads the conversion results, measuring the voltage
difference between the P (AIN0) and N (AIN1) input. Generates
a signed value since the difference can be either
positive or negative.
*/
/**************************************************************************/
-int16_t Adafruit_ADS1015::readADC_Differential_0_1() {
- // Start with default values
- uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val)
- ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val)
- ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
- ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
- ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
- ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default)
+int16_t Adafruit_ADS1015::readADC_Differential_0_1()
+{
+ // Start with default values
+ uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val)
+ ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val)
+ ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
+ ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
+ ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
+ ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default)
- // Set PGA/voltage range
- config |= m_gain;
-
- // Set channels
- config |= ADS1015_REG_CONFIG_MUX_DIFF_0_1; // AIN0 = P, AIN1 = N
+ // Set PGA/voltage range
+ config |= m_gain;
- // Set 'start single-conversion' bit
- config |= ADS1015_REG_CONFIG_OS_SINGLE;
+ // Set channels
+ config |= ADS1015_REG_CONFIG_MUX_DIFF_0_1; // AIN0 = P, AIN1 = N
- // Write config register to the ADC
- writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config);
+ // Set 'start single-conversion' bit
+ config |= ADS1015_REG_CONFIG_OS_SINGLE;
- // Wait for the conversion to complete
- wait_ms(m_conversionDelay);
+ // Write config register to the ADC
+ writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config);
+
+ // Wait for the conversion to complete
+ wait_ms(m_conversionDelay);
- // Read the conversion results
- uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift;
- if (m_bitShift == 0)
- {
- return (int16_t)res;
- }
- else
- {
- // Shift 12-bit results right 4 bits for the ADS1015,
- // making sure we keep the sign bit intact
- if (res > 0x07FF)
- {
- // negative number - extend the sign to 16th bit
- res |= 0xF000;
+ // Read the conversion results
+ uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift;
+ if (m_bitShift == 0) {
+ return (int16_t)res;
+ } else {
+ // Shift 12-bit results right 4 bits for the ADS1015,
+ // making sure we keep the sign bit intact
+ if (res > 0x07FF) {
+ // negative number - extend the sign to 16th bit
+ res |= 0xF000;
+ }
+ return (int16_t)res;
}
- return (int16_t)res;
- }
}
/**************************************************************************/
-/*!
+/*!
@brief Reads the conversion results, measuring the voltage
difference between the P (AIN2) and N (AIN3) input. Generates
a signed value since the difference can be either
positive or negative.
*/
/**************************************************************************/
-int16_t Adafruit_ADS1015::readADC_Differential_2_3() {
- // Start with default values
- uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val)
- ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val)
- ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
- ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
- ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
- ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default)
+int16_t Adafruit_ADS1015::readADC_Differential_2_3()
+{
+ // Start with default values
+ uint16_t config = ADS1015_REG_CONFIG_CQUE_NONE | // Disable the comparator (default val)
+ ADS1015_REG_CONFIG_CLAT_NONLAT | // Non-latching (default val)
+ ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
+ ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
+ ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
+ ADS1015_REG_CONFIG_MODE_SINGLE; // Single-shot mode (default)
- // Set PGA/voltage range
- config |= m_gain;
-
- // Set channels
- config |= ADS1015_REG_CONFIG_MUX_DIFF_2_3; // AIN2 = P, AIN3 = N
+ // Set PGA/voltage range
+ config |= m_gain;
- // Set 'start single-conversion' bit
- config |= ADS1015_REG_CONFIG_OS_SINGLE;
+ // Set channels
+ config |= ADS1015_REG_CONFIG_MUX_DIFF_2_3; // AIN2 = P, AIN3 = N
- // Write config register to the ADC
- writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config);
+ // Set 'start single-conversion' bit
+ config |= ADS1015_REG_CONFIG_OS_SINGLE;
- // Wait for the conversion to complete
- wait_ms(m_conversionDelay);
+ // Write config register to the ADC
+ writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config);
+
+ // Wait for the conversion to complete
+ wait_ms(m_conversionDelay);
- // Read the conversion results
- uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift;
- if (m_bitShift == 0)
- {
- return (int16_t)res;
- }
- else
- {
- // Shift 12-bit results right 4 bits for the ADS1015,
- // making sure we keep the sign bit intact
- if (res > 0x07FF)
- {
- // negative number - extend the sign to 16th bit
- res |= 0xF000;
+ // Read the conversion results
+ uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift;
+ if (m_bitShift == 0) {
+ return (int16_t)res;
+ } else {
+ // Shift 12-bit results right 4 bits for the ADS1015,
+ // making sure we keep the sign bit intact
+ if (res > 0x07FF) {
+ // negative number - extend the sign to 16th bit
+ res |= 0xF000;
+ }
+ return (int16_t)res;
}
- return (int16_t)res;
- }
}
/**************************************************************************/
@@ -267,41 +262,40 @@
/**************************************************************************/
void Adafruit_ADS1015::startComparator_SingleEnded(uint8_t channel, int16_t threshold)
{
- // Start with default values
- uint16_t config = ADS1015_REG_CONFIG_CQUE_1CONV | // Comparator enabled and asserts on 1 match
- ADS1015_REG_CONFIG_CLAT_LATCH | // Latching mode
- ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
- ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
- ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
- ADS1015_REG_CONFIG_MODE_CONTIN | // Continuous conversion mode
- ADS1015_REG_CONFIG_MODE_CONTIN; // Continuous conversion mode
+ // Start with default values
+ uint16_t config = ADS1015_REG_CONFIG_CQUE_1CONV | // Comparator enabled and asserts on 1 match
+ ADS1015_REG_CONFIG_CLAT_LATCH | // Latching mode
+ ADS1015_REG_CONFIG_CPOL_ACTVLOW | // Alert/Rdy active low (default val)
+ ADS1015_REG_CONFIG_CMODE_TRAD | // Traditional comparator (default val)
+ ADS1015_REG_CONFIG_DR_1600SPS | // 1600 samples per second (default)
+ ADS1015_REG_CONFIG_MODE_CONTIN | // Continuous conversion mode
+ ADS1015_REG_CONFIG_MODE_CONTIN; // Continuous conversion mode
+
+ // Set PGA/voltage range
+ config |= m_gain;
- // Set PGA/voltage range
- config |= m_gain;
-
- // Set single-ended input channel
- switch (channel)
- {
- case (0):
- config |= ADS1015_REG_CONFIG_MUX_SINGLE_0;
- break;
- case (1):
- config |= ADS1015_REG_CONFIG_MUX_SINGLE_1;
- break;
- case (2):
- config |= ADS1015_REG_CONFIG_MUX_SINGLE_2;
- break;
- case (3):
- config |= ADS1015_REG_CONFIG_MUX_SINGLE_3;
- break;
- }
+ // Set single-ended input channel
+ switch (channel) {
+ case (0):
+ config |= ADS1015_REG_CONFIG_MUX_SINGLE_0;
+ break;
+ case (1):
+ config |= ADS1015_REG_CONFIG_MUX_SINGLE_1;
+ break;
+ case (2):
+ config |= ADS1015_REG_CONFIG_MUX_SINGLE_2;
+ break;
+ case (3):
+ config |= ADS1015_REG_CONFIG_MUX_SINGLE_3;
+ break;
+ }
- // Set the high threshold register
- // Shift 12-bit results left 4 bits for the ADS1015
- writeRegister(m_i2cAddress, ADS1015_REG_POINTER_HITHRESH, threshold << m_bitShift);
+ // Set the high threshold register
+ // Shift 12-bit results left 4 bits for the ADS1015
+ writeRegister(m_i2cAddress, ADS1015_REG_POINTER_HITHRESH, threshold << m_bitShift);
- // Write config register to the ADC
- writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config);
+ // Write config register to the ADC
+ writeRegister(m_i2cAddress, ADS1015_REG_POINTER_CONFIG, config);
}
/**************************************************************************/
@@ -313,24 +307,20 @@
/**************************************************************************/
int16_t Adafruit_ADS1015::getLastConversionResults()
{
- // Wait for the conversion to complete
- wait_ms(m_conversionDelay);
+ // Wait for the conversion to complete
+ wait_ms(m_conversionDelay);
- // Read the conversion results
- uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift;
- if (m_bitShift == 0)
- {
- return (int16_t)res;
- }
- else
- {
- // Shift 12-bit results right 4 bits for the ADS1015,
- // making sure we keep the sign bit intact
- if (res > 0x07FF)
- {
- // negative number - extend the sign to 16th bit
- res |= 0xF000;
+ // Read the conversion results
+ uint16_t res = readRegister(m_i2cAddress, ADS1015_REG_POINTER_CONVERT) >> m_bitShift;
+ if (m_bitShift == 0) {
+ return (int16_t)res;
+ } else {
+ // Shift 12-bit results right 4 bits for the ADS1015,
+ // making sure we keep the sign bit intact
+ if (res > 0x07FF) {
+ // negative number - extend the sign to 16th bit
+ res |= 0xF000;
+ }
+ return (int16_t)res;
}
- return (int16_t)res;
- }
-}
+}
\ No newline at end of file
--- a/Adafruit_ADS1015.h Sun Nov 10 18:44:47 2013 +0000
+++ b/Adafruit_ADS1015.h Sat Oct 11 08:20:09 2014 +0000
@@ -104,47 +104,46 @@
#define ADS1015_REG_CONFIG_CQUE_NONE (0x0003) // Disable the comparator and put ALERT/RDY in high state (default)
/*=========================================================================*/
-typedef enum
-{
- GAIN_TWOTHIRDS = ADS1015_REG_CONFIG_PGA_6_144V,
- GAIN_ONE = ADS1015_REG_CONFIG_PGA_4_096V,
- GAIN_TWO = ADS1015_REG_CONFIG_PGA_2_048V,
- GAIN_FOUR = ADS1015_REG_CONFIG_PGA_1_024V,
- GAIN_EIGHT = ADS1015_REG_CONFIG_PGA_0_512V,
- GAIN_SIXTEEN = ADS1015_REG_CONFIG_PGA_0_256V
+typedef enum {
+ GAIN_TWOTHIRDS = ADS1015_REG_CONFIG_PGA_6_144V,
+ GAIN_ONE = ADS1015_REG_CONFIG_PGA_4_096V,
+ GAIN_TWO = ADS1015_REG_CONFIG_PGA_2_048V,
+ GAIN_FOUR = ADS1015_REG_CONFIG_PGA_1_024V,
+ GAIN_EIGHT = ADS1015_REG_CONFIG_PGA_0_512V,
+ GAIN_SIXTEEN = ADS1015_REG_CONFIG_PGA_0_256V
} adsGain_t;
class Adafruit_ADS1015
{
protected:
- // Instance-specific properties
- uint8_t m_i2cAddress;
- uint8_t m_conversionDelay;
- uint8_t m_bitShift;
- adsGain_t m_gain;
- I2C* m_i2c;
-
+ // Instance-specific properties
+ uint8_t m_i2cAddress;
+ uint8_t m_conversionDelay;
+ uint8_t m_bitShift;
+ adsGain_t m_gain;
+ I2C* m_i2c;
+
- public:
- Adafruit_ADS1015(I2C* i2c = 0, uint8_t i2cAddress = ADS1015_ADDRESS); // set i2c adress = 0 to allow ADS1115 to use this as default constructor
- uint16_t readADC_SingleEnded(uint8_t channel);
- int16_t readADC_Differential_0_1(void);
- int16_t readADC_Differential_2_3(void);
- void startComparator_SingleEnded(uint8_t channel, int16_t threshold);
- int16_t getLastConversionResults();
- void setGain(adsGain_t gain);
- adsGain_t getGain(void);
+public:
+ Adafruit_ADS1015(I2C* i2c = 0, uint8_t i2cAddress = ADS1015_ADDRESS); // set i2c adress = 0 to allow ADS1115 to use this as default constructor
+ uint16_t readADC_SingleEnded(uint8_t channel);
+ int16_t readADC_Differential_0_1(void);
+ int16_t readADC_Differential_2_3(void);
+ void startComparator_SingleEnded(uint8_t channel, int16_t threshold);
+ int16_t getLastConversionResults();
+ void setGain(adsGain_t gain);
+ adsGain_t getGain(void);
- private:
- uint16_t readRegister(uint8_t i2cAddress, uint8_t reg);
- void writeRegister(uint8_t i2cAddress, uint8_t reg, uint16_t value);
+private:
+ uint16_t readRegister(uint8_t i2cAddress, uint8_t reg);
+ void writeRegister(uint8_t i2cAddress, uint8_t reg, uint16_t value);
};
// Derive from ADS1105 & override construction to set properties
class Adafruit_ADS1115 : public Adafruit_ADS1015
{
- public:
- Adafruit_ADS1115(I2C* i2c, uint8_t i2cAddress = ADS1015_ADDRESS);
+public:
+ Adafruit_ADS1115(I2C* i2c, uint8_t i2cAddress = ADS1015_ADDRESS);
- private:
+private:
};
\ No newline at end of file