diff --git a/lib/binding.ts b/lib/binding.ts index 483d8b8..5dc6781 100644 --- a/lib/binding.ts +++ b/lib/binding.ts @@ -49,7 +49,7 @@ export class CanBridge { getDevices: () => Promise; registerDeviceToHAL: (descriptor:string, messageId:Number, messageMask:number) => number; unregisterDeviceFromHAL: (descriptor:string) => Promise; - receiveMessage: (descriptor:string, messageId:number, messageMask:number) => CanMessage; + receiveMessage: (descriptor:string, messageId:number, messageMask:number) => CanMessage | undefined; openStreamSession: (descriptor:string, messageId:number, messageMask:number, maxSize:number) => number; readStreamSession: (descriptor:string, sessionHandle:number, messagesToRead:number) => CanMessage[]; closeStreamSession: (descriptor:string, sessionHandle:number) => number; diff --git a/src/canWrapper.cc b/src/canWrapper.cc index c8e6cca..3766ae7 100644 --- a/src/canWrapper.cc +++ b/src/canWrapper.cc @@ -235,6 +235,10 @@ Napi::Object receiveMessage(const Napi::CallbackInfo& info) { rev::usb::CANStatus status = device->ReceiveCANMessage(message, messageId, messageMask); if (status != rev::usb::CANStatus::kOk) { + if (status == rev::ubs::CANStatus::kTimeout) { + // We haven't received this message, which is not worth throwing an exception over + return Napi::Env::Undefined(); + } Napi::Error::New(env, "Receiving message failed with status code " + std::to_string((int)status)).ThrowAsJavaScriptException(); return Napi::Object::New(env); } @@ -515,6 +519,26 @@ Napi::Number sendCANMessage(const Napi::CallbackInfo& info) { return Napi::Number::New(env, status); } +// Params: +// descriptor: string +// messageId: Number +// requestedMessageLength: Number +// Returns: +// status: Number +Napi::Number sendCANRtrMessage(const Napi::CallbackInfo& info) { + Napi::Env env = info.Env(); + std::string descriptor = info[0].As().Utf8Value(); + uint32_t messageId = info[1].As().Uint32Value(); + uint8_t requestedMessageLength = info[2].As().Uint8Value(); + + uint8_t messageData[0]; + int status = _sendCANMessage(descriptor, messageId, messageData, dataParam.Length(), repeatPeriodMs); + if (status < 0) { + Napi::Error::New(env, DEVICE_NOT_FOUND_ERROR).ThrowAsJavaScriptException(); + } + return Napi::Number::New(env, status); +} + // Params: // descriptor: string // messageId: Number