@@ -671,19 +671,57 @@ void stopNotifier(const Napi::CallbackInfo& info) {
671671 HAL_CleanNotifier (m_notifier, &status);
672672}
673673
674- void writeDfuToBin (const Napi::CallbackInfo& info) {
674+ Napi::Promise writeDfuToBin (const Napi::CallbackInfo& info) {
675675 std::string dfuFileName = info[0 ].As <Napi::String>().Utf8Value ();
676676 std::string binFileName = info[1 ].As <Napi::String>().Utf8Value ();
677- Napi::Function cb = info[2 ].As <Napi::Function>();
677+ int elementIndex;
678+
679+ if (info[2 ].IsUndefined () || info[2 ].IsNull ()) {
680+ elementIndex = 0 ;
681+ } else {
682+ elementIndex = info[2 ].As <Napi::Number>().Int32Value ();
683+ }
678684
679685 dfuse::DFUFile dfuFile (dfuFileName.c_str ());
680686 int status = 0 ;
681687 if (dfuFile && dfuFile.Images ().size () > 0 && dfuFile.Images ()[0 ]) {
682- dfuFile.Images ()[0 ].Write (binFileName, dfuse::writer::Bin);
688+ dfuFile.Images ()[0 ].Write (binFileName, elementIndex, dfuse::writer::Bin);
683689 } else {
684690 status = 1 ;
685691 }
686- cb.Call (info.Env ().Global (), {info.Env ().Null (), Napi::Number::New (info.Env (), status)});
692+ Napi::Promise::Deferred deferred = Napi::Promise::Deferred::New (info.Env ());
693+
694+ deferred.Resolve (Napi::Number::New (info.Env (), status));
695+ return deferred.Promise ();
696+ }
697+
698+ Napi::Array getImageElements (const Napi::CallbackInfo& info) {
699+ Napi::Env env = info.Env ();
700+ std::string dfuFileName = info[0 ].As <Napi::String>().Utf8Value ();
701+ const int imageIndex = info[1 ].As <Napi::Number>().Int32Value ();
702+
703+ Napi::Array elements = Napi::Array::New (env);
704+
705+ const dfuse::DFUFile dfuFile (dfuFileName.c_str ());
706+
707+ if (imageIndex >= dfuFile.Images ().size ()) {
708+ const std::string errorMessage = " Image index out of range" ;
709+ Napi::Error::New (env, errorMessage).ThrowAsJavaScriptException ();
710+ return elements;
711+ }
712+
713+ const dfuse::DFUImage image = dfuFile.Images ()[imageIndex];
714+
715+ uint32_t elementsCount = 0 ;
716+ for (auto element: image.Elements ()) {
717+ Napi::Object elementObject = Napi::Object::New (env);
718+ elementObject.Set (" startAddress" , element.Address ());
719+ elementObject.Set (" size" , element.Size ());
720+
721+ elements[elementsCount++] = elementObject;
722+ }
723+
724+ return elements;
687725}
688726
689727void cleanupHeartbeatsRunning () {
0 commit comments