Bläddra i källkod

封装串口命令。

JeffWang 2 år sedan
förälder
incheckning
80bb912575
3 ändrade filer med 130 tillägg och 138 borttagningar
  1. 4 4
      Python/caSerail.py
  2. 51 111
      Python/gamma-tools.py
  3. 75 23
      Python/mokaSerail.py

+ 4 - 4
Python/caSerail.py

@@ -46,11 +46,11 @@ class CASerail(BaseSerial):
     def setDisplayMode(self, mode:int):
         return self.sendcmd('MDS,%d\r'%(mode))
 
-    
+    '''设置显示模式为XYZ'''
     def set_XYZ_Display(self):
         return self.sendcmd('MDS,%d\r'%(7))
 
-
+    '''设置显示模式为xyLv'''
     def set_xyLv_Display(self):
         return self.sendcmd('MDS,%d\r'%(0))
 
@@ -103,7 +103,7 @@ class CASerail(BaseSerial):
         result, des, X,Y,Z = self.__get_XYZ_data(data.decode('utf-8'))
         return X,Y,Z
 
-
+    '''获取当前显示模式值'''
     def __get_display_data(self, data):
         # 正则表达式;
         # OK00,P1 3716;3956;.0091\r
@@ -122,7 +122,7 @@ class CASerail(BaseSerial):
             print(mo.group(1), mo.group(2), mo.group(3), mo.group(4), mo.group(5))
             return mo.group(3), mo.group(4), mo.group(5)
 
-
+    '''读取MES,2模式的值'''
     def __get_XYZ_data(self, data):
         # 正则表达式;
         # 'OK00,P1,0,0.2265919,0.1769892,0.0437458,-0.03,-99999999,0.0560060,0.0437458,0.1474149\r'

+ 51 - 111
Python/gamma-tools.py

@@ -8,6 +8,7 @@ import autoGamma
 from mokaSerail import MokaSerial
 from caSerail import CASerail
 
+
 def readPartern():
     f = open(u"cfg.txt")  # 返回一个文件对象
     line = f.readline()  # 调用文件的 readline()方法,一次读取一行
@@ -36,32 +37,6 @@ def readPartern():
     return TV_COM, CA_COM, PAR_LIST
 
 
-def gen_gzip(gm_file, save_file):
-    # 压缩gamma.ini成zip,再写入到TV?? 还是直接写入gamma.ini到TV ??
-    fin = open(gm_file, 'rb')
-    gf = gzip.open('gamma_org.gzip', 'wb')
-    data = fin.read()
-    gf.write(data)
-    fin.close()
-    gf.close()
-
-    # 计算原始文件crc32;
-    # crc32 = binascii.crc32(data)
-
-    # 重新读取gzip,再切掉8个字节?后再保存
-    fg = open('gamma_org.gzip', 'rb')
-    g_data = fg.read()
-    fg.close()
-
-    # 生成新的gamma.zip.
-    fg = open(save_file, 'wb+')
-    start_index = 10 + 'gamma_org.gzip'.__len__() + 1
-    data_save = g_data[start_index:-4]
-    fg.write(g_data[8:10])
-    fg.write(data_save)
-    fg.close()
-
-
 def test_all():
     # 读取配置文件;
     TV_COM, CA_COM, PAR_LIST = readPartern()
@@ -71,68 +46,68 @@ def test_all():
     print("11 pattern", Index11)
 
     # 打开CA310
-    ca_port = CASerail()
-    ca_port.open(CA_COM, 19200, 7, 'E', 2)
+    ca = CASerail()
+    ca.open(CA_COM, 19200, 7, 'E', 2)
     # 开启CA310
-    data = ca_port.startCommunication()
+    data = ca.startCommunication()
     print("CA310 开启", data)
 
-    if True:
-        print("CA310 显示模式", data)
-        data = ca_port.set_XYZ_Display()        
+    print("CA310 显示模式", data)
+    data = ca.set_XYZ_Display()        
 
-        print("CA310 同步模式", data)
-        data = ca_port.setSynchMode(3)
-        
-        print("CA310 测量速度", data)
-        data = ca_port.setMeasureSpeed(2)
+    print("CA310 同步模式", data)
+    data = ca.setSynchMode(3)
+    
+    print("CA310 测量速度", data)
+    data = ca.setMeasureSpeed(2)
         
+    if True:
         time.sleep(0.5)
         print("CA310 零校准", data)
-        data = ca_port.setZeroCalibration()
+        data = ca.setZeroCalibration()
         
     print("CA310 设置测试通道", data)
-    data = ca_port.setChannel('01')
+    data = ca.setChannel('01')
     
     # 打开TV串口;
-    tv_port = MokaSerial()
-    tv_port.open(TV_COM)
+    tv = MokaSerial()
+    tv.open(TV_COM)
     print("进工厂模式")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x10, 0x01, 0xA7, 0xEF])
+    data = tv.enterFactory()
 
     print("白平衡初始化")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x16, 0x01, 0x0D, 0x49])
+    data = tv.initWhiteBalance()
 
     print("关闭Localdimming")
-    data = tv_port.sendcmd([0xAA, 0x07, 0x9F, 0x07, 0x00, 0xE1, 0x74])
+    data = tv.closeLocaldimming()
 
     print("打开内置pattern")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x27, 0x02, 0x0B, 0x8E])
+    data = tv.openBuiltInPattern()
 
     print("切换标准色温")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x31, 0x01, 0x92, 0x38])
+    data = tv.switchStdColorTemperature()
 
     print("gamma初始化")
-    data = tv_port.sendcmd([0xAA, 0x07, 0x9F, 0x09, 0x01, 0xD2, 0x5A])
+    data = tv.initGamma()
 
     XYZ_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])])
+            tv.send_parttern([int(item[0]), int(item[1]), int(item[2])])
             time.sleep(0.5)
-            X, Y, Z = ca_port.readDisplay()
+            X, Y, Z = ca.readDisplay()
             print("CA410数据:", X, Y, Z)
 
             print("XYZ", X, Y, Z)
             XYZ_ALL.append([X, Y, Z])
 
     print("关闭内置pattern")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x27, 0x00, 0x2B, 0xCC])
+    data = tv.closeBuiltInPattern()
 
     # 关闭CA310
-    data = ca_port.endCommunication()
+    data = ca.endCommunication()
 
     # 调用gamma算法生成gamma.ini
     factory = autoGamma.FiretvFactory()
@@ -142,12 +117,12 @@ def test_all():
                                                0.313, 0.329, 2.2)
     autoGamma.dumpRGB2ini(RGB255)
 
-    #  生成切割文件;
-    gen_gzip('gamma.ini', 'gamma_cut.zip')
+    # 生成切割文件;
+    tv.gen_gzip('gamma.ini', 'gamma_cut.zip')
     # 调用串口命令写入TV中;
-    tv_port.send_gamma('gamma_cut.zip')
+    tv.send_gamma('gamma_cut.zip')
     # 使生效;
-    tv_port.send_gamma_active('gamma.ini')
+    tv.send_gamma_active('gamma.ini')
 
     autoGamma.showRGBcurve(RGB255)
 
@@ -161,37 +136,37 @@ def get_test_result():
     print("11 pattern", Index11)
 
     # 打开CA310
-    ca_port = CASerail()
-    ca_port.open(CA_COM, 19200, 7, 'E', 2)
+    ca = CASerail()
+    ca.open(CA_COM, 19200, 7, 'E', 2)
     # 开启CA310
-    data = ca_port.startCommunication()
+    data = ca.startCommunication()
     print("CA310 开启", data)
 
-    if True:
-        print("CA310 显示模式", data)
-        data = ca_port.set_XYZ_Display()        
+    print("CA310 显示模式", data)
+    data = ca.set_XYZ_Display()        
 
-        print("CA310 同步模式", data)
-        data = ca_port.setSynchMode(3)
-        
-        print("CA310 测量速度", data)
-        data = ca_port.setMeasureSpeed(2)
+    print("CA310 同步模式", data)
+    data = ca.setSynchMode(3)
+    
+    print("CA310 测量速度", data)
+    data = ca.setMeasureSpeed(2)
         
+    if True:
         time.sleep(0.5)
         print("CA310 零校准", data)
-        data = ca_port.setZeroCalibration()
+        data = ca.setZeroCalibration()
         
     print("CA310 设置测试通道", data)
-    data = ca_port.setChannel('01')
+    data = ca.setChannel('01')
 
     # 打开TV串口;
-    tv_port = MokaSerial()
-    tv_port.open(TV_COM)
+    tv = MokaSerial()
+    tv.open(TV_COM)
     print("进工厂模式")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x10, 0x01, 0xA7, 0xEF])
+    data = tv.enterFactory()
 
     print("打开内置pattern")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x27, 0x02, 0x0B, 0x8E])
+    data = tv.openBuiltInPattern()
 
 
     XYZ_ALL = []
@@ -199,55 +174,20 @@ def get_test_result():
     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])])
+            tv.send_parttern([int(item[0]), int(item[1]), int(item[2])])
             time.sleep(0.5)
-            X, Y, Z = ca_port.readDisplay()
+            X, Y, Z = ca.readDisplay()
             print("CA410数据:", X, Y, Z)
 
             print("XYZ", X, Y, Z)
             XYZ_ALL.append([X, Y, Z])
 
     print("关闭内置pattern")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x27, 0x00, 0x2B, 0xCC])
+    data = tv.closeBuiltInPattern()
 
     # 关闭CA310
-    data = ca_port.endCommunication()
-
-
-def test_zip():
-    # 创建zip压缩包;
-    zipFile = zipfile.ZipFile(r'gamma.zip', 'w')
-    # 写入ini到zip中;
-    zipFile.write(r'gamma.ini', 'gamma.ini', zipfile.ZIP_DEFLATED)
-    zipFile.close()
-
-
-def test_gzip():
-    fin = open('gamma.ini', 'rb')
-    gf = gzip.open('gamma.gzip', 'wb')
-    data = fin.read()
-    gf.write(data)
-    fin.close()
-    gf.close()
-
-
-def test_result():
-    # xyY_ALL = [[1,2,3],[4,5,6],[7,8,9]]
-    # xyY_ALL = xyY_ALL[::-1]
-    # for i in range(0, 3):
-    #     print(f"0.{xyY_ALL[i][0]}  0.{xyY_ALL[i][1]}  {xyY_ALL[i][2]}")
-    X = 7.82195
-    Y = 3.78406
-    Z = 2.37614
-    x = X / (X + Y + Z)
-    y = Y / (X + Y + Z)
-    print(f"x={x} y= {y}")
+    data = ca.endCommunication()
 
 
 if __name__ == "__main__":
     test_all()
-    # test_result()
-    # test_tv()
-    # gen_gzip(r'F:\bin\TCLTools\gamma.ini', 'aaa.cut.zip')
-    # test_ca310()
-    # test_gzip()

+ 75 - 23
Python/mokaSerail.py

@@ -1,4 +1,5 @@
 # -*- coding: UTF-8 -*-
+import gzip
 from xmlrpc.client import Boolean
 import serial
 import time
@@ -51,7 +52,7 @@ RCode = {
 # 命令的封装与解析;
 
 
-class MokaComman():
+class MokaParse():
     def __init__(self):
         # 头引导码(默认1字节,0x86命令二字节);
         self.Header = [PHeader['TV_Debug']]
@@ -86,7 +87,7 @@ class MokaComman():
     返回:
     '''
 
-    def parseCommand(self, head: int, command: list[int], subCommand: list[int], data: bytearray, isMultipleParams=False, FEFlag=False):
+    def parseCommand(self, head: int, command: list[int], subCommand: list[int] = [], data: bytearray = b'', isMultipleParams=False, FEFlag=False):
         self.Header[0] = head
         self.Command = command
         self.SubCommand = subCommand
@@ -214,9 +215,9 @@ class MokaSerial(BaseSerial):
         self.write(bytearray(cmd))
         return self.read()
     
-
-    def sendcmdEx(self, head: int, command: list[int], subCommand: list[int], data: bytearray = b'', FEFlag: Boolean = False, returnParam: Boolean = False):
-        cmd = MokaComman()
+    '''协议模式发送命令'''
+    def sendcmdEx(self, head: int, command: list[int], subCommand: list[int] = [], data: bytearray = b'', FEFlag: Boolean = False, returnParam: Boolean = False):
+        cmd = MokaParse()
         package = cmd.parseCommand(head, command, subCommand, data, returnParam, FEFlag)
         if self.write(package):
             package = self.read()
@@ -225,9 +226,33 @@ class MokaSerial(BaseSerial):
         return False
 
 
+    '''生成gamma.gzip切割文件'''
+    def gen_gzip(self, gm_file, save_file):
+        # 压缩gamma.ini成zip;
+        fp_ini = open(gm_file, 'rb')
+        gf = gzip.open('gamma_org.gzip', 'wb')
+        data = fp_ini.read()
+        gf.write(data)
+        fp_ini.close()
+        gf.close()
+
+        # 重新读取gzip,再切掉8个字节?后再保存
+        fg = open('gamma_org.gzip', 'rb')
+        g_data = fg.read()
+        fg.close()
+
+        # 生成新的gamma.zip.
+        fg = open(save_file, 'wb+')
+        start_index = 10 + 'gamma_org.gzip'.__len__() + 1
+        data_save = g_data[start_index:-4]
+        fg.write(g_data[8:10])
+        fg.write(data_save)
+        fg.close()
+
+
     '''发送pattern'''
     def send_parttern(self, rgb: list[int]):
-        cmd = MokaComman()
+        cmd = MokaParse()
         package = cmd.parseCommand(0xAA, [0x28], [], bytearray(rgb))
         if self.write(package):
             package = self.read()
@@ -235,17 +260,17 @@ class MokaSerial(BaseSerial):
 
         return False
 
-
+    '''发送gamma文件'''
     def send_gamma(self, file_path: str):
         fp = open(file_path, 'rb')
-        cmd = MokaComman()
+        cmd = MokaParse()
         data = fp.read()
         package = cmd.parseCommand(0xAA, [0xE9], [0x02], data, False, True)
         if self.write(package):
             package = self.read()
             return cmd.parseResult(package)
 
-
+    '''激活gamma文件'''
     def send_gamma_active(self, ini_file: str):
         ini_fp = open(ini_file, 'rb')
         ind_data = ini_fp.read()
@@ -255,49 +280,76 @@ class MokaSerial(BaseSerial):
         crc = crc16(ind_data, ind_data.__len__())
         CRC_GM = [crc >> 8, crc & 0xFF]
 
-        cmd = MokaComman()
+        cmd = MokaParse()
         package = cmd.parseCommand(0xAA, [0x99], [0x06], bytearray(CRC_GM))
         if self.write(package):
             package = self.read()
             return cmd.parseResult(package)
 
+    '''进工厂模式'''
+    def enterFactory(self):
+        return self.sendcmdEx(0xAA, [0x10], [0x01])
+
+    '''白平衡初始化'''
+    def initWhiteBalance(self):
+        return self.sendcmdEx(0xAA, [0x16], [0x01])
+
+    '''关闭localdimming'''
+    def closeLocaldimming(self):
+        return self.sendcmdEx(0xAA, [0x9F,0x07], [0x00])
+
+    '''打开内置pattern'''
+    def openBuiltInPattern(self):
+        return self.sendcmdEx(0xAA, [0x27], [0x02])
+
+    '''关闭内置pattern'''
+    def closeBuiltInPattern(self):
+        return self.sendcmdEx(0xAA, [0x27], [0x00])
+
+    '''切换标准色温'''
+    def switchStdColorTemperature(self):
+        return self.sendcmdEx(0xAA, [0x31], [0x01])
+
+    '''初始化gamma'''
+    def initGamma(self):
+        return self.sendcmdEx(0xAA, [0x9F,0x09], [0x01])
 
 if __name__ == "__main__":
     # 打开TV串口;
-    tv_port = MokaSerial()
-    tv_port.open('COM7')
+    tv = MokaSerial()
+    tv.open('COM7')
 
     print("进工厂模式")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x10, 0x01, 0xA7, 0xEF])
+    tv.enterFactory()
 
     print("白平衡初始化")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x16, 0x01, 0x0D, 0x49])
+    tv.initWhiteBalance()
 
     print("关闭Localdimming")
-    data = tv_port.sendcmd([0xAA, 0x07, 0x9F, 0x07, 0x00, 0xE1, 0x74])
+    tv.closeLocaldimming()
 
     print("打开内置pattern")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x27, 0x02, 0x0B, 0x8E])
+    tv.openBuiltInPattern()
 
     print("切换标准色温")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x31, 0x01, 0x92, 0x38])
+    tv.switchStdColorTemperature()
 
     print("gamma初始化")
-    data = tv_port.sendcmd([0xAA, 0x07, 0x9F, 0x09, 0x01, 0xD2, 0x5A])
+    tv.initGamma()
 
     print("读取 mac")
-    data = tv_port.sendcmdEx(0xAA, [0xBE], [0x00])
+    data = tv.sendcmdEx(0xAA, [0xBE], [0x00])
 
     print("读取 wifimac")
-    data = tv_port.sendcmdEx(0xAA, [0xBE], [0x15])
+    data = tv.sendcmdEx(0xAA, [0xBE], [0x15])
 
     print("读取 clientType")
-    data = tv_port.sendcmdEx(0xAA, [0x8C], [0x00])
+    data = tv.sendcmdEx(0xAA, [0x8C], [0x00])
 
     for item in [[0,0,0],[26,26,26],[51,51,51],[76,76,76],[102,102,102],[127,127,127],[153,153,153],[178,178,178],[204,204,204],[229,229,229],[255,255,255],[0,0,255],[255,0,0]]:
         if item.__len__() == 3:
-            tv_port.send_parttern([int(item[0]), int(item[1]), int(item[2])])
+            tv.send_parttern([int(item[0]), int(item[1]), int(item[2])])
             time.sleep(0.5)
 
     print("关闭内置pattern")
-    data = tv_port.sendcmd([0xAA, 0x06, 0x27, 0x00, 0x2B, 0xCC])
+    tv.closeBuiltInPattern()