diff mbox

separation of ca_info and application_info in dst_test

Message ID 6a76f88145aeefe3cd6422b2ed817edb.squirrel@mail.kurelid.se (mailing list archive)
State Not Applicable
Headers show

Commit Message

Henrik Kurelid Jan. 20, 2009, 8:45 a.m. UTC
Please review and comment.
---
This patch fixes an issue with with dst_test which uses an incorrect tag for retrieving application_info from the CAM.
It also adds support for retrieving ca_info from the CAM.

Signed-off-by: Henrik Kurelid <henrik@kurelid.se>

--
To unsubscribe from this list: send the line "unsubscribe linux-media" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
diff mbox

Patch

diff -r e91138b9bdaa -r 46fcaf244831 util/dst-utils/dst_test.c
--- a/util/dst-utils/dst_test.c	Wed Jan 14 20:46:09 2009 +0100
+++ b/util/dst-utils/dst_test.c	Tue Jan 20 09:40:01 2009 +0100
@@ -3,6 +3,7 @@ 
 	an implementation for the High Level Common Interface

 	Copyright (C) 2004, 2005 Manu Abraham <abraham.manu@gmail.com>
+	Copyright (C) 2009 Henrik Kurelid <henrik@kurelid.se>

 	This program is free software; you can redistribute it and/or modify
 	it under the terms of the GNU Lesser General Public License as
@@ -140,9 +141,10 @@ 
 	return 0;
 }

-static int dst_get_app_info(int cafd, struct ca_msg *msg)
+static int dst_get_ca_info(int cafd, struct ca_msg *msg)
 {
 	uint32_t tag = 0;
+	int pos;

 	/*	Enquire		*/
 	tag = TAG_CA_INFO_ENQUIRY;
@@ -159,10 +161,45 @@ 
 	}

 	/*	Process		*/
+	printf("%s: ================================ CI Module CA Info ======================================\n", __FUNCTION__);
+	printf("%s: Supported CA System IDs (%d):\n", __FUNCTION__, msg->msg[3] / 2);
+	pos = 4;
+	while (pos < msg->msg[3] + 4) {
+		printf("%s: 0x%04X\n", __FUNCTION__, (msg->msg[pos] << 8) + msg->msg[pos + 1]);
+		pos += 2;
+	}
+	printf("%s: ==================================================================================================\n", __FUNCTION__);
+
+	return 0;
+}
+
+static int dst_get_app_info(int cafd, struct ca_msg *msg)
+{
+	uint32_t tag = 0;
+	int i;
+
+	/*	Enquire		*/
+	tag = TAG_APP_INFO_ENQUIRY;
+	if ((dst_comms(cafd, tag, CA_SEND_MSG, msg)) < 0) {
+		printf("%s: Dst communication failed\n", __FUNCTION__);
+		return -1;
+	}
+
+	/*	Receive		*/
+	tag = TAG_APP_INFO;
+	if ((dst_comms(cafd, tag, CA_GET_MSG, msg)) < 0) {
+		printf("%s: Dst communication failed\n", __FUNCTION__);
+		return -1;
+	}
+
+	/*	Process		*/
 	printf("%s: ================================ CI Module Application Info ======================================\n", __FUNCTION__);
-	printf("%s: Application Type=[%d], Application Vendor=[%d], Vendor Code=[%d]\n%s: Application info=[%s]\n",
-			__FUNCTION__, msg->msg[7], (msg->msg[8] << 8) | msg->msg[9], (msg->msg[10] << 8) | msg->msg[11], __FUNCTION__,
-			((char *) (&msg->msg[12])));
+	printf("%s: Application Type=[%d], Application Vendor=[0x%04X], Vendor Code=[0x%04X]\n",
+	       __FUNCTION__, msg->msg[4], (msg->msg[5] << 8) | msg->msg[6], (msg->msg[7] << 8) | msg->msg[8]);
+	printf("%s: Application info=[", __FUNCTION__);
+	for (i = 0; i < msg->msg[9]; i++)
+		printf("%c", (char)msg->msg[10 + i]);
+	printf("]\n");
 	printf("%s: ==================================================================================================\n", __FUNCTION__);

 	return 0;
@@ -195,6 +232,7 @@ 
 				"\t -g get descr\n"
 				"\t -s set_descr\n"
 				"\t -a app_info\n"
+				"\t -b ca_info\n"
 				"\t -t session test\n";


@@ -216,7 +254,7 @@ 
 			return -1;
 		}

-		switch (getopt(argc, argv, "cirpgsat")) {
+		switch (getopt(argc, argv, "cirpgsabt")) {
 			case 'c':
 				printf("%s: Capabilities\n", __FUNCTION__);
 				dst_get_caps(cafd, caps);
@@ -245,6 +283,10 @@ 
 				printf("%s: App Info\n", __FUNCTION__);
 				dst_get_app_info(cafd, msg);
 				break;
+			case 'b':
+				printf("%s: CA Info\n", __FUNCTION__);
+				dst_get_ca_info(cafd, msg);
+				break;
 			case 't':
 				printf("%s: Session test\n", __FUNCTION__);
 				dst_session_test(cafd, msg);