@@ -3246,6 +3246,32 @@ Napi::Value NodeHamLib::GetSupportedFunctions(const Napi::CallbackInfo & info) {
32463246 return funcArray;
32473247}
32483248
3249+ // Mode Query
3250+ Napi::Value NodeHamLib::GetSupportedModes (const Napi::CallbackInfo & info) {
3251+ Napi::Env env = info.Env ();
3252+
3253+ // Get mode list from rig state (populated during rig_open from rx/tx range lists)
3254+ rmode_t modes = my_rig->state .mode_list ;
3255+ Napi::Array modeArray = Napi::Array::New (env);
3256+ uint32_t index = 0 ;
3257+
3258+ // Iterate through all possible mode bits (similar to rig_sprintf_mode)
3259+ for (unsigned int i = 0 ; i < HAMLIB_MAX_MODES; i++) {
3260+ rmode_t mode_bit = modes & (1ULL << i);
3261+
3262+ if (mode_bit) {
3263+ const char * mode_str = rig_strrmode (mode_bit);
3264+
3265+ // Skip empty or unknown modes
3266+ if (mode_str && mode_str[0 ] != ' \0 ' ) {
3267+ modeArray[index++] = Napi::String::New (env, mode_str);
3268+ }
3269+ }
3270+ }
3271+
3272+ return modeArray;
3273+ }
3274+
32493275// Split Operations
32503276Napi::Value NodeHamLib::SetSplitFreq (const Napi::CallbackInfo & info) {
32513277 Napi::Env env = info.Env ();
@@ -3600,7 +3626,10 @@ Napi::Function NodeHamLib::GetClass(Napi::Env env) {
36003626 NodeHamLib::InstanceMethod (" setFunction" , & NodeHamLib::SetFunction),
36013627 NodeHamLib::InstanceMethod (" getFunction" , & NodeHamLib::GetFunction),
36023628 NodeHamLib::InstanceMethod (" getSupportedFunctions" , & NodeHamLib::GetSupportedFunctions),
3603-
3629+
3630+ // Mode Query
3631+ NodeHamLib::InstanceMethod (" getSupportedModes" , & NodeHamLib::GetSupportedModes),
3632+
36043633 // Split Operations
36053634 NodeHamLib::InstanceMethod (" setSplitFreq" , & NodeHamLib::SetSplitFreq),
36063635 NodeHamLib::InstanceMethod (" getSplitFreq" , & NodeHamLib::GetSplitFreq),
0 commit comments