Bluenet  5.7.0
Bluenet, firmware for nRF52 smart home devices
Loading...
Searching...
No Matches
RecognizeSwitch Class Reference

Authors: Crownstone Team Copyright: Crownstone (https://crownstone.rocks) Date: March 23, 2018 License: LGPLv3+, Apache License 2.0, and/or MIT (triple-licensed) More...

#include <cs_RecognizeSwitch.h>

Collaboration diagram for RecognizeSwitch:

Public Member Functions

 RecognizeSwitch ()
 Constructor: sets some default config values. More...
 
void init ()
 Initialize: set initial values and allocate buffers. More...
 
void deinit ()
 Deinitialize: deallocate buffers. More...
 
void configure (float threshold)
 Configure threshold. More...
 
void start ()
 Start detecting. More...
 
void stop ()
 Stop detecting. More...
 
void skip (uint16_t num)
 Don't detect anything for num detect() calls. More...
 
bool detect (const CircularBuffer< adc_buffer_id_t > &bufQueue, adc_channel_id_t voltageChannelId)
 Recognize switch event. More...
 
void getLastDetection (PowerSamplesType type, uint8_t index, cs_result_t &result)
 Get the samples of the last (almost) detected switch event. More...
 

Static Public Member Functions

static RecognizeSwitchgetInstance ()
 

Private Types

enum  FoundSwitch { True , Almost , False }
 

Private Member Functions

FoundSwitch detect (const CircularBuffer< adc_buffer_id_t > &bufQueue, adc_channel_id_t voltageChannelId, uint8_t iteration)
 Check if a switch is detected in the given buffers. More...
 
FoundSwitch detectSwitch (const CircularBuffer< adc_buffer_id_t > &bufQueue, adc_channel_id_t voltageChannelId)
 Check if a switch is detected in the given buffers. More...
 
float calcDiff (const CircularBuffer< adc_buffer_id_t > &bufQueue, const adc_channel_id_t voltageChannelId, const adc_buffer_id_t bufIndex1, const adc_buffer_id_t bufIndex2, const adc_sample_value_id_t startIndex, const adc_sample_value_id_t numSamples)
 
bool ignoreSample (const adc_sample_value_t value1, const adc_sample_value_t value2)
 
bool ignoreSample (const adc_sample_value_t value0, const adc_sample_value_t value1, const adc_sample_value_t value2)
 
void setLastDetection (bool aboveThreshold, const CircularBuffer< adc_buffer_id_t > &bufQueue, adc_channel_id_t voltageChannelId)
 

Private Attributes

bool _running = false
 
uint8_t _skipSwitchDetectionTriggers = 200
 
float _thresholdDifferent = SWITCHCRAFT_THRESHOLD
 
float _thresholdSimilar = SWITCHCRAFT_THRESHOLD
 
float _thresholdRatio = 100.0
 
cs_power_samples_header_t _lastDetection
 
cs_power_samples_header_t _lastAlmostDetection
 
int16_t _lastDetectionSamples [_numStoredBuffers *AdcBuffer::getChannelLength()] = {0}
 
int16_t _lastAlmostDetectionSamples [_numStoredBuffers *AdcBuffer::getChannelLength()] = {0}
 

Static Private Attributes

static const uint8_t _numBuffersRequired = 4
 
static const uint8_t _numStoredBuffers = _numBuffersRequired
 

Detailed Description

Authors: Crownstone Team Copyright: Crownstone (https://crownstone.rocks) Date: March 23, 2018 License: LGPLv3+, Apache License 2.0, and/or MIT (triple-licensed)

Member Enumeration Documentation

◆ FoundSwitch

Enumerator
True 
Almost 
False 

Constructor & Destructor Documentation

◆ RecognizeSwitch()

Constructor: sets some default config values.

Member Function Documentation

◆ calcDiff()

float RecognizeSwitch::calcDiff ( const CircularBuffer< adc_buffer_id_t > &  bufQueue,
const adc_channel_id_t  voltageChannelId,
const adc_buffer_id_t  bufIndex1,
const adc_buffer_id_t  bufIndex2,
const adc_sample_value_id_t  startIndex,
const adc_sample_value_id_t  numSamples 
)
inlineprivate

◆ configure()

void RecognizeSwitch::configure ( float  threshold)

Configure threshold.

Parameters
[in]thresholdSets threshold different and similar.

◆ deinit()

void RecognizeSwitch::deinit ( )

Deinitialize: deallocate buffers.

◆ detect() [1/2]

bool RecognizeSwitch::detect ( const CircularBuffer< adc_buffer_id_t > &  bufQueue,
adc_channel_id_t  voltageChannelId 
)

Recognize switch event.

Parameters
[in]bufQueueThe queue of available buffers.
[in]voltageChannelIdChannel in which the voltage values can be found.
Returns
True when switch event was detected.

◆ detect() [2/2]

FoundSwitch RecognizeSwitch::detect ( const CircularBuffer< adc_buffer_id_t > &  bufQueue,
adc_channel_id_t  voltageChannelId,
uint8_t  iteration 
)
private

Check if a switch is detected in the given buffers.

◆ detectSwitch()

FoundSwitch RecognizeSwitch::detectSwitch ( const CircularBuffer< adc_buffer_id_t > &  bufQueue,
adc_channel_id_t  voltageChannelId 
)
private

Check if a switch is detected in the given buffers.

Different way of calculating, using calcDiff(). Seems to go slower though.

◆ getInstance()

static RecognizeSwitch & RecognizeSwitch::getInstance ( )
inlinestatic

◆ getLastDetection()

void RecognizeSwitch::getLastDetection ( PowerSamplesType  type,
uint8_t  index,
cs_result_t result 
)

Get the samples of the last (almost) detected switch event.

Parameters
[in]typeEither SWITCHCRAFT or SWITCHCRAFT_NON_TRIGGERED.
[in/out]Result with buffer to fill with data (header + samples), and result code to set.

◆ ignoreSample() [1/2]

bool RecognizeSwitch::ignoreSample ( const adc_sample_value_t  value0,
const adc_sample_value_t  value1,
const adc_sample_value_t  value2 
)
private

◆ ignoreSample() [2/2]

bool RecognizeSwitch::ignoreSample ( const adc_sample_value_t  value1,
const adc_sample_value_t  value2 
)
private

◆ init()

void RecognizeSwitch::init ( )

Initialize: set initial values and allocate buffers.

◆ setLastDetection()

void RecognizeSwitch::setLastDetection ( bool  aboveThreshold,
const CircularBuffer< adc_buffer_id_t > &  bufQueue,
adc_channel_id_t  voltageChannelId 
)
private

◆ skip()

void RecognizeSwitch::skip ( uint16_t  num)

Don't detect anything for num detect() calls.

◆ start()

void RecognizeSwitch::start ( )

Start detecting.

◆ stop()

void RecognizeSwitch::stop ( )

Stop detecting.

Member Data Documentation

◆ _lastAlmostDetection

cs_power_samples_header_t RecognizeSwitch::_lastAlmostDetection
private

◆ _lastAlmostDetectionSamples

int16_t RecognizeSwitch::_lastAlmostDetectionSamples[_numStoredBuffers *AdcBuffer::getChannelLength()] = {0}
private

◆ _lastDetection

cs_power_samples_header_t RecognizeSwitch::_lastDetection
private

◆ _lastDetectionSamples

int16_t RecognizeSwitch::_lastDetectionSamples[_numStoredBuffers *AdcBuffer::getChannelLength()] = {0}
private

◆ _numBuffersRequired

const uint8_t RecognizeSwitch::_numBuffersRequired = 4
staticprivate

◆ _numStoredBuffers

const uint8_t RecognizeSwitch::_numStoredBuffers = _numBuffersRequired
staticprivate

◆ _running

bool RecognizeSwitch::_running = false
private

◆ _skipSwitchDetectionTriggers

uint8_t RecognizeSwitch::_skipSwitchDetectionTriggers = 200
private

◆ _thresholdDifferent

float RecognizeSwitch::_thresholdDifferent = SWITCHCRAFT_THRESHOLD
private

◆ _thresholdRatio

float RecognizeSwitch::_thresholdRatio = 100.0
private

◆ _thresholdSimilar

float RecognizeSwitch::_thresholdSimilar = SWITCHCRAFT_THRESHOLD
private

The documentation for this class was generated from the following file: