值转换技巧:FuncValueConverter<TIn,TOut>

引言


Avalonia UI 中有一个有趣的 FuncValueConverter,它允许我们直接在代码后台简单地声明一个值转换器,而不需要额外写一个类。它地源代码可以在 GitHub 上看到。我们可以仿照这个实现一个类似的值转换器。

FuncValueConverter<TIn,TOut>

public sealed class FuncValueConverter<TIn, TOut> : IValueConverter
{
    private readonly Func<TIn, TOut> _convert;

    public FuncValueConverter(Func<TIn, TOut> convert)
    {
        _convert = convert;
    }

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        if (value is TIn t)
        {
            return _convert(t);
        }

        return Binding.DoNothing;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return Binding.DoNothing;
    }
}

对于 Convert 方法的实现,这里还有一种更好的方式。我们都知道,在 XAML 书写的很多资源,WPF 都会在底层帮我们进行合适的类型转换。比如我们将 "1" 字符串赋值给一个 int 类型的属性,WPF 会自动将其转换成 1;我们将 "Visible" 字符串赋值给一个 Visibility 枚举类型的属性,WPF 也会进行相应的转换。如果我们不提供这个功能,那么我们写的这个 FuncValueConverter 就会变得不够灵活。因此,我们可以借助 .NET 原生的 TypeDescriptor 类来实现这个功能。

public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
    if (value is not TIn t)
    {
        if (value is null)
        {
            return default(TOut);
        }

        if (TypeDescriptor.GetConverter(typeof(TIn)).CanConvertFrom(value.GetType()))
        {
            t = (TIn)TypeDescriptor.GetConverter(typeof(TIn)).ConvertFrom(value);
        }
        else
        {
            return Binding.DoNothing;
        }
    }

    return _convert(t);
}

这样我们就可以声明并使用了。我们需要将它声明为静态属性:

public class MainViewModel : ViewModelBase
{
    public static FuncValueConverter<string, int> StringToIntConverter { get; } = new(s => int.Parse(s));
}

 然后我们就可以在 XAML 中这样使用:

<StackPanel>
    <TextBox x:Name="textBox" Text="123"/>
    <TextBlock Text="{Binding ElementName=textBox, Path=Text, Converter={x:Static local:MainViewModel.StringToIntConverter}}"/>
</StackPanel>
/dts-v1/; /memreserve/ 0x0000000000000000 0x0000000000010000; #include "hi309a_uart0_common.dtsi" #include "hi309a_common_drivers.dtsi" / { #address-cells = <0x02>; #size-cells = <0x02>; interrupt-parent = <0x01>; udrv_version = "uDriver_V100R024C00B006"; model = "Hisilicon PhosphorHi1230 EMU"; compatible = "hisilicon,hisi-hi1230"; eth_dev@0 { compatible = "simple-bus"; #address-cells = <0x02>; #size-cells = <0x02>; mac_0: mac@0 { id = <0x10>; port_mode = <0x03>; mac_port_speed = <0x02>; sds_speed = <0x00>; neg_mode = <0x01>; mtu = <1500>; }; poe_0: poe@0 { vcpu_id = <0x00>; add_pkt_grp = <0x00>; grp_cfg = <0x01 0x00 0x400>; }; ppe_0: ppe@0 { cport_id = <0x10>; dir_mode_en; fw_tnl = <0x00 0x00 0x00 0x00 0x00>; pool = <0x00 0xc0 0x40 0x02 0x00>; set_promisc = <0x00 0x00>; fw1_flow_num = <0x02>; fw1_flow0_key = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81000000 0x00 0x00 0x00>; fw1_flow0_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow0_ad = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow0_update_dmac = <0x01 0x00>; fw1_flow1_key = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81000000 0x00 0x00 0x00>; fw1_flow1_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow1_ad = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow1_update_dmac = <0x00 0x00>; }; ethernet@0 { compatible = "hi1230_eth,dev"; phy-handle = <&mdio1_phy5>; mac = <&mac_0>; poe = <&poe_0>; ppe = <&ppe_0>; ifnet-name = "eth1"; flowctrl_rx_pause_en = <0x01>; }; mac_1: mac@1 { id = <0x11>; port_mode = <0x03>; mac_port_speed = <0x02>; sds_speed = <0x00>; neg_mode = <0x01>; }; poe_1: poe@1 { vcpu_id = <0x00>; add_pkt_grp = <0x01>; grp_cfg = <0x01 0x00 0x400>; }; ppe_1: ppe@1 { cport_id = <0x11>; dir_mode_en; fw_tnl = <0x01 0x01 0x08 0x00 0x00>; pool = <0x01 0xc0 0x40 0x02 0x00>; set_promisc = <0x00 0x00>; fw1_flow_num = <0x02>; fw1_flow0_key = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81100000 0x00 0x00 0x00>; fw1_flow0_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow0_ad = <0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow0_update_dmac = <0x01 0x00>; fw1_flow1_key = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81100000 0x00 0x00 0x00>; fw1_flow1_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow1_ad = <0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow1_update_dmac = <0x00 0x00>; }; ethernet@1 { compatible = "hi1230_eth,dev"; phy-handle = <&mdio1_phy6>; mac = <&mac_1>; poe = <&poe_1>; ppe = <&ppe_1>; ifnet-name = "eth2"; flowctrl_rx_pause_en = <0x01>; }; mac_2: mac@2 { id = <0x12>; port_mode = <0x03>; mac_port_speed = <0x02>; sds_speed = <0x00>; neg_mode = <0x01>; }; poe_2: poe@2 { vcpu_id = <0x00>; add_pkt_grp = <0x02>; grp_cfg = <0x01 0x00 0x400>; }; ppe_2: ppe@2 { cport_id = <0x12>; dir_mode_en; fw_tnl = <0x02 0x02 0x10 0x00 0x00>; pool = <0x02 0xc0 0x40 0x02 0x00>; set_promisc = <0x00 0x00>; fw1_flow_num = <0x02>; fw1_flow0_key = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81200000 0x00 0x00 0x00>; fw1_flow0_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow0_ad = <0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow0_update_dmac = <0x01 0x00>; fw1_flow1_key = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81200000 0x00 0x00 0x00>; fw1_flow1_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow1_ad = <0x00 0x00 0x00 0x02 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow1_update_dmac = <0x00 0x00>; }; ethernet@2 { compatible = "hi1230_eth,dev"; phy-handle = <&mdio1_phy7>; mac = <&mac_2>; poe = <&poe_2>; ppe = <&ppe_2>; ifnet-name = "eth3"; flowctrl_rx_pause_en = <0x01>; }; mac_3: mac@3 { id = <0x13>; port_mode = <0x03>; mac_port_speed = <0x02>; sds_speed = <0x00>; neg_mode = <0x01>; }; poe_3: poe@3 { vcpu_id = <0x00>; add_pkt_grp = <0x03>; grp_cfg = <0x01 0x00 0x400>; }; ppe_3: ppe@3 { cport_id = <0x13>; dir_mode_en; fw_tnl = <0x03 0x03 0x18 0x00 0x00>; pool = <0x03 0xc0 0x10 0x02 0x01>; set_promisc = <0x00 0x00>; fw1_flow_num = <0x02>; fw1_flow0_key = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81300000 0x00 0x00 0x00>; fw1_flow0_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow0_ad = <0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow0_update_dmac = <0x01 0x00>; fw1_flow1_key = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81300000 0x00 0x00 0x00>; fw1_flow1_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow1_ad = <0x00 0x00 0x00 0x03 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow1_update_dmac = <0x00 0x00>; }; ethernet@3 { compatible = "hi1230_eth,dev"; phy-handle = <&mdio1_phy8>; mac = <&mac_3>; poe = <&poe_3>; ppe = <&ppe_3>; ifnet-name = "eth4"; flowctrl_rx_pause_en = <0x01>; }; mac_4: mac@4 { id = <0x14>; port_mode = <0x03>; mac_port_speed = <0x02>; sds_speed = <0x00>; neg_mode = <0x01>; }; poe_4: poe@4 { vcpu_id = <0x00>; add_pkt_grp = <0x04>; grp_cfg = <0x01 0x00 0x400>; }; ppe_4: ppe@4 { cport_id = <0x14>; dir_mode_en; fw_tnl = <0x04 0x04 0x20 0x00 0x00>; pool = <0x04 0xc0 0x40 0x02 0x00>; set_promisc = <0x00 0x00>; fw1_flow_num = <0x02>; fw1_flow0_key = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81400000 0x00 0x00 0x00>; fw1_flow0_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow0_ad = <0x00 0x00 0x00 0x04 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow0_update_dmac = <0x01 0x00>; fw1_flow1_key = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81400000 0x00 0x00 0x00>; fw1_flow1_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow1_ad = <0x00 0x00 0x00 0x04 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow1_update_dmac = <0x00 0x00>; }; ethernet@4 { compatible = "hi1230_eth,dev"; phy-handle = <&mdio1_phy1>; mac = <&mac_4>; poe = <&poe_4>; ppe = <&ppe_4>; ifnet-name = "eth5"; flowctrl_rx_pause_en = <0x01>; }; mac_5: mac@5 { id = <0x15>; port_mode = <0x03>; mac_port_speed = <0x02>; sds_speed = <0x00>; neg_mode = <0x01>; }; poe_5: poe@5 { vcpu_id = <0x00>; add_pkt_grp = <0x05>; grp_cfg = <0x01 0x00 0x400>; }; ppe_5: ppe@5 { cport_id = <0x15>; dir_mode_en; fw_tnl = <0x05 0x05 0x28 0x00 0x00>; pool = <0x05 0xc0 0x40 0x02 0x00>; set_promisc = <0x00 0x00>; fw1_flow_num = <0x02>; fw1_flow0_key = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81500000 0x00 0x00 0x00>; fw1_flow0_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow0_ad = <0x00 0x00 0x00 0x05 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow0_update_dmac = <0x01 0x00>; fw1_flow1_key = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81500000 0x00 0x00 0x00>; fw1_flow1_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow1_ad = <0x00 0x00 0x00 0x05 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow1_update_dmac = <0x00 0x00>; }; ethernet@5 { compatible = "hi1230_eth,dev"; phy-handle = <&mdio1_phy2>; mac = <&mac_5>; poe = <&poe_5>; ppe = <&ppe_5>; ifnet-name = "eth6"; flowctrl_rx_pause_en = <0x01>; }; mac_6: mac@6 { id = <0x16>; port_mode = <0x03>; mac_port_speed = <0x02>; sds_speed = <0x00>; neg_mode = <0x01>; }; poe_6: poe@6 { vcpu_id = <0x00>; add_pkt_grp = <0x06>; grp_cfg = <0x01 0x00 0x400>; }; ppe_6: ppe@6 { cport_id = <0x16>; dir_mode_en; fw_tnl = <0x06 0x06 0x30 0x00 0x00>; pool = <0x06 0xc0 0x40 0x02 0x00>; set_promisc = <0x00 0x00>; fw1_flow_num = <0x02>; fw1_flow0_key = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81600000 0x00 0x00 0x00>; fw1_flow0_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow0_ad = <0x00 0x00 0x00 0x06 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow0_update_dmac = <0x01 0x00>; fw1_flow1_key = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81600000 0x00 0x00 0x00>; fw1_flow1_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow1_ad = <0x00 0x00 0x00 0x06 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow1_update_dmac = <0x00 0x00>; }; ethernet@6 { compatible = "hi1230_eth,dev"; phy-handle = <&mdio1_phy3>; mac = <&mac_6>; poe = <&poe_6>; ppe = <&ppe_6>; ifnet-name = "eth7"; flowctrl_rx_pause_en = <0x01>; }; mac_7: mac@7 { id = <0x17>; port_mode = <0x03>; mac_port_speed = <0x02>; sds_speed = <0x00>; neg_mode = <0x01>; }; poe_7: poe@7 { vcpu_id = <0x00>; add_pkt_grp = <0x07>; grp_cfg = <0x01 0x00 0x400>; }; ppe_7: ppe@7 { cport_id = <0x17>; dir_mode_en; fw_tnl = <0x07 0x07 0x38 0x00 0x00>; pool = <0x07 0xc0 0x40 0x02 0x00>; set_promisc = <0x00 0x00>; fw1_flow_num = <0x02>; fw1_flow0_key = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81700000 0x00 0x00 0x00>; fw1_flow0_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow0_ad = <0x00 0x00 0x00 0x07 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow0_update_dmac = <0x01 0x00>; fw1_flow1_key = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81700000 0x00 0x00 0x00>; fw1_flow1_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow1_ad = <0x00 0x00 0x00 0x07 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow1_update_dmac = <0x00 0x00>; }; ethernet@7 { compatible = "hi1230_eth,dev"; phy-handle = <&mdio1_phy4>; mac = <&mac_7>; poe = <&poe_7>; ppe = <&ppe_7>; ifnet-name = "eth8"; flowctrl_rx_pause_en = <0x01>; }; mac_8: mac@8 { id = <0x08>; port_mode = <0x02>; mac_port_speed = <0x02>; sds_speed = <0x00>; neg_mode = <0x01>; }; poe_8: poe@8 { vcpu_id = <0x00>; add_pkt_grp = <0x08>; grp_cfg = <0x01 0x00 0x400>; }; ppe_8: ppe@8 { cport_id = <0x08>; dir_mode_en; fw_tnl = <0x08 0x08 0x40 0x00 0x00>; pool = <0x08 0xc0 0x40 0x02 0x00>; set_promisc = <0x00 0x00>; fw1_flow_num = <0x02>; fw1_flow0_key = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x80800000 0x00 0x00 0x00>; fw1_flow0_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow0_ad = <0x00 0x00 0x00 0x08 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow0_update_dmac = <0x01 0x00>; fw1_flow1_key = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x80800000 0x00 0x00 0x00>; fw1_flow1_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow1_ad = <0x00 0x00 0x00 0x08 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow1_update_dmac = <0x00 0x00>; }; ethernet@8 { compatible = "hi1230_eth,dev"; phy-handle = <&mdio0_phy2>; mac = <&mac_8>; poe = <&poe_8>; ppe = <&ppe_8>; ifnet-name = "eth9"; flowctrl_rx_pause_en = <0x01>; }; mac_9: mac@9 { id = <0x0c>; port_mode = <0x02>; mac_port_speed = <0x02>; sds_speed = <0x00>; neg_mode = <0x01>; }; poe_9: poe@9 { vcpu_id = <0x00>; add_pkt_grp = <0x09>; grp_cfg = <0x01 0x00 0x400>; }; ppe_9: ppe@9 { cport_id = <0x0c>; dir_mode_en; fw_tnl = <0x09 0x09 0x48 0x00 0x00>; pool = <0x09 0xc0 0x40 0x02 0x00>; set_promisc = <0x00 0x00>; fw1_flow_num = <0x02>; fw1_flow0_key = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x80c00000 0x00 0x00 0x00>; fw1_flow0_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow0_ad = <0x00 0x00 0x00 0x09 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow0_update_dmac = <0x01 0x00>; fw1_flow1_key = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x80c00000 0x00 0x00 0x00>; fw1_flow1_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow1_ad = <0x00 0x00 0x00 0x09 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow1_update_dmac = <0x00 0x00>; }; ethernet@9 { compatible = "hi1230_eth,dev"; phy-handle = <&mdio0_phy3>; mac = <&mac_9>; poe = <&poe_9>; ppe = <&ppe_9>; ifnet-name = "eth10"; flowctrl_rx_pause_en = <0x01>; }; mac_10: mac@10 { id = <0x18>; port_mode = <0x05>; mac_port_speed = <0x06>; sds_speed = <0x06>; neg_mode = <0x00>; }; poe_10: poe@10 { vcpu_id = <0x00>; add_pkt_grp = <0x0a>; grp_cfg = <0x01 0x00 0x400>; }; ppe_10: ppe@10 { cport_id = <0x18>; dir_mode_en; fw_tnl = <0x0a 0x0a 0x50 0x00 0x00>; pool = <0x0a 0xc0 0x40 0x02 0x00>; set_promisc = <0x00 0x00>; fw1_flow_num = <0x02>; fw1_flow0_key = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81800000 0x00 0x00 0x00>; fw1_flow0_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow0_ad = <0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow0_update_dmac = <0x01 0x00>; fw1_flow1_key = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81800000 0x00 0x00 0x00>; fw1_flow1_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow1_ad = <0x00 0x00 0x00 0x0a 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow1_update_dmac = <0x00 0x00>; }; ethernet@10 { compatible = "hi1230_eth,dev"; mac = <&mac_10>; poe = <&poe_10>; ppe = <&ppe_10>; ifnet-name = "xge1"; flowctrl_rx_pause_en = <0x01>; }; mac_11: mac@11 { id = <0x19>; port_mode = <0x05>; mac_port_speed = <0x06>; sds_speed = <0x06>; neg_mode = <0x00>; }; poe_11: poe@11 { vcpu_id = <0x00>; add_pkt_grp = <0x0b>; grp_cfg = <0x01 0x00 0x400>; }; ppe_11: ppe@11 { cport_id = <0x19>; dir_mode_en; fw_tnl = <0x0b 0x0b 0x58 0x00 0x00>; pool = <0x0b 0xc0 0x40 0x02 0x00>; set_promisc = <0x00 0x00>; fw1_flow_num = <0x02>; fw1_flow0_key = <0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81900000 0x00 0x00 0x00>; fw1_flow0_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow0_ad = <0x00 0x00 0x00 0x0b 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow0_update_dmac = <0x01 0x00>; fw1_flow1_key = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0x81900000 0x00 0x00 0x00>; fw1_flow1_mask = <0xffffffff 0xffff 0x00 0x00 0x00 0x00 0x00 0x00 0x00 0xfff00000 0x00 0x00 0x00>; fw1_flow1_ad = <0x00 0x00 0x00 0x0b 0x00 0x00 0x00 0x01 0x00 0x00 0x00 0x00>; fw1_flow1_update_dmac = <0x00 0x00>; }; ethernet@11 { compatible = "hi1230_eth,dev"; mac = <&mac_11>; poe = <&poe_11>; ppe = <&ppe_11>; ifnet-name = "xge2"; flowctrl_rx_pause_en = <0x01>; }; }; }; 这是我的设备树,请帮我继续分析
08-07
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值