Explorar o código

1、新增其他接口;
2、完善测试用例;

scbc.sat2 %!s(int64=5) %!d(string=hai) anos
pai
achega
bffb9e50ad

+ 193 - 5
ScbcCopyKey/ScbcCopyKey/OTA.cpp

@@ -2,7 +2,7 @@
 #include "OTA.h"
 
 ThreadSection g_csTask;
-static _SIACP_ g_Siacp[42] = {
+static _SIACP_ g_Siacp[CMD_SIZE] = {
 	{"EnterFactory", "AA", "10", "01", false, 100, 100},
 	{"LeaveFactory", "AA", "10", "00", false, 100, 100},
 	{"WBInit", "AA", "16", "02", false, 100, 100},//白平衡数据初始化(适用于所有信源)
@@ -48,7 +48,35 @@ static _SIACP_ g_Siacp[42] = {
 	{"CheckCikey", "AA", "EA", "01", true, 100, 100},
 	{"CheckHDCP22", "AA", "E5", "00", false, 100, 100},
 	{"StarWarmUpMode", "AA", "13", "01", false, 100, 100},
-	{"StopWarmUpMode", "AA", "13", "00", false, 100, 100}
+	{"StopWarmUpMode", "AA", "13", "00", false, 100, 100},
+	// 工厂菜单显示;
+	{"ShowFactoryMenu", "AA", "11", "01", false, 100, 100},
+	// 工厂菜单隐藏;
+	{"HideFactoryMenu", "AA", "11", "00", false, 100, 100},
+	// 工厂信息显示内容开;
+	{"ShowFactoryInformation", "AA", "11", "02", false, 100, 100},
+	// 工厂信息显示内容关;
+	{"HideFactoryInformation", "AA", "11", "03", false, 100, 100},
+	// 老化模式开;
+	{"EnterAgingModel", "AA", "13", "01", false, 100, 100},
+	// 老化模式关;
+	{"LeaveAgingModel", "AA", "13", "00", false, 100, 100},
+	// 读取老化时间;
+	{"ReadAgingTime", "AA", "7A", "00", true, 100, 100},
+	// USB 功能检测查询;
+	//{"StopWarmUpMode", "AA", "17", "00", false, 100, 100},
+	// 红色增益;
+	{"SetRedGainRegister", "AA", "40", "", false, 100, 100},
+	// 绿色增益;
+	{"SetGreenGainRegister", "AA", "41", "", false, 100, 100},
+	// 蓝色增益;
+	{"SetBlueGainRegister", "AA", "42", "", false, 100, 100},
+	// 红色偏移;
+	{"SetRedOffsetRegister", "AA", "43", "", false, 100, 100},
+	// 绿色偏移;
+	{"SetGreenOffsetRegister", "AA", "44", "", false, 100, 100},
+	// 蓝色偏移;
+	{"SetBlueOffsetRegister", "AA", "45", "", false, 100, 100},
 };
 
 std::vector<_SIACP_> g_vtSiacp;
@@ -199,7 +227,7 @@ void CSIACP::LoadCommand()
 		SaveCommand(g_Siacp, _T("Siacp.xml"));
 
 		g_vtSiacp.clear();
-		for ( int i = 0; i < 42; i++ )
+		for ( int i = 0; i < CMD_SIZE; i++ )
 		{
 			g_vtSiacp.push_back(g_Siacp[i]);
 		}
@@ -331,7 +359,7 @@ void CSIACP::SaveCommand(std::vector<_SIACP_> &vtSiacp, std::string path)
 	doc.SaveFile(path.c_str());
 }
 
-void CSIACP::SaveCommand(_SIACP_ (&Siacp)[42], std::string path)
+void CSIACP::SaveCommand(_SIACP_ (&Siacp)[CMD_SIZE], std::string path)
 {
 	tinyxml2::XMLDocument doc;
 	//添加申明可以使用如下两行
@@ -343,7 +371,7 @@ void CSIACP::SaveCommand(_SIACP_ (&Siacp)[42], std::string path)
 	root->SetAttribute("desc", "command info");
 	doc.InsertEndChild(root);
 
-	for (int i = 0; i < 42; i++)
+	for (int i = 0; i < CMD_SIZE; i++)
 	{
 		tinyxml2::XMLElement *pItem = doc.NewElement("Item");
 
@@ -1316,6 +1344,13 @@ BOOL CSIACP::SCBC_SetChannel(const byte *pBuffer, const int &nLen)
 	return SendCommand("SetChannel", pBuffer, nLen);
 }
 
+BOOL CSIACP::SCBC_SetChannel(int channel)
+{
+	std::string data;
+	data.append(1, channel & 0xFF);
+	return SendCommand2("SetChannel", data, data.size());
+}
+
 BOOL CSIACP::SCBC_SetWBNormal(std::string data)
 {
 	return SendCommand2("SetWBNormal", data, data.size());
@@ -1594,3 +1629,156 @@ BOOL CSIACP::SCBC_StopWarmUpMode()
 {
 	return SendCommand("StopWarmUpMode");
 }
+
+BOOL CSIACP::SCBC_ShowFactoryMenu()
+{
+	return SendCommand("ShowFactoryMenu");
+}
+
+BOOL CSIACP::SCBC_HideFactoryMenu()
+{
+	return SendCommand("HideFactoryMenu");
+}
+
+BOOL CSIACP::SCBC_ShowFactoryInformation()
+{
+	return SendCommand("ShowFactoryInformation");
+}
+
+BOOL CSIACP::SCBC_HideFactoryInformation()
+{
+	return SendCommand("HideFactoryInformation");
+}
+
+BOOL CSIACP::SCBC_EnterAgingModel()
+{
+	return SendCommand("EnterAgingModel");
+}
+
+BOOL CSIACP::SCBC_LeaveAgingModel()
+{
+	return SendCommand("LeaveAgingModel");
+}
+
+BOOL CSIACP::SCBC_ReadAgingTime(int &min)
+{
+	BOOL bRet = SendCommand("ReadAgingTime");
+	if (bRet)
+	{
+		if (m_vtdata.size() == 0)
+		{
+			//Global::WriteTextLog("%s:%s", __FUNCTION__, "No data return!");
+			//Global::WriteReportLog(1, "Copy Key", "%s:%s", __FUNCTION__, "No data return!");
+			return FALSE;
+		}
+
+		RTN rtn = m_vtdata.at(0);
+		if (rtn.data.size() == 0)
+		{
+			return FALSE;
+		}
+
+		byte bymin = (byte)rtn.data.at(0);
+		byte byhour = (byte)rtn.data.at(1);
+		
+		min = bymin + 60*byhour;
+	}
+
+	return bRet;
+}
+
+BOOL CSIACP::SCBC_SetRedGainRegister(int value)
+{
+	std::string data;
+	if (value > 0xFF)
+	{
+		data.append(1, (value >> 8) & 0xFF);
+		data.append(1, value & 0xFF);
+	}
+	else
+	{
+		data.append(1, value & 0xFF);
+	}
+
+	return SendCommand2("SetRedGainRegister", data, data.size());
+}
+
+BOOL CSIACP::SCBC_SetGreenGainRegister(int value)
+{
+	std::string data;
+	if (value > 0xFF)
+	{
+		data.append(1, (value >> 8) & 0xFF);
+		data.append(1, value & 0xFF);
+	}
+	else
+	{
+		data.append(1, value & 0xFF);
+	}
+
+	return SendCommand2("SetGreenGainRegister", data, data.size());
+}
+
+BOOL CSIACP::SCBC_SetBlueGainRegister(int value)
+{
+	std::string data;
+	if (value > 0xFF)
+	{
+		data.append(1, (value >> 8) & 0xFF);
+		data.append(1, value & 0xFF);
+	}
+	else
+	{
+		data.append(1, value & 0xFF);
+	}
+
+	return SendCommand2("SetBlueGainRegister", data, data.size());
+}
+
+BOOL CSIACP::SCBC_SetRedOffsetRegister(int value)
+{
+	std::string data;
+	if (value > 0xFF)
+	{
+		data.append(1, (value >> 8) & 0xFF);
+		data.append(1, value & 0xFF);
+	}
+	else
+	{
+		data.append(1, value & 0xFF);
+	}
+
+	return SendCommand2("SetRedOffsetRegister", data, data.size());
+}
+
+BOOL CSIACP::SCBC_SetGreenOffsetRegister(int value)
+{
+	std::string data;
+	if (value > 0xFF)
+	{
+		data.append(1, (value >> 8) & 0xFF);
+		data.append(1, value & 0xFF);
+	}
+	else
+	{
+		data.append(1, value & 0xFF);
+	}
+
+	return SendCommand2("SetGreenOffsetRegister", data, data.size());
+}
+
+BOOL CSIACP::SCBC_SetBlueOffsetRegister(int value)
+{
+	std::string data;
+	if (value > 0xFF)
+	{
+		data.append(1, (value >> 8) & 0xFF);
+		data.append(1, value & 0xFF);
+	}
+	else
+	{
+		data.append(1, value & 0xFF);
+	}
+
+	return SendCommand2("SetBlueOffsetRegister", data, data.size());
+}

+ 22 - 2
ScbcCopyKey/ScbcCopyKey/OTA.h

@@ -4,6 +4,7 @@
 #include "SynSerial.h"
 #include <list>
 
+#define CMD_SIZE 55
 #define BUFFER_LEN 10240
 #pragma once
 
@@ -83,7 +84,7 @@ protected:
 public:
 	void LoadCommand();
 	void SaveCommand(std::vector<_SIACP_> &vtSiacp, std::string path);
-	void SaveCommand(_SIACP_ (&Siacp)[42], std::string path);
+	void SaveCommand(_SIACP_ (&Siacp)[CMD_SIZE], std::string path);
 	BOOL OpenComm(int nSerialPort, DWORD dwBaudrate);
 	void CloseComm();
 	BOOL IsOpen() {
@@ -154,6 +155,7 @@ public:
 	BOOL SCBC_SetShopLanguage(const byte* pBuffer, const int& nLen);
 	BOOL SCBC_SetChannel(std::string channel, BOOL bHasSpace = TRUE);
 	BOOL SCBC_SetChannel(const byte* pBuffer, const int& nLen);
+	BOOL SCBC_SetChannel(int channel);
 	BOOL SCBC_SetWBNormal(std::string data);
 	BOOL SCBC_SetWBNormal(const byte* pBuffer, const int& nLen);
 	BOOL SCBC_SetWBCool(std::string data);
@@ -169,9 +171,27 @@ public:
 	BOOL SCBC_CheckWidi();
 	BOOL SCBC_CheckWidevine();
 	BOOL SCBC_CheckCikey();
-
+	
 	BOOL SCBC_StarWarmUpMode();
 	BOOL SCBC_StopWarmUpMode();
+	// 工厂菜单显示与隐藏;
+	BOOL SCBC_ShowFactoryMenu();
+	BOOL SCBC_HideFactoryMenu();
+	// 工厂信息内容显示与隐藏;
+	BOOL SCBC_ShowFactoryInformation();
+	BOOL SCBC_HideFactoryInformation();
+	// 老化模式的开与关、老化时间读取;
+	BOOL SCBC_EnterAgingModel();
+	BOOL SCBC_LeaveAgingModel();
+	BOOL SCBC_ReadAgingTime(int &min);
+	// 红绿蓝增益;
+	BOOL SCBC_SetRedGainRegister(int value);
+	BOOL SCBC_SetGreenGainRegister(int value);
+	BOOL SCBC_SetBlueGainRegister(int value);
+	// 红绿蓝偏移;
+	BOOL SCBC_SetRedOffsetRegister(int value);
+	BOOL SCBC_SetGreenOffsetRegister(int value);
+	BOOL SCBC_SetBlueOffsetRegister(int value);
 };
 
 extern std::string HexString2Bytes(std::string strHex, const int& len = 3);

+ 193 - 5
ScbcCopyKey/ScbcCopyKey/ScbcCopyKey.cpp

@@ -72,7 +72,7 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 		{
 			if ( EnterFactory() )
 			{
-				printf("%d\n",GetProjectId());
+				/*printf("%d\n",GetProjectId());
 				printf("%s\n",GetSoftVersion());
 				printf("%s\n",GetDeviceId());
 				printf("%s\n",GetClientType());
@@ -86,6 +86,21 @@ int _tmain(int argc, TCHAR* argv[], TCHAR* envp[])
 				printf("%s\n",GetOSDLanguage());
 				printf("%s\n",GetShopLanguage());
 				printf("%s\n",GetChannel());
+
+				ShowFactoryMenu();
+				HideFactoryMenu();
+
+				ShowFactoryInformation();
+				HideFactoryInformation();
+
+				int min = 0;
+				ReadAgingTime(min);
+				*/
+
+				SetRedGainRegister(100);
+				SetRedGainRegister(300);
+				
+
 				LeaveFactory();
 			}
 			
@@ -493,6 +508,72 @@ SCBCCOPYKEY_API BOOL StopWarmUpMode()
 {
 	return g_objSiacp.SCBC_StopWarmUpMode();
 }
+
+SCBCCOPYKEY_API BOOL ShowFactoryMenu()
+{
+	return g_objSiacp.SCBC_ShowFactoryMenu();
+}
+
+SCBCCOPYKEY_API BOOL HideFactoryMenu()
+{
+	return g_objSiacp.SCBC_HideFactoryMenu();
+}
+
+SCBCCOPYKEY_API BOOL ShowFactoryInformation()
+{
+	return g_objSiacp.SCBC_ShowFactoryInformation();
+}
+
+SCBCCOPYKEY_API BOOL HideFactoryInformation()
+{
+	return g_objSiacp.SCBC_HideFactoryInformation();
+}
+
+SCBCCOPYKEY_API BOOL EnterAgingModel()
+{
+	return g_objSiacp.SCBC_EnterAgingModel();
+}
+
+SCBCCOPYKEY_API BOOL LeaveAgingModel()
+{
+	return g_objSiacp.SCBC_LeaveAgingModel();
+}
+
+SCBCCOPYKEY_API BOOL ReadAgingTime(int &min)
+{
+	return g_objSiacp.SCBC_ReadAgingTime(min);
+}
+
+SCBCCOPYKEY_API BOOL SetRedGainRegister(int value)
+{
+	return g_objSiacp.SCBC_SetRedGainRegister(value);
+}
+
+SCBCCOPYKEY_API BOOL SetGreenGainRegister(int value)
+{
+	return g_objSiacp.SCBC_SetGreenGainRegister(value);
+}
+
+SCBCCOPYKEY_API BOOL SetBlueGainRegister(int value)
+{
+	return g_objSiacp.SCBC_SetBlueGainRegister(value);
+}
+
+SCBCCOPYKEY_API BOOL SetRedOffsetRegister(int value)
+{
+	return g_objSiacp.SCBC_SetRedOffsetRegister(value);
+}
+
+SCBCCOPYKEY_API BOOL SetGreenOffsetRegister(int value)
+{
+	return g_objSiacp.SCBC_SetGreenOffsetRegister(value);
+}
+
+SCBCCOPYKEY_API BOOL SetBlueOffsetRegister(int value)
+{
+	return g_objSiacp.SCBC_SetBlueOffsetRegister(value);
+}
+
 #else
 
 static PyObject* Open(PyObject* self, PyObject* args)
@@ -880,12 +961,11 @@ static PyObject* SetShopLanguage(PyObject* self, PyObject* args)
 
 static PyObject* SetChannel(PyObject* self, PyObject* args)
 {
-	BOOL bHasSpace; 
-	const char* pszdata = 0;
-	if (!PyArg_ParseTuple(args, "sb", &pszdata, &bHasSpace))
+	int value = 0;
+	if (!PyArg_ParseTuple(args, "i", &value))
 		return NULL;
 
-	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetChannel(pszdata, bHasSpace));
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetChannel(value));
 }
 
 static PyObject* SetWBNormal(PyObject* self, PyObject* args)
@@ -966,6 +1046,100 @@ static PyObject* StopWarmUpMode(PyObject* self, PyObject* args)
 	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_StopWarmUpMode());
 }
 
+//
+static PyObject* ShowFactoryMenu(PyObject* self, PyObject* args)
+{
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_ShowFactoryMenu());
+}
+
+static PyObject* HideFactoryMenu(PyObject* self, PyObject* args)
+{
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_HideFactoryMenu());
+}
+
+static PyObject* ShowFactoryInformation(PyObject* self, PyObject* args)
+{
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_ShowFactoryInformation());
+}
+
+static PyObject* HideFactoryInformation(PyObject* self, PyObject* args)
+{
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_HideFactoryInformation());
+}
+
+static PyObject* EnterAgingModel(PyObject* self, PyObject* args)
+{
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_EnterAgingModel());
+}
+
+static PyObject* LeaveAgingModel(PyObject* self, PyObject* args)
+{
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_LeaveAgingModel());
+}
+
+static PyObject* ReadAgingTime(PyObject* self, PyObject* args)
+{
+	int min = 0;
+	if ( !g_objSiacp.SCBC_ReadAgingTime(min) )
+		return Py_BuildValue("i", -1);
+	return Py_BuildValue("i", min);
+}
+
+static PyObject* SetRedGainRegister(PyObject* self, PyObject* args)
+{
+	int value = 0;
+	if (!PyArg_ParseTuple(args, "i", &value))
+		return NULL;
+
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetRedGainRegister(value));
+}
+
+static PyObject* SetGreenGainRegister(PyObject* self, PyObject* args)
+{
+	int value = 0;
+	if (!PyArg_ParseTuple(args, "i", &value))
+		return NULL;
+
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetGreenGainRegister(value));
+}
+
+static PyObject* SetBlueGainRegister(PyObject* self, PyObject* args)
+{
+	int value = 0;
+	if (!PyArg_ParseTuple(args, "i", &value))
+		return NULL;
+
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetBlueGainRegister(value));
+}
+
+static PyObject* SetRedOffsetRegister(PyObject* self, PyObject* args)
+{
+	int value = 0;
+	if (!PyArg_ParseTuple(args, "i", &value))
+		return NULL;
+
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetRedOffsetRegister(value));
+}
+
+static PyObject* SetGreenOffsetRegister(PyObject* self, PyObject* args)
+{
+	int value = 0;
+	if (!PyArg_ParseTuple(args, "i", &value))
+		return NULL;
+
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetGreenOffsetRegister(value));
+}
+
+static PyObject* SetBlueOffsetRegister(PyObject* self, PyObject* args)
+{
+	int value = 0;
+	if (!PyArg_ParseTuple(args, "i", &value))
+		return NULL;
+
+	return Py_BuildValue("b", (bool)g_objSiacp.SCBC_SetBlueOffsetRegister(value));
+}
+
+
 // 描述方法,暴露给python的函数;
 static PyMethodDef ScbcCopyKey_Methods[] = {
 	{"Open",Open,METH_VARARGS,"打开串口"},
@@ -1027,6 +1201,20 @@ static PyMethodDef ScbcCopyKey_Methods[] = {
 	{"CheckCikey", CheckCikey, METH_VARARGS, "检验CIKEY"},
 	{"StarWarmUpMode", StarWarmUpMode, METH_VARARGS, "检验OSDLAN"},
 	{"StopWarmUpMode", StopWarmUpMode, METH_VARARGS, "检验SHOPLAN"},
+	// others;
+	{"ShowFactoryMenu", ShowFactoryMenu, METH_VARARGS, "显示工厂菜单"},
+	{"HideFactoryMenu", HideFactoryMenu, METH_VARARGS, "隐藏工厂菜单"},
+	{"ShowFactoryInformation", ShowFactoryInformation, METH_VARARGS, "工厂信息内容显示"},
+	{"HideFactoryInformation", HideFactoryInformation, METH_VARARGS, "工厂信息内容隐藏"},
+	{"EnterAgingModel", EnterAgingModel, METH_VARARGS, "老化模式开"},
+	{"LeaveAgingModel", LeaveAgingModel, METH_VARARGS, "老化模式关"},
+	{"ReadAgingTime", ReadAgingTime, METH_VARARGS, "老化时间读取"},
+	{"SetRedGainRegister", SetRedGainRegister, METH_VARARGS, "红增益"},
+	{"SetGreenGainRegister", SetGreenGainRegister, METH_VARARGS, "绿增益"},
+	{"SetBlueGainRegister", SetBlueGainRegister, METH_VARARGS, "蓝增益"},
+	{"SetRedOffsetRegister", SetRedOffsetRegister, METH_VARARGS, "红偏移"},
+	{"SetGreenOffsetRegister", SetGreenOffsetRegister, METH_VARARGS, "绿偏移"},
+	{"SetBlueOffsetRegister", SetBlueOffsetRegister, METH_VARARGS, "蓝偏移"},
 	{NULL,NULL}
 };
 

+ 19 - 0
ScbcCopyKey/ScbcCopyKey/ScbcCopyKey.h

@@ -94,4 +94,23 @@ SCBCCOPYKEY_API BOOL CheckCikey();
 SCBCCOPYKEY_API BOOL StarWarmUpMode();
 SCBCCOPYKEY_API BOOL StopWarmUpMode();
 
+// 工厂菜单显示与隐藏;
+SCBCCOPYKEY_API BOOL ShowFactoryMenu();
+SCBCCOPYKEY_API BOOL HideFactoryMenu();
+// 工厂信息内容显示与隐藏;
+SCBCCOPYKEY_API BOOL ShowFactoryInformation();
+SCBCCOPYKEY_API BOOL HideFactoryInformation();
+// 老化模式的开与关、老化时间读取;
+SCBCCOPYKEY_API BOOL EnterAgingModel();
+SCBCCOPYKEY_API BOOL LeaveAgingModel();
+SCBCCOPYKEY_API BOOL ReadAgingTime(int &min);
+// 红绿蓝增益;
+SCBCCOPYKEY_API BOOL SetRedGainRegister(int value);
+SCBCCOPYKEY_API BOOL SetGreenGainRegister(int value);
+SCBCCOPYKEY_API BOOL SetBlueGainRegister(int value);
+// 红绿蓝偏移;
+SCBCCOPYKEY_API BOOL SetRedOffsetRegister(int value);
+SCBCCOPYKEY_API BOOL SetGreenOffsetRegister(int value);
+SCBCCOPYKEY_API BOOL SetBlueOffsetRegister(int value);
+
 #endif

+ 152 - 16
ScbcCopyKey/test.py

@@ -1,11 +1,76 @@
 # -*- coding: UTF-8 -*-
-import io,sys,time
-import ScbcCopyKey
-import binascii
+import io
+import sys
+import time
+from ssat_sdk.device_manage import ScbcCopyKey
+from ssat_sdk import sat_environment
+
+'''
+接口说明:
+Open:打开串口
+    函数声明:
+        int Open(串口号,波特率,数据位,奇偶校验,停止位)
+        返回1表示打开成功,返回0表示打开失败
+    示例:
+    result = ScbcCopyKey.Open(3, 115200, 8, 0, 1)
+    if result == 1:
+        print('打开成功')
+    else:
+        print('打开失败')
+    # 关闭串口
+    ScbcCopyKey.Close()
+    
+
+Close:关闭串口
+    函数声明:
+        void Close()
+        无返回值
+    示例:
+        ScbcCopyKey.Close()
+    
+IsOpen:串口是否打开
+    函数声明:
+        int IsOpen()
+        返回1表示已打开串口,返回0表示打开失败
+    示例:
+        result = ScbcCopyKey.IsOpen() 
+        if result == 1:
+            print('打开成功')
+        else:
+            print('打开失败')
+
+EnterFactory:进入工厂模式
+    函数声明:
+        int EnterFactory()
+        返回1表示成功进入,返回0表示进入失败
+    示例:
+    result = ScbcCopyKey.Open(3, 115200, 8, 0, 1)
+    if result == 1:
+        if ScbcCopyKey.EnterFactory():
+            print "进入工厂模式成功"
+            # do something
+            # ............
+            # 离开工厂模式
+            ScbcCopyKey.LeaveFactory()
+        else:
+            print "进入工厂模式失败"
+    
+    ScbcCopyKey.Close()
+    
+其他接口略:
+    GetXXXX:获取指定类型值
+    SetXXXX(buffer, len):设置指定类型值,buffer为字节数组, len为buffer长度;
+    SetXXXXBF(file):设置指定类型值,file为数据的文件路径;
+'''
+
+
+'''
+    用例为完整的调用流程:Open->EnterFactory->所有协议操作->LeaveFactory->Close;
+'''
 
 if __name__ == "__main__":
     # 打开串口;
-    result = ScbcCopyKey.Open(5, 115200, 8, 0, 1)
+    result = ScbcCopyKey.Open(int(sat_environment.getSerialCOM()[3:]), 115200, 8, 0, 1)
     if result:
         # 进入工厂模式;
         if ScbcCopyKey.EnterFactory():
@@ -24,23 +89,94 @@ if __name__ == "__main__":
             print u"GetShopLanguage",ScbcCopyKey.GetShopLanguage()
             print u"GetChannel",ScbcCopyKey.GetChannel()
 
-            file = r"D:\SAT\Allkey\RT2851-1PCS\DID\did1711.bin"
-            print u"SetDeviceId", ScbcCopyKey.SetDeviceIdBF(file)
+            if 0:
+                file = r"D:\SAT\Allkey\RT2851-1PCS\DID\did1711.bin"
+                print u"SetDeviceId", ScbcCopyKey.SetDeviceIdBF(file)
+
+                file = r"D:\SAT\Allkey\RT2851-1PCS\MAC\TCL_MAC_CC-A1-2B-09-01-C3.bin"
+                print u"SetMAC", ScbcCopyKey.SetMACBF(file)
+
+                file = r"D:\SAT\Allkey\RT2851-1PCS\RealTek1.4\Encoder3_00000004.bin"
+                print u"SetHDCPBF", ScbcCopyKey.SetHDCPKeyBF(file)
+
+                file = r"D:\SAT\Allkey\RT2851-1PCS\RealTek2.2\PUBHDCP22_0000_20190710_0053303.bin"
+                print u"SetHDCP22BF", ScbcCopyKey.SetHDCPKey22BF(file)
+
+                file = r"D:\SAT\Allkey\RT2851-1PCS\RT2851 CI KEY\00000478-0735185308117697.bin"
+                print u"SetCiKeyBF", ScbcCopyKey.SetCiKeyBF(file)
+
+                file = r"D:\SAT\Allkey\RT2851-1PCS\RT2851 widevine\RT2851-Widevine_111"
+                print u"SetWidevineBF", ScbcCopyKey.SetWidevineBF(file)
 
-            file = r"D:\SAT\Allkey\RT2851-1PCS\MAC\TCL_MAC_CC-A1-2B-09-01-C3.bin"
-            print u"SetMAC", ScbcCopyKey.SetMACBF(file)
+            # 预置频道;
+            '''
+            以下数值均为16进制
+            "HZ":	        "01"
+            "Poland":	    "02"
+            "TTET":	        "03"           
+            "WX":	        "04"
+            "NM":	        "05"
+            "ODM":	        "06"
+            "Vietnam":	    "07"  
+            "Thailand":	    "08"
+            "Philippines":	"09"
+            "Indonesia":	"0A"
+            "Russia":	    "0B"
+            "Egypt":	    "0C"
+            "JAC":	        "0D"
+            "Pakistan":	    "0E" 
+			"Benne":	    "0F"
+            "Araby":	    "10"
+            "Eltholathia":	"11"  
+            "Tunisia":	    "12"
+            "UPAC":     	"14"
+            "Condor":	    "13"            
+            "PKV":	        "15"     
+            "LIXIANG":	    "16"
+            "LEXUAN":   	"17"  
+            "TOSHIBA":	    "18"
+            "Algeria":	    "19"            
+            "CVT":	        "1A"
+            "SouthAfrica":	"1B"
+            "ORION":	    "1C"
+            "Mexico":	    "1D"                                       
+            "RV":	        "1E"            
+            "SEMP":	        "1F"                      
+            '''
+            # HZ
+            print "SetChannel", ScbcCopyKey.SetChannel(1)
+            # Mexico = 0x1D
+            print "SetChannel", ScbcCopyKey.SetChannel(29)
+            
+            # 显示工厂菜单;
+            print "ShowFactoryMenu", ScbcCopyKey.ShowFactoryMenu()
+            time.sleep(2)
+            print "HideFactoryMenu", ScbcCopyKey.HideFactoryMenu()
 
-            file = r"D:\SAT\Allkey\RT2851-1PCS\RealTek1.4\Encoder3_00000004.bin"
-            print u"SetHDCPBF", ScbcCopyKey.SetHDCPKeyBF(file)
+            # 显示工厂内容;
+            print "ShowFactoryInformation", ScbcCopyKey.ShowFactoryInformation()
+            time.sleep(2)
+            print "HideFactoryInformation", ScbcCopyKey.HideFactoryInformation()
 
-            file = r"D:\SAT\Allkey\RT2851-1PCS\RealTek2.2\PUBHDCP22_0000_20190710_0053303.bin"
-            print u"SetHDCP22BF", ScbcCopyKey.SetHDCPKey22BF(file)
+            # 用例中不开启老化;
+            if 0:
+                # 进入老化模式;
+                print "EnterAgingModel", ScbcCopyKey.EnterAgingModel()
+                time.sleep(10)
+                print "LeaveAgingModel", ScbcCopyKey.LeaveAgingModel()
+                # 读取老化时间;
+                print "ReadAgingTime", ScbcCopyKey.ReadAgingTime()
 
-            file = r"D:\SAT\Allkey\RT2851-1PCS\RT2851 CI KEY\00000478-0735185308117697.bin"
-            print u"SetCiKeyBF", ScbcCopyKey.SetCiKeyBF(file)
+            if 0:
+                # 红绿蓝增益;
+                print "SetRedGainRegister", ScbcCopyKey.SetRedGainRegister(100)
+                print "SetGreenGainRegister", ScbcCopyKey.SetGreenGainRegister(200)
+                print "SetBlueGainRegister", ScbcCopyKey.SetBlueGainRegister(300)
 
-            file = r"D:\SAT\Allkey\RT2851-1PCS\RT2851 widevine\RT2851-Widevine_111"
-            print u"SetWidevineBF", ScbcCopyKey.SetWidevineBF(file)
+                # 红绿蓝偏移;
+                print "SetRedOffsetRegister", ScbcCopyKey.SetRedOffsetRegister(100)
+                print "SetGreenOffsetRegister", ScbcCopyKey.SetGreenOffsetRegister(200)
+                print "SetBlueOffsetRegister", ScbcCopyKey.SetBlueOffsetRegister(300)
 
             # 离开工厂模式;
             ScbcCopyKey.LeaveFactory()