فهرست منبع

1、完成baseClient基类;
2、完成Chroma22293派生类;

scbc.sat2 5 سال پیش
والد
کامیت
037104cb5e
2فایلهای تغییر یافته به همراه91 افزوده شده و 46 حذف شده
  1. 56 31
      Chroma22293/Chroma22293.py
  2. 35 15
      Chroma22293/baseClient.py

+ 56 - 31
Chroma22293/Chroma22293.py

@@ -9,95 +9,120 @@ import numpy as np
 class C22293Manager(BaseClient):
     def __init__(self):
         BaseClient.__init__(self)  # python 继承方式  
-        self.device_name = "Chroma22293"     
+        self.device_name = "Chroma22293" 
+
+    def __parse__(self, result, params = 1):
+        if result is None:
+            return False
+        
+        if params == 1:
+            if result['device_cmd_result'] == u'ok;\r\n':
+                return True
+        
+        if params == 2:
+            if result['device_cmd_result'] == u'ok;\r\nok;\r\n':
+                return True
+        
+        return False
 
     def setPattern(self, pattern, device=''):
         self.device_id = 1
         self.device_cmd = 'run ptn %s;\r' % pattern
-        result = self.sendmsg()
-        return result
+        return self.__parse__(self.sendmsg())
 
     def setTiming(self, timing, device=''):
         self.device_id = 1
         self.device_cmd = 'run tim %s;\r' % timing
-        result = self.sendmsg()
-        return result
+        return self.__parse__(self.sendmsg())
 
     def setTimingPattern(self, timing, pattern, device=''):
         self.device_id = 1
-        self.device_cmd = 'run tim %s;run ptn %s;\r' % timing, pattern
-        result = self.sendmsg()
-        return result
+        self.device_cmd = 'run tim %s;run ptn %s;\r' % (timing, pattern)
+        return self.__parse__(self.sendmsg(), 2)
 
     def getDeviceName(self, device=''):
         self.device_id = 1
         self.device_cmd = 'report model;\r'
         result = self.sendmsg()
-        return result
+        if result is None:
+            return None
+        return result['device_cmd_result']
 
     def getDeviceSoft(self, device=''):
         self.device_id = 1
         self.device_cmd = 'report ver;\r'
         result = self.sendmsg()
-        return result
+        if result is None:
+            return None
+        return result['device_cmd_result']
 
     def getStatus(self, device=''):
         self.device_id = 1
         self.device_cmd = 'dummy;\r'
-        result = self.sendmsg()
-        return result
+        return self.__parse__(self.sendmsg())
 
     def setBlueOFF(self, device=''):
         self.device_id = 1
         self.device_cmd = 'b off;\r'
-        result = self.sendmsg()
-        return result
+        return self.__parse__(self.sendmsg())
 
     def setBlueON(self, device=''):
         self.device_id = 1
         self.device_cmd = 'b on;\r'
-        result = self.sendmsg()
-        return result
+        return self.__parse__(self.sendmsg())
 
     def setGreenOFF(self, device=''):
         self.device_id = 1
         self.device_cmd = 'g off;\r'
-        result = self.sendmsg()
-        return result
+        return self.__parse__(self.sendmsg())
 
     def setGreenON(self, device=''):
         self.device_id = 1
         self.device_cmd = 'g on;\r'
-        result = self.sendmsg()
-        return result
+        return self.__parse__(self.sendmsg())
 
     def setRedOFF(self, device=''):
         self.device_id = 1
         self.device_cmd = 'r off;\r'
-        result = self.sendmsg()
-        return result
+        return self.__parse__(self.sendmsg())
 
     def setRedON(self, device=''):
         self.device_id = 1
         self.device_cmd = 'r on;\r'
-        result = self.sendmsg()
-        return result
+        return self.__parse__(self.sendmsg())
 
     def setKeyBoardLock(self, device=''):
         self.device_id = 1
         self.device_cmd = 'kb lock on;\r'
-        result = self.sendmsg()
-        return result
+        return self.__parse__(self.sendmsg())
 
     def setKeyBoardUnLock(self, device=''):
         self.device_id = 1
         self.device_cmd = 'kb lock off;\r'
-        result = self.sendmsg()
-        return result
+        return self.__parse__(self.sendmsg())
 
 if __name__ == "__main__":
+    print u'测试开始\n'
     c2 = C22293Manager()
     print c2.getDeviceName()
-    # ProHead = np.dtype({'names': ['version', 'len'], 'formats': ['B', 'i']})
-    # a = np.array([(0xAA, 80)], dtype=ProHead)
-    # print a, a.__len__(), a.itemsize
+    print c2.getDeviceSoft()
+    print c2.getStatus()
+
+    print c2.setPattern(11)
+    print c2.setTiming(11)
+    print c2.setTimingPattern(11,11)
+
+    print c2.setBlueOFF()
+    print c2.setBlueON()
+    
+    print c2.setGreenOFF()
+    print c2.setGreenON()
+
+    print c2.setRedOFF()
+    print c2.setRedON()
+
+    print c2.setKeyBoardLock()
+    print c2.setKeyBoardUnLock()
+
+    print u'测试结束\n'
+

+ 35 - 15
Chroma22293/baseClient.py

@@ -4,6 +4,7 @@ import abc
 import socket
 import json
 import numpy as np
+import struct
 
 #创建ProHeader数据类型
 ProHead = np.dtype({'names': ['version', 'len'], 'formats': ['u1', 'u4']})
@@ -20,7 +21,7 @@ class BaseClient(object):
         self.device_cmd = ""
 
         '''通信sock'''
-        self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
+        self.sock = None
         '''通信端口号'''
         self.port = 5566
         '''通信状态'''
@@ -29,6 +30,7 @@ class BaseClient(object):
     def __def__(self):
         self.disconnect()
 
+    '''连接服务器'''
     def connect(self):
         try:
             self.sock = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
@@ -36,55 +38,73 @@ class BaseClient(object):
             self.sock.sendall('111')
             self.constate = True
         except Exception, e:
-            print "LoggingUtil:client=> socket connect error:", e, self.port
+            print "BaseClient=> socket connect error:", e, self.port
             self.constate = False
 
         return self.constate
 
     # 发送消息;
     def sendmsg(self):
+        '''是否连接'''
         if self.constate is False:
             if self.connect() is False:
                 return None
 
+        '''拼装要发送的数据包'''
         msg_json = ""
         msg_dict = {'device_id': self.device_id, 'device_name': self.device_name, "device_cmd": self.device_cmd}
         try:
             msg_json = json.dumps(msg_dict)
         except Exception:
-            print "LoggingUtil:client=> to json error:", msg_dict
+            print "BaseClient=> to json error:", msg_dict
             return None
 
+        '''发送请求数据'''
         try:
             self.sock.settimeout(1)
             phead = np.array([(0xAA, msg_json.__len__() + np.array([(0xAA, 0)], dtype=ProHead).itemsize)], dtype=ProHead)
-            # self.sock.sendall(phead.tobytes() + bytearray(msg_json))
-            # self.sock.send(msg_json)
+            '''一次性发送完整包'''
             self.sock.sendall(bytearray(phead.tobytes() + bytes(msg_json)))
+            '''分包发送:头、体'''
             # self.sock.sendall(phead.tobytes())
             # self.sock.sendall(bytes(msg_json))
             self.sock.settimeout(None)
-
+        except Exception, e:
+            print "BaseClient=> send Error:", e
+            self.disconnect()
+            self.connect()
+            return None
+        
+        '''接收返回数据'''
+        try:
             # 等待数据返回;
+            self.sock.settimeout(3)
             data = bytes(self.sock.recv(1024 * 8))
+            self.sock.settimeout(None)
 
-            # data = bytes(self.sock.recv(1024 * 8))
-            print data.__len__()
             phead = data[0: np.array([(0xAA, 0)], dtype=ProHead).itemsize]
-            msg_json = (data[np.array([(0xAA, 0)], dtype=ProHead).itemsize])#.decode("UTF-8")
-            msg_json = msg_json.decode("utf-8").encode('gbk')
+            '''小端<I, 大端>I'''
+            plen = struct.unpack('<I', phead[1:])[0]
+            '''返回头是否有效'''
+            if ord(phead[0]) != 0xAB:
+                return None
+            
+            msg_json = data[np.array([(0xAA, 0)], dtype=ProHead).itemsize:]
+            msg_json = msg_json.decode('gb2312')
+            if plen - 5 != msg_json.__len__():
+                return None
+            
             # 解析成json;
-            msg_dict = json.loads(data)
+            msg_dict = json.loads(msg_json)
             return msg_dict
         except Exception, e:
-            print "Error:", e
-            self.disconnect()
-            self.connect()
+            print "BaseClient=> recv Error:", e
             return None
 
+    '''断开连接'''
     def disconnect(self):
         try:
             self.sock.shutdown(2)
             self.sock.close()
         except Exception, e:
-            print "LoggingUtil:client=> socket disconnect error:", e
+            print "BaseClient=> socket disconnect error:", e