Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c448a8e2 authored by Nick Chalko's avatar Nick Chalko
Browse files

Add builder for <Request Short Audio Descriptor>

Change-Id: I4c276dd66e0e41e0e63ff7e8fda45c6abe5b1f8a
Test: atest FrameworksServicesTests:com.android.server.hdmi.HdmiCecMessageBuilderTest
parent dad7d689
Loading
Loading
Loading
Loading
+20 −0
Original line number Original line Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.server.hdmi;


import java.io.UnsupportedEncodingException;
import java.io.UnsupportedEncodingException;
import java.util.Arrays;
import java.util.Arrays;
import com.android.server.hdmi.Constants.AudioCodec;


/**
/**
 * A helper class to build {@link HdmiCecMessage} from various cec commands.
 * A helper class to build {@link HdmiCecMessage} from various cec commands.
@@ -265,6 +266,25 @@ public class HdmiCecMessageBuilder {
        return buildCommand(src, dest, Constants.MESSAGE_REPORT_ARC_TERMINATED);
        return buildCommand(src, dest, Constants.MESSAGE_REPORT_ARC_TERMINATED);
    }
    }



    /**
     * Build &lt;Request Short Audio Descriptor&gt; command.
     *
     * @param src source address of command
     * @param dest destination address of command
     * @param audioFormats the {@link AudioCodec}s desired
     * @return newly created {@link HdmiCecMessage}
     */
    static HdmiCecMessage buildRequestShortAudioDescriptor(int src, int dest,
            @AudioCodec int[] audioFormats) {
        byte[] params = new byte[Math.min(audioFormats.length,4)] ;
        for (int i = 0; i < params.length ; i++){
            params[i] = (byte) (audioFormats[i] & 0xff);
        }
        return buildCommand(src, dest, Constants.MESSAGE_REQUEST_SHORT_AUDIO_DESCRIPTOR, params);
    }


    /**
    /**
     * Build &lt;Text View On&gt; command.
     * Build &lt;Text View On&gt; command.
     *
     *
+30 −8
Original line number Original line Diff line number Diff line
@@ -15,8 +15,9 @@
 */
 */
package com.android.server.hdmi;
package com.android.server.hdmi;


import static com.android.server.hdmi.Constants.ADDR_BROADCAST;
import static com.android.server.hdmi.Constants.ADDR_AUDIO_SYSTEM;
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1;
import static com.android.server.hdmi.Constants.ADDR_PLAYBACK_1;
import static com.android.server.hdmi.Constants.ADDR_TV;
import static com.google.common.truth.Truth.assertThat;
import static com.google.common.truth.Truth.assertThat;


import android.hardware.hdmi.HdmiDeviceInfo;
import android.hardware.hdmi.HdmiDeviceInfo;
@@ -35,12 +36,33 @@ public class HdmiCecMessageBuilderTest {
        HdmiCecMessage message =
        HdmiCecMessage message =
                HdmiCecMessageBuilder.buildReportPhysicalAddressCommand(
                HdmiCecMessageBuilder.buildReportPhysicalAddressCommand(
                        ADDR_PLAYBACK_1, 0x1234, HdmiDeviceInfo.DEVICE_PLAYBACK);
                        ADDR_PLAYBACK_1, 0x1234, HdmiDeviceInfo.DEVICE_PLAYBACK);
        assertThat(message)
        assertThat(message).isEqualTo(buildMessage("4f:84:12:34:04"));
                .isEqualTo(
    }
                        new HdmiCecMessage(

                                ADDR_PLAYBACK_1,
    @Test
                                ADDR_BROADCAST,
    public void buildRequestShortAudioDescriptor() {
                                Constants.MESSAGE_REPORT_PHYSICAL_ADDRESS,
        HdmiCecMessage message =
                                new byte[] {0x12, 0x34, 0x04}));
                HdmiCecMessageBuilder.buildRequestShortAudioDescriptor(
                        ADDR_TV,
                        ADDR_AUDIO_SYSTEM,
                        new int[] {Constants.AUDIO_CODEC_AAC, Constants.AUDIO_CODEC_LPCM});
        assertThat(message).isEqualTo(buildMessage("05:A4:06:01"));
    }

    /**
     * Build a CEC message from a hex byte string with bytes separated by {@code :}.
     *
     * <p>This format is used by both cec-client and www.cec-o-matic.com
     */
    private static HdmiCecMessage buildMessage(String message) {
        String[] parts = message.split(":");
        int src = Integer.parseInt(parts[0].substring(0, 1), 16);
        int dest = Integer.parseInt(parts[0].substring(1, 2), 16);
        int opcode = Integer.parseInt(parts[1], 16);
        byte[] params = new byte[parts.length - 2];
        for (int i = 0; i < params.length; i++) {
            params[i] = Byte.parseByte(parts[i + 2], 16);
        }
        return new HdmiCecMessage(src, dest, opcode, params);
    }
    }
}
}