87 enum BaudRate : uint32_t {
105 enum class EventType {
252 float thdi(
float phi = 0)
const;
275 bool operator==(
const Metrics& other)
const;
277 bool operator!=(
const Metrics& other)
const {
return !(*
this == other); }
281 void operator=(
const Metrics& other);
283#ifdef MYCILA_JSON_SUPPORT
284 void toJson(
const JsonObject& root)
const;
290 uint8_t address = MYCILA_JSY_ADDRESS_UNKNOWN;
291 uint16_t model = MYCILA_JSY_MK_UNKNOWN;
300 const Metrics& single()
const {
return _metrics[0]; }
303 const Metrics& channel1()
const {
return _metrics[0]; }
305 const Metrics& channel2()
const {
return _metrics[1]; }
308 const Metrics& phaseA()
const {
return _metrics[0]; }
310 const Metrics& phaseB()
const {
return _metrics[1]; }
312 const Metrics& phaseC()
const {
return _metrics[2]; }
318 bool operator==(
const Data& other)
const;
320 bool operator!=(
const Data& other)
const {
return !(*
this == other); }
322 void operator=(
const Data& other);
324#ifdef MYCILA_JSON_SUPPORT
325 void toJson(
const JsonObject& root)
const;
333 typedef std::function<void(EventType eventType,
const Data& data)> Callback;
352 uint8_t core = MYCILA_JSY_ASYNC_CORE,
353 uint32_t stackSize = MYCILA_JSY_ASYNC_STACK_SIZE,
354 uint32_t pause = MYCILA_JSY_ASYNC_READ_PAUSE_MS) {
355 begin(serial, rxPin, txPin, BaudRate::UNKNOWN, MYCILA_JSY_ADDRESS_BROADCAST, MYCILA_JSY_MK_UNKNOWN, async, core, stackSize, pause);
371 void begin(HardwareSerial& serial,
374 BaudRate baudRate = BaudRate::UNKNOWN,
375 uint8_t destinationAddress = MYCILA_JSY_ADDRESS_BROADCAST,
376 uint16_t model = MYCILA_JSY_MK_UNKNOWN,
378 uint8_t core = MYCILA_JSY_ASYNC_CORE,
379 uint32_t stackSize = MYCILA_JSY_ASYNC_STACK_SIZE,
380 uint32_t pause = MYCILA_JSY_ASYNC_READ_PAUSE_MS);
427 const char* getModelName()
const {
return getModelName(_model); }
434 static const char* getModelName(uint16_t model);
441 Mode
readMode() {
return _readMode(_destinationAddress, _model); }
457 bool setMode(Mode mode) {
return _setMode(_destinationAddress, _model, mode); }
466 bool setMode(uint8_t address, Mode mode) {
return _setMode(address,
readModel(address), mode); }
473 bool read() {
return _read(_destinationAddress, _model); }
516 bool setBaudRate(uint8_t address, BaudRate baudRate);
518#ifdef MYCILA_JSON_SUPPORT
519 void toJson(
const JsonObject& root)
const;
522 gpio_num_t getRXPin()
const {
return _pinRX; }
523 gpio_num_t getTXPin()
const {
return _pinTX; }
524 bool isEnabled()
const {
return _enabled; }
525 BaudRate getBaudRate()
const {
return _baudRate; }
533 BaudRate getMinAvailableBaudRate()
const;
534 static BaudRate getMinAvailableBaudRate(uint16_t model);
562 bool isConnected()
const {
return _data.aggregate.
frequency > 0; }
564 void setCallback(Callback callback) { _callback = callback; }
567 Callback _callback =
nullptr;
568 gpio_num_t _pinRX = GPIO_NUM_NC;
569 gpio_num_t _pinTX = GPIO_NUM_NC;
570 HardwareSerial* _serial =
nullptr;
572 TaskHandle_t _taskHandle;
574 uint32_t _pause = MYCILA_JSY_ASYNC_READ_PAUSE_MS;
575 uint8_t _destinationAddress = MYCILA_JSY_ADDRESS_BROADCAST;
576 uint8_t _lastAddress = MYCILA_JSY_ADDRESS_UNKNOWN;
577 BaudRate _baudRate = BaudRate::UNKNOWN;
578 bool _enabled =
false;
579 uint16_t _model = MYCILA_JSY_MK_UNKNOWN;
583 uint8_t _buffer[224];
587 enum class ReadResult {
595 bool _set(uint8_t address, uint8_t newAddress, BaudRate newBaudRate);
596 bool _read(uint8_t address, uint16_t model);
597 Mode _readMode(uint8_t address, uint16_t model);
598 bool _setMode(uint8_t address, uint16_t model, Mode mode);
600 bool _canRead(uint8_t address, BaudRate baudRate);
601 ReadResult _timedRead(uint8_t expectedAddress,
size_t expectedLen, BaudRate baudRate);
602 void _send(uint8_t address,
size_t len);
604 void _openSerial(BaudRate baudRate);
605 BaudRate _detectBauds(uint8_t address);
607 static uint16_t _crc16(
const uint8_t* buffer,
size_t len);
608 static uint8_t _register8(
const uint8_t* buffer, uint16_t registerStart, uint16_t registerSize, uint16_t registerAddress, uint8_t index = 0);
609 static uint16_t _register16(
const uint8_t* buffer, uint16_t registerStart, uint16_t registerSize, uint16_t registerAddress);
610 static uint32_t _register32(
const uint8_t* buffer, uint16_t registerStart, uint16_t registerSize, uint16_t registerAddress);
611 static void _jsyTask(
void* pvParameters);
void begin(HardwareSerial &serial, int8_t rxPin, int8_t txPin, bool async, uint8_t core=MYCILA_JSY_ASYNC_CORE, uint32_t stackSize=MYCILA_JSY_ASYNC_STACK_SIZE, uint32_t pause=MYCILA_JSY_ASYNC_READ_PAUSE_MS)
Initialize the JSY with the given RX and TX pins.