5 changed files with 333 additions and 0 deletions
@ -0,0 +1,76 @@ |
|||
/*
|
|||
* ADS101x.h |
|||
* |
|||
* Created on: Jul 20, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_ADS101X_H_ |
|||
#define APP_ADS101X_H_ |
|||
|
|||
#include <stdint.h> |
|||
#include <hardware.h> |
|||
#include "../include/rijnfel_core/adc.h" |
|||
|
|||
namespace rijnfel { |
|||
|
|||
namespace ads { |
|||
|
|||
//Voltage in uV
|
|||
typedef int32_t ads_voltage_t; |
|||
|
|||
enum eInputMux { |
|||
AIN_0_1, AIN_0_3, AIN_1_3, AIN_2_3, AIN_0, AIN_1, AIN_2, AIN_3 |
|||
}; |
|||
enum eGainAmplifier { |
|||
FSR_6_144, FSR_4_096, FSR_2_048, FSR_1_024, FSR_0_512, FSR_0_256 |
|||
}; |
|||
enum eSampleSpeed { |
|||
SPS_128, SPS_250, SPS_490, SPS_920, SPS_1600, SPS_2400, SPS_3300 |
|||
}; |
|||
|
|||
struct ads_sample_t { |
|||
uint16_t rawSample; |
|||
enum eInputMux mux; |
|||
enum eGainAmplifier gain; |
|||
}; |
|||
|
|||
class cADS101x: public cADC<ads_sample_t, ads_voltage_t> { |
|||
public: |
|||
|
|||
cADS101x(uint8_t i_address = 0x48); |
|||
cADS101x(uint8_t i_readyPin, uint8_t i_address = 0x48); |
|||
|
|||
void SetOneShot(bool i_oneShot = true); |
|||
void SetGain(enum eGainAmplifier i_gain); |
|||
void SetMux(enum eInputMux i_mux); |
|||
void SetSampleSpeed(enum eSampleSpeed i_speed); |
|||
virtual void WaitSample(void); |
|||
virtual bool IsReady(void); |
|||
uint16_t GetSettings(void); |
|||
|
|||
virtual ads_sample_t RawSample(void); |
|||
virtual ads_voltage_t ConvertSample(ads_sample_t & sample); |
|||
virtual ~cADS101x() { |
|||
|
|||
} |
|||
private: |
|||
uint16_t CreateSettings(uint8_t i_startSample); |
|||
uint16_t ReadRegister(uint8_t i_register); |
|||
void WriteSettings(uint16_t i_settings); |
|||
void SetDefaults(void); |
|||
void OneShot(void); |
|||
private: |
|||
uint8_t m_address, m_readyPin; |
|||
bool m_oneShot; |
|||
enum eInputMux m_mux; |
|||
enum eGainAmplifier m_gain; |
|||
enum eSampleSpeed m_sampleSpeed; |
|||
private: |
|||
#ifdef DUMMY_ADC |
|||
uint16_t m_counter; |
|||
#endif |
|||
}; |
|||
} |
|||
} |
|||
#endif /* APP_ADS101X_H_ */ |
@ -0,0 +1,30 @@ |
|||
/*
|
|||
* ads_converter.h |
|||
* |
|||
* Created on: Aug 22, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_ADS_CONVERTER_H_ |
|||
#define APP_ADS_CONVERTER_H_ |
|||
|
|||
#include "../include/rijnfel_core/rijnfel_core.h" |
|||
#include "ads101x.h" |
|||
|
|||
namespace rijnfel { |
|||
|
|||
class cAdsConverter: public cDataSink { |
|||
public: |
|||
cAdsConverter(cADC<ads::ads_sample_t, int32_t> & i_adc); |
|||
virtual void ReceiveCallback(void * i_data, cDataReceiver * i_provider); |
|||
// Every channel has its own provider, after this we can not distinguish anymore
|
|||
cDataProvider m_convertedSamples[4]; |
|||
cDataReceiver m_rawSamples; |
|||
virtual ~cAdsConverter(); |
|||
private: |
|||
cADC<ads::ads_sample_t, int32_t> & m_adc; |
|||
}; |
|||
|
|||
} /* namespace rijnfel */ |
|||
|
|||
#endif /* APP_ADS_CONVERTER_H_ */ |
@ -0,0 +1,72 @@ |
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
// Project: Uppsense
|
|||
// Name: dac101c085.h
|
|||
// Author: Maximilian Stiefel
|
|||
// Date: 08.08.2017
|
|||
//
|
|||
// Description: Small simple driver for the TI DAC101C085.
|
|||
//
|
|||
//----------------------------------------------------------------------------------------------------------------------------
|
|||
|
|||
#ifndef APP_DAC101C085_H_ |
|||
#define APP_DAC101C085_H_ |
|||
|
|||
//-------------------------------------Libraries------------------------------------------------------------------------------
|
|||
#include <stdint.h> |
|||
#include <defines.h> |
|||
|
|||
//-------------------------------------Defines--------------------------------------------------------------------------------
|
|||
#define PD_BITS_POS 13 // Position of power down bits
|
|||
#define D_BITS_POS 2 // Position of data bits
|
|||
|
|||
//-------------------------------------Namespaces-----------------------------------------------------------------------------
|
|||
namespace rijnfel { |
|||
namespace dac { |
|||
|
|||
//-------------------------------------Enums----------------------------------------------------------------------------------
|
|||
/** Represents the operational mode of the DAC.
|
|||
*/ |
|||
enum eOpMode {NORMAL, PULL_DOWN_2K5, PULL_DOWN_100K, HIGH_IMPEDANCE}; |
|||
|
|||
//-------------------------------------cDAC101085-----------------------------------------------------------------------------
|
|||
/** Small simple driver for the TI DAC101C085.
|
|||
*/ |
|||
class cDAC101C085 |
|||
{ |
|||
public: |
|||
/** @brief Instantiate DAC, assign a number and an address.
|
|||
* @param i_dac_number Number of the DAC. |
|||
* @param i_address I2C address of this DAC. |
|||
*/ |
|||
cDAC101C085(uint8_t i_dac_number, uint8_t i_address); // Constructor
|
|||
|
|||
/** @brief Free DAC, is currently doing nothing.
|
|||
*/ |
|||
~cDAC101C085(); // Destructor
|
|||
|
|||
/** @brief Check if the device is answering on the bus.
|
|||
* @retval uint8_t Returns 1 on success, 0 when failing. |
|||
*/ |
|||
uint8_t CheckDev(); // Check if device is available and alive
|
|||
|
|||
/** @brief Read out 16 bit register of the DAC.
|
|||
* @retval uint16_t 16 bit read from the DAC. |
|||
*/ |
|||
uint16_t ReadSettings(void); |
|||
|
|||
/** @brief Write new setting to DAC register.
|
|||
* @retval uint8_t Returns 1 on success, 0 when failing. |
|||
*/ |
|||
uint8_t ChangeSettings(enum eOpMode mode, uint16_t val); |
|||
|
|||
private: |
|||
uint8_t m_dac_number; // Which of the dacs is it?
|
|||
uint8_t m_address; |
|||
uint8_t WriteSettings(uint16_t settings); |
|||
uint8_t I2CError(uint8_t error); |
|||
}; |
|||
|
|||
} |
|||
} |
|||
|
|||
#endif /* APP_DAC101C085_H_ */ |
@ -0,0 +1,28 @@ |
|||
/*
|
|||
* temperature.h |
|||
* |
|||
* Created on: Aug 1, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_TEMPERATURE_H_ |
|||
#define APP_TEMPERATURE_H_ |
|||
|
|||
#include "../include/rijnfel_core/rijnfel_core.h" |
|||
|
|||
namespace rijnfel { |
|||
template<typename Sample, typename Temperature> |
|||
class cTemperatureSensor: cSensor<Sample> { |
|||
public: |
|||
cTemperatureSensor() { |
|||
|
|||
} |
|||
virtual Temperature ConvertSample(Sample sample) = 0; |
|||
virtual ~cTemperatureSensor() { |
|||
|
|||
} |
|||
}; |
|||
|
|||
} |
|||
|
|||
#endif /* APP_TEMPERATURE_H_ */ |
@ -0,0 +1,127 @@ |
|||
/*
|
|||
* web_interface.h |
|||
* |
|||
* Created on: Aug 6, 2017 |
|||
* Author: Elmar |
|||
*/ |
|||
|
|||
#ifndef APP_WEB_INTERFACE_H_ |
|||
#define APP_WEB_INTERFACE_H_ |
|||
|
|||
//TODO remove this
|
|||
#include "ads101x.h" |
|||
|
|||
#include <SmingCore/SmingCore.h> |
|||
#include <rijnfel_core/rijnfel_core.h> |
|||
|
|||
namespace rijnfel { |
|||
#define RAW_CHANNEL 1 |
|||
#define RAW_SAMPLES 1000 |
|||
class cWebInterface: public cDataSink { |
|||
public: |
|||
/**
|
|||
* Returns the global cWebInterface instance. |
|||
* Only one webserver should ever be running |
|||
* @return global cWebInterface instance |
|||
*/ |
|||
static cWebInterface *GetInstance() { |
|||
if (cWebInterface::s_instance == NULL) |
|||
cWebInterface::s_instance = new cWebInterface(); |
|||
return cWebInterface::s_instance; |
|||
} |
|||
|
|||
/// Singleton instance
|
|||
static cWebInterface *s_instance; |
|||
|
|||
public: |
|||
/**
|
|||
* Should not be used because it's a singleton |
|||
* @param delete |
|||
*/ |
|||
cWebInterface(cWebInterface const&) = delete; |
|||
|
|||
/**
|
|||
* Should not be used because it's a singleton |
|||
* @param delete |
|||
* @return delete |
|||
*/ |
|||
cWebInterface& operator=(cWebInterface const&) = delete; |
|||
|
|||
/**
|
|||
* Registers the paths and starts the server |
|||
*/ |
|||
void StartServer(); |
|||
|
|||
/**
|
|||
* Stops the server |
|||
*/ |
|||
void StopServer(); |
|||
|
|||
/**
|
|||
* This is a debug function that prints out the average values |
|||
* @todo remove this |
|||
*/ |
|||
void PrintValues(); |
|||
|
|||
/**
|
|||
* Destructor |
|||
*/ |
|||
virtual ~cWebInterface(); |
|||
|
|||
// This is what the future will look like
|
|||
// cDataReceiver m_sensorVal[2];
|
|||
// cDataReceiver m_battery;
|
|||
// cDataReceiver m_ledLife;
|
|||
// cDataReceiver m_temp;
|
|||
// But for now...
|
|||
cDataReceiver m_adc_0; |
|||
cDataReceiver m_adc_1; |
|||
cDataReceiver m_adc_2; |
|||
cDataReceiver m_adc_3; |
|||
|
|||
virtual void ReceiveCallback(void * i_data, cDataReceiver * i_receiver); |
|||
public: |
|||
/**
|
|||
* |
|||
* @param i_request |
|||
* @param i_response Response to the client, index.html |
|||
*/ |
|||
void OnIndex(HttpRequest & i_request, HttpResponse & i_response); |
|||
|
|||
/**
|
|||
* Function gets called from the mobile to refresh the average values |
|||
* @param i_request Request from the client |
|||
* @param i_response Response to the client, contains JSON with averages |
|||
*/ |
|||
void OnRefresh(HttpRequest & i_request, HttpResponse & i_response); |
|||
|
|||
/**
|
|||
* |
|||
* @param i_request |
|||
* @param i_response |
|||
*/ |
|||
void OnRawUpdate(HttpRequest& i_request, HttpResponse& i_response); |
|||
void OnConfiguration_json(HttpRequest &request, HttpResponse &response); |
|||
void OnConfiguration(HttpRequest &request, HttpResponse &response); |
|||
|
|||
//TODO migrate this
|
|||
WebSocketConnection * m_connectedUser; |
|||
bool m_sendWebsocket; |
|||
protected: |
|||
/**
|
|||
* Initializes the variables |
|||
*/ |
|||
cWebInterface(); |
|||
private: |
|||
void ResetRawValues(); |
|||
/// Whether the server has started or not
|
|||
bool m_serverStarted; |
|||
/// Holds the average for all the channels
|
|||
int32_t m_adc_value_average[4]; |
|||
/// Server instance
|
|||
HttpServer m_server; |
|||
}; |
|||
|
|||
} /* namespace rijnfel */ |
|||
|
|||
#endif /* APP_WEB_INTERFACE_H_ */ |
Loading…
Reference in new issue