matterbridge-roborock-vacuum-plugin
Version:
Matterbridge Roborock Vacuum Plugin
388 lines • 20.5 kB
JavaScript
function extractNibbleBit(hexStr, bitIndex) {
const nibblePos = Math.floor(bitIndex / 4);
const bitPos = bitIndex % 4;
const charIndex = hexStr.length - 1 - nibblePos;
if (charIndex < 0)
return false;
const nibbleVal = parseInt(hexStr[charIndex], 16);
if (isNaN(nibbleVal))
return false;
return ((nibbleVal >> bitPos) & 1) === 1;
}
function buildAllFalse() {
return {
is_show_clean_finish_reason_supported: false,
is_re_segment_supported: false,
is_video_monitor_supported: false,
is_any_state_transit_goto_supported: false,
is_fw_filter_obstacle_supported: false,
is_video_setting_supported: false,
is_ignore_unknown_map_object_supported: false,
is_set_child_supported: false,
is_carpet_supported: false,
is_record_allowed: false,
is_mop_path_supported: false,
is_multi_map_segment_timer_supported: false,
is_current_map_restore_enabled: false,
is_room_name_supported: false,
is_shake_mop_set_supported: false,
is_map_beautify_internal_debug_supported: false,
is_new_data_for_clean_history: false,
is_new_data_for_clean_history_detail: false,
is_flow_led_setting_supported: false,
is_dust_collection_setting_supported: false,
is_rpc_retry_supported: false,
is_avoid_collision_supported: false,
is_support_set_switch_map_mode: false,
is_map_carpet_add_support: false,
is_custom_water_box_distance_supported: false,
is_support_smart_scene: false,
is_support_floor_edit: false,
is_support_furniture: false,
is_wash_then_charge_cmd_supported: false,
is_support_room_tag: false,
is_support_quick_map_builder: false,
is_support_smart_global_clean_with_custom_mode: false,
is_careful_slow_mop_supported: false,
is_egg_mode_supported_from_new_features: false,
is_carpet_show_on_map: false,
is_supported_valley_electricity: false,
is_unsave_map_reason_supported: false,
is_supported_drying: false,
is_supported_download_test_voice: false,
is_support_backup_map: false,
is_support_custom_mode_in_cleaning: false,
is_support_remote_control_in_call: false,
is_support_set_volume_in_call: false,
is_support_clean_estimate: false,
is_support_custom_dnd: false,
is_carpet_deep_clean_supported: false,
is_support_stuck_zone: false,
is_support_custom_door_sill: false,
is_wifi_manage_supported: false,
is_clean_route_fast_mode_supported: false,
is_support_cliff_zone: false,
is_support_smart_door_sill: false,
is_support_floor_direction: false,
is_back_charge_auto_wash_supported: false,
is_support_incremental_map: false,
is_offline_map_supported: false,
is_super_deep_wash_supported: false,
is_ces_2022_supported: false,
is_dss_believable: false,
is_main_brush_up_down_supported_from_str: false,
is_goto_pure_clean_path_supported: false,
is_water_up_down_drain_supported: false,
is_setting_carpet_first_supported: false,
is_clean_route_deep_slow_plus_supported: false,
is_dynamically_skip_clean_zone_supported: false,
is_dynamically_add_clean_zones_supported: false,
is_left_water_drain_supported: false,
is_clean_count_setting_supported: false,
is_corner_clean_mode_supported: false,
is_two_key_real_time_video_supported: false,
is_two_key_rtv_in_charging_supported: false,
is_dirty_replenish_clean_supported: false,
is_auto_delivery_field_in_global_status_supported: false,
is_avoid_collision_mode_supported: false,
is_voice_control_supported: false,
is_new_endpoint_supported: false,
is_pumping_water_supported: false,
is_corner_mop_stretch_supported: false,
is_hot_wash_towel_supported: false,
is_floor_dir_clean_any_time_supported: false,
is_pet_supplies_deep_clean_supported: false,
is_mop_shake_water_max_supported: false,
is_exact_custom_mode_supported: false,
is_video_patrol_supported: false,
is_carpet_custom_clean_supported: false,
is_pet_snapshot_supported: false,
is_custom_clean_mode_count_supported: false,
is_new_ai_recognition_supported: false,
is_auto_collection_2_supported: false,
is_right_brush_stretch_supported: false,
is_smart_clean_mode_set_supported: false,
is_dirty_object_detect_supported: false,
is_no_need_carpet_press_set_supported: false,
is_voice_control_led_supported: false,
is_water_leak_check_supported: false,
is_min_battery_15_to_clean_task_supported: false,
is_gap_deep_clean_supported: false,
is_object_detect_check_supported: false,
is_identify_room_supported: false,
is_matter_supported: false,
is_workday_holiday_supported: false,
is_clean_direct_status_supported: false,
is_map_eraser_supported: false,
is_optimize_battery_supported: false,
is_activate_video_charging_and_standby_supported: false,
is_carpet_long_haired_supported: false,
is_clean_history_time_line_supported: false,
is_max_zone_opened_supported: false,
is_exhibition_function_supported: false,
is_lds_lifting_supported: false,
is_auto_tear_down_mop_supported: false,
is_small_side_mop_supported: false,
is_support_side_brush_up_down_supported: false,
is_dry_interval_timer_supported: false,
is_uvc_sterilize_supported: false,
is_midway_back_to_dock_supported: false,
is_support_main_brush_up_down_supported: false,
is_egg_dance_mode_supported: false,
is_mechanical_arm_mode_supported: false,
is_tidyup_zones_supported: false,
is_clean_time_line_supported: false,
is_clean_then_mop_mode_supported: false,
is_type_identify_supported: false,
is_support_get_particular_status_supported: false,
is_three_d_mapping_inner_test_supported: false,
is_sync_server_name_supported: false,
is_should_show_arm_over_load_supported: false,
is_collect_dust_count_show_supported: false,
is_support_api_app_stop_grasp_supported: false,
is_ctm_with_repeat_supported: false,
is_side_brush_lift_carpet_supported: false,
is_detect_wire_carpet_supported: false,
is_water_slide_mode_supported: false,
is_soak_and_wash_supported: false,
is_clean_efficiency_supported: false,
is_back_wash_new_smart_supported: false,
is_dual_band_wi_fi_supported: false,
is_program_mode_supported: false,
is_clean_fluid_delivery_supported: false,
is_carpet_long_haired_ex_supported: false,
is_over_sea_ctm_supported: false,
is_full_duples_switch_supported: false,
is_low_area_access_supported: false,
is_follow_low_obs_supported: false,
is_two_gears_no_collision_supported: false,
is_carpet_shape_type_supported: false,
is_sr_map_supported: false,
is_led_status_switch_supported: false,
is_multi_floor_supported: false,
is_support_fetch_timer_summary: false,
is_order_clean_supported: false,
is_analysis_supported: false,
is_remote_supported: false,
is_support_voice_control_debug: false,
is_mop_forbidden_supported: false,
is_soft_clean_mode_supported: false,
is_custom_mode_supported: false,
is_support_custom_carpet: false,
is_show_general_obstacle_supported: false,
is_show_obstacle_photo_supported: false,
is_rubber_brush_carpet_supported: false,
is_carpet_pressure_use_origin_paras_supported: false,
is_support_mop_back_pwm_set: false,
is_collect_dust_mode_supported: false,
is_support_water_mode: false,
is_pure_clean_mop_supported: false,
is_new_remote_view_supported: false,
is_max_plus_mode_supported: false,
is_none_pure_clean_mop_with_max_plus: false,
is_clean_route_setting_supported: false,
is_mop_shake_module_supported: false,
is_customized_clean_supported: false,
newFeatureInfo: 0n,
newFeatureInfoStr: '',
featureInfo: [],
};
}
export function decodeFeatureSet(featureSet, newFeatureSet) {
let featureInt;
try {
featureInt = featureSet ? BigInt(featureSet) : 0n;
}
catch {
return buildAllFalse();
}
const lower32 = Number(featureInt & 0xffffffffn);
const upper32 = Number((featureInt >> 32n) & 0xffffffffn);
const hexStr = newFeatureSet ?? '';
const rawMaskC = hexStr.length >= 8 ? parseInt(hexStr.slice(-8), 16) : 0;
const maskC = isNaN(rawMaskC) ? 0 : rawMaskC;
return {
// Group A
is_show_clean_finish_reason_supported: (lower32 & 1) !== 0,
is_re_segment_supported: (lower32 & 4) !== 0,
is_video_monitor_supported: (lower32 & 8) !== 0,
is_any_state_transit_goto_supported: (lower32 & 16) !== 0,
is_fw_filter_obstacle_supported: (lower32 & 32) !== 0,
is_video_setting_supported: (lower32 & 64) !== 0,
is_ignore_unknown_map_object_supported: (lower32 & 128) !== 0,
is_set_child_supported: (lower32 & 256) !== 0,
is_carpet_supported: (lower32 & 512) !== 0,
is_record_allowed: (lower32 & 1024) !== 0,
is_mop_path_supported: (lower32 & 2048) !== 0,
is_multi_map_segment_timer_supported: (lower32 & 4096) !== 0,
is_current_map_restore_enabled: (lower32 & 8192) !== 0,
is_room_name_supported: (lower32 & 16384) !== 0,
is_shake_mop_set_supported: (lower32 & 262144) !== 0,
is_map_beautify_internal_debug_supported: (lower32 & 2097152) !== 0,
is_new_data_for_clean_history: (lower32 & 4194304) !== 0,
is_new_data_for_clean_history_detail: (lower32 & 8388608) !== 0,
is_flow_led_setting_supported: (lower32 & 16777216) !== 0,
is_dust_collection_setting_supported: (lower32 & 33554432) !== 0,
is_rpc_retry_supported: (lower32 & 67108864) !== 0,
is_avoid_collision_supported: (lower32 & 134217728) !== 0,
is_support_set_switch_map_mode: (lower32 & 268435456) !== 0,
is_map_carpet_add_support: (lower32 & 1073741824) !== 0,
is_custom_water_box_distance_supported: (lower32 & 2147483648) !== 0,
// Group B
is_support_smart_scene: ((upper32 >> 1) & 1) === 1,
is_support_floor_edit: ((upper32 >> 3) & 1) === 1,
is_support_furniture: ((upper32 >> 4) & 1) === 1,
is_wash_then_charge_cmd_supported: ((upper32 >> 5) & 1) === 1,
is_support_room_tag: ((upper32 >> 6) & 1) === 1,
is_support_quick_map_builder: ((upper32 >> 7) & 1) === 1,
is_support_smart_global_clean_with_custom_mode: ((upper32 >> 8) & 1) === 1,
is_careful_slow_mop_supported: ((upper32 >> 9) & 1) === 1,
is_egg_mode_supported_from_new_features: ((upper32 >> 10) & 1) === 1,
is_carpet_show_on_map: ((upper32 >> 12) & 1) === 1,
is_supported_valley_electricity: ((upper32 >> 13) & 1) === 1,
is_unsave_map_reason_supported: ((upper32 >> 14) & 1) === 1,
is_supported_drying: ((upper32 >> 15) & 1) === 1,
is_supported_download_test_voice: ((upper32 >> 16) & 1) === 1,
is_support_backup_map: ((upper32 >> 17) & 1) === 1,
is_support_custom_mode_in_cleaning: ((upper32 >> 18) & 1) === 1,
is_support_remote_control_in_call: ((upper32 >> 19) & 1) === 1,
// Group C
is_support_set_volume_in_call: (maskC & 1) !== 0,
is_support_clean_estimate: (maskC & 2) !== 0,
is_support_custom_dnd: (maskC & 4) !== 0,
is_carpet_deep_clean_supported: (maskC & 8) !== 0,
is_support_stuck_zone: (maskC & 16) !== 0,
is_support_custom_door_sill: (maskC & 32) !== 0,
is_wifi_manage_supported: (maskC & 128) !== 0,
is_clean_route_fast_mode_supported: (maskC & 256) !== 0,
is_support_cliff_zone: (maskC & 512) !== 0,
is_support_smart_door_sill: (maskC & 1024) !== 0,
is_support_floor_direction: (maskC & 2048) !== 0,
is_back_charge_auto_wash_supported: (maskC & 4096) !== 0,
is_support_incremental_map: (maskC & 4194304) !== 0,
is_offline_map_supported: (maskC & 16384) !== 0,
is_super_deep_wash_supported: (maskC & 32768) !== 0,
is_ces_2022_supported: (maskC & 65536) !== 0,
is_dss_believable: (maskC & 131072) !== 0,
is_main_brush_up_down_supported_from_str: (maskC & 262144) !== 0,
is_goto_pure_clean_path_supported: (maskC & 524288) !== 0,
is_water_up_down_drain_supported: (maskC & 1048576) !== 0,
is_setting_carpet_first_supported: (maskC & 8388608) !== 0,
is_clean_route_deep_slow_plus_supported: (maskC & 16777216) !== 0,
is_dynamically_skip_clean_zone_supported: (maskC & 33554432) !== 0,
is_dynamically_add_clean_zones_supported: (maskC & 67108864) !== 0,
is_left_water_drain_supported: (maskC & 134217728) !== 0,
is_clean_count_setting_supported: (maskC & 1073741824) !== 0,
is_corner_clean_mode_supported: (maskC & 2147483648) !== 0,
// Group D
is_two_key_real_time_video_supported: extractNibbleBit(hexStr, 32),
is_two_key_rtv_in_charging_supported: extractNibbleBit(hexStr, 33),
is_dirty_replenish_clean_supported: extractNibbleBit(hexStr, 34),
is_auto_delivery_field_in_global_status_supported: extractNibbleBit(hexStr, 35),
is_avoid_collision_mode_supported: extractNibbleBit(hexStr, 36),
is_voice_control_supported: extractNibbleBit(hexStr, 37),
is_new_endpoint_supported: extractNibbleBit(hexStr, 38),
is_pumping_water_supported: extractNibbleBit(hexStr, 39),
is_corner_mop_stretch_supported: extractNibbleBit(hexStr, 40),
is_hot_wash_towel_supported: extractNibbleBit(hexStr, 41),
is_floor_dir_clean_any_time_supported: extractNibbleBit(hexStr, 42),
is_pet_supplies_deep_clean_supported: extractNibbleBit(hexStr, 43),
is_mop_shake_water_max_supported: extractNibbleBit(hexStr, 45),
is_exact_custom_mode_supported: extractNibbleBit(hexStr, 47),
is_video_patrol_supported: extractNibbleBit(hexStr, 48),
is_carpet_custom_clean_supported: extractNibbleBit(hexStr, 49),
is_pet_snapshot_supported: extractNibbleBit(hexStr, 50),
is_custom_clean_mode_count_supported: extractNibbleBit(hexStr, 51),
is_new_ai_recognition_supported: extractNibbleBit(hexStr, 52),
is_auto_collection_2_supported: extractNibbleBit(hexStr, 53),
is_right_brush_stretch_supported: extractNibbleBit(hexStr, 54),
is_smart_clean_mode_set_supported: extractNibbleBit(hexStr, 55),
is_dirty_object_detect_supported: extractNibbleBit(hexStr, 56),
is_no_need_carpet_press_set_supported: extractNibbleBit(hexStr, 57),
is_voice_control_led_supported: extractNibbleBit(hexStr, 58),
is_water_leak_check_supported: extractNibbleBit(hexStr, 60),
is_min_battery_15_to_clean_task_supported: extractNibbleBit(hexStr, 62),
is_gap_deep_clean_supported: extractNibbleBit(hexStr, 63),
is_object_detect_check_supported: extractNibbleBit(hexStr, 64),
is_identify_room_supported: extractNibbleBit(hexStr, 66),
is_matter_supported: extractNibbleBit(hexStr, 67),
is_workday_holiday_supported: extractNibbleBit(hexStr, 69),
is_clean_direct_status_supported: extractNibbleBit(hexStr, 70),
is_map_eraser_supported: extractNibbleBit(hexStr, 71),
is_optimize_battery_supported: extractNibbleBit(hexStr, 72),
is_activate_video_charging_and_standby_supported: extractNibbleBit(hexStr, 73),
is_carpet_long_haired_supported: extractNibbleBit(hexStr, 75),
is_clean_history_time_line_supported: extractNibbleBit(hexStr, 76),
is_max_zone_opened_supported: extractNibbleBit(hexStr, 77),
is_exhibition_function_supported: extractNibbleBit(hexStr, 78),
is_lds_lifting_supported: extractNibbleBit(hexStr, 79),
is_auto_tear_down_mop_supported: extractNibbleBit(hexStr, 80),
is_small_side_mop_supported: extractNibbleBit(hexStr, 81),
is_support_side_brush_up_down_supported: extractNibbleBit(hexStr, 82),
is_dry_interval_timer_supported: extractNibbleBit(hexStr, 83),
is_uvc_sterilize_supported: extractNibbleBit(hexStr, 84),
is_midway_back_to_dock_supported: extractNibbleBit(hexStr, 85),
is_support_main_brush_up_down_supported: extractNibbleBit(hexStr, 86),
is_egg_dance_mode_supported: extractNibbleBit(hexStr, 87),
is_mechanical_arm_mode_supported: extractNibbleBit(hexStr, 89),
is_tidyup_zones_supported: extractNibbleBit(hexStr, 89),
is_clean_time_line_supported: extractNibbleBit(hexStr, 91),
is_clean_then_mop_mode_supported: extractNibbleBit(hexStr, 93),
is_type_identify_supported: extractNibbleBit(hexStr, 94),
is_support_get_particular_status_supported: extractNibbleBit(hexStr, 96),
is_three_d_mapping_inner_test_supported: extractNibbleBit(hexStr, 97),
is_sync_server_name_supported: extractNibbleBit(hexStr, 98),
is_should_show_arm_over_load_supported: extractNibbleBit(hexStr, 99),
is_collect_dust_count_show_supported: extractNibbleBit(hexStr, 100),
is_support_api_app_stop_grasp_supported: extractNibbleBit(hexStr, 101),
is_ctm_with_repeat_supported: extractNibbleBit(hexStr, 102),
is_side_brush_lift_carpet_supported: extractNibbleBit(hexStr, 104),
is_detect_wire_carpet_supported: extractNibbleBit(hexStr, 105),
is_water_slide_mode_supported: extractNibbleBit(hexStr, 106),
is_soak_and_wash_supported: extractNibbleBit(hexStr, 107),
is_clean_efficiency_supported: extractNibbleBit(hexStr, 108),
is_back_wash_new_smart_supported: extractNibbleBit(hexStr, 109),
is_dual_band_wi_fi_supported: extractNibbleBit(hexStr, 110),
is_program_mode_supported: extractNibbleBit(hexStr, 111),
is_clean_fluid_delivery_supported: extractNibbleBit(hexStr, 112),
is_carpet_long_haired_ex_supported: extractNibbleBit(hexStr, 113),
is_over_sea_ctm_supported: extractNibbleBit(hexStr, 114),
is_full_duples_switch_supported: extractNibbleBit(hexStr, 115),
is_low_area_access_supported: extractNibbleBit(hexStr, 116),
is_follow_low_obs_supported: extractNibbleBit(hexStr, 117),
is_two_gears_no_collision_supported: extractNibbleBit(hexStr, 118),
is_carpet_shape_type_supported: extractNibbleBit(hexStr, 119),
is_sr_map_supported: extractNibbleBit(hexStr, 120),
// Groups E, F, G — always false (require data not available to this decoder)
is_led_status_switch_supported: false,
is_multi_floor_supported: false,
is_support_fetch_timer_summary: false,
is_order_clean_supported: false,
is_analysis_supported: false,
is_remote_supported: false,
is_support_voice_control_debug: false,
is_mop_forbidden_supported: false,
is_soft_clean_mode_supported: false,
is_custom_mode_supported: false,
is_support_custom_carpet: false,
is_show_general_obstacle_supported: false,
is_show_obstacle_photo_supported: false,
is_rubber_brush_carpet_supported: false,
is_carpet_pressure_use_origin_paras_supported: false,
is_support_mop_back_pwm_set: false,
is_collect_dust_mode_supported: false,
is_support_water_mode: false,
is_pure_clean_mop_supported: false,
is_new_remote_view_supported: false,
is_max_plus_mode_supported: false,
is_none_pure_clean_mop_with_max_plus: false,
is_clean_route_setting_supported: false,
is_mop_shake_module_supported: false,
is_customized_clean_supported: false,
// Raw diagnostic fields
newFeatureInfo: featureInt,
newFeatureInfoStr: hexStr,
featureInfo: [],
};
}
//# sourceMappingURL=featureSetDecoder.js.map