JeffWang 2 жил өмнө
parent
commit
c1a1463fee

+ 4 - 1
Python/caSerail.py

@@ -87,9 +87,12 @@ class CASerail(BaseSerial):
     def setZeroCalibration(self):
         return self.sendcmd('ZRC\r')
 
+
+    '''读取当前显示模式下的三值'''
     def readDisplay(self):
         data = self.sendcmd('MES\r')
-        return self.__get_display_data(data.decode('utf-8'))
+        x,y,z = self.__get_display_data(data.decode('utf-8'))
+        return float(x), float(y), float(z)
 
     def __readxyLv2(self):
         return self.sendcmd('MES,1\r')

+ 1 - 1
Python/cfg.txt

@@ -1,4 +1,4 @@
-COM7,COM6
+COM7,COM8
 255,0,0
 0,255,0
 0,0,255

+ 35 - 89
Python/gamma-tools.py

@@ -6,6 +6,7 @@ import zipfile
 import gzip
 import autoGamma
 from mokaSerail import MokaSerial
+from caSerail import CASerail
 
 def readPartern():
     f = open(u"cfg.txt")  # 返回一个文件对象
@@ -35,30 +36,6 @@ def readPartern():
     return TV_COM, CA_COM, PAR_LIST
 
 
-def get_ca_data(data):
-    # 正则表达式;
-    # OK00,P1 3716;3956;.0091\r
-    p = re.compile(r"(\D*)(\d+),P1 (.*);(.*);(.*)", re.DOTALL)
-    mo = p.search(data)
-    if mo is None:
-        print("无匹配正则")
-        pw = re.compile(r"(\D*)(\d+)", re.DOTALL)
-        mo = pw.search(data)
-        if mo is None:
-            # print("短匹配失败")
-            return None, None, None, None, None
-        else:
-            return mo.group(1), mo.group(2), None, None, None
-    else:
-        return mo.group(1), mo.group(2), mo.group(3), mo.group(4), mo.group(5)
-
-
-def xyY_to_XYZ(x, y, Y):
-    X = x * Y / y
-    Z = (1 - x - y) * Y / y
-    return X, Y, Z
-
-
 def gen_gzip(gm_file, save_file):
     # 压缩gamma.ini成zip,再写入到TV?? 还是直接写入gamma.ini到TV ??
     fin = open(gm_file, 'rb')
@@ -84,6 +61,7 @@ def gen_gzip(gm_file, save_file):
     fg.write(data_save)
     fg.close()
 
+
 def test_all():
     # 读取配置文件;
     TV_COM, CA_COM, PAR_LIST = readPartern()
@@ -93,29 +71,29 @@ def test_all():
     print("11 pattern", Index11)
 
     # 打开CA310
-    ca_port = MokaSerial()
+    ca_port = CASerail()
     ca_port.open(CA_COM, 19200, 7, 'E', 2)
     # 开启CA310
-    data = ca_port.sendcmd([0x43, 0x4F, 0x4D, 0x2C, 0x31, 0x0D])
+    data = ca_port.startCommunication()
     print("CA310 开启", data)
 
-    if False:
-        data = ca_port.sendcmd([0x4D, 0x44, 0x53, 0x2C, 0x30, 0x0D])
+    if True:
         print("CA310 显示模式", data)
+        data = ca_port.set_XYZ_Display()        
 
-        data = ca_port.sendcmd([0x53, 0x43, 0x53, 0x2C, 0x33, 0x0D])
         print("CA310 同步模式", data)
-
-        data = ca_port.sendcmd([0x46, 0x53, 0x43, 0x2C, 0x32, 0x0D])
+        data = ca_port.setSynchMode(3)
+        
         print("CA310 测量速度", data)
+        data = ca_port.setMeasureSpeed(2)
+        
         time.sleep(0.5)
-
-        data = ca_port.sendcmd([0x5A, 0x52, 0x43, 0x0D])
         print("CA310 零校准", data)
-
-    data = ca_port.sendcmd([0x4D, 0x43, 0x48, 0x2C, 0x30, 0x31, 0x0D])
-    print("CA310 锁定键控", data)
-
+        data = ca_port.setZeroCalibration()
+        
+    print("CA310 设置测试通道", data)
+    data = ca_port.setChannel('01')
+    
     # 打开TV串口;
     tv_port = MokaSerial()
     tv_port.open(TV_COM)
@@ -138,42 +116,23 @@ def test_all():
     data = tv_port.sendcmd([0xAA, 0x07, 0x9F, 0x09, 0x01, 0xD2, 0x5A])
 
     XYZ_ALL = []
-    xyY_ALL = []
     print("内置pattern切换与CA310读取")
     for item in PAR_LIST:
         # print("item",item)
         if item.__len__() == 3:
             tv_port.send_parttern([int(item[0]), int(item[1]), int(item[2])])
-            time.sleep(1)
-            data = ca_port.sendcmd([0x4D, 0x45, 0x53, 0x0D])
-            print("CA310数据读取",data)
-            # bytes转成字符串;
-            data = data.decode('utf-8')
-            data = data.replace('\r', '')
-            r1, r2, d1, d2, d3 = get_ca_data(data)
-            # print("CA310数据:", d1, d2, d3)
-            # X, Y, Z = xyY_to_XYZ(float(d1) / 10000, float(d2) / 10000, float(d3))
-
-            print("CA410数据:", d1, d2, d3)
-            X, Y, Z = xyY_to_XYZ(float(d1) / 1000, float(d2) / 1000, float(d3))
+            time.sleep(0.5)
+            X, Y, Z = ca_port.readDisplay()
+            print("CA410数据:", X, Y, Z)
 
             print("XYZ", X, Y, Z)
             XYZ_ALL.append([X, Y, Z])
-            xyY_ALL.append([d1, d2, d3])
 
     print("关闭内置pattern")
     data = tv_port.sendcmd([0xAA, 0x06, 0x27, 0x00, 0x2B, 0xCC])
 
-    xyY_ALL = xyY_ALL[::-1]
-    # for n in range(0, 11):
-    #     xyY_ALL[n] = xyY_ALL[n].reverse()
-
-    print(f"原始测量的xyY_11 is : \n")
-    for i in range(0, 14):
-        print(f"0.{xyY_ALL[i][0]}  0.{xyY_ALL[i][1]}  {xyY_ALL[i][2]}")
-
     # 关闭CA310
-    data = ca_port.sendcmd([0x43, 0x4F, 0x4D, 0x2C, 0x30, 0x0D])
+    data = ca_port.endCommunication()
 
     # 调用gamma算法生成gamma.ini
     factory = autoGamma.FiretvFactory()
@@ -202,28 +161,28 @@ def get_test_result():
     print("11 pattern", Index11)
 
     # 打开CA310
-    ca_port = MokaSerial()
+    ca_port = CASerail()
     ca_port.open(CA_COM, 19200, 7, 'E', 2)
     # 开启CA310
-    data = ca_port.sendcmd([0x43, 0x4F, 0x4D, 0x2C, 0x31, 0x0D])
+    data = ca_port.startCommunication()
     print("CA310 开启", data)
 
     if True:
-        data = ca_port.sendcmd([0x4D, 0x44, 0x53, 0x2C, 0x30, 0x0D])
         print("CA310 显示模式", data)
+        data = ca_port.set_XYZ_Display()        
 
-        data = ca_port.sendcmd([0x53, 0x43, 0x53, 0x2C, 0x33, 0x0D])
         print("CA310 同步模式", data)
-
-        data = ca_port.sendcmd([0x46, 0x53, 0x43, 0x2C, 0x32, 0x0D])
+        data = ca_port.setSynchMode(3)
+        
         print("CA310 测量速度", data)
-        time.sleep(1)
-
-        data = ca_port.sendcmd([0x5A, 0x52, 0x43, 0x0D])
+        data = ca_port.setMeasureSpeed(2)
+        
+        time.sleep(0.5)
         print("CA310 零校准", data)
-
-    data = ca_port.sendcmd([0x4D, 0x43, 0x48, 0x2C, 0x30, 0x31, 0x0D])
-    print("CA310 锁定键控", data)
+        data = ca_port.setZeroCalibration()
+        
+    print("CA310 设置测试通道", data)
+    data = ca_port.setChannel('01')
 
     # 打开TV串口;
     tv_port = MokaSerial()
@@ -236,36 +195,23 @@ def get_test_result():
 
 
     XYZ_ALL = []
-    xyY_ALL = []
     print("内置pattern切换与CA310读取")
     for item in PAR_LIST:
         # print("item",item)
         if item.__len__() == 3:
             tv_port.send_parttern([int(item[0]), int(item[1]), int(item[2])])
             time.sleep(0.5)
-            data = ca_port.sendcmd([0x4D, 0x45, 0x53, 0x0D])
-            # bytes转成字符串;
-            data = data.decode('utf-8')
-            data = data.replace('\r', '')
-            r1, r2, d1, d2, d3 = get_ca_data(data)
-            # print("CA310数据:", d1, d2, d3)
-            # X, Y, Z = xyY_to_XYZ(float(d1) / 10000, float(d2) / 10000, float(d3))
-
-            print("CA410数据:", d1, d2, d3)
-            X, Y, Z = xyY_to_XYZ(float(d1) / 1000, float(d2) / 1000, float(d3))
+            X, Y, Z = ca_port.readDisplay()
+            print("CA410数据:", X, Y, Z)
 
             print("XYZ", X, Y, Z)
             XYZ_ALL.append([X, Y, Z])
-            xyY_ALL.append([d1, d2, d3])
+
     print("关闭内置pattern")
     data = tv_port.sendcmd([0xAA, 0x06, 0x27, 0x00, 0x2B, 0xCC])
-    xyY_ALL = xyY_ALL[::-1]
-    print(f"测量的xyY_11 is : \n")
-    for i in range(0, 14):
-        print(f"0.{xyY_ALL[i][0]}  0.{xyY_ALL[i][1]}  {xyY_ALL[i][2]}")
 
     # 关闭CA310
-    data = ca_port.sendcmd([0x43, 0x4F, 0x4D, 0x2C, 0x30, 0x0D])
+    data = ca_port.endCommunication()
 
 
 def test_zip():