src/drivers/modbus/lib/ModbusDriverBinder.cpp
#include "ModbusDriverBinder.h"
LOG_INIT
#define TAG "ModbusDriverBinder "
ModbusDriverBinder::ModbusDriverBinder(Callback *callback) {
modbusClient = ModbusClientSW::getModbusClientInstance();
Nan::AsyncQueueWorker(new ModbusDataListenerWorker(callback));
}
ModbusDriverBinder::~ModbusDriverBinder() {
modbusClient->stop();
}
void ModbusDriverBinder::registerCoilReading(unsigned char slaveAddress, short functionAddress) {
int modbusID = modbusClient->registerCoilReading(slaveAddress, functionAddress, false);
modbusClient->setReading(modbusID, true);
}
void ModbusDriverBinder::registerCoilReadingFunction(const Nan::FunctionCallbackInfo<Value> &args) {
Nan::HandleScope scope;
// Get params
if (args.Length() != 2 ||
args[0]->IsInt32() == false ||
args[1]->IsInt32() == false) {
args.GetIsolate()->ThrowException(Exception::TypeError(
Nan::New("Please check arguments").ToLocalChecked()
));
}
unsigned char slaveAddress = (unsigned char)args[0]->Int32Value();
short functionAddress = (short)args[1]->Int32Value();
ModbusDriverBinder *modbusDriver = ObjectWrap::Unwrap<ModbusDriverBinder>(args.Holder());
modbusDriver->registerCoilReading(slaveAddress, functionAddress);
}
void ModbusDriverBinder::Init(Local<Object> exports) {
Nan::HandleScope scope;
// Set Node/v8 stuff
Local<FunctionTemplate> tmpl = Nan::New<FunctionTemplate>(New);
tmpl->InstanceTemplate()->SetInternalFieldCount(1);
Nan::SetPrototypeMethod(tmpl, "registerCoilReading", registerCoilReadingFunction);
exports->Set(Nan::New("ModbusDriverBinder").ToLocalChecked(), tmpl->GetFunction());
}
void ModbusDriverBinder::New(const Nan::FunctionCallbackInfo<Value> &args) {
Nan::HandleScope scope;
if (args.Length() != 2 ||
args[0]->IsBoolean() == false ||
args[1]->IsFunction() == false) {
args.GetIsolate()->ThrowException(Exception::TypeError(
Nan::New("Constructor prototype is (boolean log, function progressCallback").ToLocalChecked()
));
}
// Set log level
if (args[0]->BooleanValue() == true) {
LOG::setLevel(INFO);
} else {
LOG::setLevel(INFO);
}
// Apply arguments
Callback *callback = new Callback(args[1].As<v8::Function>());
ModbusDriverBinder *modbusDriverBinder = new ModbusDriverBinder(callback);
modbusDriverBinder->Wrap(args.This());
// Return object
args.GetReturnValue().Set(args.This());
}