wquart 1.0.0.5__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- wquart-1.0.0.5/PKG-INFO +21 -0
- wquart-1.0.0.5/README.md +17 -0
- wquart-1.0.0.5/setup.cfg +10 -0
- wquart-1.0.0.5/setup.py +28 -0
- wquart-1.0.0.5/wquart/__init__.py +8 -0
- wquart-1.0.0.5/wquart/btsnoop.py +57 -0
- wquart-1.0.0.5/wquart/crc.py +55 -0
- wquart-1.0.0.5/wquart/decode.py +696 -0
- wquart-1.0.0.5/wquart/log.py +91 -0
- wquart-1.0.0.5/wquart/message.py +361 -0
- wquart-1.0.0.5/wquart/utility.py +35 -0
- wquart-1.0.0.5/wquart.egg-info/PKG-INFO +21 -0
- wquart-1.0.0.5/wquart.egg-info/SOURCES.txt +15 -0
- wquart-1.0.0.5/wquart.egg-info/dependency_links.txt +1 -0
- wquart-1.0.0.5/wquart.egg-info/requires.txt +1 -0
- wquart-1.0.0.5/wquart.egg-info/top_level.txt +1 -0
wquart-1.0.0.5/PKG-INFO
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
Metadata-Version: 2.1
|
|
2
|
+
Name: wquart
|
|
3
|
+
Version: 1.0.0.5
|
|
4
|
+
Summary: wuqi chip7033 uart message resolve
|
|
5
|
+
Home-page: http://www.wuqi-tech.com/
|
|
6
|
+
Author: wuqi-wanjian
|
|
7
|
+
Author-email: wan.jian@wuqi-tech.com
|
|
8
|
+
Classifier: Intended Audience :: Developers
|
|
9
|
+
Classifier: Operating System :: OS Independent
|
|
10
|
+
Classifier: Natural Language :: Chinese (Simplified)
|
|
11
|
+
Classifier: Programming Language :: Python :: 3.6
|
|
12
|
+
Classifier: Programming Language :: Python :: 3.7
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.8
|
|
14
|
+
Classifier: Programming Language :: Python :: 3.9
|
|
15
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
19
|
+
Classifier: Topic :: Utilities
|
|
20
|
+
|
|
21
|
+
wuqi-chip7033 uart message resolve
|
wquart-1.0.0.5/README.md
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# 1.wquart 使用卸载说明
|
|
2
|
+
安装和更新(会先卸载再安装)
|
|
3
|
+
``` python
|
|
4
|
+
pip install wquart-9.9.9.tar.gz
|
|
5
|
+
```
|
|
6
|
+
会安装在python安装目录的Lib\site-packages下,和从pypi下载的一样使用。
|
|
7
|
+
|
|
8
|
+
卸载 -y 不询问
|
|
9
|
+
``` python
|
|
10
|
+
pip uninstall wquart -y
|
|
11
|
+
```
|
|
12
|
+
# 2.demo 运行
|
|
13
|
+
``` shell
|
|
14
|
+
python demo.py COM92 2000000 tws-basic-7035AX-B-1.3.3.1.wpk
|
|
15
|
+
|
|
16
|
+
```
|
|
17
|
+
|
wquart-1.0.0.5/setup.cfg
ADDED
wquart-1.0.0.5/setup.py
ADDED
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
from setuptools import setup#,find_packages
|
|
4
|
+
setup(name = 'wquart', # 包名
|
|
5
|
+
description = 'wuqi chip7033 uart message resolve',
|
|
6
|
+
long_description = 'wuqi-chip7033 uart message resolve',
|
|
7
|
+
author = 'wuqi-wanjian',
|
|
8
|
+
author_email = 'wan.jian@wuqi-tech.com',
|
|
9
|
+
url = 'http://www.wuqi-tech.com/',
|
|
10
|
+
license = '',
|
|
11
|
+
install_requires = ["pyserial"],
|
|
12
|
+
classifiers = [
|
|
13
|
+
'Intended Audience :: Developers',
|
|
14
|
+
'Operating System :: OS Independent',
|
|
15
|
+
'Natural Language :: Chinese (Simplified)',
|
|
16
|
+
'Programming Language :: Python :: 3.6',
|
|
17
|
+
'Programming Language :: Python :: 3.7',
|
|
18
|
+
'Programming Language :: Python :: 3.8',
|
|
19
|
+
'Programming Language :: Python :: 3.9',
|
|
20
|
+
'Programming Language :: Python :: 3.10',
|
|
21
|
+
'Programming Language :: Python :: 3.11',
|
|
22
|
+
'Programming Language :: Python :: 3.12',
|
|
23
|
+
'Programming Language :: Python :: 3.13',
|
|
24
|
+
'Topic :: Utilities'
|
|
25
|
+
],
|
|
26
|
+
package_dir = {'wquart':'wquart'},
|
|
27
|
+
packages= ['wquart'],
|
|
28
|
+
)
|
|
@@ -0,0 +1,57 @@
|
|
|
1
|
+
from io import TextIOWrapper
|
|
2
|
+
import struct
|
|
3
|
+
import time
|
|
4
|
+
import datetime
|
|
5
|
+
class SnoopHeader():
|
|
6
|
+
def __init__(self) -> None:
|
|
7
|
+
self.version:int = 1
|
|
8
|
+
self.datalink:int = 0x03ea
|
|
9
|
+
def getbytes(self)->bytes:
|
|
10
|
+
return struct.pack('>2I',self.version,self.datalink)
|
|
11
|
+
class SnoopRecord():
|
|
12
|
+
def __init__(self,data:bytes) -> None:
|
|
13
|
+
self.cumdrops:int=0
|
|
14
|
+
self.data=data
|
|
15
|
+
self.timestamp:datetime = datetime.datetime.now()
|
|
16
|
+
def getincllen(self)->int:
|
|
17
|
+
if self.data:
|
|
18
|
+
return len(self.data)-1
|
|
19
|
+
return 0
|
|
20
|
+
def getoriglen(self)->int:
|
|
21
|
+
if self.data:
|
|
22
|
+
return len(self.data)-1
|
|
23
|
+
return 0
|
|
24
|
+
def getflags(self)->int:
|
|
25
|
+
f0= 1 if self.data[0]==0 else 0
|
|
26
|
+
f1= 1 if self.data[1]==1 or self.data[1]==4 else 0
|
|
27
|
+
return f1<<1 | f0
|
|
28
|
+
def gettimestamp(self)->int:
|
|
29
|
+
stamp= time.time() + 8*3600 # 东八区 得加回8小时
|
|
30
|
+
return round(stamp *1000*1000) + 0x00dcddb30f2f8000
|
|
31
|
+
def getdata(self):
|
|
32
|
+
return self.data[1:]
|
|
33
|
+
def getbytes(self)->bytes:
|
|
34
|
+
return struct.pack('>4Iq',self.getoriglen(),self.getincllen(),self.getflags(),self.cumdrops,self.gettimestamp()) +self.getdata()
|
|
35
|
+
class BTSnoop():
|
|
36
|
+
def __init__(self) -> None:
|
|
37
|
+
self.header= SnoopHeader()
|
|
38
|
+
self.writer:TextIOWrapper=None
|
|
39
|
+
def createHeader(self,file:str = 'snoop.cfa'):
|
|
40
|
+
if not self.writer:
|
|
41
|
+
self.writer= open(file,'wb+')
|
|
42
|
+
btsnoop_magic = b'btsnoop\0'
|
|
43
|
+
self.writer.write(btsnoop_magic)
|
|
44
|
+
hb= self.header.getbytes()
|
|
45
|
+
self.writer.write(hb)
|
|
46
|
+
self.writer.flush()
|
|
47
|
+
def addRecord(self,data:bytes):
|
|
48
|
+
if not data or len(data)<2:
|
|
49
|
+
return
|
|
50
|
+
if self.writer:
|
|
51
|
+
pkg= SnoopRecord(data)
|
|
52
|
+
cfa= pkg.getbytes()
|
|
53
|
+
self.writer.write(cfa)
|
|
54
|
+
def close(self):
|
|
55
|
+
if self.writer and not self.writer.closed:
|
|
56
|
+
self.writer.close()
|
|
57
|
+
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
#!/usr/bin/python
|
|
2
|
+
# -*- coding: utf-8 -*-
|
|
3
|
+
|
|
4
|
+
import binascii
|
|
5
|
+
binascii.crc8 = lambda data: Crc.crc8_calc(data)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
class Crc:
|
|
9
|
+
|
|
10
|
+
_crc8_table = [
|
|
11
|
+
0x00, 0x5e, 0xbc, 0xe2, 0x61, 0x3f, 0xdd, 0x83,
|
|
12
|
+
0xc2, 0x9c, 0x7e, 0x20, 0xa3, 0xfd, 0x1f, 0x41,
|
|
13
|
+
0x9d, 0xc3, 0x21, 0x7f, 0xfc, 0xa2, 0x40, 0x1e,
|
|
14
|
+
0x5f, 0x01, 0xe3, 0xbd, 0x3e, 0x60, 0x82, 0xdc,
|
|
15
|
+
0x23, 0x7d, 0x9f, 0xc1, 0x42, 0x1c, 0xfe, 0xa0,
|
|
16
|
+
0xe1, 0xbf, 0x5d, 0x03, 0x80, 0xde, 0x3c, 0x62,
|
|
17
|
+
0xbe, 0xe0, 0x02, 0x5c, 0xdf, 0x81, 0x63, 0x3d,
|
|
18
|
+
0x7c, 0x22, 0xc0, 0x9e, 0x1d, 0x43, 0xa1, 0xff,
|
|
19
|
+
0x46, 0x18, 0xfa, 0xa4, 0x27, 0x79, 0x9b, 0xc5,
|
|
20
|
+
0x84, 0xda, 0x38, 0x66, 0xe5, 0xbb, 0x59, 0x07,
|
|
21
|
+
0xdb, 0x85, 0x67, 0x39, 0xba, 0xe4, 0x06, 0x58,
|
|
22
|
+
0x19, 0x47, 0xa5, 0xfb, 0x78, 0x26, 0xc4, 0x9a,
|
|
23
|
+
0x65, 0x3b, 0xd9, 0x87, 0x04, 0x5a, 0xb8, 0xe6,
|
|
24
|
+
0xa7, 0xf9, 0x1b, 0x45, 0xc6, 0x98, 0x7a, 0x24,
|
|
25
|
+
0xf8, 0xa6, 0x44, 0x1a, 0x99, 0xc7, 0x25, 0x7b,
|
|
26
|
+
0x3a, 0x64, 0x86, 0xd8, 0x5b, 0x05, 0xe7, 0xb9,
|
|
27
|
+
0x8c, 0xd2, 0x30, 0x6e, 0xed, 0xb3, 0x51, 0x0f,
|
|
28
|
+
0x4e, 0x10, 0xf2, 0xac, 0x2f, 0x71, 0x93, 0xcd,
|
|
29
|
+
0x11, 0x4f, 0xad, 0xf3, 0x70, 0x2e, 0xcc, 0x92,
|
|
30
|
+
0xd3, 0x8d, 0x6f, 0x31, 0xb2, 0xec, 0x0e, 0x50,
|
|
31
|
+
0xaf, 0xf1, 0x13, 0x4d, 0xce, 0x90, 0x72, 0x2c,
|
|
32
|
+
0x6d, 0x33, 0xd1, 0x8f, 0x0c, 0x52, 0xb0, 0xee,
|
|
33
|
+
0x32, 0x6c, 0x8e, 0xd0, 0x53, 0x0d, 0xef, 0xb1,
|
|
34
|
+
0xf0, 0xae, 0x4c, 0x12, 0x91, 0xcf, 0x2d, 0x73,
|
|
35
|
+
0xca, 0x94, 0x76, 0x28, 0xab, 0xf5, 0x17, 0x49,
|
|
36
|
+
0x08, 0x56, 0xb4, 0xea, 0x69, 0x37, 0xd5, 0x8b,
|
|
37
|
+
0x57, 0x09, 0xeb, 0xb5, 0x36, 0x68, 0x8a, 0xd4,
|
|
38
|
+
0x95, 0xcb, 0x29, 0x77, 0xf4, 0xaa, 0x48, 0x16,
|
|
39
|
+
0xe9, 0xb7, 0x55, 0x0b, 0x88, 0xd6, 0x34, 0x6a,
|
|
40
|
+
0x2b, 0x75, 0x97, 0xc9, 0x4a, 0x14, 0xf6, 0xa8,
|
|
41
|
+
0x74, 0x2a, 0xc8, 0x96, 0x15, 0x4b, 0xa9, 0xf7,
|
|
42
|
+
0xb6, 0xe8, 0x0a, 0x54, 0xd7, 0x89, 0x6b, 0x35,
|
|
43
|
+
]
|
|
44
|
+
|
|
45
|
+
@staticmethod
|
|
46
|
+
def _crc8_update(init_vect, buf):
|
|
47
|
+
crc = init_vect
|
|
48
|
+
for i in range(len(buf)):
|
|
49
|
+
crc = Crc._crc8_table[(crc ^ buf[i]) & 0xff]
|
|
50
|
+
return crc
|
|
51
|
+
|
|
52
|
+
@staticmethod
|
|
53
|
+
def crc8_calc(buf):
|
|
54
|
+
crc = Crc._crc8_update(0xff, buf)
|
|
55
|
+
return crc ^ 0xff
|