SensorLib 0.5.0
Multi-platform sensor driver library for Arduino, PlatformIO, and ESP-IDF
Loading...
Searching...
No Matches
sensor/imu/bhi260/SensorBHI260AP_Klio.hpp
Go to the documentation of this file.
1
31#pragma once
32
33#include "../../../SensorBuildOpt.h"
34#if !SENSORLIB_EXCLUDE_BHI260_KLIO
35#include "SensorBHI260AP.hpp"
36#include "../../../bosch/bhi260x/bhy2_klio_defs.h"
37#include "../../../bosch/bhi260x/bhy2_klio.h"
38
40{
41public:
42 static constexpr int8_t INVALID_LEARNING_INDEX = -1;
43
45 LEARNING_PROGRESSING, //Learning is progressing.
46 LEARNING_NO_REPETITIVE_ACTIVITY, //Learning was interrupted by a non-repetitive activity.
47 LEARNING_NO_SIGNIFICANT, //Learning was interrupted because no significant movement was detected.
48 };
49
51 PATTERN_STATE_DISABLE = 0, //Disable pattern
52 PATTERN_STATE_ENABLE, //Enable pattern
54 PATTERN_STATE_AP_DISABLE //Disable adaptive pattern
55 };
56
57 using KlioParameter = bhy2_klio_parameter_t;
58 using KlioError = bhy2_klio_driver_error_state_t;
59 using KlioState = bhy2_klio_sensor_state_t;
60 using RecognitionCallback = void (*)(uint8_t pattern_id, float count, void *user_data);
61 using LearningCallback = void (*)(LearningChangeReason reason, uint32_t progress, int learn_index, void *user_data);
62
69
74
78 void end();
79
85 bool begin();
86
96 bool setState(bool learning_enable, bool learning_reset, bool recognition_enable, bool recognition_reset);
97
104
111 bool setState(KlioState sensor_state);
112
118 bool learning();
119
127 bool recognition(const uint8_t *pattern_ids, size_t size);
128
129
147 bool getLearnPattern(uint8_t *pattern, uint16_t *size);
148
149
160 uint8_t getMaxPatterns();
161
171 bool getParameter(KlioParameter id, uint8_t *parameter_data, uint16_t *size);
172
181 bool setParameter(KlioParameter id, const void *parameter_data, uint16_t size);
182
191 bool writePattern(uint8_t idx, const uint8_t *parameter_data, uint16_t size);
192
202 bool writeMultiplePatterns(const uint8_t *ids, const uint8_t **parameter_data_array, const uint16_t *sizes, uint8_t count);
203
212 bool setPattern(KlioPatternState operation, const uint8_t *pattern_ids, uint16_t size);
213
221 bool enablePattern(const uint8_t *pattern_ids, uint16_t size);
222
232 bool readPattern(uint8_t idx, uint8_t *buffer, uint16_t *length);
233
241 bool enable(float sample_rate, uint32_t report_latency_ms);
242
246 void disable();
247
255 bool logout(float sample_rate, uint32_t report_latency_ms);
256
263 void setLearningCallback(LearningCallback cb, void *user_data);
264
271 void setRecognitionCallback(RecognitionCallback cb, void *user_data);
272
278 bool checkError();
279
285 KlioError getError() const;
286
292 const char *errorToString() const;
293
294
295private:
296
307 static void static_klio_callback(uint8_t sensor_id, const uint8_t *data, uint32_t size, uint64_t *timestamp, void *user_data);
308
318 void klio_call_local(uint8_t sensor_id, const uint8_t *data_ptr, uint32_t size, uint64_t *timestamp, void *user_data);
319
330 static void static_klio_log_callback(uint8_t sensor_id, const uint8_t *data, uint32_t size, uint64_t *timestamp, void *user_data);
331
341 void klio_log_call_local(uint8_t sensor_id, const uint8_t *data_ptr, uint32_t size, uint64_t *timestamp, void *user_data);
342
343 template<typename Func, typename... Args>
344 bool KlioTemplate(Func func, Args &&... args);
345
346private:
347 SensorBHI260AP *sensor;
348 uint16_t max_patterns;
349 uint16_t max_pattern_size;
350 float *similarity_result_buf;
351 uint8_t *similarity_idx_buf;
352 LearningCallback learning_callback;
353 void *learning_callback_user_data;
354 RecognitionCallback recognition_callback;
355 void *recognition_callback_user_data;
356 KlioError errorCode;
357 KlioState k_state;
358 static const char *errorMessages[9];
359};
360
361#endif
bhy2_klio_driver_error_state_t KlioError
void(*)(LearningChangeReason reason, uint32_t progress, int learn_index, void *user_data) LearningCallback
void end()
End the interaction with the KLIO functionality of the BHI260AP sensor and release related resources.
bool getLearnPattern(uint8_t *pattern, uint16_t *size)
Retrieve the learned pattern from the sensor.
bool writeMultiplePatterns(const uint8_t *ids, const uint8_t **parameter_data_array, const uint16_t *sizes, uint8_t count)
Write multiple patterns to the KLIO sensor.
bool readPattern(uint8_t idx, uint8_t *buffer, uint16_t *length)
Read a pattern from the KLIO sensor.
void setLearningCallback(LearningCallback cb, void *user_data)
Set the callback function for the learning event.
void disable()
Disable the KLIO sensor.
bool setPattern(KlioPatternState operation, const uint8_t *pattern_ids, uint16_t size)
Set the state of patterns in the KLIO sensor.
KlioError getError() const
Get the error information of the KLIO sensor.
bool writePattern(uint8_t idx, const uint8_t *parameter_data, uint16_t size)
Write a pattern to the KLIO sensor.
void(*)(uint8_t pattern_id, float count, void *user_data) RecognitionCallback
KlioState getState()
Get the current state of the KLIO sensor.
bool logout(float sample_rate, uint32_t report_latency_ms)
Log out the KLIO sensor with specified sample rate and report latency.
bool begin()
Initialize the interaction with the KLIO functionality of the BHI260AP sensor.
bool enablePattern(const uint8_t *pattern_ids, uint16_t size)
Enable specified patterns in the KLIO sensor.
bool enable(float sample_rate, uint32_t report_latency_ms)
Enable the KLIO sensor with specified sample rate and report latency.
bool learning()
Start the learning function of the KLIO sensor.
bool setState(bool learning_enable, bool learning_reset, bool recognition_enable, bool recognition_reset)
Set the learning and recognition states of the KLIO sensor.
uint8_t getMaxPatterns()
Retrieve the maximum number of recognition patterns allowed.
const char * errorToString() const
Convert the error information to a string.
bool checkError()
Check if there is an error in the KLIO sensor.
bool recognition(const uint8_t *pattern_ids, size_t size)
Start the recognition function of the KLIO sensor for the specified pattern IDs.
bool getParameter(KlioParameter id, uint8_t *parameter_data, uint16_t *size)
Get a parameter from the KLIO sensor.
void setRecognitionCallback(RecognitionCallback cb, void *user_data)
Set the callback function for the recognition event.
bool setParameter(KlioParameter id, const void *parameter_data, uint16_t size)
Set a parameter of the KLIO sensor.
~SensorBHI260AP_Klio()
Destructor to release resources occupied by the SensorBHI260AP_Klio object.