aml_audio_hal: Add more hal tests [1/1]

PD#TV-17788

Problem:
Audio HAL added BYPASS option

Solution:
Added BYPASS option in digital_mode setting
test code.

Also added a generic hal_param test code
to send audio HAL set_param kvpairs for
testing purpose.

Verify:
Verified on u212 with "digital_mode 6" and
audio_client_test_ac3 to get MS12 passthrough
output on AVR.

Change-Id: Ifde21626623e93a5b9373af71d12fb50986470fc
diff --git a/Makefile b/Makefile
index 7851c34..e3bc5eb 100644
--- a/Makefile
+++ b/Makefile
@@ -17,6 +17,7 @@
 TEST_DIGITAL_MODE_OBJS=src/digital_mode.o
 TEST_ARC_TEST_OBJS=src/test_arc.o
 TEST_START_ARC_OBJS=src/start_arc.o
+TEST_HAL_PARAM_OBJS=src/hal_param.o
 
 PROTOC=$(HOST_DIR)/bin/protoc
 PROTOC_INC=$(HOST_DIR)/include
@@ -41,7 +42,7 @@
 %.o: %.c
 	$(CC) -c $(CFLAGS) -o $@ $<
 
-all: audio_server libaudio_client.so audio_client_test audio_client_test_ac3 halplay dap_setting speaker_delay digital_mode test_arc start_arc
+all: audio_server libaudio_client.so audio_client_test audio_client_test_ac3 halplay dap_setting speaker_delay digital_mode test_arc start_arc hal_param
 
 audio_server: $(SERVER_OBJS)
 	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
@@ -73,6 +74,9 @@
 start_arc: $(TEST_START_ARC_OBJS)
 	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
 
+hal_param: $(TEST_HAL_PARAM_OBJS) libaudio_client.so
+	$(CC) $(CFLAGS) $(LDFLAGS) -o $@ $^
+
 .PHONY: install
 install:
 	install -m 755 -D audio_server -t $(TARGET_DIR)/usr/bin/
@@ -84,6 +88,7 @@
 	install -m 755 -D digital_mode $(TARGET_DIR)/usr/bin/
 	install -m 755 -D test_arc $(TARGET_DIR)/usr/bin/
 	install -m 755 -D start_arc $(TARGET_DIR)/usr/bin/
+	install -m 755 -D hal_param $(TARGET_DIR)/usr/bin/
 	install -m 644 -D libaudio_client.so -t $(TARGET_DIR)/usr/lib/
 	install -m 644 -D libaudio_client.so -t $(STAGING_DIR)/usr/lib/
 	install -m 644 -D include/audio_if_client.h -t $(STAGING_DIR)/usr/include
@@ -103,6 +108,7 @@
 	rm -f halplay
 	rm -f test_arc
 	rm -f start_arc
+	rm -f hal_param
 	rm -rf $(STAGING_DIR)/usr/include/hardware
 	rm -rf $(STAGING_DIR)/usr/include/system
 	rm -f libaudio_client.so
@@ -114,6 +120,7 @@
 	rm -f $(TARGET_DIR)/usr/bin/digital_mode
 	rm -f $(TARGET_DIR)/usr/bin/test_arc
 	rm -f $(TARGET_DIR)/usr/bin/start_arc
+	rm -f $(TARGET_DIR)/usr/bin/hal_param
 	rm -f $(TARGET_DIR)/usr/lib/libaudio_client.so
 	rm -f $(STAGING_DIR)/usr/lib/libaudio_client.so
 	rm -f $(STAGING_DIR)/usr/include/audio_if_client.h
diff --git a/src/digital_mode.c b/src/digital_mode.c
index aac594a..dc7dea6 100644
--- a/src/digital_mode.c
+++ b/src/digital_mode.c
@@ -2,9 +2,10 @@
 #include <stdlib.h>
 #include <audio_if.h>
 
-#define DIGITAL_MODE_PCM  0
-#define DIGITAL_MODE_DD   4
-#define DIGITAL_MODE_AUTO 5
+#define DIGITAL_MODE_PCM    0
+#define DIGITAL_MODE_DD     4
+#define DIGITAL_MODE_AUTO   5
+#define DIGITAL_MODE_BYPASS 6
 
 #define DIGITAL_MODE_CMD "hdmi_format="
 
@@ -22,7 +23,8 @@
     mode = atoi(argv[1]);
     if ((mode != DIGITAL_MODE_PCM) &&
         (mode != DIGITAL_MODE_DD) &&
-        (mode != DIGITAL_MODE_AUTO)) {
+        (mode != DIGITAL_MODE_AUTO) &&
+        (mode != DIGITAL_MODE_BYPASS)) {
         printf("Invalid mode\n");
         return -2;
     }
diff --git a/src/hal_param.c b/src/hal_param.c
new file mode 100644
index 0000000..04edbb1
--- /dev/null
+++ b/src/hal_param.c
@@ -0,0 +1,34 @@
+#include <stdio.h>
+#include <audio_if.h>
+
+int main(int argc, char **argv)
+{
+    audio_hw_device_t *device;
+    int ret = audio_hw_load_interface(&device);
+
+    if (argc < 2) {
+        printf("Usage: hal_param <param string (kvpair)>\n");
+        return -1;
+    }
+
+    if (ret) {
+        fprintf(stderr, "audio_hw_load_interface failed: %d\n", ret);
+        return ret;
+    }
+
+    int inited = device->init_check(device);
+    if (inited) {
+        printf("device not inited, quit\n");
+        audio_hw_unload_interface(device);
+        return -1;
+    }
+
+    ret = device->set_parameters(device, argv[1]);
+
+    audio_hw_unload_interface(device);
+
+    printf("Parameters sent to Audio HAL.\n");
+
+    return ret;
+}
+