supla-device
Loading...
Searching...
No Matches
ocr_impulse_counter.h
1// SPDX-FileCopyrightText: AC SOFTWARE SP. Z O.O.
2// SPDX-License-Identifier: GPL-2.0-or-later
3
4#ifndef SRC_SUPLA_SENSOR_OCR_IMPULSE_COUNTER_H_
5#define SRC_SUPLA_SENSOR_OCR_IMPULSE_COUNTER_H_
6
7#include <supla/clock/clock.h>
8#include <supla/device/factory_test.h>
9
10#include "virtual_impulse_counter.h"
11
12namespace Supla {
13
14namespace Sensor {
16 public:
18 virtual ~OcrImpulseCounter();
19 void onLoadConfig(SuplaDeviceClass *sdc) override;
20 void onLoadState() override;
21 void onSaveState() override;
22 void onInit() override;
23 void iterateAlways() override;
24 bool iterateConnected() override;
26
27 void addAvailableLightingMode(uint64_t mode);
28 void resetCounter() override;
29
30 void setFactoryTester(Supla::Device::FactoryTest *tester);
31 bool cleanupOcrTestModeConfig();
32
33 protected:
34 // takes photo and initialize photoDataBuffer and photoDataSize
35 // returns true if photo was taken successfully
36 virtual bool takePhoto() = 0;
37 // release photo resource by clearing photoDataBuffer and photoDataSize
38 // and calling releasePhoto for implementation specific actions
39 void releasePhotoResource();
40 // additional releasing of resources if needed by implementation
41 virtual void releasePhoto() = 0;
42 // implement turning on/off the LED. State == 0..100 %
43 virtual void setLedState(int state) = 0;
44 // turns on led if needed and handles delay between led turning on and photo
45 bool handleLedStateBeforePhoto();
46 void handleLedStateAfterPhoto();
47 void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc) override;
48
49 virtual bool sendPhotoToOcrServer(const char *url,
50 const char *authkey,
51 char *resultBuffer,
52 int resultBufferSize,
53 const char *cropSettings) = 0;
54 void parseServerResponse(const char *response, int responseSize);
55
56 void clearOcrConfig();
57 Supla::ApplyConfigResult applyChannelConfig(TSD_ChannelConfig *result,
58 bool local) override;
59 void fillChannelConfig(void *channelConfig,
60 int *size,
61 uint8_t configType) override;
62 void fixOcrLightingMode();
63 void stopResultCheck();
64
65 virtual bool getStatusFromOcrServer(const char *url,
66 const char *authkey,
67 char *buf,
68 int size) = 0;
69 void parseStatus(const char *response, int responseSize);
70
71 void generateUrl(char *url,
72 int urlSize,
73 const char *photoUuid = nullptr) const;
74
75 TChannelConfig_OCR ocrConfig = {};
76 uint64_t availableLightingModes = 0;
77 uint32_t lastPhotoTakeTimestamp = 0;
78 uint32_t lastOcrInteractionTimestamp = 0;
79 uint32_t ledTurnOnTimestamp = 0;
80 char lastUUIDToCheck[37] = {};
81 unsigned char *photoDataBuffer = nullptr;
82 int photoDataSize = 0;
83
84 // values stored in Storage
85 uint64_t lastCorrectOcrReading = 0;
86 time_t lastCorrectOcrReadingTimestamp = 0;
87 SuplaDeviceClass *sdc = nullptr;
88 bool testMode = false;
89 uint32_t testModeDelay = 0;
90 Supla::Device::FactoryTest *factoryTester = nullptr;
91 uint32_t photosCount = 0;
92 int32_t ocrTestExpectedResult = -1;
93};
94
95} // namespace Sensor
96} // namespace Supla
97
98#endif // SRC_SUPLA_SENSOR_OCR_IMPULSE_COUNTER_H_
Definition SuplaDevice.h:167
Definition factory_test.h:30
Definition supla_srpc.h:46
Definition ocr_impulse_counter.h:15
void onLoadState() override
Second method called on element in SuplaDevice.begin().
Definition ocr_impulse_counter.cpp:191
void iterateAlways() override
Method called on each SuplaDevice iteration.
Definition ocr_impulse_counter.cpp:566
void onSaveState() override
Method called periodically during SuplaDevice iteration.
Definition ocr_impulse_counter.cpp:184
void onLoadConfig(SuplaDeviceClass *sdc) override
First method called on element in SuplaDevice.begin().
Definition ocr_impulse_counter.cpp:503
void onInit() override
Third method called on element in SuplaDevice.begin()
Definition ocr_impulse_counter.cpp:39
void onRegistered(Supla::Protocol::SuplaSrpc *suplaSrpc) override
Method called each time when device successfully registers to Supla server.
Definition ocr_impulse_counter.cpp:50
int handleCalcfgFromServer(TSD_DeviceCalCfgRequest *request) override
Handles CALCFG requests from server.
Definition ocr_impulse_counter.cpp:55
bool iterateConnected() override
Method called on each SuplaDevice iteration when device is connected and registered to Supla server o...
Definition ocr_impulse_counter.cpp:208
Definition virtual_impulse_counter.h:14
Definition proto.h:4069
Definition proto.h:3430
Definition proto.h:2588